每日笔记
SSH Handshake Explained
version exchange
key exchange
key exchange initialization
双方发送 SSH_MSG_KEX_INIT
消息,交换加密组件(cryptographic primitives)信息。
以 ECDH 为例:客户端先生成临时密钥对,通过一个 SSH_MSG_KEX_ECDH_INIT
信息发送给 server。
server 收到 SSH_MSG_KEY_ECDH_INIT
之后,生成自己的临时密钥对。在用 client 的公钥和它自己的密钥对生成 secret K 和 exchage hash H。 见下图。
在生成 exchage hash 的签名 HS,会用 server 私钥签名。最后,将 server 的公钥、临时生成的 KEX 公钥和 HS 通过 SSH_MSG_KEX_ECDH_REPLY
发给 client。 见下图。
client 接收到 SSH_MSG_KEX_ECDH_REPLY
之后,就可以计算 K 和 H 了。