Каковы хорошие тесты для тестирования библиотеки криптографии?
Ответы ниже приведены в контексте Crypto ++.Сейчас я не говорю о других библиотеках, таких как OpenSSL, Botan, BouncyCastle и т. Д.
Библиотека Crypto ++ имеет встроенный набор тестов производительности.
Какой модуль (время, циклы ЦП ...) мы должны использовать для сравнения разных крипто-библиотек?
Обычно производительность измеряется в циклах на байт.Количество циклов за байт зависит от частоты процессора.Другой связанный показатель - это пропускная способность, измеренная в МБ / с.Это также зависит от частоты процессора.
Существуют ли какие-либо инструменты, процедуры ....?
git clone https://github.com/weidai11/cryptopp.git
cd cryptopp
make static cryptest.exe
# 2.0 GHz (use KB=1024; not 1000)
make bench CRYPTOPP_CPU_SPEED=1.8626
make bench
создаст файл с именемbenchmark.html
.
Если вы хотите запустить тесты вручную, то:
./cryptest.exe b <time in seconds> <cpu speed in GHz>
Выводит HTML-подобную таблицу без тегов <HEAD>
и <BODY>
.Вы по-прежнему сможете просматривать его в веб-браузере.
Вы также можете проверить страницу тестов Crypto ++ на Тесты Crypto ++ .Эта информация датирована и находится в нашем списке TODO.
Вам также нужен обвинительный взгляд на то, что выглядит правильно.Например, SSE4.2 и ARMv8 имеют инструкцию CRC32.Количество циклов на байт должно составлять от 3 до 5 cpb (только для программного обеспечения) до 1 или 1.5 cpb (для аппаратного ускорения).На современном оборудовании, работающем на частотах около 2 ГГц, оно должно равняться изменению примерно с 300 или 500 МБ / с (только программное обеспечение) на примерно 1,5 ГБ / с (аппаратное ускорение).
Другие технологии, такие как SSE2 и NEON,сложнее работать.Вы должны увидеть теоретические циклы за байт и пропускную способность, но вы можете не знать, что это такое.Возможно, вам придется связаться с авторами алгоритма, чтобы узнать.Например, мы связались с авторами BLAKE2, чтобы узнать, работает ли наша реализация ARMv7 / ARMv8 NEON, как ожидалось, потому что отсутствовали результаты тестов на домашней странице автора.
Я также нашелGCC 4.6 (и выше) и -O3
могут иметь большое значение в реализациях только для программного обеспечения.Это связано с тем, что GCC сильно векторизуется со скоростью -O3
, и вы можете наблюдать ускорение в 2–2,5 раза. Например, компилятор может генерировать код, который работает со скоростью 40 cpb при -O2
.На -O3
он может работать на 15 или 19 cpb.Хорошая реализация SSE2 или NEON должна превосходить программную реализацию, по крайней мере, на несколько циклов на байт.В этом же примере реализация SSE2 или NEON может выполняться с 8 до 13 cpb.
Существуют также такие сайты, как OpenBenchmarking.org , которые могут предоставить некоторые показатели для вас.