上期讲了ssl握手流程与非对称加密,这期继续上期的话题讲一下对称加密以及模式。
1.什么是对称加密?
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。
它的优点:
1.安全强度高
2.计算量小
3.加解密速度快效率高
如图:
从图中我们可以看到,在相同安全强度的情况下,对称加密80位长度 = RSA加密1024位长度 = EC椭圆曲
线算法加密160位长度。秘钥长度越长计算量越大体积也越大。由此可见在性能方面对称加密是性能最优的。
所以这也是为什么在建立连接之后我们更倾向于使用对称加密的方式进行数据加密的原因。
2.对称加密模式
对称加密主要是有6种常见的模式:
1.ECB模式 电子密码本模式
2.CBC模式 密文分组链接模式
3.CFB模式 密文反馈模式
4.OFB模式 输出反馈模式
5.CTR模式 计数器模式
6.AEAD模式 关联数据的认证加密模式
这里我们不讨论算法也不讨论实现方式。
拿出3个重点 ECB CBC AEAD
如图:(来自维基百科)
将一个明文信息 拆分成若干个小块,然后分别进行加密。然后并行传输。对端在分别对块进行解密后拼装
成一个完整的信息。
优点显而易见 通俗易懂,简单方便,速度快
缺点也显而易见 可以对密文块替换删除添加从而篡改明文块的相关数据,同样的明文块会被加密成相同的
密文块这样不能很好的隐藏数据模式也无法抵御重放攻击。
那怎么办呢? CBC模式登场
在CBC模式中,每个明文块先与前一个密文块进行异或运算后再进行加密。在这种方法中,每个密文块都依赖于它
前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。
这样看上去是不是比ECB模式更好呢?但是这样就不能并行计算效率大打折扣。而且也并没有很安全。为什么?
在这种模式下需要在加载前确保每个块的长度都是总长度的整数倍。一般情况下,明文的最后一个块很有可能会
出现长度不足总长度的现象。这个时候,普遍的做法是在最后一个分组后填充一个固定的值。而攻击者可以根据
这个原理进行相应的填充攻击。想了解具体内容可以阅读LittleHann大神的文章
那怎么办?
或许可以尝试下AEAD(认证加密方法)
它同时对数据提供机密性,完整性和真实性保证。
AEAD 3种方式(来自维基百科):
Encrypt-then-MAC(EtM)
明文首先被加密,然后基于生成的密文生成MAC。密文和MAC一起发送。
Encrypt-and-MAC(E&M)
基于明文生成MAC,明文加密,无MAC。明文的MAC和密文一起发送。
MAC-then-Encrypt(MtE)
基于明文生成MAC,然后明文和MAC一起被加密以产生基于两者的密文。发送密文(包含加密MAC)
注: MAC(消息摘要算法用于数据完整性校验)
AEAD是目前相对于其他模式而言比较好的选择。