mcrypt_generic_init: значение параметра iv

#php #encryption #mcrypt #blowfish

#php #шифрование #mcrypt #blowfish

Вопрос:

Я просматриваю часть кода с использованием библиотеки php mcrypt для шифрования некоторых двоичных данных с использованием шифра Blowfish. По сути, он создает дескриптор blowfish в MCRYPT_MODE_CBC режиме, а затем вызывает mcrypt_generic_init функцию с iv параметром, всегда равным ‘12345678’.

Упрощенное извлечение кода:

 $cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, '12345678');
  

В документации для функции mcrypt-generic-init указано следующее:

Обычно IV должен иметь размер блока алгоритмов, но вы должны получить размер, вызвав mcrypt_enc_get_iv_size(). IV игнорируется в ECB. IV ДОЛЖЕН существовать в режимах CFB, CBC, STREAM, nOFB и OFB. Он должен быть случайным и уникальным (но не секретным).Тот же IV должен использоваться для шифрования / дешифрования. Если вы не хотите его использовать, вам следует установить для него нули, но это не рекомендуется.

Мои вопросы:

Для чего используется этот параметр? Является ли использование такого значения iv параметра недостатком? Я не уверен, потому что сказано, что это не обязательно должно быть секретным, поэтому злоумышленник может получить его каким-либо образом. Если это не слабое место и такое значение этого параметра совершенно нормально, то почему не рекомендуется устанавливать для него нули? Было бы значительно лучше жестко закодировать некоторую псевдослучайную строку вместо ‘12345678’?

Ответ №1:

Это вектор инициализации:

http://en.wikipedia.org/wiki/Initialization_vector