SSH 握手与主机密钥认证
跟踪 SSH-2 握手过程:版本交换、算法协商、密钥交换和服务认证。
SSH 握手与主机密钥认证 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
端口 22 上的 TCP 连接
SSH 首先会连接到端口 22,建立 TCP 连接。连接建立后,客户端和服务器会交换版本字符串,例如 SSH-2.0-OpenSSH_9.3,用于标识协议版本和实现版本。通过版本交换,双方可以在继续之前确认彼此兼容。
算法协商阶段
版本交换完成后,双方会发送 SSH_MSG_KEXINIT 数据包,其中列出各自支持的算法。这些列表涵盖密钥交换方法、主机密钥类型、对称加密算法、MAC 算法和压缩算法。两个列表的交集决定本次会话所选用的算法。
Diffie-Hellman 和 ECDH 密钥交换
会话密钥通过 Diffie-Hellman 或 ECDH 等密钥交换算法建立。客户端和服务器分别生成临时密钥对,交换公开值,然后独立计算出相同的共享机密。这个共享机密会用于派生会话密钥,但其本身从不会直接传输。
服务器主机密钥身份验证
服务器使用其主机私钥对密钥交换哈希值进行签名,以证明自己的身份。主机密钥可以采用 RSA、ECDSA 或现代的 Ed25519 格式。客户端使用相应的公钥验证该签名,从而确认通信对象是真正的服务器,而不是冒充者。
首次使用时信任(TOFU)
首次连接到新服务器时,客户端还不知道该服务器的主机公钥。SSH 会显示密钥指纹,并提示您接受它。这种首次使用时信任的模型会将密钥存储在 known_hosts 中,并在后续连接时检测密钥是否发生变化,同时警告可能存在的中间人攻击。
主机密钥指纹验证
验证新服务器主机密钥最安全的方法,是通过带外信道进行核对。管理员可以当面读取服务器指纹,或通过经过验证的安全信道获取指纹,然后将其与 SSH 客户端显示的指纹进行比较。这样可以避免在首次连接时悄无声息地接受欺诈性密钥。
known_hosts 文件结构
known_hosts 文件存储以下形式的行:hostname algorithm base64-key。每个条目代表一个受信任的服务器身份。当您连接到已存在于 known_hosts 中的主机时,SSH 会验证所提供的密钥是否与存储的密钥匹配;如果不匹配,则拒绝连接。
会话密钥派生
密钥交换完成后,双方会使用共享机密、交换哈希值和会话标识符,分别独立派生会话密钥。通信的每个方向,以及加密操作和 MAC 操作,都会使用分别派生的密钥。这意味着客户端到服务器方向的流量所用密钥,与服务器到客户端方向的密钥不同。
加密通信阶段
会话密钥建立后,后续所有 SSH 通信都会经过加密和身份验证。协商出的加密算法(例如 AES-256-GCM 或 ChaCha20-Poly1305)用于保护机密性,而 MAC 用于确保完整性。即使是用户名和身份验证凭据,也会在这个加密隧道中传输。
SSH 主机密钥类型比较
2048 位或 4096 位的 RSA 主机密钥获得广泛支持,但速度较慢。基于 NIST 曲线的 ECDSA 密钥速度更快,但有些人不信任 NIST 曲线参数。基于 Curve25519 的 Ed25519 密钥是现代推荐方案:密钥短小、速度快、安全性强,并且不依赖 NIST 曲线参数。大多数现代 SSH 服务器默认提供 Ed25519。
会话建立摘要
SSH 握手包括:建立 TCP 连接、交换版本、协商算法、通过密钥交换建立会话密钥、验证服务器主机密钥,以及进行用户身份验证。版本交换之后的所有步骤,都在由密钥交换阶段建立的加密且受完整性保护的信道中进行。
主机密钥验证检查
首次连接之后,客户端在后续连接中如何验证 SSH 服务器的主机密钥?
SSH 握手回顾
本课内容:TCP 在端口 22 上建立连接,双方交换版本字符串,算法协商选择加密算法和密钥交换方法,ECDH 或 DH 建立共享机密,双方分别为每个通信方向派生会话密钥,服务器使用主机密钥签名进行身份验证,客户端则在首次连接时采用 TOFU,并通过 known_hosts 进行验证。
常见问题解答
「SSH 握手与主机密钥认证」课时是免费的吗?
是的 — 「SSH 握手与主机密钥认证」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「SSH 握手与主机密钥认证」这节课中我会学到什么?
跟踪 SSH-2 握手过程:版本交换、算法协商、密钥交换和服务认证。 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「SSH 握手与主机密钥认证」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- SSH 握手与主机密钥认证
- 公钥认证与代理转发
- SSH 隧道与端口转发技术
- SSH 加固与审计最佳实践