Как стать автором
Обновить

Тестирование скорости алгоритмов шифрования в PHP

Время на прочтение2 мин
Количество просмотров11K
Долгое время в своих проектах в случае необходимости шифрования, практически автоматически, выбирал AES (он же Rijndael), входящий в библиотеку Mcrypt.

Но на днях в процессе работы над скриптом бэкапа (в котором очень большое внимание уделяется скорости выполнения), решил протестировать, какой алгоритм самый быстрый.


Конкурс AES (Advanced Encryption Standard)


Так как естественно стойкость шифрования также очень важна, то основное внимание при тестировании уделялось алгоритмам финалистам конкурса AES. Если кто не в курсе, это был конкурс, который проводил Национальный институт стандартов и технологий (США), для выбора нового криптографического стандарта (которым шифруются, в том числе секретные документы вплоть до уровня TOP SECRET).

Финалистами конкурса AES стали 5 алгоритмов:
  • Rijndael (который в итоге и был выбран в качестве стандарта AES)
  • Serpent
  • Twofish
  • RC6
  • MARS
В библиотеке Mcrypt реализованы первые 3 алгоритма. Во всех этих алгоритмах пока не найдены уязвимости. Так что в плане криптостойкости их можно считать эквивалентными, а если нет разницы — зачем платить больше. В данном случае платой является процессорное время.

Тестирование


Для тестирования был написан простенький скрипт, который генерит набор данных и шифрует их разными алгоритмами. Тестирование проводилось на 3 серверах:
  1. VPS (Linux, PHP 5.2.17)
  2. Dedic (FreeBSD, PHP 5.2.14)
  3. Local (Win 7, PHP 5.3.6)
Результаты будут представлены в относительных величинах. При тестировании был выбран режим MCRYPT_CBC, как наиболее подходящий для шифрования файлов. На всех серверах использовался Mcrypt 2.5.8.

Тестирование проводилось по 9 раз, 3 лучших результата усреднялись. Размер данных выбирался в зависимости от сервера, чтобы самый быстрый алгоритм выполнялся не менее секунды.

Результаты


Для начала посмотрим, как выглядят результаты всех доступных алгоритмов на выделенном сервере. График построен относительно результата лучшего алгоритма.

Как видим, финалисты конкурса AES выглядят очень неплохо в плане скорости. И имеем безоговорочного лидера — Twofish. Также обратите внимание на алгоритм DES — это бывший стандарт, которому и искали замену. На остальных серверах результаты были схожи, единственное на VPS сервере почему-то cast-128 вырвался в лидеры и был быстрее на 7%, чем Twofish.

Далее для большей наглядности сравним отдельно наших финалистов AES, на разных серверах.

Вывод вполне очевиден, Twofish — победитель сегодняшнего тестирования, причем с существенным отрывом от преследователей. Почти двухкратное преимущество даже на локальном сервере, а на более загруженном сервере разница только увеличивается до 2,6 раз. Естественно речь идет именно о реализации данных алгоритмов в PHP, и вполне возможно, что в других библиотеках, соотношение сил может быть другим (особенно тех, которые поддерживают новый набор инструкций для AES в процессорах Intel).

Для желающих провести тест самостоятельно, выложил немного упрощенный скрипт для тестирования.
Теги:
Хабы:
Всего голосов 45: ↑33 и ↓12+21
Комментарии33

Публикации

Истории

Работа

PHP программист
204 вакансии

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн