IM signal私聊信息加密方案

986 阅读2分钟
原文链接: xiaozhuanlan.com

BCM的App私聊加密是使用了signal的私聊信息加密机制,这里面需要注意的是,这里使用signal-protocol-java的库,库需要是开源的,但是估计没有一些加密基础完全不知道这加密流程的原理,本节就说一下这个私聊加密的原理。
简单分为两个大点

1.X3DH算法加密

2.双棘轮算法加密

想理解X3DH加密算法,需要先了解一下DH算法,之前的章节有介绍过,那就以私聊为基础给大家讲解一下
A发送公钥给B,然后B发送公钥给A,那么A B就相互持有对方的公钥
DH算法
DH(A私钥+B公钥) = DH(B私钥+A公钥)
以这个DH产生的值来加密消息,然后传输,就能做到简单的消息安全,这里是简单的。

X3DH是基于多次DH加密,和KDF加密运算来做的。
1.会以上面的的例子产生第一个DH1值
2.如果服务器作恶,直接给你传输一个自己的pubkey,然后A是不知道自己是和服务器直接消息通信的,这里就需要第二个DH值,这里使用使用公钥生成hash值,私钥对hash值加密,然后公钥和hash值拼接,产生第二个公钥,然后做第一步的传输,生成第二个DH值。
3.有可能会遭遇到强力破解,如果破解了一次将会完全知道私钥,那么这里就需要第三个DH值,这里就需要A B端随机产生一个一次性使用的公私钥,然后重复做第一步的传输,生成第三个DH值。
4.使用DKF算法生成一个SK值用于加密消息,因为AB端必定能得到相同的 DH1,DH2,DH3值,那么通过KDF算法得到的SK值肯定是相同的。
X3DH 算法是用于AB两个人通信时第一次建立会话的时候安全验证使用。
需要事先将公钥,加密的二次公钥,还有一次性使用的公钥,三个参数上传到服务器上记录,在用户发送私聊信息前,在服务器中获取对方的三个公钥,在做X3DH运算。