非对称、Https
非对称加密:用公钥对数据进行加密,用私钥对数据进行解密

非对称加密用到的复杂的数学技巧,在古典密码学中没有对应的原型,和对称加密不同
为什么要非对称加密?
对称加密有一个缺陷:双方需要商量出一个密钥,从没有加密通信到建立加密通信,必须要商量出一个密钥,商量就会传输,传输(在一个不可靠的网络环境下)就可能泄露
在非对称加密中,通信双方生成各自的加密密钥、解密密钥对,只把加密密钥传输给另一方,网络中间人截取也只能截取到加密密钥,截取不到解密密钥,避免了密钥在传输过程中泄露最终导致破解的问题

但上面这样不防止中间人拦截加密密钥,造成中间人攻击。
解决办法就是在非对称加密通信的过程中,通信者不仅要对所发送的数据进行加密,还要进行 签名,加密的作用是防偷窥,签名的作用是防伪造
数字签名
非对称加密是传的加密密钥,数字签名是私钥(解密密钥)做签名。
别人拿着我的公钥对密文再次做非对称加密计算,就能把数据还原,从而就验证了签名的真伪。如果解密成功,就确认了数据来源,因为公钥只能解它成对私钥加密的数据,所以签名的用途是确认数据来源,验证数据没有被第三方伪造。为了确认解密成功,发送方会把原文附上,解密方如果解密出的数据与原文相同,则确认解密成功,确认发送方。附原文省去了解密方核对解密数据是否合法的过程,也支持了发送非文本格式的其他文件,如图片、音频等等。


Https
Client Hello
Server Hello
然后服务器把自己证书发给客户端,
证书:公钥 + 一些身份信息 + 签名 的文件/ 数据结构,具体包括:
-
这个公钥属于谁(域名或组织);
-
谁签发的这个证书(CA);
-
证书有效期;
-
签名(保证公钥没有被篡改);
- CA 的公钥;
签名是 CA 签的,目的就是防止公钥被篡改
浏览器拿到证书之后怎么验证数据没有被篡改:浏览器要根据证书里声明的签名算法(具体的hash算法和非对称加密算法)来先对证书内容做 hash,然后再对证书里的签名做非对称加密拿到签名还原出来的 hash,然后对比两个 hash。CA 的公钥是随着服务器证书一起发过来的,所以这个 CA 的公钥也有可能被伪造,怎么办呢?要再有另外的机构给 CA 的公钥签名,并把签名发过去,这会形成一条签名链,这个链的头就是根证书机构。
浙公网安备 33010602011771号