Как тестировать криптобиблиотеку? - PullRequest
5 голосов
/ 23 марта 2011

Какие тесты хороши для тестирования криптотеки?

Какую единицу (время, такты процессора ...) следует использовать для сравнения криптографических библиотек разных типов?

Существуют ли какие-либо инструменты, процедуры ....?

Любая идея, комментарии приветствуются!

Спасибо за ваш вклад!

Ответы [ 4 ]

3 голосов
/ 23 марта 2011

Полагаю, вы имеете в виду тесты производительности. Я бы сказал, что и время, и циклы являются допустимыми эталонными тестами, так как некоторые коды могут выполняться по-разному на разных архитектурах (возможно, совершенно по-разному, если они достаточно разные).

Если это чрезвычайно важно для вас, я бы сам провел тестирование. Вы можете использовать некоторый таймер (почти во всех языках есть один) или вы можете использовать некоторые профилировщики (почти во всех языках есть один из них), чтобы определить точную производительность алгоритмов, которые вы ищете на целевой платформе.

Если вы смотрите на один алгоритм против другого, вы можете искать данные, которые уже собраны другими, и это даст вам приблизительное представление. Например, вот некоторые тесты Crypto ++: http://www.cryptopp.com/benchmarks.html

Обратите внимание, что они используют MB / Second и Cycles / Byte в качестве метрик. Я думаю, что это очень хороший выбор.

3 голосов
/ 24 марта 2011

Некоторые очень хорошие ответы до меня, но имейте в виду, что оптимизации - это очень хороший способ утечки ключевого материала с помощью временной атаки (например, см. , насколько разрушительным может быть AES ). Если есть шанс, что злоумышленник сможет рассчитать время ваших операций, вы захотите не самую быструю, но самую доступную библиотеку с постоянным временем (и, возможно, самое постоянное использование энергии, если есть вероятность, что кто-то может контролировать вашу). OpenSSL отлично справляется с текущими атаками и не может сказать то же самое о других библиотеках.

2 голосов
/ 30 мая 2016

Каковы хорошие тесты для тестирования библиотеки криптографии?

Ответы ниже приведены в контексте 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 , которые могут предоставить некоторые показатели для вас.

0 голосов
/ 23 марта 2011

Помимо моих комментариев, правительство США предлагает программу FIPS , на которую вы, возможно, захотите посмотреть. Он не идеален (по большому счету), но это начало - вы можете получить представление о том, на что они смотрели, когда оценивали криптографию.

Я также предлагаю обратиться в Отдел компьютерной безопасности NIST .

Кроме того, на заметку ... обзор того, что должен сказать мастер (Брюс Шнайер) по теме Подводные камни в криптографии всегда хорош. Также: Безопасность сложнее, чем кажется .

...