我发现这篇文章声称 DH 获得的密钥的非对称加密签名可以防止 MITM:
http://www.gremwell.com/ssh-mitm-public-key-authentication
关键思想:
'signature' 的值是对应私钥对以下数据的签名,顺序如下:
string session identifier byte SSH_MSG_USERAUTH_REQUEST现在攻击者遇到了一个问题,因为客户端和服务器对于会话标识符应该是什么有不同的想法。显然,服务器将拒绝客户端提供的签名,公钥认证将失败。
我想验证我对此的理解是否正确:
假设 Alice ( A) 是客户端,MITM ( M) 是攻击者, Bob ( B) 是 ssh 服务器。
假设:
M位于通信的中间,拦截和之间的所有A通信BM不知何故被骗A以为他是B,也被骗B以为他是A(重新指纹等)。但是,
M没有设法穿透A's 的机器和B's 的机器,将A's 的公钥留A在机器上的帐户中B完好无损
只要上述条件保持在这个之上:
会话标识符是基于(除其他外)由对等方使用 Diffie-Hellman 算法协商的共享秘密计算的。
=> 虽然M可以伪造 DH 交换到A和B,但这些必须是 2 个不同的(假的)共享秘密(除非有某种方法可以通过修改交换的 DH 号码而不是通过观察它们M来妥协)。
当此共享机密用作创建要签名的数据(会话标识符的一部分或全部)的组件时,M不能伪造且不知道的一件事是A将用于基于(1)签署会话 ID 的私钥伪造的共享秘密。
因此,会话 ID 的数字签名(+上面描述的其他会话数据)在 处验证失败B,或者会话 ID 将不匹配,从而有效地中断通信。
问题:
这个推理正确吗?如果没有,错误在哪里?
会话 ID 创建是该链中的“最薄弱环节”吗?也就是说,如果
M可以预测它(例如,如果它是易受统计攻击的可预测单向哈希,即使 DH 本身不是)并以某种方式猜测它(非常不可能,是的,但它甚至在理论上是不可能的吗?),那么M会有“真正的”会话ID签名A,所以B会认为身份验证签名可以吗?
我意识到这在实践中几乎是不可能的,但在理论上是完全不可能的吗?