很多的密码算法都是公开的,所以密钥的复杂度决定了密文的安全性。而一个足够复杂的密钥作为通信最关键的部分,需要解决在传输的过程中被截获的问题。
密码、明文、密文
密码:是一种用于加密或者解密的算法。
明文:加密之前的原始数据
密文:明文通过密码
运算后得到的结果成为密文。
密钥
一个使用密码算法过程中输入的参数,同一个明文在相同的密码算法下用不同的密钥计算会产生不同的密文。
明文 + 密钥 + 密码算法 = 密文
- 对称密钥
对称密钥在加密和解密的过程中使用的密钥是相同的。
缺点是这个密钥创建后需要共享给另一方,这个共享的过程本身就是不安全的,一旦被截获,拿到这个密钥的第三方就能看所有往来的数据了。 - 非对称密钥
非对称密钥拥有一对密钥:私钥和公钥,其中一个密钥加密后,另一个密钥可以解密。
在创建非对称密钥后,私钥只由自己存储(保证绝对的安全),公钥散播给另一方,另一方的明文通过公钥加密后发送回来,用私钥解密可以看到明文。只要私钥不泄露,截获数据的人无法解析数据。
中间者问题
非对称密钥看起来似乎解决了安全传输数据的问题,但是如果在服务端和浏览器之间有一个中间者(数据被截取),中间者也创建了一份非对称密钥,在截获服务端发送给浏览器的公钥后,把服务端的公钥替换成中间者自己的公钥转发给浏览器,浏览器收到数据以为拿到的是服务端的公钥,使用公钥加密数据发送给服务端的过程中,中间者就能用私钥解密出里面的数据了。
数字签名和数字证书
CA:证书颁发机构(Certificate Authority),颁发数字签名的实体,作为收信任的第三方,受证书的拥有者和依赖证书的一方信任。
数字证书:一个经 CA 数字签名的包含公钥拥有者信息以及公钥的文件。最简单的证书包含一个公钥、名称以及 CA 的数字签名。(CA = Certificate Authority)
数字签名:一个经CA私钥加密的摘要文件
摘要文件:经过hash处理后的包含公钥拥有者信息以及公钥的文件
hash处理:两个文件,即便只有一处不同,也将会生成完全不一样的hash,不可逆处理