aes-128-cbc和aes-128加密有什么区别吗?

23

我想知道这两种加密方法有什么区别?我以前从未使用过这些。我的客户要求我使用AES-128加密,但当我在谷歌上搜索它时,显示出“aes-128-cbc”,“aes-128-ctr”,“aes-256-cbc”或“aes-256-ctr”,所以我想知道我应该使用哪一个才能像AES-128一样?

参考链接:这是我必须发送加密方法的地方


1
"aes-128"并没有指定模式,但是"aes-128-*"密码套件有。不清楚"aes-128"默认使用哪种模式,因此您应该首先找出它的默认模式。 - Artjom B.
4个回答

48

3件事:

  • AES:高级加密标准。这是加密算法的名称(对称加密)。其他对称加密算法包括:DES、3-DES等。
  • 128:这可能是指密钥长度。AES加密使用3个密钥大小(128位、192位和256位)。AES中块大小也是128位。
  • CBC:这是您想要的加密模式。有许多加密模式,这取决于您希望算法工作的速度、并行性和安全级别。一些模式包括CBC(密码块链接)、ECB(电子密码本)、CFB(密码反馈)、CTR(计数器)等。

现在,您的客户要求您使用AES-128加密。因此,您应该使用密钥大小为128位的AES加密。您可以使用任何加密模式,这是您自己的选择。我更喜欢CBC。


6
强烈考虑从CBC转换到CTR+HMAC。 - Scott Arciszewski
1
@ScottArciszewski,HMAC是一种使用哈希比较的消息认证方案。这可以始终与执行的任何加密一起完成。我认为我仍然更喜欢CBC + HMAC(Sha-1/2)而不是CTR(+ HMAC),并且还要加入一些盐。 - vish4071
3
两种加密方式的安全保障其实是可以互换的。CTR 模式的优势在于避免了填充操作,因为它将 AES 转换成了流密码,并使用密钥流对明文进行异或处理。Defuse 的加密库 2.0 使用的是实际上相当于一个 256 位的 nonce(128 位 nonce 和一个 128 位的 HKDF 盐,因此即使 nonce 发生碰撞,该消息的密钥对也不会)。当然前提是我的 PR 被合并了。这意味着,在 2^128 条消息后,生日碰撞的概率为 50%。 - Scott Arciszewski
没有MAC的CBC毫无价值。 - Antti Haapala -- Слава Україні

22

关于 CBC 和 ECB 的区别,简要说明一下。当使用 ECB 进行加密时,每 128 位数据(根据块大小而定)都将使用同一密钥进行加密。如果明文中存在任何模式,那么生成的加密文本也将是可预测的,无论加密算法有多好。

ECB:

Plain text: aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa
            ---------------- ---------------- ----------------
Encrypted:  bdefjakjapqeiowp bdefjakjapqeiowp bdefjakjapqeiowp
如果您使用CBC加密模式,第一个块将与IV(初始化向量)进行XOR运算,并使用密钥进行加密,第二个块将与第一个块进行XOR运算,然后使用密钥进行加密,第三个块将与第二个块进行XOR运算。生成的密码文本对频率分析的易受性更小。 CBC Encryption mode

此图片来自于维基共享资源,自由的媒体库

缺点是无法并行加密/解密,因为需要前一块的结果,所以可能会慢一些。但实际上,这没有真正的区别。

2
示例的标题有错误吗?我想应该是ECB。 - klappvisor

4
看到你提供的链接,它说它将接受许多不同的模式,包括CBC。除非你有特定的理由不使用它,否则请使用AES-128-CBC。CBC模式是一个很好的通用模式。为了使CBC模式正常工作,您还需要了解填充的使用(使用PKCS#5或PKCS#7,无论您的系统允许哪一个)和初始化向量IV。
不要使用ECB模式,因为它不安全并泄漏信息。

1
不要使用ECB模式,因为它是不安全的并且会泄漏信息。为了强调引用。https://filippo.io/the-ecb-penguin/ - Scott Arciszewski
...并验证消息的真实性。 - Antti Haapala -- Слава Україні

1
这里有和。aes代表高级加密服务,128是比特率,CBC是加密模式。
然而,这仅在OPEN SSL格式中使用和引用。在Open SSL之前,PHP使用的是mcrypt_encrypt,它没有被正确设计(旧版本的PHP)。 在使用mcrypt时,也可以被称为rijndael。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接