七夕之夜,想和另一半聊一些私密的话,如何保证聊天内容不被黑客窥探,看完此文,终于略知一二了。
网络上传递的数据是不安全的,网络属于黑客公共场所,能被截取。
客户端是不安全的,属于黑客本地范畴,能被逆向工程。
任何客户端与服务端提前约定好的算法与密钥都是不安全的,那如何改进呢?
(1)客户端和服务端提前约定好加密算法,在传递消息前,先协商密钥;
(1)根据黑客定理一,网上传输的内容是不安全的,于是乎,黑客能得到加密key=X;
(2)根据客定理二,客户端和服务端提前约定的加密算法是不安全的,于是乎,黑客能得到加密算法;
(3)于是乎,黑客截取后续传递的密文,可以用对应的算法和密钥解密;
四、再进阶阶段:一人一密,客户端确定密钥,密钥不再传输
(2)使用“具备用户特性的东西”作为加密密钥,例如:用户密码的散列值;
(5)服务端从db里获取这个“具备用户特性的东西”,解密;
用户客户端内存是安全的,属于黑客远端范畴,认为是安全的。
使用“具备用户特性的东西”作为加密密钥,一人一密,是安全的。但这仍不是最优方案。
密钥协商过程,如下图所述,需要
随机生成三次动态密钥
:
此称为,安全信道建立的“三次握手”,安全信道建立之后,再进行密文发送。
(1)服务端随机生成公私钥对(公钥pk1,私钥pk2),并将公钥pk1传给客户端;
(2)客户端随机生成公私钥对(公钥pk11,私钥pk22),并将公钥pk11,通过pk1加密,传给服务端,服务端收到密文,用私钥pk2解密,得到pk11;
画外音:此时黑客能截获密文,也知道是通过pk1加密的,但由于黑客不知道私钥pk2,是无法解密的。
(3)服务端随机生成对称加密密钥key=X,用pk11加密,传给客户端,客户端收到密文,用私钥pk22解密,可到key=X;
至此,安全信道建立完毕,后续通讯用
key=X
加密,以保证信息的安全性。
(2)用户客户端是不安全的
,属于黑客本地范畴,能被逆向工程;
(3)
客户端内存是安全的
,属于黑客远端范畴,可以认为是安全的;
(2)客户端和服务端提前约定加密算法和密钥,不安全;
(3)一人一密,服务端随机生成密钥,发送给客户端,不安全;
(4)一人一密,客户端使用“具备用户特性的东西”作为加密密钥,安全;
对了,很多公司说,我们绝不存储,绝不窥探用户聊天记录,你信不?