问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

微信MMTLS加密协议:安全还是隐患?

创作时间:
2025-01-21 18:25:35
作者:
@小白创作中心

微信MMTLS加密协议:安全还是隐患?

微信作为一款每月活跃用户超过10亿的应用程序,其使用的MMTLS加密协议备受关注。最近的研究揭示了该协议存在的一些安全隐患,引发了公众对个人数据保护的关注。尽管微信一直在努力改进其加密技术,但专家们认为,这些改进并未完全解决潜在的风险。通过深入了解MMTLS的工作原理,我们可以更好地评估微信账户数据加密的实际安全性。

01

MMTLS协议概述

MMTLS(Modified TLS)是微信使用的主要网络协议,它是TLS 1.3的修改版本。微信开发人员对加密技术所做的许多修改都引入了弱点。进一步分析发现,早期版本的微信使用了一种安全性较低、定制设计的协议,其中包含多个漏洞,我们将其描述为“业务层加密”。在现代微信版本中,除了 MMTLS 之外,仍使用这一层加密。

02

安全性分析

确定性 IV

MMTLS 加密过程每次连接生成一个 IV。然后,它们会为该连接中加密的每个后续记录增加 IV。通常,NIST建议不要在 AES-GCM 中使用完全确定性的 IV 派生,因为很容易意外重复使用 IV。在 AES-GCM 的情况下,重复使用 (key, IV) 元组是灾难性的,因为它允许从 AES-GCM 身份验证标签中恢复密钥。由于这些标签附加到 AES-GCM 密文以进行身份 验证,因此可以从使用相同密钥和 IV 对加密的少至 2 个密文中恢复明文。

此外,Bellare 和 Tackmann还表明,使用确定性 IV 可以让强大的对手暴力破解特定的 (密钥,IV) 组合。如果加密系统部署到非常大的(即互联网大小)所选 (密钥,IV) 组合池中,则这种类型的攻击适用于强大的对手。由于微信拥有超过 10 亿用户,因此这种数量级使这种攻击处于可行性范围内。

缺乏前向保密

现代通信协议通常都要求具有前向保密性,以降低会话密钥的重要性。一般来说,TLS 本身在设计上就是前向保密性的,但“恢复”会话的第一个数据包除外。第一个数据包使用“预共享密钥”或上次握手期间建立的 PSK 进行加密。

MMTLS 在设计上大量使用 PSK。由于 Shortlink 传输格式仅支持单次往返通信(通过单个 HTTP POST 请求和响应),因此通过传输格式发送的任何加密数据都使用预共享密钥加密。由于泄露共享的 PSK_ACCESS 密钥将使第三方能够解密通过多个 MMTLS 连接发送的任何 EarlyData,因此使用预共享密钥加密的数据不是前向机密。通过 MMTLS 加密的绝大多数记录都是通过 Shortlink 传输发送的,这意味着微信发送的大多数网络数据在连接之间不是前向机密。此外,在打开应用程序时,微信会创建一个长寿命的 Longlink 连接。这个长寿命的 Longlink 连接在微信应用程序的持续时间内都是打开的,任何需要发送的加密数据都通过同一连接发送。由于大多数微信请求要么使用(A)会话恢复 PSK 或(B)长寿命 Longlink 连接的应用程序数据密钥加密,因此微信的网络流量通常不会在网络请求之间保留前向保密性。

业务层加密问题

业务层加密结构,尤其是对称模式 AES-CBC 结构本身存在许多严重问题。由于微信发出的请求是双重加密的,这些问题只影响内部业务层加密,因此我们没有找到立即利用它们的方法。然而,在仅使用业务层加密的旧版微信中,这些问题是可以被利用的。

  • 元数据泄露:业务层加密不会对用户ID、请求URI等元数据进行加密,具体细节在“业务层请求”一节中提到。这个问题也被微信开发者们自己承认,也是开发MMTLS加密的动机之一。
  • 可伪造的 genSignature 完整性检查:可以伪造长度为evil_sig的签名
  • 分组密码模式下密钥、IV 重复使用:重复使用两者意味着如果两个明文相同,它们将加密为相同的密文。
  • 加密密钥问题:服务器选择客户端使用的加密密钥是非常不合常规的。事实上,我们注意到服务器生成的加密密钥(“会话密钥”)仅使用可打印的 ASCII 字符。因此,即使密钥长度为 128 位,该密钥的熵也最多为 106 位。

为什么业务层加密很重要?既然业务层加密被包裹在 MMTLS 中,那么它是否安全又有什么关系呢?首先,从我们对微信早期版本的研究来看,业务层加密是微信网络请求的唯一加密层,直到 2016 年。其次,从业务层加密暴露未加密的内部请求 URI 的事实来看,微信的可能架构之一是托管不同的内部服务器来处理不同类型的网络请求(对应不同的“requestType”值和不同的 cgi-bin 请求 URL)。例如,在前端微信服务器(处理 MMTLS 解密)终止 MMTLS 后,转发到相应内部微信服务器的内部微信请求不会被重新加密,因此仅使用业务层加密进行加密。微信内联网中的网络窃听者或网络分路器可能会攻击这些转发请求上的业务层加密。然而,这种情况纯粹是推测性的。腾讯对我们披露的回应涉及业务层加密中的问题,并暗示他们正在慢慢从问题更大的 AES-CBC 迁移到 AES-GCM,因此腾讯也对此感到担忧。

03

专家观点和用户反馈

微信团队一直在努力改进其加密技术。然而,这些改进并未完全解决潜在的风险。专家建议微信迁移到标准 QUIC 实现。TCP 和 TLS 握手都需要一次往返,这意味着发送的每个新数据包都需要两次往返。如今,TLS-over-QUIC 结合了传输层和加密层握手,只需要一次握手。QUIC 兼具两全其美的优势,既提供了强大的前向秘密加密,又将安全通信所需的往返次数减少了一半。除了网络性能之外,还有客户端性能的问题。由于微信的加密方案对每个请求执行两层加密,因此客户端加密数据的工作量是使用单一标准化密码系统的两倍。

在用户层面,对微信安全性的担忧也在增加。用户越来越倾向于使用加密软件来保护敏感文件。加密软件能把文件变成神秘代码,就算文件在微信传输过程中被拦截,没有密码钥匙,谁也看不懂。而且它能精准控制谁能看、谁能改,就像给文件加了一道道坚固的防护门。固信软件就超棒!加密算法超厉害,各种平台都适配,操作简单不费脑。有它在,机密文件稳稳当当,安全感爆棚!

04

结论和建议

尽管微信在加密技术方面做出了大量努力,但MMTLS协议仍存在一些安全隐患。为了更好地保护用户数据,微信应考虑采用更安全的加密标准,如QUIC。同时,用户也可以采取一些措施来增强自己的隐私保护,例如使用加密软件来保护敏感文件。通过这些方法,我们可以更好地保护自己的数据安全,避免潜在的风险。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号
微信MMTLS加密协议:安全还是隐患?