七、对称密码学
首先,双方已经协商好了共享秘钥,Alice使用共享秘钥对明文进行加密,加密数据在公共区域传输,Bob使用相同的共享秘钥对密文进行解密。
如果此时,有一个黑客,他能在公共网络上截取密文,因为数据已经加密了,他不能解密,但是可以改变,也就是所谓的“比特位翻转攻击”。
7.1 比特位翻转攻击
这是非常危险的,那如何保证加密数据在传输过程中,没有被改变呢?
7.2 认证的加密(AE)
第一步,Alice使用对称加密算法 AES-256-GCM或CHACHA20,对明文进行加密;
这种加密算法,需要三个输入:初始向量,共享秘钥,明文,这将产生加密信息。
第二步,认证。
加密信息,共享秘钥,初始向量三者作为输入,通过报文认证算法MAC(AES-256-GCM的认证算法是GMAC, CHACHA20的认证算法是POLY1305)。
MAC就向一个加密散列函数,它将生成一个消息认证码MAC。
MAC将和加密数据一起发送给Bob。
那Bob收到数据后,首先用同样的加密信息、共享秘钥、初始向量进行MAC运算,如果和收到的标签一致,那么说明数据未被更改。
7.2.1 带关联数据的认证加密 AEAD
在TLS1.3中,除了加密数据,我们也想认证一些关联数据,比如IP , PORT, protocol version等。
那么把这些关联数据作为输入加入到MAC算法,所以整个过程也叫做 Authenticated encryption with associated data, 简称AEAD.
Bob的解密和认证过程如下:
7.3 秘钥交换
现在有个问题:Alice和Bob如何在公共网络中分享秘钥,而不泄漏呢?
答案就是:他么需要使用非对称或公钥加密技术来实现这一目的。
具体来说,就是使用Deffie-Hellman Ephemetral, 或 Elliptic-Curve Diffie-Hellman
Ephemeral.
7.3.1 Diffie-Hellman 秘钥交换
首先,双方协商好了g 和P,当然,网络上所有人都知道这两个数字。
然后,Alice选择a作为私钥,并计算出公钥A。Bob也一样, 并且把公钥发给对方。
双方得到对方的公钥,和自身的私钥,计算出交换秘钥,而没有泄露给公众。
7.3.2 密钥推导函数 ---KDF
每种加密算法要求秘钥是不同的长度。
所以,为了生成加密秘钥,Alice和Bob必须将S通过相同的KDF生成指定长度的共享秘钥。
在TLS1.3中,我们使用一个基于HMAC的秘钥推导函数,所以叫做HKDF.(HMAC key derivation function).
7.3.3 陷阱门功能
现在,我们回到DH秘钥交换。
我们知道,攻击者是知道p,g,A,B, 那这种交换机制是安全的吗,攻击者能够通过p,g,A,B计算出秘密数据a,b,S?
幸运的是,如果选择好p,g,A,B,那么将很难破解a,b,S.
例如:
- 选择p为2048-bit的素数
- 选择a、b为256-bit的随机整数
从a计算出A只要O(log(a))的时间,那么从A计算出a就很难,这是一个离散对数问题,我们这一代的计算机需要花很长时间去解决。
到目前为止,是安全的,或者说在下一代强量子计算机出现之前是安全的。
7.3.4 静态或短暂的秘钥
如果Alice和Bob在所有会话中,都使用相同的私钥a和b,那么,虽然黑客话花费很长时间计算机出S,那么他也可以解密出他们之间所有的会话。
听起来是不是很可怕?那么,如何预防?
答案就是使用短暂的秘钥。
也即是每个会话使用不用的私钥。
这在TLS称为完美的向前保密性。
所以,Diffie-Hellman Ephemeral 意味着使用短暂的秘钥的Deffie-Hellman。
八、椭圆曲线密码学
椭圆曲线密码学Elliptic-curve cryptography 简称ECC, 是一种非对称密码学的方法,其算法类似,但是使用的是不同的陷阱门函数。
这个陷阱门函数是基于椭圆曲线的代数结构。(我也不懂)
和RSA比较的话,它需要更小的秘钥来提供同等的安全水平。
美国国家安全局NSA曾经用ECC 384-bit来保护他们的最高机密,这与RSA-7680-bit的秘钥提供相同的安全级别。