Я использую собственное шифрование CI и нуждаюсь в подтверждении длины ключа, используемого AES-256 с CBC. Я использую как 32 байта, так и 64 байта, и все работает. Как насчет использования 128-байтового (1024-битного) ключа?
Какая длина ключа возможна в шифровании Codeigniter?
Ответы (2)
AES имеет фиксированный размер блока 128 бит и поддерживает размеры ключей 128, 192 и 256 бит. Он не поддерживает размер ключа 512 бит (64 байта). Rijndael, на котором основан AES, поддерживает блоки размером 128, 192 и 256 бит с теми же размерами ключей, что и AES.
Если вы используете system/libraries/Encrypt.php, то вы используете Rijndael-256 (по умолчанию; не AES, поскольку размер блока (256) отличается) с размером ключа 256 бит. Каждый «ключ», который вы передаете, будет хеширован с помощью MD5, который на самом деле имеет размер всего 128 бит, но он закодирован в шестнадцатеричном формате и поэтому без необходимости увеличивается до 256 бит без дополнительной безопасности. Излишне говорить, что это довольно старое и никогда не должно использоваться больше.
Если вы используете system/libraries/Encryption.php, то вы используете AES-128 (здесь 128 фактически означает размер ключа) с аутентификацией. Ключ, который вы передаете, используется как для шифрования, так и для аутентификации. Ключ шифрования получается из ключа, переданного через HKDF с помощью HMAC-SHA512, поэтому он будет эффективно хэшироваться, а затем ограничиваться 128 битами. Вам все равно нужно будет передать как минимум 16-байтовые ключи, чтобы иметь 128-битную безопасность.
Хотя в обоих случаях ключ хэшируется для получения соответствующего размера (на самом деле он больше, но базовые драйверы берут только первый байт, который им нужен), не пытайтесь передавать пароли, потому что они имеют гораздо меньшую энтропию, чем реальные случайные сгенерированные ключи размером не менее 16 байт.
Как насчет использования 128-байтового (1024-битного) ключа?
Это не даст вам большей безопасности, потому что фактический ключ шифрования, полученный из ключа, который вы передаете, на самом деле имеет длину всего 256 бит.
openssl_encrypt
, и он фактически будет использовать AES-128, если был запрошен aes-128, который является значением по умолчанию (неизменяемым) для второго класса CI.
- person Artjom B.; 24.11.2015
При использовании 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/en/4/