mcrypt_generic_init: значение параметра iv - PullRequest
1 голос
/ 02 мая 2011

Я рассматриваю часть кода с использованием библиотеки 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 игнорируется в ЕЦБ. IV ДОЛЖНЫ существовать в режимах CFB, CBC, STREAM, nOFB и OFB. Он должен быть случайным и уникальным (но не секретным). Тот же IV должен использоваться для шифрования / дешифрования. Если вы не хотите использовать его, вы должны установить его в нули, но это не рекомендуется.

Мои вопросы:

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

1 Ответ

0 голосов
/ 02 мая 2011

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

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

...