Sud*_*oer 3 unix linux security encryption ssh
据我了解,当使用 SSH 进行基于密钥的身份验证时,服务器会向客户端发送一个质询字符串,客户端使用私钥对其进行加密,然后将其发送回服务器,服务器使用公钥对其进行解密,然后...:
但是,当我们使用基于密码的身份验证时,SSH 如何加密通信呢?即它如何生成密钥来加密从客户端到服务器的数据,反之亦然?
当您使用密码通过另一台计算机连接时,SSH 使用对称加密:
\n\n\n\n\n对称加密通常称为共享密钥或共享秘密加密。通常只使用一个密钥,或者有时使用一对密钥,其中一个密钥可以使用另一个密钥轻松计算。
\n\n对称密钥用于加密 SSH 会话期间的整个通信。客户端和服务器均使用约定的方法派生密钥,并且生成的密钥绝不会泄露给任何第三方。创建对称密钥的过程是通过密钥交换算法执行的。该算法特别安全的原因是密钥永远不会在客户端和主机之间传输。相反,两台计算机共享公共数据,然后对其进行操作以独立计算密钥。即使另一台机器捕获\n 公开共享的数据,它\xe2\x80\x99 也无法计算密钥,因为\n 密钥交换算法未知。
\n\n但必须注意,秘密令牌特定于每个 SSH 会话,并且是在客户端身份验证之前生成的。生成密钥后,两台计算机之间移动的所有数据包都必须使用私钥加密。这包括用户在控制台中输入的密码,因此凭据始终受到网络数据包嗅探器的保护。
\n
来源:https ://www.hostinger.com/tutorials/ssh-tutorial-how-does-ssh-work
\n\n为了加密通信,客户端和服务器使用 Diffie\xe2\x80\x93Hellman 密钥交换
\n\n以下是该算法在非常基础的层面上的工作原理:
\n\n客户端和服务器都同意一个非常大的素数,\n这当然没有任何共同的因子。该质数值也称为种子值。
接下来,双方就通用加密机制达成一致,通过以特定算法方式操作种子值来生成另一组值。这些机制也称为加密生成器,对种子执行大量操作。此类生成器的一个示例是 AES(高级加密标准)。
双方独立生成另一个素数。这\n用作交互的秘密私钥。
这个新生成的私钥以及共享编号和\n加密算法(例如AES)用于计算\n分发给另一台计算机的公钥。
然后,各方使用他们的个人私钥、另一台机器\xe2\x80\x99s\n共享公钥和原始素数来创建最终\n共享密钥。此密钥由两台计算机独立计算,但\n将在两侧创建相同的加密密钥。
现在双方都有共享密钥,他们可以对称\n加密整个 SSH 会话。相同的密钥可用于加密\n和解密消息(阅读:对称加密部分)。
现在安全对称加密会话已经建立,必须对用户进行身份验证。
\n