Внедряване на 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 ключове или чрез криптиране с парола или друг ключ. Също така е възможно ключът да е извлечен от друг ключ, парола или алгоритъм за съгласуване на ключове (като Diffie-Hellman). Създаването, съхранението и унищожаването на ключове се нарича управление на ключове и е тема на цели книги - не може да бъде описано само с един параграф или отговор.

Ако не съхраните новогенериран произволен ключ, тогава да, губите данните, които сте шифровали с него.

person Maarten Bodewes    schedule 05.11.2014
comment
Нещо липсва в отговора ми? - person Maarten Bodewes; 26.11.2014