android即时通讯加密技术 - gmtalang/test GitHub Wiki

  • 终级通信安全:一次一密、密钥协商

  • 密钥协商过程,如上图所述,需要随机生成三次密钥,两次非对称加密密钥(公钥,私钥),一次对称加密密钥,简称安全信道建立的“三次握手”,在客户端发起安全信道建立请求后:

  • 服务端随机生成公私钥对(公钥pk1,私钥pk2),并将公钥pk1传给客户端:

  • (注意:此时黑客能截获pk1);

  • 客户端随机生成公私钥对(公钥pk11,私钥pk22),并将公钥pk11,通过pk1加密,传给服务端:

  • (注意:此时黑客能截获密文,也知道是通过pk1加密的,但由于黑客不知道私钥pk2,是无法解密的);

  • 服务端收到密文,用私钥pk2解密,得到pk11;

  • 服务端随机生成对称加密密钥key=X,用pk11加密,传给客户端:

  • (注意:同理,黑客由密文无法解密出key);

  • 客户端收到密文,用私钥pk22解密,可到key=X。

  • 至此,安全信道建立完毕,后续通讯用key=X加密,以保证信息的安全性。

  • 评估应用安全性的基本原则:

  • 网络上传递的数据是不安全的,属于黑客公共场所,能被截取;

  • 客户端的代码是不安全的,属于黑客本地范畴,能被逆向工程,任何客户端与服务端提前约定好的算法与密钥都是不安全的;

  • 用户客户端内存是安全的,属于黑客远端范畴,不能被破解。

  • 加密技术的使用深度决定了最终的安全性:

  • 零级安全:明文消息传递如同裸奔,不安全;

  • 初始安全:客户端和服务端提前约定加密算法和密钥,不安全(好多公司都是这么实现的=_=);

  • 中级安全:服务端随机生成密钥,发送给客户端,不安全;

  • 高级安全:一人一密,客户端使用“具备用户特性的东西”作为加密密钥,弱安全;

  • 终级安全:一次一密,三次握手建立安全信道,安全。