AES 可用于 3 种密钥大小:128、192 和 256 位密钥。基本上,如果您能够使用大于 256 位的密钥,那么该库就是在“对您撒谎”,即较大密钥的某些位以某种方式被丢弃或压缩。例如,PHPmcrypt
只是将键的大小缩减到可能的最大大小。
较大的密钥“种子”在密码学领域相当普遍。例如,Diffie-Hellman - 一种密钥协商算法 - 通常会生成一个大于所需密钥大小的秘密。因此,经常会出现提取(集中)密钥中的熵量的问题。如果位被截断,则这些位中的熵将被丢弃。
因此,现代密码学中实际使用的是 KDF,即密钥派生函数。如果输入 - 种子 - 是密码,您应该使用 PBKDF(基于密码的 KDF)。现代 PBKDF 是 PBKDF2、bcrypt、scrypt 和 Argon2。
如果输入已经是一个键——如果数据一起提供足够的熵(随机性)——你应该使用 KBKDF(基于键的 KDF)。现代的 KBKDF 是例如 HKDF。请注意,这些算法需要额外的输入,因此如果没有提供额外的数据,则很可能会简单地忽略额外的密钥位。
AES-128 的加密强度当然是 128 位。只要攻击者无法区分这些位与随机位,AES-128 就应该为实际需要提供足够的安全性。如果您担心量子密码学的突破,可以使用 AES-256。
所以对于答案:“AES 合法密钥大小真的是限制吗?” 答案是肯定的。2048 位密钥大小更常见于 RSA / DSA 等非对称算法。对于 RSA 和 DSA 而言,密钥大小实际上相当小,即使它对于实际攻击来说仍然是遥不可及的。也许密文是使用混合加密加密的。