SSH 加密如何運作?

SSH 加密如何運作?

我讀過有關在客戶端主機上產生 2 個金鑰(私有金鑰和公用金鑰)並將公用金鑰複製到伺服器主機的資訊。

據我了解,(如果我錯了,請糾正我):伺服器用公鑰加密資料並發送給客戶端,客戶端用私鑰解密。

但是,如果我需要在客戶端上加密資料以發送到伺服器,該怎麼辦?

公鑰加密客戶端上的資料?但如果伺服器只有公鑰,如何解密呢?

SSH 加密如何運作?

答案1

建立 TCP 連線後的第一件事是,兩個系統都同意會話金鑰,使用這樣的協議DH 金鑰交換,ECDH或 GSSAPI。該密鑰是對稱的和臨時的——雙方使用相同的密鑰來加密和解密數據,使用的演算法如下AES或者RC4

客戶端密鑰對從不用於加密數據,僅用於驗證– 「公鑰」是幾種可用方法之一,用戶端提供自己的公鑰以及私鑰所有權證明。同樣,伺服器金鑰對僅用於在 DH 或 ECDH 金鑰交換期間對伺服器進行身份驗證;沒有資料使用它進行加密。

SSH2 協定記錄在幾個 RFC, 包括:

  • RFC 4253 – 安全殼層 (SSH) 傳輸層協定
    • 第7節– “密鑰交換”
    • 第8節–“迪菲-赫爾曼密鑰交換”
  • RFC 4419– 迪菲-赫爾曼集團交換
  • RFC 4432– RSA 金鑰交換
  • RFC 4462– GSSAPI 驗證與金鑰交換

答案2

我認為您需要了解的第一件事是,雖然 SSH 和 SSL 等許多加密協定使用 PKI 進行身份驗證,但幾乎所有這些系統都不會使用 PKI 來實際傳輸有效負載。

PKI 的 CPU 消耗太大,無法用於傳輸實際的有效負載資料。所發生的情況是,PKI 用於協商隨機產生的金鑰,與對稱加密協定一起使用。要使用的協議也是經過協商的,並且應該是兩個系統可以同意的最強協議。因此,一旦完成最初的握手和協商,幾乎一切都只是標準的對稱密碼。

答案3

這裡有一些實際的例子,假設密鑰 A 被保密,因此是私鑰,密鑰 B 被發佈在公共可訪問的地方,因此是公鑰。

因此,如果您想向每個人發送一條訊息,並且希望他們驗證該訊息是否來自您並且在傳遞過程中未被更改,您可以發送訊息並包含使用密鑰 A 加密的訊息的哈希值。鑰B 可以解密雜湊值,將其與他們收到的訊息進行比較,並驗證該訊息是否來自您(因為只有擁有金鑰A 的人才能產生成功解密雜湊值的加密有效負載,並且因為您是唯一擁有密鑰A 的人,它只能來自您)。這稱為簽名

現在假設有人想向您發送秘密訊息,但不想透露他們​​是誰。他們可以使用對稱金鑰加密訊息(正如 Zoredache 所提到的,對稱金鑰的成本要低得多),然後使用該金鑰並使用金鑰 B 對其進行加密,然後將其發送給您。因為只有密鑰 A 可以解密使用密鑰 B 加密的內容,所以其他人無法看到發送給您的訊息中的內容。這就是普通加密的工作原理以及 SSH 交換資料的方式。

答案4

你寫

“公鑰對客戶端上的資料進行加密?但是如果伺服器只有公鑰,如何解密呢?”

我對此了解不多,但我想我可以很清楚地回答這個問題。

如果A想要向B發送訊息,A使用B的公鑰。這就是 B 能夠解密它的方式。

如果 A 使用自己的公鑰來加密該訊息,那麼 B 實際上將無法解密該訊息。

這裡解釋一下

http://www.comodo.com/resources/small-business/digital-certificates2.php

相關內容