Реализация rijndael и случайного ключа шифрования в PHP

Я просматривал документацию mcrypt, и один из примеров был следующим:

$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");

$key_size =  strlen($key);
echo "Key size: " . $key_size . "\n";

Учитывая, что я должен использовать 16-, 24- или 32-байтовые ключи для AES-128, 192 и 256 соответственно, является ли хорошей практикой использование 32-байтового ключа для 128-битного шифрования? Если нет, то почему?


Второй вопрос связан с использованием случайного ключа каждый раз. Возможно ли, чтобы что-то подобное действительно сработало, поскольку впоследствии я не знал, какой ключ использовался для шифрования строки, что делало ее невозможной для расшифровки?

Я просто хочу сделать его безопасным и не совсем уверен, является ли случайный подход возможным подходом.


person dwvaxaz    schedule 05.11.2014    source источник
comment
Это мой пример кода :)   -  person Maarten Bodewes    schedule 05.11.2014


Ответы (1)


Обычно, когда говорят о 128-битном шифровании, 128-битный это размер ключа. Поскольку 32-байтовый ключ является 256-битным ключом, его невозможно использовать для 128-битного шифрования. Так что это не хорошая/плохая практика, это невозможно. Обратите внимание, что 128 в MCRYPT_RIJNDAEL_128 обозначает размер блока, а не размер ключа. Указание MCRYPT_RIJNDAEL_128 идентично простому указанию AES (с любым размером ключа).

Ключи должны быть неотличимы от случайных, поэтому, безусловно, хорошей идеей будет генерировать ключи случайным образом. Конечно, если вы это сделаете, вы должны сохранить ключ. Ключи могут храниться на смарт-картах, на USB-накопителях или путем шифрования с помощью пароля или другого ключа. Также возможно, что ключ получен из другого ключа, пароля или алгоритма согласования ключей (например, Диффи-Хеллмана). Создание, хранение и уничтожение ключей называется управлением ключами и является темой целых книг — это невозможно описать в одном абзаце или ответе.

Если вы не сохраните вновь сгенерированный случайный ключ, то да, вы потеряете зашифрованные с его помощью данные.

person Maarten Bodewes    schedule 05.11.2014
comment
Чего-то не хватает в моем ответе? - person Maarten Bodewes; 26.11.2014