Я рассматриваю часть кода с использованием библиотеки 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»?