在一个理想的世界中,从数据完整性的角度来看,所有链接都是完全值得信赖的,通过适当的设置,现代 SSH 可以或多或少地被认为是完全安全的,可以防止窃听通信内容,但可能会泄漏元数据(例如您正在连接到特定主机的事实,以及一些关于使用模式和传输的数据量的信息)。
在一个更加现实的世界中,无论我们多么不希望出现这种情况,都应该期望对链接进行监控。我们知道加密流量可能会被强大的对手专门保留。但是,一方面被动地监控流量,另一方面在飞行中主动篡改流量之间仍然存在很大差异。
假如说:
- 初始 SSH 主机密钥是由未知的、可能有缺陷的方法生成的;
- 管理员无法直接验证服务器在第一次连接时提供的 SSH 主机密钥的正确性,只能判断登录尝试是成功还是失败,但可以在建立后通过该会话中的命令验证主机密钥指纹;
- 管理员快速将 SSH 主机密钥替换为以可信方式生成的密钥,并在加载新主机密钥后重新建立连接;
- 管理员努力确认客户端和服务器之间的 SSH 主机密钥指纹;
- 管理员无权访问服务器的不同通道以进行密钥维护,因此必须通过与当时恰好在服务器上的主机密钥建立的 SSH 会话来执行密钥替换;
- 攻击者无法访问服务器上的 SSH 私有主机密钥,但可以监视、存储和稍后处理与服务器之间的所有通信。
在这样的场景下,
- SSH-2 可以提供哪些安全保证以防止窃听通信内容(违反机密性)?
- 这些安全保证在初始连接(替换主机密钥之前)和以后的连接中是否有任何不同?