互联网上的加密主要是说对称加密和非对称加密。
对称加密
特点是:一个密码既能执行加密又能执行解密
A要给B发送一段Data的数据。不能直接发送,怕被人截获,所以想到用一个密码加密之后再传输,当然这个密码要么是通过口头告诉,要么是打电话等方式通知。
A :data+密码= >加密后的数据
B这边接受到数据之后,用A加密的密码进行解密
B:加密后的数据+密码=》data
这样操作有个问题,就是A这个密码怎么给B 呢,平时工作中,可以直接俩端约定好一个固定 的串,互相加密解密,这样虽然表面看起来不是明文传输,但是被人破解你任意一端的密码,基本就没有任何作用了。
非对称加密
所以我们需要更安全的一种加密方式,也就是非对称加密。它主要特点是公钥加密的数据只能用私钥解,私钥加密的数据只能用公钥解。
举个例子:
蒋介石要给宋美龄写信,首先宋美龄生成一堆秘钥,自己留着私钥,在网络上把公钥传给蒋介石,然后蒋介石用宋美龄给的公钥加密要传递的数据,然后传递给宋美龄,宋美龄再用刚才生成的私钥解密,这样就解决了对称加密中密码不安全的问题。
但是这样真的安全么?答案肯定不是。。
因为产生了一个这样的问题,如果宋美龄给蒋介石传递公钥的过程被第三方比如张三拦截了,然后张三也生成一堆自己的密钥,然后把自己生成的公钥传递给蒋介石,蒋介石拿到张三生成的公钥,加密数据,后面回传给宋美龄数据的时候张三又去拦截这个加密后的数据,再用自己生成的私钥解密,这样数据就完全被张三获取了。
其实这其中存在的一个问题就是蒋介石要给宋美龄写信的时候要获取一个加密的公钥,但是他如何得知他获取的就是宋美龄的公钥而不是张三的公钥呢,这时候要解决这个问题需要通过一个第三方的机构。
这个机构就是CA,宋美龄产生一堆私钥公钥之后,她就找CA机构为她担保,CA为宋美龄的公钥担保之后,给宋美龄出具一份数字证书,这个证书里就包含宋美龄的公钥,这样在网络传输的时候就是传输数字证书,而不是传输公钥,
蒋介石收到CA为宋美龄颁发的数字证书,他会验证下这个数字证书是否是CA为宋美龄颁发的,如果是,他就会拿这个证书里的公钥加密。就好比现在银行的网银,在登录的时候,第一件事,就是出示数字证书,其实是银行将他的公钥给你,然后浏览器内部就会利用自带的校验功能去校验这个证书的有效性和安全性,后面再向银行网站传输数据的时候就利用这个公钥加密后传输。
是否是这样就安全了呢,答案肯定又是否定的。现在有这样的一个问题,你宋美龄确实是有人为你担保的一个证书,是传递给蒋介石了,但是张三也能收到这个证书。张三也可以写自己的数据用宋美龄的数字证书加密然后给传递给宋美龄。
这就引发了另外一个问题,宋美龄这边收到数据后,怎么确认这个数据就是蒋介石传递过来的,而不是张三传递过来的。这个时候就引出了另外一个解决方案,签名。
蒋介石为了让宋美龄确认数据是自己发出的,他自己也会生成一堆公钥和私钥,首先将自己写的信生成一个摘要(md5),然后用自己生成的私钥对信的摘要进行加密(数字签名),然后将数据传递给宋美龄,宋美龄这边拿着蒋介石的公钥先解密,如果能解密,就说明这个数据的确是蒋介石发出来的,解密得到的结果是数据摘要。然后将原始数据做数据摘要之后的结果跟这个数据摘要比对,这样就能确定俩点,一点是这个数据的来源是蒋介石,另外中间没有被人篡改。互联网目前比较流行的一种做法跟这个思路是一样的。至此,俩个人之间的通信安全基本能够保证,当然,深究起来,互联网没有绝对的安全,这些都是建立在大家都互相信任CA证书颁发机构的前提下。如果再去深究诸如CA是否安全的问题,那将永无尽头。。。
此例子参考java老师方立勋javaweb视频。
网友评论