Как может работать эта функция шифрования/дешифрования?

Это продолжение этого вопроса.

шифрование/дешифрование PHP AES

Меня интересовал IV. Как я вижу, случайный IV создается для расшифровки и шифрования отдельно. И он не передается вместе с данными для расшифровки.

Если я не ошибаюсь, IV вполне может быть общедоступным и передаваться вместе с зашифрованными данными. Однако он должен быть случайным и не использоваться постоянно (например, с набором нулей).

Но для успешного дешифрования должен использоваться тот же IV, который использовался для шифрования.

Как функция расшифровки может работать правильно при создании нового случайного IV?

И это работает, я проверял...


person The Surrican    schedule 20.10.2013    source источник
comment
ECB не выполняет цепочку между блоками - IV просто игнорируется для ECB.   -  person naththedeveloper    schedule 20.10.2013


Ответы (1)


Режим, используемый в этом вопросе (MCRYPT_MODE_ECB), игнорирует переданный IV (как указано в этот вопрос).

«ECB не выполняет цепочку между блоками, поэтому нет возможности использовать IV. mcrypt использует один и тот же APi для всех модулей. IV просто игнорируется для ECB, потому что модуль ECB имеет следующую функцию, определенную как int _has_iv() { return 0; }

Из MSDN:

Важно! Использовать этот режим не рекомендуется, поскольку он открывает двери для многочисленных уязвимостей системы безопасности. Если открытый текст, подлежащий шифрованию, содержит значительное количество повторений, зашифрованный текст может быть взломан по одному блоку за раз. Также можно использовать блочный анализ для определения ключа шифрования. Также активный противник может подменять и обменивать отдельные блоки без обнаружения, что позволяет сохранять блоки и вставлять их в поток в других точках без обнаружения.

person naththedeveloper    schedule 21.10.2013