202510
cryptography

MTProto 2.0 加密设计的原语风险:为何自定义协议可能导致可预测密文

MTProto 2.0 虽采用标准加密原语,但其自定义的组合方式带来了潜在风险。本文剖析其将消息内容与认证密钥结合生成加密密钥的设计,探讨此类构造如何可能被利用以生成可预测的密文,揭示了自定义加密协议面临的普遍挑战。

Telegram 作为一款广受欢迎的即时通讯应用,其安全性很大程度上依赖于其自研的加密协议——MTProto。当前主流版本 MTProto 2.0 在设计上采用了行业标准的加密原语,如 AES-256 和 SHA-256,旨在为数亿用户的通信提供端到端加密保护。然而,密码学的安全不仅取决于所选原语的强度,更关键的是这些原语的“组合方式”。近期针对 MTProto 的研究揭示了其在密码学构造上的一些固有风险,特别是其密钥派生机制可能允许攻击者在特定条件下构造出可预测的密文,从而对协议的安全性构成威胁。

本文将深入剖析 MTProto 2.0 在加密设计上的一个核心特点——消息依赖的密钥生成机制,阐释为何这种非标准的构造会引入潜在漏洞,并探讨攻击者如何理论上利用这一特性来破坏加密的随机性,最终实现对密文的可预测性攻击。

MTProto 2.0 的核心加密流程与密钥派生

要理解其潜在风险,我们首先需要简要回顾 MTProto 2.0 的加密流程。当客户端向服务器发送一条消息时,协议会执行以下关键步骤:

  1. 消息填充与哈希:待加密的明文消息会与会话信息、序列号、时间戳等数据拼接,并添加随机填充字节,形成一个完整的消息体。随后,协议使用 SHA-256 对这个消息体进行哈希计算。

  2. 消息密钥 msg_key 的生成:MTProto 2.0 的一个独特之处在于其“消息密钥”(msg_key)的生成方式。它并非完全随机或仅从主密钥派生,而是与消息内容本身强相关。具体来说,msg_key 是取自上一步生成的 SHA-256 哈希值的一部分(中间的 128 位),并结合部分长期认证密钥(auth_key)共同派生得出。

  3. AES 加密:最终,使用派生出的 msg_key 和一个初始化向量(IV),通过 AES-256 IGE 模式对消息体进行加密,生成最终发送到网络的密文。

这个设计的核心在于 msg_key 直接依赖于明文消息的内容。这意味着,两条不同的明文消息将产生两个完全不同的 msg_key。虽然表面上看起来增强了每次通信的独特性,但这种“输入依赖”的密钥机制恰恰是密码学设计中需要极力避免的模式。

“消息依赖密钥”的理论风险

在标准化的加密协议(如 TLS)中,会话密钥一旦建立,在一段时间内是固定的,与传输的具体数据内容无关。数据加密所用的密钥和数据本身是严格分离的。这种分离是防止各类选择明文攻击和相关密钥攻击的基础。

MTProto 的设计打破了这一原则。由于 msg_key 是明文的函数,攻击者如果能够以某种方式操控或预测加密前的明文内容,就可能对 msg_key 的分布产生影响。这为攻击者打开了一扇窗:通过构造特定的消息序列,观察加密后的密文变化,来推断有关加密过程或密钥的隐藏信息。

这种设计的风险在于:

  • 降低了熵源的独立性:理想的加密系统,其安全性应完全依赖于密钥的保密性和随机性。而当密钥本身又依赖于一个可被外部影响的变量(明文)时,系统的整体熵(不确定性)就可能下降。
  • 增加了侧信道攻击的可能性:攻击者(尤其是具备中间人攻击能力的网络观察者)可以通过发送精心设计的探测消息,并分析响应密文的长度、模式或时间,来获取关于密钥生成过程的微弱信号。长期积累这些信号,可能导致密钥的部分信息泄露。
  • 为可预测性攻击创造条件:如果攻击者能够精确控制发送给目标设备的消息内容,例如通过某个自动化服务或机器人,他们就能精确计算出对应的 msg_key 将会是什么。虽然他们仍然不知道完整的 auth_key,但对 msg_key 的部分预测能力已经足以构成严重威胁。攻击者可以检验关于明文的假设,例如,通过发送一条猜测的明文,然后计算预期的密文是否与观察到的密文匹配。

攻击路径推演:从消息操控到密文可预测性

一个理论上的攻击场景可能如下:

  1. 前提条件:攻击者需要具备网络中间人的能力,能够拦截、修改或注入客户端与服务器之间的流量。这是发动此类攻击的高门槛,但在某些网络环境下是可能实现的。

  2. 攻击阶段一:消息注入与操控:攻击者向目标客户端持续发送具有特定结构或模式的已知明文消息。例如,通过一个公开的 Telegram 频道或一个交互式机器人发送重复或递增的消息内容。

  3. 攻击阶段二:观察与关联:攻击者捕获客户端对这些消息加密后发往服务器的密文。由于输入的明文是已知的,攻击者可以计算出 SHA-256 哈希值的可能范围,进而推断出 msg_key 的某些特性。

  4. 攻击阶段三:验证与破解:通过大量的“明文-密文”对,攻击者可以建立一个关联模型。当一条未知的目标密文出现时,攻击者可以尝试用这个模型来猜测其对应的明文是否属于某个特定集合。例如,如果密文的某些比特位与基于特定明文假设计算出的模式相符,那么攻击者就以一定概率猜对了明文。这虽然不是完整的解密,但在很多场景下(如确认某人是否发送了特定指令)已经足够致命。

这种攻击的核心思想是利用加密函数中非标准的“捷径”,将破解密钥的难题转化为一个模式匹配和统计分析的问题,大大降低了攻击的复杂度。

教训与启示:标准化与透明度的价值

MTProto 的案例深刻地揭示了自定义加密协议所面临的普遍挑战。尽管它使用了强大的、经过公开验证的加密算法,但其独特的、非标准的组合方式却可能成为整个系统的“阿喀琉斯之踵”。密码学界公认的最佳实践——“不要自己发明加密协议”(Don't roll your own crypto)——再次被印证。

相比之下,像 TLS 和 Signal 协议都经过了长达数年甚至数十年的公开审查、竞赛和标准化过程,其设计的每一个细节都经过了全球顶尖密码学家的反复推敲,从而最大限度地排除了此类构造性缺陷。

对于开发者和系统架构师而言,MTProto 的潜在风险提醒我们:在构建安全系统时,应优先选择经过广泛审查和接受的标准化协议。即使出于性能或特定业务需求的考虑需要进行定制,也应将定制限制在最小范围,并对任何非标准设计进行严格、独立的第三方安全审计。透明度和开放性,永远是构建可信加密系统的基石。