对称密码
对称密码算法可以分为分组密码和流密码:
分组密码(block cipher)是每次只能处理特定长度的一块(block)数据的密码算法,一次能处理的数据长度成为分组长度(block length)
流密码(stream cipher)是对数据流进行连续处理的一类密码算法
分组密码模式简介
分组密码一次只能处理特定长度的数据,但是通常情况下需要加密的明文数据长度是大于分组长度的,因此就需要将明文分为若干个block进行加密,不同分组之间的加密成为迭代,不同的分组迭代加密方式就是分组密码的模式。
分组密码常用的模式有5种:
- ECB模式:Electronic CodeBook mode,电子密码本模式
- CBC模式:Cipher Block Chaining mode,密码分组连接模式
- CFB模式:Cipher FeedBack mode,密文反馈模式
- OFB模式:Output FeedBack mode,输出反馈模式
- CTR模式:Counter mode,计数器模式
模式实现
ECB模式
ECB模式按照分组长度,将明文分为若干个分组,每个分组独立加密得到密文,每个分组之间相互不影响。
加密
解密
针对ECB模式的攻击
- ECB模式每个分组独立加密,相同的明文分组,最后输出的密文是一样的,因此,通过观察密文分布情况,就能大概确定明文分布情况
- 攻击者操纵调整密文顺序,导致接收者解密后得到的明文也发生变化
CBC模式
CBC为密文分组链接模式。
加密:
每次分组加密时,首先将明文和前一个分组密文进行XOR运算,然后再进行加密得到密文。第一个分组没有可以XOR的密文分组,因此第一个分组是和IV进行XOR运算,然后再加密。解密:
解密时,从第一个密文分组到最后一个密文分组,先使用密钥解密,然后和前一个密文进行XOR运算得到明文。第一个分组是解密后和IV进行XOR。
针对CBC模式的攻击
IV比特反转:由于CBC模式第一个分组解密后,是通过与IV进行XOR操作,因此,攻击者通过反转IV中的某些比特,就可以操纵明文变化
CFB模式
CFB为密文反馈模式。
加密
加密时,将前一个密文加密后和当前分组明文进行XOR操作,得到当前分组的密文。第一个分组加密时,将IV进行加密后和第一组明文XOR解密
解密时,将前一个分组密文先加密,然后和当前分组密文进行XOR,得到明文。第一个分组解密,是将IV加密后和密文XOR
针对CFB模式的攻击
重放攻击:Alice向Bob发生消息,由4个密文分组组成,中间人Mallory将后3个密文保存下来。Alice第二次向Bob发送消息时,Mallory将保存的3个旧密文替换后发送给Bob,Bob解密时,第一个密文可以正常解密,第二个会报错,第三个和第四个会变成Mallory替换的内容。
OFB模式
OFB为输出反馈模式
加密
加密时,通过将IV加密,和第一个明文分组XOR得到第一个密文分组,对加密后的IV继续加密,和第二个明文XOR,以此类推解密
解密时,将IV加密,和第一个密文分组XOR得到第一个明文分组,继续对IV加密后的结果加密和第二个密文分组XOR,得到第二个明文,以此类推
CTR模式
CTR为计数器模式,将主词累加的计数器进行加密生成密钥流,和明文XOR得到密文。
加密
第一个分组加密时,将计数器CTR加密,和第一个明文XOR,得到第一个密文,然后将计数器CTR加一,加密后和第二个明文XOR,以此类推解密
解密时,通过将CTR加密后和密文XOR得到明文。