代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

方法通过不安全连接发送加密密钥?

  •  1
  • WilliamKF  · 技术社区  · 14 年前

    我正在使用Botan实用程序执行加密。当我使用SSH初始化到远程计算机的连接时,我可以通过安全SSH连接交换密钥。但是,有时我使用inetd来建立连接,在这种情况下,inetd连接上没有安全性,但是我需要使用它来与远程计算机交换密钥。

    我想这有一个标准,我通过一个不安全的通道发送一个公钥,远程端用这个加密一个密钥,然后通过不安全的通道发送回我,然后我可以解密得到密钥。

    植物学支持这种协议的例子是什么?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Piskvor left the building Rohit Kumar    14 年前

    没有先前的信任,或者通过一个旁道的沟通,就没有办法做到这一点。Diffie-Hellman-kex允许您建立一个针对不参与连接的其他人的安全通道,但您无法验证是否正在与预期收件人通信。

    经典的 MITM 示例:您连接到某个远程终结点,它接收您的公钥并向您发送用该密钥签名的内容。但是,您无法验证您是否已将密钥发送到真正的目标,或者响应是否来自攻击者-因此,您有一个安全通道,但您没有与谁安全通信的信息(攻击者甚至可能连接到您的预期目标并代理通信流,就在他身上。

    为了确保您确实在与预期的端点通信,您需要事先或通过安全通道交换某种主机标识。SSH使用“fingerprints”来实现这一点——它会在第一次连接时询问您是否信任该主机,并且您应该通过一个独立的通道来验证该指纹。

        2
  •  2
  •   James Black    14 年前

    在类似的情况下,我所做的是首先安排交换一对私钥/公钥,这样,我就拥有了每个客户端的公钥,所以当它们连接到我时,就会传递一条消息,消息上有一个时间戳,然后我就可以解密了。

    如果通过了,并且时间戳是有效的(我使用5秒作为时间戳的生命周期),那么我将交换密钥,因为我们有一种安全通信的方法。

    但是,这需要提前做点什么。

    如果您希望匿名用户连接并具有某些不可能的安全性。

    我发现有一篇文章对这类问题很有帮助,那就是“为撒旦的电脑编程”, http://www.cl.cam.ac.uk/~rja14/Papers/satan.pdf ,其中您试图与不可信的系统管理员进行安全通信。

    推荐文章