说爱丽丝和彼得每个人都有一个4GB的USB闪存棒。它们相遇并保存在两个记忆棒上,两个文件名为alice_to_peter.key
(2GB)和peter_to_alice.key
(2GB),其中包含随机生成的位。他们再也见不到面,而是通过电子方式进行交流。爱丽丝还维护一个名为的变量,alice_pointer
而彼得维护一个名为的变量peter_pointer
,这两个变量最初都设置为零。
当爱丽丝需要向彼得发送消息时,她会这样做(n
消息的第n个字节在哪里):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(为了获得最大的安全性,可以删除密钥的使用部分)
彼得接收encrypted_payload_to_peter
,读取alice_pointer
存储在消息开头的内容,然后执行以下操作:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
为了获得最大的安全性,在读取消息后还要擦除密钥的已用部分。
编辑:实际上,使用此简单算法(无完整性检查和身份验证)的这一步骤会降低安全性,请参阅下面的PaŭloEbermann帖子。
当彼得需要向爱丽丝发送消息时,他们用peter_to_alice.key
和进行相反的操作peter_pointer
。
通过这种简单的模式,他们可以在未来50年中每天在两个方向上发送2GB /(50 * 365)=〜115kB的加密数据。如果他们需要发送更多的数据,则可以使用更大的密钥,例如,使用当今的2TB HD(1TB密钥),则可以在未来50年内每天交换60MB!实践中有很多数据。例如,使用压缩技术可以进行一个多小时的高质量语音通信。
在我看来,攻击者无法在没有密钥的情况下读取加密的消息,因为即使他们拥有一台速度非常快的计算机,用蛮力他们也可以在限制之下获取所有可能的消息,但这是一个天文数字消息,攻击者不知道是实际消息。
我对吗?这个通信方案真的绝对安全吗?如果它是安全的,它是否有自己的名称?XOR加密是众所周知的,但是我正在使用两侧都使用大密钥来寻找这个具体的实际应用程序的名称吗?我很期待这个应用程序是我之前发明的。:-)
注意:如果绝对安全,那就太神奇了,因为使用当今低成本的大型存储设备,进行安全通信要比使用昂贵的量子密码学便宜得多,并且具有同等的安全性!
编辑:
随着存储成本的降低,我认为这在将来会更加实用。它可以永远解决安全通信。今天,您不确定是否有人会在一年后成功地攻击现有密码,并使通常昂贵的实现变得不安全。在沟通发生之前的许多情况下,当双方亲自见面时,就该生成密钥了。我认为这非常适合军事通信,例如,潜艇之间可以具有带有大钥匙的HD,而军事中心可以为每个潜艇配备HD。在日常生活中也很实用,例如控制您的银行帐户,因为创建帐户时会遇到银行等。