![]() |
1
3
没有先前的信任,或者通过一个旁道的沟通,就没有办法做到这一点。Diffie-Hellman-kex允许您建立一个针对不参与连接的其他人的安全通道,但您无法验证是否正在与预期收件人通信。 经典的 MITM 示例:您连接到某个远程终结点,它接收您的公钥并向您发送用该密钥签名的内容。但是,您无法验证您是否已将密钥发送到真正的目标,或者响应是否来自攻击者-因此,您有一个安全通道,但您没有与谁安全通信的信息(攻击者甚至可能连接到您的预期目标并代理通信流,就在他身上。 为了确保您确实在与预期的端点通信,您需要事先或通过安全通道交换某种主机标识。SSH使用“fingerprints”来实现这一点——它会在第一次连接时询问您是否信任该主机,并且您应该通过一个独立的通道来验证该指纹。 |
![]() |
2
2
在类似的情况下,我所做的是首先安排交换一对私钥/公钥,这样,我就拥有了每个客户端的公钥,所以当它们连接到我时,就会传递一条消息,消息上有一个时间戳,然后我就可以解密了。 如果通过了,并且时间戳是有效的(我使用5秒作为时间戳的生命周期),那么我将交换密钥,因为我们有一种安全通信的方法。 但是,这需要提前做点什么。 如果您希望匿名用户连接并具有某些不可能的安全性。 我发现有一篇文章对这类问题很有帮助,那就是“为撒旦的电脑编程”, http://www.cl.cam.ac.uk/~rja14/Papers/satan.pdf ,其中您试图与不可信的系统管理员进行安全通信。 |