0

我正在使用 CI 自己的加密,需要确认 AES-256 与 CBC 使用的密钥长度。我同时使用 32 字节和 64 字节,一切正常。使用 128 字节(1024 位)密钥怎么样?

4

2 回答 2

1

AES 具有 128 位的固定块大小,并支持 128、192 和 256 位的密钥大小。它不支持 512 位(64 字节)的密钥大小。AES 所基于的 Rijndael 支持 128、192 和 256 位的块大小,其密钥大小与 AES 相同。

如果您使用的是system/libraries/Encrypt.php,那么您使用的是 Rijndael-256(默认值;不是AES,因为块大小 (256) 不同),密钥大小为 256 位。您传入的每个“密钥”都将使用 MD5 进行散列,实际上只有 128 位大小,但它是十六进制编码的,因此在没有额外安全性的情况下不必要地膨胀到 256 位。不用说,这是相当古老的,不应该再使用了

如果您使用的是system/libraries/Encryption.php,那么您使用的是 AES-128(这里 128 实际上是指密钥大小)进行身份验证。您传入的密钥用于加密和身份验证。加密密钥是从使用 HMAC-SHA512 通过 HKDF 传递的密钥派生的,因此它将被有效地散列,然后钳制为 128 位。您仍然需要传递至少 16 个字节的密钥才能获得 128 位安全性。

尽管在这两种情况下密钥都经过哈希处理以获得适当的大小(实际上更大,但底层驱动程序只占用他们需要的第一个字节),但不要尝试传入密码,因为它们的熵比真实随机的要小得多生成的密钥至少为 16 个字节。

使用 128 字节(1024 位)密钥怎么样?

这不会给您更多的安全性,因为从您传入的密钥派生的实际加密密钥实际上只有 256 位长。

于 2015-11-24T11:51:56.360 回答
0

当您使用AES-256时。它有

Minimum of Strength - 256
Factoring Modulus - 15360
Hash (A) - SHA-512
Hash (B) - SHA-256/SHA-384/SHA-512

阅读这篇文章以及http://www.keylength.com

于 2015-11-24T04:18:48.233 回答