在这一点上,说协议是“更糟糕的”是我的行为,并且不会影响答案。我特此要求一个规范的答案,将MTProto与Axolotl进行比较,并使用定义明确且广为接受的密码知识和标准。其他。
答案可能包括但不限于以下几点:
安全性遭到破坏(“ CCA(在)(Jakobsen和Orlandi的“ MTProto的安全性”)。
高度非标准模式(例如IGE)。
高度不鼓励使用的模式(例如MAC和加密)
#1 楼
好吧,我咬一口。首先,让我提出将讨论范围限制在协议的核心。 br />
社会工程学攻击
端到端加密的应用范围很广(即应用程序中的所有对话都被加密了吗?)
发明人和发明人的背景发明该协议的理由
元数据泄漏(即谁正在与谁交谈,这两个协议之间几乎是相同的)
要点,这些都与手头的讨论没有任何关系。 MTProto 2.0已于2017年底发布。下面讨论的一些潜在问题已得到解决(例如,它们从sha1-> sha256迁移),而其他一些则没有更新(例如MTProto 2.0仍使用IGV)。我鼓励人们阅读新规范(URL相同;内容已更新)。我也鼓励任何有进取心,进取心的人写一个新的答案,其中要考虑到协议的更新。 :)
让我们快速回顾一下MTProto 1.0的基础知识:
(对那些感兴趣的人的完整规范:spec v1)协议以标准的Diffie-Hellman密钥交换开始。用户可以比较生成的密钥的散列(以图像和十六进制代码形式公开),供双方在现有安全通道(最好是亲自)上进行交换。在理论上存在一个漏洞,即原始图像不够大(因此,密钥交换可能会由拥有足够资源的人来做中间人),但是据报道,通过增加图像的大小/十六进制打印输出。会话密钥(“ auth_key”)从此原始密钥派生(请参阅规范以了解详细信息)。
规范的内容取决于消息信封。简要地说,它获取有效负载,添加盐和会话ID,对其进行哈希处理(SHA-1),并将其用作“ msg密钥”(MAC)。它还与auth_key(基于SHA-1的KDF)混合使用,以生成每个消息的加密密钥(256位)和初始化向量(256位)。然后在IGE模式下使用AES对salt,会话ID,有效负载和0-15字节的任意填充进行加密。最后,将auth_key_id,“ msg密钥”(MAC)和加密的数据连接起来以生成最终消息。
为什么。实际上,该规范中的图更具说服力。您指出了几个问题。身份验证部分长期以来一直被破坏,但是MTProto实际上不用于提供身份验证。
不鼓励使用的模式(MAC-then-encrypt)密文攻击(可能不是这样的选择)。
一种非标准的填充算法(即“附加任何字节让您喜欢”)赋予密码学家意志的各种决定-是正确的。它们都以不同的方式被破坏。不安全的协议。有趣的是,与良好的原语导致安全协议相比,不良的原语可能更经常导致不安全的协议,但这并不重要。只要您回避坏原语的部分,坏原语仍然可以保证安全。
让我们检查一下:SHA1的中断会导致MTProto的中断吗? (这可能会使攻击者在每次碰撞时伪造一条聊天消息;但截至2016年,我们还没有到达此位置)
IGE的已知问题是否会导致MTProto中断? (不;它们不取决于身份验证)
MTProto中是否使用了MAC-then-encrypt? (否)
IND-CCA攻击是否会使MTProto的安全保证无效? (作者至少暂时不承认)
填充算法是否会使MTProto容易受到任何攻击? (从技术上讲,是的,因为它用于IND-CCA攻击,但又不会导致已知的明文恢复攻击)。首先是由于经验:即使表面上不是两个选择都不是问题,但有时它们也可能以非直觉的方式相互作用而导致真正的问题。从某种意义上说,有问题的选择在复杂性和破坏的可能性上无疑是成倍增加的。 (通过类比,这是高维设计空间的固有属性。)此外,密码学家还必须考虑许多未知数:民族国家的攻击者是否在任何这些基础算法中使用未发布的漏洞?这些特别令人关注,因为它们又可能与其他设计决策进行严重的交互。
Axolotl /信号协议
Signal Protocol(以前称为Axolotl)在某种程度上是MTProto苹果的橙色。例如,Signal主要关注密钥派生和更新/棘轮操作(Axolotl Ratchet,现在称为Double Ratchet Algorithm; DRA用于简称),而MTProto主要关注消息信封格式,前提是已经通过相当通用的Diffie-Hellman进行了密钥交换。
Double Ratchet算法的目标是最大程度地减少密钥泄露的影响。本文介绍了它如何比以往更好地工作,但是要点是:
DRA具有DH棘轮(在OTR中使用的“ Off the Record” IM协议)的最佳特性,并且对称关键棘轮操作(在SCIMP中使用,是Silent Circle Instant Messaging协议)。发送完每条消息后,将使用一个新密钥,并且先前的密钥将立即被忘记。这样,如果密钥曾经遭到破坏,则只能用于解密将来的消息,而不能解密过去的消息。
OTR为双方之间每次来回的消息重新协商DH密钥,因此在发生故障后可以自愈往返。这限制了曝光窗口,但是在这种情况下,窗口可以扩展到过去,而与SCIMP不同。与MTProto相比,信号协议中使用的包络(以一种很好的方式)不明显(
)。
Encrypt-then -MAC(使用HMAC-SHA256)
CTR模式下的AES,PKCS5填充(至少=>版本3)
那里没有红色标记。
A形式分析表明,信号协议(当时称为TextSecure)容易受到未知密钥共享攻击,从而B可以欺骗A将消息M发送给C,从而使A相信它实际上已将M发送给B。减轻攻击的一种方法,但我无法找到有关此更改是否已实际应用的任何信息。
结论
在信封中,Signal使用一个简单的身份验证加密(AE)系统,而MTProto使用一个自定义包装器,该包装器由于一系列奇怪的选择而没有资格成为AE或IND-CCA。尽管MTProto还没有已知的明文恢复攻击,但是这些属性很可能导致理论(或实际)攻击。当前密钥只会破坏一组将来的消息(可能为零;直到来自另一方的下一条消息到达为止)。但是,在MTProto中,破坏授权密钥(这是最接近的等效密钥)会损害所有过去和将来的消息。
我个人(作为开发人员)不会使用MTProto,除非我需要与Telegram互操作。信号协议(Open Whisper Systems)背后的人们以其协议的安全性而受到普遍赞誉,这使其成为显而易见的选择。
评论
$ \ begingroup $
好答案。不知道我是否同意元数据泄漏与加密没有关系,但是显然问题很广泛,没有在此进行比较。
$ \ endgroup $
–otus
16年6月23日在4:23
$ \ begingroup $
@otus-公平点。我改写了那句话,以减少争议。
$ \ endgroup $
–约书亚·华纳
16年6月23日在12:45
$ \ begingroup $
@JoshuaWarner感谢您的可靠回答,但您能否更新答案以涵盖2017年12月初与Telegram 4.6一起发布的新MTProto 2.0。已修复。现在,它也使用SHA-256而不是SHA1进行散列,以及其他许多操作。
$ \ endgroup $
– Taher Elhouderi
18年2月1日在18:34
$ \ begingroup $
@TaherElhouderi我现在没有时间深入了解,但是我确实更新了答案以提及新版本,并指出分析已经过时,以避免误导任何新手。
$ \ endgroup $
–约书亚·华纳
18年2月2日,下午3:46
#2 楼
除了约书亚·沃纳(Joshua Warner)的出色回答外,我还想指出,有人必须在某个时候“推出自己的加密货币”,以便完全有任何设计和实现。信号协议主要由密码学和安全性研究人员Moxie Marlinspike设计,该记录具有良好的记录,并因对现实世界密码系统的多种新颖攻击而著称。 MTProto(Telegram背后的协议)似乎主要是由数学家Nikolai Durov(据我所知)开发的,据我所知,他没有密码学方面的公共背景。无论使用哪种协议,让协议设计者和实现者都具有攻击和设计方面的经验通常是一件好事。#3 楼
上面的协议已经很好地回答了协议之间的差异,没有什么可补充的。但是,我认为不提及认真对待比较的人应该牢记的两个相关主题是不合理的。确定的攻击者试图拦截消息位于通信通道的任一端;也就是说,尝试入侵该应用程序或托管该应用程序的操作系统。讨论每个协议(Signal应用程序和Telegram应用程序)的主要实现的相对潜在攻击面的讨论超出了范围,但很有趣。功能较少的简单应用攻击较少。第二,为您选择正确的消息传递协议的重要因素可能是其采用率。使用服务的人越多,这种行为的总体表现就越正常,从人群中挑出的任何一条信息就越难,可疑程度也就越低。而且,当然,只有其他人使用的应用程序才对孤独者有益。
评论
如果您想以“过于广泛”来结束这个问题,请考虑在比较这两种协议时不应考虑太多。我提到的三个部分确实是主要部分(尽管可能还有其他部分)。如果您考虑以“主要基于意见”来结束问题,请考虑我不需要判断的答案,但可以比较客观地比较。我倾向于同意您的“不太宽泛”和“不是基于初步观点”的论点,但是我不确定这是否不是(引用帮助中心,强调我的观点)“密码分析…如果您想对您的完整密码方案进行同行审查,那么这里不是获得密码方案的地方。但是,您可能想将问题分解为具体问题……”虽然我的投票是+21票,而目前却获得+100的赏金,所以我将其保留不变,但您下次应该考虑指向我们帮助中心的指针。