#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:
Это вектор инициализации: