DrS*_*ove 36 encryption ssh public-key-encryption
我已经阅读了有关在客户端主机上生成 2 个密钥(私有和公共)并将公钥复制到服务器主机的信息。
据我了解,(如果我错了,请纠正我):服务器使用公钥加密数据并将其发送给客户端,客户端使用私钥对其进行解密。
但是如果我需要加密客户端上的数据以发送到服务器,它是如何发生的?
公钥加密客户端上的数据?但是如果服务器只有公钥,它如何解密呢?
SSH 加密如何工作?
use*_*686 36
建立 TCP 连接后,两个系统首先就会话密钥达成一致,使用DH 密钥交换、ECDH或 GSSAPI等协议。这个密钥是对称的和临时的——双方使用相同的密钥来加密和解密数据,使用诸如AES或RC4 之类的算法。
客户端密钥对从不用于加密数据,仅用于身份验证——“publickey”是几种可用方法之一,其中客户端提供自己的公钥以及私钥所有权的证明。同样,服务器密钥对仅用于在 DH 或 ECDH 密钥交换期间验证服务器;没有数据使用它加密。
SSH2 协议记录在多个 RFC 中,包括:
Zor*_*che 14
我认为您首先需要了解的是,虽然许多加密协议(如 SSH 和 SSL)使用 PKI 进行身份验证,但这些系统几乎都不会使用 PKI 来实际传输有效负载。
PKI 过于占用 CPU,无法用于传输实际的有效载荷数据。发生的情况是,PKI 用于协商随机生成的密钥,以便与对称加密协议一起使用。要使用的协议也是经过协商的,应该是两个系统可以达成一致的最强协议。因此,一旦初始握手和协商完成,几乎所有东西都只是标准的对称密码学。
Sco*_*ain 13
以下是一些实际示例,假设密钥 A 是保密的,因此是私钥,而密钥 B 发布在可公开访问的地方,因此是公钥。
因此,如果您想向所有人发送一条消息,并且希望他们验证它是否来自您并且在传递过程中没有被更改,那么您将发送您的消息并包含使用密钥 A 加密的消息的哈希值。然后任何人拥有密钥 B 可以解密哈希,将其与他们收到的消息进行比较,并验证消息是否来自您(因为只有拥有密钥 A 的人才能生成成功解密哈希的加密有效负载,并且因为您是唯一拥有密钥 A 的人,它只能来自您)。这称为签名。
现在假设有人想向您发送秘密消息,但不想透露他们是谁。他们可以使用对称密钥来加密他们的消息(正如 Zoredache 提到的,对称要便宜得多),然后使用该密钥并使用密钥 B 对其进行加密并将其发送给您。因为只有密钥 A 可以解密用密钥 B 加密的内容,其他人无法看到发送给您的消息中的内容。这就是普通加密的工作原理以及 SSH 交换数据的方式。
| 归档时间: |
|
| 查看次数: |
33027 次 |
| 最近记录: |