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

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

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

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

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


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

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

0

Решение

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

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

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

0

Другие решения

Других решений пока нет …