探讨一下IM加密聊天的实现方案
在此之前引入“对称加密”和“非对称加密的概念”
【对称加密】,简单来讲 只需要一个秘钥就可以对数据进行加密,对称加密相对非对称加密的速度非常快。
若userA给userB发送一断数据,若用对称加密方案,即为
即实现了简单的对称加密,
但是若在传输过程中收到了攻击,且**了key那么跟明文传输就没有什么区别了。
那怎么办呢?我们先看下非对称加密
【非对称加密】需要一堆公私钥,由公钥加密,私钥解密,私钥加签,公钥验签。但是加密效率远远低于对称加密,所以并不适合连续的且对数据量大信息进行加密。
所以一般采用非对称加密结合对称加密的形式
大致流程
1、userA 得到userB的公钥 b_pub,随机对称秘钥key
2、用b_pub加密key + key加密原文,作为密文传输给userB
3、userB将密文截取,用b_pri对对应密文进行解密,得到userA随机生成的key
4、用key解密出对应密文得到原文
但是,若一个攻击者C,劫持了A与B之间的通信,且有B_pub,就可以把自己伪装了一个A,给B发送数据。
因为是用B_pub加密的,所以B不知道是谁发来的。所以还是有风险的。
那么怎么办呢?非对称加密还有一个加签验证签功能
我们在发送的过程中,用userA的a_pri对整体数据进行加签。证明是userA发送的。B收到的时候用a_pub进行验签。若验签通过,则说明是A发送的。在非对称加密过程中 私钥是永远不会对外开放的,只是本地拥有。
届此,我们做了一个比较安全的加密传输方案。有兴趣的可了解https的加密策略,与之有类似。