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