Мы хотели сравнить функцию hash_pbkdf2 в PHP, чтобы выбрать подходящее количество итераций для нашего приложения.
Когда я запустил свой скрипт тестирования на экземпляре m4.large AWS, он потребовался на пять порядков дольше, чем на моем ноутбуке.
В этом Gist показан скрипт, который я использую, и результаты, которые я получаю от экземпляра m4.large (под нагрузкой), экземпляра t2.micro (с полным кредитованием ЦП и без нагрузки) и трех разных скоростных ноутбуков Intel i7.
https://gist.github.com/roberthl/301a3fb0a32baf057806
Вы можете увидеть 100 000 итераций <200 мс на ноутбуках i7, но всего одна итерация занимает много времени на экземплярах AWS.
Я включил версии PHP и бенчмарк OpenSSL, который показывает, что sha256 занимает сравнимое количество времени как на экземплярах AWS, так и на ноутбуке i7 (и элементарный бенчмарк PHP-хеш-функции также показал это), предполагая, что это определенно связано к операции PBKDF2.
Что вызывает это, и как я могу ускорить это?
Обратите внимание, что экземпляры AWS используют самую старую версию PHP из всего вашего GIST. Это не может быть здорово.
Если вы можете, найдите портативный PHP-продукт недавнего урожая и установите и сравните его.
Кроме того, вы можете сравнить различные реализации PBKDF2 с мой репозиторий Github, включая версии на базе PolarSSL, OpenSSL и Crypto ++, все с идентичными интерфейсами для командной строки и исходного кода.
Других решений пока нет …