这种简单的XOR加密通信绝对安全吗?


23

说爱丽丝和彼得每个人都有一个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。在日常生活中也很实用,例如控制您的银行帐户,因为创建帐户时会遇到银行等。


4
除了用于协调要使用密钥的哪一部分的特定方案以外,这只是一次一次性的操作。但经过仔细检查,结果发现它对于99%的用例实际上没有用。

10
由于此问题与特定加密算法的强度有关,因此它可能更适合crypto.stackexchange.com。要将您的问题移到那里,您可以标记主持人的注意力并要求迁移。
Bart van Ingen Schenau 2014年

12
OTP发明于一个世纪以前,在两次世界大战中都被用作实际的纸垫。(en.wikipedia.org/wiki/One-time_pad)密码学中的问题现在是密钥交换。
Gort机器人

6
请注意,这仍然可以解决为所有预期数据生成足够的唯一密钥的问题,直到双方再次会面为止,并且密钥必须通过GENUINELY随机过程生成-伪随机数生成器易于分析,因此越来越容易随着使用相同PRNG的更多样品的问世。
keshlam 2014年

1
@keshlam。生成真实的量子随机数变得非常便宜。arxiv上的有趣文章:手机上的量子随机数生成:arxiv.org/abs/1405.0435
user3123061 2014年

Answers:


50

是的,这是一次性垫。如果密钥材料从未重复使用,则从理论上讲是安全的。

不利之处在于,每个通信主体对都需要一个密钥,并且需要一种在通信之前交换密钥材料的安全方法。


52
我认为值得强调的是,“理论上是安全的”意味着它在数学上被证明是坚不可摧的,前提是密钥是真正随机的并且不会被重用。这几乎是您可以获得密码学任何地方的最有力保证。
Michael Borgwardt 2014年

1
@MichaelBorgwardt那里很重要。在这种情况下,“理论上安全”实际上要比“实践上安全”好。
2014年

2
案例分析:我有这恰好有0.16连续字节的2GB随机密钥
迈克尔

@Michael发生这种情况的几率约为10 ^ 27。
这个

1
@Floris我的“计算”:一个字节有256个可能的值。那是256分之一,全部为零。256 ^ 16获得16个字节的机会。然后将该机会除以2GB中的字节数。我想我想念被16除以除法(1024 * 1024 * 1024 * 1024 * 2 *(1/16))/(256 ^ 16)您的最后一点仍然使此计算无关紧要。
这个

32

正如Vatine的回答所表明的,您的算法基本上是一次性的。

但是,要评论您的注释之一:

注意:如果它绝对安全,那么它会令人惊讶,因为与当今昂贵的量子密码术和同等的安全性相比,对于当今低成本的大容量存储器来说,它是安全得多的安全通信方式!

我的回答是不,这并不令人惊讶。魔鬼总是在细节中,这里的魔鬼是在交换钥匙。您的方法取决于完美的面对面密钥交换。每当我想购买东西或建立其他安全连接时,我都无法将携带4GB闪存盘的James Bond寄给互联网上的每个商人。

最后,算法的XOR方面并不重要。一个简单的替换密码对OTP来说就很好。OTP的优势在于,密钥永远不会被重用,并且假设James Bond可以完美地为双方交换密钥(即,事先进行安全密钥交换)


13
关于OTP的另一件事是,密钥(至少)与要加密的消息一样长,并且需要非常高质量的随机数源。
Donal Fellows 2014年

许多加密算法的工作方式是将密钥转换为与随机数据无法区分的数据流,然后将该数据用作一个时间垫。从攻击者的角度来看,真正随机的数据与无法与随机数据区分开的数据之间没有区别(根据定义;如果发现差异,则不是不可区分的),因此从理论上讲,这与OTP一样安全。当然,当我们说数据与真正的随机数据是无法区分的时,通常会有很多警告。当然,这种解释过于简单。
布赖恩

21

尽管一次性密码具有对只能阅读消息的攻击者的无条件(经过数学证明)的隐私保证,但它仍存在一些缺陷。

  • 能够正确猜出纯文本的拦截攻击者可以将密文操纵到她想要的任何长度(具有相同的长度)。

  • 如果攻击者插入或删除某些消息(或部分消息),则爱丽丝和鲍勃的指针将不同步,并且以后的每次通信都将中断。

    更新:假设双方都跟踪两个指针。如果发送当前指针值,则很容易遭受两次按键盘攻击(如果多次使用相同范围的密钥)或DOS攻击(如果不允许相同范围的密钥)可以多次使用(例如删除它们)。

这两个问题都是由缺少完整性和身份验证保护引起的-您拥有完美的密码,但没有MAC。

将MAC添加到一次性键盘协议中以使其真正安全。每个消息都应获得一个“校验和”,以确保它实际上是由假定的发件人发送的,并且在两者之间没有被修改。另外,您应该发送一些序列号,以便接收者知道丢失前一条消息时使用哪个密钥部分(如果重复,则拒绝该消息)–将其包括在校验和计算中。

一个普通的MAC算法可以在这里完成,但是我想您可能想使用一些一次性多项式MAC来为您的一次性填充提供匹配的安全性。(从加密密钥之前或之后的比特中获取MAC密钥,即不要对两个目标都重复使用一个密钥。)


如果攻击者插入或删除某些消息(或部分消息),则爱丽丝和鲍勃的指针将不同步,并且以后的每次通信都将中断。指针是独立的,不需要同步,因此,如果消息丢失(用于加密消息的密钥的实际偏移量与该消息一起发送),则以后的通信不会中断。但是您部分正确:不同步是在接收方使用的密钥的一部分,由于未收到已删除的消息,因此未擦除(使用的部分将与下一条收到的消息一起擦除)。
user3123061 2014年

但是,你是对的。提出了简单的算法缺失完整性和认证。实际实施将需要更强大。
user3123061 2014年

@ user3123061如果我是你,我不会只是摆脱完整性和身份验证。的技术中自适应选择密文攻击利用不存在完整性保护的到断裂的保密。我要说的是,经典的一次性垫板(这是您重新发明的)尽管具有明显的数学稳定性,却是完全不安全的,仅仅是因为这种攻击。
zwol 2014年

2
自适应选择的密文攻击对于针对人为检查的OTP的攻击来说是一个很差的选择。OOS将被发现,攻击者将很快受到攻击。只有对接收器进行了机械处理并产生响应,此攻击才有任何好处。
2014年

@Zack OTP有很多问题,但没有一个威胁机密性。请注意,即使您完全猜测上一条消息的plantext + key,下一条消息也将使用全新的独立密钥(大小也相当大)进行加密。没有什么可以适应多种交互。

4

实际上,这并不完全安全。您的协议泄漏的是所传达消息的长度。

例如,如果间谍知道您将回答“是”或“否”,并且看到长度= 2,则可以推断出它是“否”。

实际上令人惊讶的是,如果人们能够猜测上下文,那么只能从已知的长度中推断出多少。


3
不过,在相当安全的级别上,这很容易解决,因为您可以用随机垃圾填充消息,因此消息长度是固定块大小的倍数-例如256个字符。这样会打败简单的“是还是否”分析,但会消耗更快的OTP。
Peter Bagnall 2014年

的确如此-由于在接下来的50年中您每天可以发送〜115kB的数据,因此您可能希望每个数据块至少为20kb,这意味着长度并不那么重要。
apnorton 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.