AES CFB/OFB/ECB/CBC/CTR

AES常见加密模式有CFB/OFB/ECB/CBC/CTR,本文概述这些算法特点,让大家更快的了解AES,当然天缘也不是专业做算法的,工作中也只是使用到才会学习一点,如有错误,欢迎指出。

一、Cipher feedback(CFB)

CFB算法优点:

同明文不同密文,分组密钥转换为流密码。

CFB算法缺点:

串行运算不利并行,传输错误可能导致后续传输块错误。

二、Output feedback(OFB)

OFB算法优点:

同明文不同密文,分组密钥转换为流密码。

OFB算法缺点:

串行运算不利并行,传输错误可能导致后续传输块错误。

三、Electronic codebook(ECB)

ECB算法优点:

简单、孤立,每个块单独运算。适合并行运算。传输错误一般只影响当前块。

ECB算法缺点:

同明文输出同密文,可能导致明文攻击。

四、Cipher-block chaining(CBC)

CBC算法优点:

串行化运算,相同明文不同密文

CBC算法缺点:

需要初始向量,不过这其实不算缺点,下文的CTR也是需要随机数的。如果出现传输错误,那么后续结果解密后可能全部错误。

此外,还有Propagating cipher-block chaining(PCBC)加密模式,

五、Counter mode(CTR)

CTR算法优点:

无填充,同明文不同密文,每个块单独运算,适合并行运算。

CTR算法缺点:

可能导致明文攻击。

补充:

关于Padding补位问题,上文加密模式中,比如CBC等对输入块是有要求的,必须是块的整数倍,对不是整块的数据,要求进行填充,填充的方法有很多种,常见的有PKCS5和PKCS7、ISO10126等。

例如按照16字节分组的话:

  • 对不足16字节部分(假设差n个满16字节),填充n个字节(n范围(1,15]),且每字节值均为n。
  • 对正好16字节部分,则填充一个block,也就是补16个字节,每字节值为16

参考1:PKCS #7: Cryptographic Message Syntax

参考2:PKCS #5: Password-Based Cryptography Specification

所以上述算法中,默认:

需要Padding的有:CBC(,PCBC也需要,本文未涉及该加密模式)、ECB。

不需要Padding的有:CFB、OFB、CTR。

参考资料:

http://zh.wikipedia.org/wiki/块密码的工作模式

此条目发表在technologys分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。