Dan*_*nce 5 encryption ssh passwords
这看起来太简单了,我觉得我可能错过了一些非常明显的东西,但是当您使用 SSH 而不生成密钥对时,实际发生了什么?
这个问题的一个变体在这里被问到,就像答案一样,我一直明白如果没有密钥对,SSH 会回退到密码身份验证。
但是,维基百科文章只描述了两种使用方式。两者似乎都涉及密钥对,一个是手动生成的,另一个是自动生成的。
有几种使用 SSH 的方法;一种是使用自动生成的公私钥对简单地加密网络连接,然后使用密码认证登录。
另一种是使用手动生成的公私钥对进行认证,让用户或程序无需指定密码即可登录
当我在没有密钥对的情况下创建到不安全服务器的 SSH 连接时,系统会提示我输入用户名和密码,然后我就可以访问 shell。
密码回退是一个实现细节,因此不在 wiki 中吗?是否按照建议自动生成了密钥对(如果是,公钥是如何到达服务器的)?或者是单独使用密码。
如果它只使用密码和用户名组合,数据是否被加密?如果是这样,它是如何加密的?
维基百科文章混淆了不同的 SSHv2 层。(十年前对于 SSHv1 来说可能有些正确,但它绝对被简化到无意义的程度。)
您和服务器的 SSHv2 密钥对仅用于身份验证,并且始终使用为每个连接临时生成的 DH 密钥对来完成加密设置。服务器的 SSH 密钥对仅对加密设置数据进行签名(以证明服务器的身份),而客户端的 SSH 密钥对根本不用于此过程。
在 SSHv2 中,当您连接到服务器时(在两端交换支持算法的列表之后),第一步是密钥交换,它以某种方式生成用于加密整个连接的对称密钥。(服务器也作为此过程的副作用进行身份验证。)
客户端生成 DH 密钥对(仅用于此连接)并发送其 DH 公钥。
服务器还会生成一个新的 DH 密钥对。它还从磁盘加载其 SSH“主机密钥”密钥对。
然后,它签署与SSH私钥DH公开密钥,并将公共密钥(以及签名)给客户端。
客户端检查签名并验证服务器的 SSH 公钥是否在 known_hosts 中。
然后它使用两个DH密钥(客户端的私有 + 服务器的公共)来生成共享加密密钥,并丢弃它的 DH 密钥对。
服务器还使用两个 DH 密钥(服务器的私有 + 客户端的公共)来生成相同的共享加密密钥,并丢弃其 DH 密钥对。
双方都启用加密。
(还有一些其他的密钥交换方法,但很少使用。)
下一步是客户端身份验证。请注意,此时连接已经加密,即使尚未使用客户端的 SSH 密钥!
客户端发送“服务请求”以进行客户端身份验证。
服务器提供了一些机制——“密码”、“公钥”,可能还有其他机制。
如果您有 SSH 密钥对,则客户端选择“public-key”,发送您的 SSH 公钥,并使用您的 SSH 私钥对服务器提供的一些随机数据进行签名,以证明密钥所有权。
如果您没有 SSH 密钥对,客户端会选择“密码”并直接发送您的密码——但是,仍然在加密隧道内。
归档时间: |
|
查看次数: |
1536 次 |
最近记录: |