Я использую собственное шифрование CI и нуждаюсь в подтверждении длины ключа, используемой AES-256 с CBC. Я использую как 32 байта, так и 64 байта, и все работает. Как использовать 128-байтный (1024 бит) ключ?Какая длина ключа возможна при шифровании Codeigniter?
ответ
AES имеет фиксированный размер блока 128 бит и поддерживает основные размеры 128, 192 и 256 бит. Он не поддерживает ключевые размеры 512 бит (64 байт). Rijndael, основанный на AES, поддерживает размеры блоков 128, 192 и 256 бит с теми же размерами ключа, что и AES.
Если вы используете system/libraries/Encrypt.php, то вы используете Rijndael-256 (по умолчанию; не AES, так как размер блока (256) отличается) с размером ключа 256 бит. Каждый «ключ», который вы передаете, будет хэширован с MD5, который на самом деле имеет только 128 бит, но он кодируется по Hex и поэтому бесполезно раздувается до 256 бит без дополнительной безопасности. Излишне говорить, что это довольно старый и больше никогда не должен использоваться.
Если вы используете system/libraries/Encryption.php, то вы используете AES-128 (здесь 128 фактически означает размер ключа) с аутентификацией. Ключ, который вы передаете, используется для шифрования и аутентификации. Ключ шифрования выводится из переданного ключа через HKDF с HMAC-SHA512, поэтому он будет эффективно хэшироваться, а затем зажиматься до 128 бит. Вам все равно нужно передать не менее 16 байтовых ключей, чтобы иметь 128-битную безопасность.
Хотя в обоих случаях ключ хэшируется, чтобы получить соответствующий размер (он на самом деле больше, но базовые драйверы берут только первый байт, который им нужен), не пытайтесь передавать пароли, потому что у них гораздо меньше энтропии, чем реальные случайно сгенерированные ключи не менее 16 байт.
Как насчет использования 128 байтов (1024 бит) ключа?
Это не даст вам дополнительной безопасности, поскольку фактический ключ шифрования, полученный от ключа, который вы передаете, на самом деле всего лишь 256 бит.
, поэтому он не используется, если я пытаюсь использовать hkdf с sha512, которые производят ключи с 64 байтами? –
Точно, использование ключей размером более 16 байт не даст вам дополнительной безопасности. Я проверил, как работает 'openssl_encrypt', и фактически будет использовать AES-128, если был запрошен« aes-128 », который по умолчанию (неизменный) для второго класса CI. –
Когда вы используете 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
, так что использование 512-битной длины ключа или больше не проблема? –
нет. Перейдите по ссылке. У этого есть дополнительные идеи об этом –
ok, так что максимальная длина ключа 512 бит. И не используйте SHA для создания более крупного ключа, я использую собственный генератор чата php-ci. –
Возможный дубликат [Как выбрать режим шифрования AES (CBC ECB CTR OCB CFB)?] (Http://stackoverflow.com/questions/1220751/how-to-choose-an-aes-encryption-mode- cbc-ecb-ctr-ocb-cfb) –