公钥与私钥
简单公钥与私钥图文说明
从上图可以看出,公钥加密解决了通讯链路的安全,保证在通讯过程中不出错,这是因为公钥加密的数据只能私钥解密,这种情况下,即使黑客拿到双方公钥也没用,因为公钥加密的数据没法破解。私钥的签名验证了信息来源的正确性,这是因为数字签名是发送方私钥产生的,没有办法伪造。很好的防止了黑客通过自己持有的公钥进行数据伪造。
CA证书
为了保证公钥的安全性,A发出的公钥B接收时不会被第三方替换掉,保证就是A的,使用第三方权威机构包装为CA证书发出的,从CA拿到的公钥可以认为一定是A发出的,随时可以到机构去校验当前CA证书是不是正确的。
HTTPS
Https流程和原理
HTTPS协议通过TLS层和证书机制提供了内容加密,身份认证,数据完整性三大功能。
简单理解为,在用户发出一个加密请求(HTTPS)时,服务器将加密后的内容和数字证书(不一定为CA证书?)一起发送给请求方,后面双方都通过私钥与公钥加密通信。
作为私钥加密的摘要,以及根据摘要内容生成的唯一编号,当任意内容被修改时,可能造成摘要不能被客户端解析或者唯一编码验证不通过。
总结
一个遗留疑问
目前实际中要完成一个相互的通讯,到底是不是两对公钥和私钥一起使用呢?如果是,那私人用户哪来私钥呢,不可能私人用户也去申请CA吧??
https只能保证客户端到服务器端的数据安全??
为啥需要两道锁呢
这是因为黑客虽然无法解开已存在的通信数据,但是其却可以拦截并通过持有的公钥进行身份伪装,内层的数字签名,因为黑客没有办法伪造,所以能确定身份。
外层虽然可以伪造(也只能伪造,但不能破解),但是内层身份校验不通过。
为啥整个过程中不直接使用私钥加密,公钥解密呢
若直接在外层进行私钥加密,公钥解密,那么根本没有数据安全性而言了,发送出去的数据基本上对所有人都是透明的。
公钥和私钥是成对的,它们互相解密。从数学角度,私钥和公钥并没什么区别。只选选择公开的叫公钥。选择保留的是私钥。所以公钥加密私钥解,私钥加密公钥解没有本质区别。
公钥加密,私钥解密。
私钥数字签名,公钥验证。
一种改进方式
参考
由于非对称加密十分慢,所以可以进行改进:当客户端拿到服务器端的公钥后,生成一个对称秘钥,这样后面就能使用这个对称秘钥进行通信。当然前提是客户端和服务器端这个这两个秘钥在存储中不能丢失。