第二篇文章(Safaka等人)描述了一个协议,该协议基于大致类似于我在此答案末尾描述的 Cachin-Maurer 协议。前提是相关各方之间存在广播不可靠的通信通道,因此当一方发出“数据包”列表时,所有其他人只能看到部分数据包,而不是所有人都看到相同的数据包。因此,Alice 和 Bob 希望建立一个共享的秘密,只需要发送大量数据包,记录他们收到的内容,然后告诉对方他们收到了哪个数据包(数据包由某个常规 ID 引用)。攻击者很有可能无法看到所有内容 Alice 和 Bob 都记录的数据包,因此所有数据包的连接,适当的散列,是一个很好的共享密钥。
在 Cachin-Maurer 协议中,广播来自高带宽随机源,接收的不可靠性是由于无法记录所有数据,因为它的绝对大小。在 Safaka 协议中,假设传输介质是不可靠的,这有点乐观,因为攻击者可能会投资一个好的天线,这比诚实人的基本 WiFi 适配器更能接收无线电波。
将这一原则传输到应用程序级别看起来很难,因为“应用程序级别”的真正基本特征,我们称之为“应用程序”的原因,是其固有的可靠性。例如,原始 IP 数据包是不可靠的:它们可能会丢失、重复,有时会被更改(我见过:具有坏 RAM 的 Cisco 路由器),并且无法按顺序到达。然而,应用程序做的第一件事是应用TCP,它带来了可靠性(通过确认和重新发送)。当传输可靠时,它对每个人都是可靠的,包括攻击者。
这是一个普遍的趋势:我们正在谈论的那种密钥交换协议必须依赖于一些物理过程,这会带来一些不可预测性;在 Safaka 协议中,物理过程是无线电噪声干扰某些数据包的接收。另一方面,计算机世界是数学的而不是物理的:它在一个抽象的世界中生活和奋斗,在这个世界中,一点就是一点,不会随机翻转。事实上,当一个 RAM 位被翻转时(据说这对于给定的机器平均每三个月发生一次,因为宇宙射线),机器可能会崩溃,具体取决于所述位的位置。计算机化的整个原则是远离物理世界,并尽可能远离它。这从本质上阻止了 Safaka 类协议的有效使用,当我们进入更高的层堆栈时更是如此,即正如您所说的“在应用程序级别”。
第二点是这些协议是密钥交换,而不是身份验证。它们可能仅针对仅被动的攻击者提供安全性,这些攻击者观察但不干预。这在当今是不现实的假设。许多网络攻击都涉及攻击者的积极行动;并且一些低功率攻击者可以被描述为“仅主动”:向服务器发送虚假数据包通常比在服务器和诚实客户端之间窃听数据包容易得多。
因此,需要进行一些身份验证:您通常不想交换密钥,而是与特定客户端或服务器交换密钥。为此,您需要一些身份验证机制,该机制在此过程的早期发生,例如使用公钥或一些PAKE,然后您又回到“正常密码学”,使类似 Safaka 的协议变得毫无意义。