文章简单回答https数据传输原理。
非对称加解密技术
加密就是一钟映射与变换。
密文 = f(明文,key1)
明文 = g(密文,key2)
如果key1==key2,则叫对称加密。如DES
。
如果key1!=key2,则叫非对称加密。如RSA
。
因为是非对称的,所以可以一个key给别人,称为公钥,一个key自留着,称为私钥。
当然,数学原理和算法上保证了两点。
- 公钥加密的数据,只有私钥能正确解出。
- 私钥加密的数据,只有公钥能正解解出。
这两点性质是后面的基础。
数字摘要
数字摘要 = hash(数据)
这个过程也有三点性质
- 数据有任何微小的改变,数字摘要就会发生变化。
- 同一份相同的数据,生成的数字摘要是相同的。
- 可由数据变换成数字摘要,但无法由数字摘要推导或反解出数据。
这个性质可以保证数据完整和不被篡改。
比如,发一份数据的同时,后面再跟一串这个数据的数字摘要。
收到数据的人,用同样的hash函数对数据处理,得到摘要。
与后面的摘要进行对比。若相同,则表明数据是完整的未被改动过。
至于数据是不是真实的,就是后面的事了。
常用的hash函数有:MD5
,sha1
数字签名
就是把上面两项组合下。
发送者:
附加数据 =f(hash(数据),私钥)
[数据+附加数据]
[数据+附加数据]
传给接收者后
接收者:
hash(数据) ?= g(附加数据,公钥)
如果相等,则可以认定这个数据是私钥拥有者发的完整天数据。
数字签名有两种功效:
- 确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。
- 数字签名能确定消息的完整性,因为数字摘要的存在。
数字证书
数字证书的存在,是为了解决上面过程的一个漏洞。
无法验证公钥的真实性。如果在传输过程中被换掉了呢。
数字签名和数字证书这里面有比较深动的图解。
为了验证公钥的真实性。
需要一个权威的值得信赖的第三方机构(Certificate Authority, CA)。
把公钥和公钥拥有者的信息
数字证书 = [[公钥+公钥拥有者的信息]+f(hash([公钥+公钥拥有者的信息]),CA私钥)]
这样通讯的时候,直接给这个数字证书就可以了。
先通过CA的公钥,把个人的公钥解确认。
再用个人公钥去进行上面的操作。
相当于,如果X信任Y,Y信任Z,X就能信任Z了。
这是一个证书链的原型吧。
SSL/TLS
上面的过程,可以确定发出者的身份,数据的真实性,完整性。但在传输过程中,别人还是可以查看到你发的什么信息呢。
SSL就是基于上面说的原理,定的一个安全传输协议。
详细的过程可以查看Https(SSL/TLS)原理详解
总得来说,就是先用RSA,确认身份,再商量出一个密钥,用DES对数据加密再输出。
https
基本就是就SSL+HTTP。
有空再来补充。