IM自定义消息协议安全--密钥协商过程

秘钥协商流程

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.流程相对复杂,秘钥协商的过程相对耗时

你可能感兴趣的:(java安全)