我们知道 HTTPS的安全性是由TLS保证的;
并且通信过程中具备【机密性】、【完整心】、【身份认证】、【不可否认】这四个特性就是安全的;
要搞定机密性的手段就是【加密】
今天我们说的对称加密与非对称加密就是描述【机密性】这一特性;
几个概念
加密的手段就是把消息通过某种方式换成谁也看不懂的信息,只有通过固定的钥匙才能解密出原始的消息;
明文
加密前的消息叫做明文
密文
加密后的消息称为密文
解密
通过密钥解出原始的消息叫做解密
加密算法
加密解密的操作过程称为加密算法
密钥
固定的钥匙就是密钥;
密钥是一长串的数字,单位时【位(bit)】;
按照密钥的使用方式,加密可以分为【对称加密】和【非对称加密】
对称加密
所谓的对称加密就是加密和解密过程所需要的密钥是同一个;
只要保证了密钥的安全性就是保证了通信过程中具有机密性了;
TLS中常用的对称加密算法
AES
AES目前非常流行,应用最广泛的对称加密,是【高级加密标准】,密钥长度可以是 128、192、256;
安全强度高、性能好;有些硬件也做过对其的特殊优化;
ChaCha20
是Google设计的,密钥固定长度为256位;在软件上运行的性能要超过AES,曾在客户端上比较流行;
后来ARMV8之后也加入了AES的硬件优化,现在优势和AES比不是很大了;
对称加密的分组模式
所谓的分组模式就是让算法用固定长度的密钥加密任意长度的明文;
最新的分组模式称为AEAD。加密的同时增加了认证的功能;常用有【GCM】、【CCM】和【Poly1305】
Example
- AES128-GCM:密钥长度为128为的AES算法,使用的分组模式是GCM
- ChaCha20-Poly1305:使用ChaCha20算法,分组模式Poly1305;
非对称加密
对称加密有一个很大的问题,就是如何把密钥安全的传给对方呢?因为第一次从机密性角度来说,密钥的交换就是裸着呢;也容易出现鸡生蛋、蛋生鸡的问题;
这时候非对称加密就派上用场了,非对称加密也称为公钥加密算法
两个密钥
非对称加密中有两个密钥,【公钥】、【私钥】;
这两个密钥是不同的,不对称的;
公钥
公钥是公开给任何人使用的;
公钥加密的数据只能由私钥能解
密钥
密钥是保密的;
私钥加密的数据只能由共钥能解;
解决问题
非对称加密能解决密钥传递的问题,我们访问的网站私钥是秘密保管的,对外公开公钥;这样就算消息被黑客截取到了,那么没有私钥也解不出消息报文;
TLS中的非对称算法
DH、DSA、RSA、ECC
RSA是TLS中非对称加密的扛把子,本身非对称算法就比对称算法要复杂,RSA安全性是基于【整数分解】;随着计算机算力的提高,RSA的长度也由1024增长到至少2048位;
ECC属于非对称加密的后起之秀,反正挺厉害的,都和数学和密码学相关的;
混合加密
综合上述所讲,是不是就可以认为使用非对称加密替代加密算法了呢?
肯定不是,因为非对称加密都是基础复杂的数学难题,运行速度上很慢,性能不是很给力;
仅仅使用非对称加密虽然解决了安全,但是速度不行;
描述
其实对称加密的问题就是出现在首次密钥交换的工程是不安全,我们可以使用非对称加密在首次通信时讲对称的密钥进行传递,之后真正进行消息传递时使用对称加密,这个混合加密即解决了首次密钥安全的问题也解决了通信过程加解密的性能问题;