PHP: Mcrypt – какой режим?

Я тестировал различные режимы, доступные в функции mcrypt PHP. ECB – это режим, используемый в большинстве учебных пособий, но не рекомендуется как с помощью только связанной страницы, так и с некоторыми пользователями , поэтому я считаю, что либо CBC, либо CFB должны делать трюк.

Документация PHP не слишком толстая в сравнении разных режимов, доступных для mcrypt и вместо этого ссылается на книгу «Прикладная криптография от Schneier» , которую я не слишком хочу купить на данный момент.

Итак, какой из mcrypt -mode я хочу использовать и почему?

mcrypt фактически реализует больше режимов, чем указано , вы можете использовать имена строк для доступа к ним:

  • cbc – режим CBC
  • cfb – 8-битный режим CFB ;
  • ncfb – режим CFB с блочным размером;
  • nofb – режим OFB (не из ofb );
  • ctr – режим CTR .

Режимы отличаются деталями реализации, поэтому их соответствие зависит от ваших данных и окружающей среды.

Прокладка :

  • Режим CBC только шифрует полные блоки, поэтому mcrypt ваш открытый текст нулевыми байтами, если вы не реализуете свое собственное дополнение.

  • Режимы CFB , OFB и CTR шифруют сообщения любой длины.

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

  • Режимы CBC и CFB требуют случайного IV (не используйте MCRYPT_RAND ).

  • Для режима OFB требуется только уникальный IV (например, глобальный счетчик, возможно, первичный ключ базы данных, если строки никогда не изменяются или не удаляются).

  • CTR требует, чтобы каждый счетный блок был уникальным (а не только IV сообщения, которое является первым блоком счетчика, а остальное, сформированное путем увеличения блока счетчика на 1 для каждого блока сообщения).

Дополнительная информация содержится в рекомендациях NIST .

Существуют различия в производительности, которые должны быть неважными в PHP, например, можно ли распараллелить шифрование или дешифрование и сколько итераций шифрования используется на каждый блок (обычно один, но 16 в 8-битном режиме CFB ).

Существуют различия в ковкости, которые должны быть несущественными, поскольку вы будете применять MAC .

И могут быть различия в их безопасности, но для этого вы должны проконсультироваться с криптографом .