SSH加密如何工作?


34

我已经读过有关在客户端主机上生成2个密钥(私有和公共)并将公共密钥复制到服务器主机的信息。

据我了解,(如果我错了,请纠正我):服务器使用公钥加密数据并将其发送给客户端,客户端使用私钥解密数据。

但是,如果我需要加密客户端上的数据以发送到服务器,它是如何发生的?

公钥在客户端上加密数据吗?但是,如果服务器只有公共密钥,那么如何解密呢?

SSH加密如何工作?

Answers:


35

建立TCP连接后的第一件事,两个系统都使用DH密钥交换ECDH或GSSAPI 等协议在会话密钥上达成共识。此密钥是对称且临时的–双方使用相同的密钥通过AESRC4等算法对数据进行加密和解密。

客户端密钥对从不用于加密数据,仅用于身份验证 –“公钥”是几种可用的方法之一,在此方法中,客户端提供自己的公钥以及私钥所有权的证明。类似地,服务器密钥对仅在DH或ECDH密钥交换期间用于验证服务器。没有数据使用它加密。

SSH2协议记录在多个RFC中,包括:

  • RFC 4253 –安全外壳(SSH)传输层协议
    • 第7节 –“密钥交换”
    • 第8节 –“ Diffie-Hellman密钥交换”
  • RFC 4419 – Diffie-Hellman组交换
  • RFC 4432 – RSA密钥交换
  • RFC 4462 – GSSAPI身份验证和密钥交换

13

我想您需要了解的第一件事是,尽管许多加密协议(例如SSH和SSL)使用PKI进行身份验证,但这些系统中几乎没有一个将使用PKI实际传输有效负载。

PKI过于占用CPU资源,无法用于传输实际的有效负载数据。发生的是,PKI用于协商随机生成的密钥,以与对称加密协议一起使用。还将协商要使用的协议,并且应该是两个系统可以同意的最强协议。因此,一旦完成初始握手和协商,几乎所有内容都只是标准的对称密码学。


2
对于进一步的阅读,这基本上是在解释RFC4253,第15页
slhck

12

这里有一些实际的例子,假设密钥A被保密,因此是私有密钥,密钥B被张贴在可公开访问的地方,因此就是公共密钥。

因此,如果您想向所有人发送消息,并且希望他们验证消息是否来自您,并且在发送时未更改,则您将发送消息并包括使用密钥A加密的消息哈希。然后,拥有密钥B可以解密哈希,将其与他们收到的消息进行比较,并验证消息是否来自您(由于只有拥有密钥A的人才能生成成功解密哈希的加密有效载荷,并且因为您是唯一拥有密钥A的人,它只能来自您)。这称为签名

现在,假设某人想向您发送一条秘密消息,但不想透露自己的身份。他们可以使用对称密钥(如Zoredache提到的对称密钥便宜得多)对消息进行加密,然后使用该密钥并使用密钥B对其进行加密,然后将其发送给您。因为只有密钥A才能解密使用密钥B加密的内容,所以其他人看不到发送给您的消息中的内容。这就是普通加密的工作方式以及SSH交换数据的方式。


3

是私钥-公钥加密工作原理背后的数学的一个相对平易近人的描述。

英国广播公司的更基本描述在这里


我向BBC添加了一个新链接,解释了此过程和一些历史。
Chogg

1

你写

“公钥在客户端上加密数据?但是,如果服务器只有公钥,那么服务器如何解密呢?”

我对此了解不多,但我想我可以很清楚地回答这一问题。

如果A要向B发送消息,则A使用B的公钥。这样,B就可以解密它。

如果A使用他自己的公钥来加密消息,那么B确实不能解密它。

在这里解释

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.