«Шиповник» - схема электронной подписи, построенная методом применения преобразования Фиата-Шамира к протоколу идентификации Штерна (с нулевым разглашением)
Данный репозиторий содержит открытую реализацию этого алгоритма на языке Си от компании QApp, разработанную совместно с авторами алгоритма - компанией Криптонит - в сотрудничестве в рамках ТК26.
В рамках форка в качестве хэш-функции используется SHA512
Для сборки требуется cmake
версии 3.12
или более новой. Поддерживаются следующие опции:
GOST_OPTIMIZATION
. С помощью этой опции можно задать уровень оптимизации хэшаGOST 34.11-2012
, используемого в алгоритме. Различные уровни оптимизаций могут поддерживаться не на всех платформах. Не имеет смысла указывать при текущей реализации на базе SHA512.0
нет оптимизации1
инструкции MMX2
инструкции SSE23
инструкции SSE4.1
ENTROPY_SOURCE
задает источник энтропии для генерации ключевых пар и подписей. Значение по умолчанию -/dev/urandom
. Для генерации тестов с известным ответом (KAT
) можно задать путь к файлу с детерминированными данными, например/dev/zero
.
Пример сборки проекта:
$ mkdir build
$ cd build
$ cmake -DENTROPY_SOURCE=/dev/zero ..
$ make
Проект компилируется в библиотеку, которую можно использовать в сторонних решениях. Для этого нужно либо добавить исходные тексты командой add_subdirectory(shipovnik)
, либо установить библиотеку командой make install
и затем выполнить find_package(shipovnik)
.
Программа shipovnik_example
генерирует данные для тестов с известным ответом (Known Answer Test, KAT
) при использовании детерминированного источника энтропии (см. раздел "сборка проекта"). По умолчанию она генерирует случайные данные.