Signal前向保密原理

Signal Signal 13

本文目录导读:

Signal前向保密原理-第1张图片-Signal 隐私加密工具 安全匿名即时通讯软件

  1. 核心思想:一次性的“保险箱”
  2. Signal 实现前向保密的两个关键“棘轮”
  3. 综合工作流程:一个简化的例子
  4. 攻击者无法破解过去消息的原因

Signal的前向保密性(Forward Secrecy,简称FS)是其安全性的核心基石之一。前向保密性保证:即使攻击者获取了通信双方当前使用的长期私钥(比如登录密码或设备主密钥),他也无法破解之前发生的任何一条加密消息。

这听起来很神奇,其背后核心原理是 “一次性临时密钥”结合“Diffie-Hellman(DH)密钥交换”,Signal 通过一个名为 “双棘轮算法”(Double Ratchet Algorithm) 的机制来实现这一点。


核心思想:一次性的“保险箱”

想象一下,你和朋友每次通信,都会在一个全新的、一次性的“保险箱”里放一条消息,这个保险箱用一把临时钥匙锁上,这把钥匙用完就销毁,即使将来有人拿到了你永久家门的钥匙(长期私钥),也无法打开之前用过的任何一个一次性保险箱,因为它们的锁芯是完全不同的。

Signal 实现前向保密的两个关键“棘轮”

Signal 的“双棘轮”由对称棘轮(用于更新对称密钥)DH棘轮(用于引入新的临时私钥) 组成,前向保密性主要依赖于 DH棘轮

对称棘轮(Symmetric Ratchet)—— 单向不可逆的密钥链

  • 作用:在同一个“会话轮次”内,为每条消息生成不同的加密密钥。
  • 原理:使用单向哈希函数,发送方和接收方共享一个 “根密钥”(Root Key),每发送一条消息,都用单向哈希函数对当前密钥进行一次哈希计算,得到一个新的、唯一的下一次密钥。
  • 前向保密贡献单向性,如果你知道了当前的密钥,无法反推出之前的密钥,但这一层只解决了“知道现在的密钥不能解密过去消息”的问题,如果攻击者拿到了这个会话轮次的起始根密钥,他还是能顺着推导出所有后续消息的密钥,还需要第二层棘轮。

DH棘轮(DH Ratchet)—— 引入全新的、不可预测的临时密钥

  • 作用:从根本上切断密钥之间的可推导性,即使攻击者掌握了某一轮的全部密钥(包括根密钥),他也无法推导出切换轮次后的新密钥。
  • 原理:这是实现前向保密的灵魂,它利用了迪菲-赫尔曼密钥交换(Diffie-Hellman key exchange) 的特性:
    • 生成一次性密钥对:在每一次对话轮次(或用户切换说话方时),发送方会生成一个全新的、临时的DH私钥-公钥对,这个私钥只在这个轮次使用,用完就立即销毁
    • 混合旧密钥与新密钥:新的根密钥是通过对上一轮旧密钥和新的一次性DH共享秘密进行混合计算得出的。
    • 关键逻辑:由于上一轮的临时私钥已经被销毁,攻击者即使拿到了两把新的公钥(比如A的新公钥和B的新公钥),也无法重新计算出那个共享秘密,因为计算共享秘密需要新的私钥,而它已经被销毁了。
  • 前向保密贡献自我毁灭性每一个轮次(比如每次你说话)都会创建一个全新的、独立的DH共享秘密。 这个秘密只用于计算当前轮次及其之后少量消息的密钥,一旦你切换到下一轮,这个秘密就和它的私钥一起被销毁了。

综合工作流程:一个简化的例子

假设Alice和Bob在使用Signal聊天。

  1. 建立初始会话

    • Alice生成一个长期身份密钥(她永久保留,用于验证身份)。
    • 借助Signal服务器,Alice和Bob交换了长期身份公钥一些预先准备好的、一次性预密钥(One-Time Prekeys, OPK)。
    • 他们利用这些密钥进行第一次DH交换,生成一个主密钥,这个主密钥是所有后续安全的起点。
  2. Alice发送第一条消息

    • Alice生成一个全新的、临时的DH密钥对
    • 她将这个临时的公钥(A_ephemeral_pub1)附加到消息中发送给Bob。
    • Alice利用主密钥和她自己的临时私钥、Bob的长期公钥(或上一轮的临时公钥),计算出一个新的会话根密钥Root Key 1
    • Alice使用Root Key 1通过对称棘轮生成消息加密密钥Msg Key 1,加密消息,发送。
    • 发送完成后,Alice立即销毁她的临时私钥A_ephemeral_priv1
  3. Bob回复消息

    • Bob收到消息后,他可以根据自身经历进行类似操作,如果Bob是回复者,他也会生成自己的新临时DH密钥对B_ephemeral_pub1),并用它和Alice的临时公钥A_ephemeral_pub1(注意,这两个都是临时密钥)计算出新的共享秘密,从而派生出Root Key 2
    • 这个Root Key 2与之前的任何密钥都完全无关,因为它的生成依赖于两个已经被销毁的临时私钥(Alice的A_ephemeral_priv1和Bob的B_ephemeral_priv1,如果Bob也进入新轮次的话)。

攻击者无法破解过去消息的原因

假设一年后,黑客攻破了Alice的手机,拿到了她的长期身份私钥

  • 黑客现在拥有了Alice所有的长期私钥
  • 黑客无法得到任何过去会话中使用的临时私钥,因为它们在通信结束后立即被销毁了。
  • 要解密一条过去的消息M_i,黑客需要知道该消息对应的消息密钥Msg Key_i
  • 要得到Msg Key_i,黑客需要知道它依赖的根密钥,而该根密钥依赖于特定轮次的一个共享秘密,这个共享秘密需要两个临时私钥才能计算出来,这两个临时私钥早在当时就被销毁了。
  • 黑客什么都做不了。过去的信息是安全的。
机制 功能 如何实现前向保密
对称棘轮 每条消息使用不同的密钥 单向性:知道当前密钥不能反推出之前的密钥,但理论上,如果知道一个轮次的初始密钥,可推导出后续所有消息。
DH棘轮 创建全新的、独立的会话根密钥 一次性+自我销毁:每个轮次都生成一个新的临时DH密钥对,并使用后即销毁私钥,这使得攻击者无法在事后通过任何长期密钥或过去的密钥来计算出该轮次的新共享秘密。

一句话总结:Signal的前向保密是通过“每次通信(或每个轮次)都生成并使用一次性的临时加密密钥,并在用完后立即永久销毁”来实现的,这使得过去的加密会话与现在任何的密钥泄露都完全隔离。

标签: Signal协议

抱歉,评论功能暂时关闭!