秘钥协商流程
IM消息自定义消息体设计时要考虑到可能产生的安全问题,如果消息体没有进行加密措施,很容易被抓包截取,消息加密要考虑到各个流程的可能出现的安全性问题!
下面是IM消息加密设计的密钥协商过程:
C S
(public key)P1,K1(AES) p1(k1)---> (private key)p2 p2(p1)->k1
k2<--k1(k2) <--- K2(AES) k1(k2)
k2 <---> k2
k2 <---> k2
...........
客户端C有一个公钥P1,服务端保存私钥私钥P2
1.客户端生成一个对称秘要K1,用P1加密传到服务端
2.服务端用私钥P2解密数据,得到K1
3.服务端生成一个对称秘要K2,并用K1加密传到客户端
4.客户端收到数据用K1解密,得到K2,K2就是以后数据加解密用到的秘钥
5.后续的数据加解密通过K2进行
优点
1.保证了密钥在互联网不是明文传输的,确保数据安全!
2.每次接入都会协商一个新的秘钥,相对更加安全!
缺点
1.服务端非对称秘钥的私钥是写死的,不是固定不变的
2.流程相对复杂,秘钥协商的过程相对耗时