Я тестировал различные режимы, доступные в функции 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 .
И могут быть различия в их безопасности, но для этого вы должны проконсультироваться с криптографом .