跳到主要内容

9. Key Re-Exchange (密钥重新交换)

9. Key Re-Exchange (密钥重新交换)

密钥重新交换通过在尚未进行密钥交换时发送 SSH_MSG_KEXINIT 数据包来启动 (如第 7.1 节所述)。当收到此消息时, 一方必须用自己的 SSH_MSG_KEXINIT 消息响应, 除非收到的 SSH_MSG_KEXINIT 已经是回复。任何一方都可以启动重新交换, 但角色不得改变 (即, 服务器保持为服务器, 客户端保持为客户端)。

密钥重新交换使用交换开始时生效的任何加密执行。加密, 压缩和 MAC 方法在密钥交换后发送新的 SSH_MSG_NEWKEYS 之前不会更改 (与初始密钥交换一样)。重新交换的处理与初始密钥交换完全相同, 除了会话标识符将保持不变。允许在重新交换期间更改部分或全部算法。主机密钥也可以更改。所有密钥和初始化向量在交换后重新计算。压缩和加密上下文被重置。

建议在传输每千兆字节数据后或每小时连接时间后更改密钥, 以较早者为准。但是, 由于重新交换是公钥操作, 它需要相当大的处理能力, 因此不应太频繁地执行。

在发送 SSH_MSG_NEWKEYS 数据包后, 可能会发送更多应用程序数据, 密钥交换不会影响位于 SSH 传输层之上的协议。