海鸥聊天安全中心
安全中心
网络诈骗专题
行业相关
四项重点安全环节
•通道加密
•内容加密
•服务器数据库安全
•密钥安全
海鸥聊天安全机制说明
通道加密
内容加密详解
服务器数据库安全
密钥安全
传输通道如何完成密钥协商?
基本流程:
1. 客户端与服务器分别生成本次连接所需的随机数
2. 服务器将随机数发送给客户端。
3. 客户端使用 RSA 加密本地随机数后发送至服务器。
4. 服务器使用 RSA 解密客户端随机数,以降低中间人攻击风险。
5. 客户端,服务器用自己的随机数加上对方的随机数生成临时密钥 TempKey 和临时偏移量 TempIV (此时双方均持有相同的 TempKey和TempIV)。
6. 客户端与服务器分别通过 ECDHE 生成临时公私钥对。
7. 客户端使用 TempKey 与 TempIV 加密 ECDHE 公钥,再将密文发送至服务器。
8. 服务器接收并解密客户端发送的 ECDHE 公钥密文。
9. 服务器使用 TempKey, TempIV 对自己的 ECDHE 公钥进行加密,并使用 RSA 对 ECDHE。
10. 服务器使用 ECDHE 算法,使用客户端 ECDHE 公钥明文+服务器 ECDHE 私钥明文生成ShareKey。
11. 客户端收到服务器的 ECDHE 公钥密文和签名,然后进行解密和验证签名,如果没有问题,就使用客户端 ECDHE 私钥明文+服务器ECDHE 公钥明文生成 ShareKey。
12. 服务器初始化各个参数,下发给客户端,参数包含:
• AuthKeyID: 服务器随机生成的客户端临时标识符
• MsgKey: 由 ShareKey, AuthkeyID, MsgID, SessionID, Salt, SeqNo 以及真实的消息内容相加后进行 Sha256 后的值。
本参数用于:
a. 进行防止数据篡改的验证
b. 与 ShareKey 一起使用,生成 Aes256 key, IV,用来对各条消息进行加密。
• MsgID:时间相关的消息 ID,用于防止重放和去重。
• SessionID:每次登录唯一的会话 ID。
• Salt:每次登录唯一的盐值。
• SeqNo:用于防止重放。
13. 后续每条消息均会有不同的 MsgID, SessionID, Salt, SeqNo 和真实的消息内容;这些变化的值会导致 MsgKey 每次都不同。 这个每次都 不同的 MsgKey 加上 ShareKey 可以为每一条消息生成对应的 32 字节密钥和偏移量。
14. ShareKey 设有有效期限,到期后双方将重新完成密钥协商。
公钥与私钥分别是什么?
公开密钥(PubKey:简称公钥)和私有密钥(PriKey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。 因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。如上文加密中使用的RSA、ECDHE为非对称加密算法
非对称加密如何工作?
1、A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
2、A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
3、A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
4、A将这个消息发给B(已经用B的公钥加密消息)。
5、B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个数据的人都无法解密,因为只有B才有B的私钥。