我正在使用Botan实用程序来执行加密。当我使用SSH初始化与远程计算机的连接时,我能够通过安全的SSH连接交换密钥。但是,有时我使用inetd来建立连接,在这种情况下,inetd连接没有安全性,但是我需要使用它来与远程机器交换密钥。
我想有一些标准,我通过一个不安全的通道发送公钥,远程端使用它来加密一个密钥,通过不安全的通道发回给我,然后我可以解密以获取密钥
Botan支持的这种协议的例子是什么?
答案 0 :(得分:3)
如果没有先前的信任,或通过旁边渠道进行沟通,就没有办法做到这一点。 Diffie-Hellman kex允许您为不参与连接的其他人建立安全通道,但您无法验证您是否与预期收件人进行通信。
经典MITM示例:您连接到某个远程端点,它会收到您的公钥并向您发送使用该密钥签名的内容。但是,您无法验证是否已将密钥发送到真实目的地,或者响应是否来自攻击者 - 因此,您有一个安全隧道,但您没有与您进行安全通信的信息(攻击者甚至可以连接到您的预定目的地并代理流量,并以未加密的方式传递给他。
为了确保您确实与目标端点进行通信,您需要事先或通过安全通道交换某种主机标识。 SSH使用“指纹”执行此操作 - 如果您信任该主机,它会在第一次连接时询问您,并且您应该通过独立通道验证指纹。
答案 1 :(得分:2)
我在类似的情况下做的是首先安排交换私钥/公钥对,所以,我有每个客户的公钥,所以当他们连接到我时,传递了一条消息,它上面的时间戳,我可以解密。
如果通过了,并且时间戳有效(我使用5秒作为时间戳的生命周期)那么我会交换密钥,因为我们有办法安全地进行通信。
但是,这需要提前做好准备。
如果您希望匿名用户进行连接并拥有一些不可能的安全性。
我发现一篇文章对这样的问题非常有帮助*编程撒旦的计算机“,http://www.cl.cam.ac.uk/~rja14/Papers/satan.pdf,你试图与不值得信任的系统管理员进行安全通信。