Какая длина ключа возможна в шифровании Codeigniter?

Я использую собственное шифрование CI и нуждаюсь в подтверждении длины ключа, используемого AES-256 с CBC. Я использую как 32 байта, так и 64 байта, и все работает. Как насчет использования 128-байтового (1024-битного) ключа?


person Surya Tanamas    schedule 24.11.2015    source источник
comment
Возможный дубликат Как выбрать AES режим шифрования (CBC ECB CTR OCB CFB)?   -  person Surya Tanamas    schedule 08.02.2017


Ответы (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 бит.

person Artjom B.    schedule 24.11.2015
comment
поэтому он не используется, если я пытаюсь использовать hkdf с sha512, который создает 64-байтовые ключи ?? - person Surya Tanamas; 24.11.2015
comment
Именно, использование ключей размером более 16 байт не даст вам никакой дополнительной безопасности. Я проверил, как ведет себя 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/

person Abdulla Nilam    schedule 24.11.2015
comment
поэтому использование ключа длиной 512 бит или больше не является проблемой ?? - person Surya Tanamas; 24.11.2015
comment
нет. Пройдите по ссылке. У него есть дополнительные идеи по этому поводу - person Abdulla Nilam; 24.11.2015
comment
хорошо, поэтому использование 512-битной длины ключа является максимальной. И не используйте SHA для создания большего ключа, я использую собственный генератор случайных чатов php-ci. - person Surya Tanamas; 24.11.2015
comment
Я действительно не уверен, как это отвечает на вопрос - person Artjom B.; 24.11.2015