signal protocol

目录

1. 协议介绍

2. DH协议

2.1 DH协议原理

2.2 经典DH算法

3. signal协议

3.1 X3DH

3.2 棘轮算法

3.3 密钥协商算法


1. 协议介绍

        signal protocol是由Open Whisper Systems提供的端到端加密通信协议,任何第三方包括服务器都无法查看通信内容,可应用在公开信道中加密传输文本、图片、音频、视频等。signal protocol具备前向和后向安全,即使某个消息的密钥泄露,黑客也无法破解之前和之后的消息,facebook messenger、whatsapp、singal app热门应用都采用该协议来保护消息的安全传输。

2. DH协议

        迪菲-赫尔曼密钥交换协议(Diffie-Hellman key exchange,简称DH协议),通讯双方无需预先沟通,可在不安全的网络环境中协商产生可用于对称加密的会话密钥对通信内容进行加密的共享秘密,避免密钥泄露风险。

2.1 DH协议原理

        假设Alice和Bob要进行加密通信,需协商产生一个可用于生成消息密钥的共享秘密,DH协议的原理可用下面公式来表示:

DH(A的私钥,B的公钥)=共享秘密S=DH(B的私钥,A的公钥)

        使用DH协议计算共享秘密所需的参数为自己的私钥和对方的公钥。Alice和Bob均拥有自身的私钥和公钥,只需获取对方的公钥,就能计算出相同的共享秘密S,计算流程如下:

2.2 经典DH算法

        基于离散对数问题的经典的Diffie-Hellman 密钥协商方案,公开参数包括n阶乘法群\left ( G,* \right )及其生成元g和素数p。Alice,Bob使用DH协议协商产生共享秘密的流程如下:
        (1)Alice选取一个随机数a\left ( 0\leq a \leqslant n-1\right ),计算A=g^{a}\,mod\,p,并将A发送给Bob;

        (2)Bob选取一个随机数b\left ( 0\leq b \leqslant n-1\right ),计算B=g^{b}\,mod\,p,并将B发送给Alice;

        (3)Alice计算K=B^{a}\,mod\,p=\left ( g^{b} \right )^{a}\,mod\,p

        (4)Bob计算K=A^{b}\,mod\,p=\left ( g^{a} \right )^{b}\,mod\,p

        K=B^{a}\,mod\,p=\left ( g^{b} \right )^{a}\,mod\,p=g^{ab}\,mod\,p=A^{b}\,mod\,p为Alice和Bob的共享秘密。

3. signal协议

        signal协议通过X3DH和双棘轮算法,让通信参与者可在不安全的公开信道中协商产生安全的会话密钥,下面分别介绍X3DH、双棘轮算法及signal协议的密钥生成算法。

3.1 X3DH

        X3DH(extended Triple Diffie-Hellman key exchange)是增强版的DH密钥交换协议,参与者包括会话发起者、会话接收者以及服务器3种角色,服务器用于存储所有用户的各种公钥。通信用户拥有如下4种密钥:

  • 身份密钥(Idendity Key, IK):长期的符合DH协议的密钥对,用户注册时创建,与用户身份绑定;
  • 已签名的预共享密钥(Signed PreKey, SPK):中期的符合DH协议的密钥对,用户注册时创建,由身份私钥签名后上传至服务器保存,并定期更新;
  • 一次性共享密钥(One Time PreKey, OPK):一次性使用的密钥对队列,安装时生成,不足时服务器提醒补充;
  • 临时密钥(ephermeral Key, EPK):会话时临时生成的用于创建初始消息密钥S以及用于生成KDF第一个input。

        假设Alice欲与Bob进行加密通信,他们之间通过X3DH协商产生共享密钥S的流程如下:

        (1)Alice 从服务器上下载Bob的3种密钥对的公钥:身份密钥IK_{B}.pubKey、已签名的预共享密钥SPK_{B}.pubKey和预共享密钥的签名Sig、一次性预共享密钥OPK_{B}.pubKey

        (2)Alice 验证预共享密钥的签名Sig,验证通过后创建一个临时密钥对EK-A;

        (3)Alice使用DH协议计算协商的共享密钥,具体计算方式如下:

\left\{\begin{matrix} DH_{1}=DH\left ( IK_{A}.privKey, SPK_{B}.pubKey\right ) \\DH_{2}=DH\left ( EK_{A}.privKey, IK_{B}.pubKey\right ) \\DH_{3}=DH\left ( EK_{A}.privKey, SPK_{B}.pubKey\right ) \\ DH_{4}=DH\left ( EK_{A}.privKey, OPK_{B}.pubKey\right ) \end{matrix}\right.

        (4)Alice计算消息密钥S=KDF\left ( DH_{1}||DH_{2}||DH_{3}||DH_{4} \right )

        (5)Alice使用消息密钥S对消息进行加密,连同自己的身份公钥IK_{A}.pubKey、临时公钥EK_{A}.pubKey及本次协商所使用的Bob的一次性密钥标识一同发给Bob;

        (6)Bob收到Alice的信息后,取出Alice的2个公钥,结合IK_{B}.priKey和被使用的私钥OPK_{B}.priKeySPK_{B}.priKey,使用与Alice相同的算法计算消息密钥S。

3.2 棘轮算法

        signal protocol采用双棘轮算法生成消息密钥,通过“KDF棘轮”+ “DH棘轮”,保证消息的前向安全和后向安全。使用KDF棘轮,实现每条消息使用不同的密钥,同时确保一条消息的密钥被破解了,敌手也只能根据已知信息推算后面消息的密钥,而不能向前推算历史消息的密钥,也就是保持了棘轮的单向性,称之为前向安全;其次,如果通过反向的DH棘轮算法(即前文介绍的X3DH协议),在保障前向安全的基础上保障后向安全,即一条消息的密钥被破解,一定时间后,敌手便无法根据已知信息推算出之前和之后的消息密钥。

        如下图所示为KDF棘轮,根据KDF key和输出其他参数Input,得到的无法预测的输出被分为2部分,一部分接着作下一次计算的输入KDF key,一部分作本次迭代的输出密钥Output key。

3.3 密钥协商算法

        基于X3DH协议,Alice和Bob2使用对身份密钥对可协商生成一个安全的会话密钥,更换其中的任何一个密钥对,协商的产生的会话密钥(X3DH Output)也会发生改变。双棘轮算法就是通信参与者使用X3DH协议并轮流更换密钥对,每次生成不同的协商密钥(X3DH Output)作为KDF棘轮算法的Input,由KDF棘轮算法派生出最终的消息加密密钥,以此确保所生成的加密密钥既是前向安全的,也是后向安全的。

  • 48
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值