Это безопасно и безопасно использовать bin2hex()
на выходе openssl_random_pseudo_bytes()
а также mcrypt_create_iv()
иметь их как Hex вместо двоичных необработанных данных для использования в качестве IV, или это угроза безопасности и не рекомендуется?
Вектор инициализации (IV) имеет максимальный размер блока для большинства режимов блочного шифрования. Он используется для рандомизации шифрования, так что если вы шифруете одно и то же сообщение одним и тем же ключом, каждый раз появляется что-то новое. Это важное свойство семантической безопасности.
Если вы кодируете необработанный вывод openssl_random_pseudo_bytes()
в шестнадцатеричное значение, то вы потеряете установленную половину бит IV на известное значение (0).
Примеры:
Важное свойство IV в Режим CBC что это должно быть непредсказуемый. Если вы используете AES с размером блока 128 бит, то это приведет к IV с 64 переменными битами, что упрощает прогнозирование IV, но не обязательно легко. Увидеть этот пример.
В Режим CTR, IV должен быть уникальный и обычно называется nonce. Если IV используется повторно, то может быть возможно вывести открытые тексты оригинала и нового сообщения. Если вы используете AES, то обычно используется IV 96 бит, но ваше шестнадцатеричное кодирование уменьшит его до 48 переменных бит. Если принять во внимание парадокс дня рождения, вы, вероятно, увидите тот же IV после 224 шифрование с тем же ключом. По сути, это быстро нарушает безопасность вашей системы. Поведение для блочных шифров с меньшими размерами блоков, таких как DES, полностью нарушает безопасность даже для небольшого количества сообщений с одним и тем же ключом.
Всегда используйте полную сырую продукцию openssl_random_pseudo_bytes()
а также mcrypt_create_iv()
для капельниц или ключей. Использование меньшего количества энтропии может значительно облегчить жизнь злоумышленнику вашей системы.
Тем не менее, вы можете использовать bin2hex()
а также base64_encode()
для печати таких случайно сгенерированных байтов в целях отладки или передачи на основе текста, но не забудьте декодировать их в непечатаемые копии, прежде чем использовать их снова.
Других решений пока нет …