Посмотреть статус сборки для каждого компонента можно здесь.
Короче говоря, PQClean — это попытка собрать чистые реализации постквантовых схем, которые входят в постквантовый проект NIST. Цель PQClean — предоставить автономные реализации , которые
Чего PQClean не стремится, так это
В качестве первой основной цели мы собираем реализации C, соответствующие требованиям, перечисленным ниже. Мы также принимаем оптимизированные реализации, но при этом требующие высококачественного, проверенного кода.
Пожалуйста, также ознакомьтесь с нашими рекомендациями для участников, если вы заинтересованы в добавлении схемы в PQClean.
Краткое изложение уроков, извлеченных во время работы над PQClean, см. по адресу:
Матиас Дж. Каннвишер, Питер Швабе, Дуглас Стебила и Том Виггерс. «Повышение качества программного обеспечения в проектах стандартизации криптографии». В: Исследования в области стандартизации безопасности – Семинары EuroS&P 2022. 2022.
Найдите документ на https://eprint.iacr.org/2022/337.
При упоминании PQClean цитируйте эту работу:
@inproceedings { SSR:KSSW22 ,
author = { Matthias J. Kannwischer and
Peter Schwabe and
Douglas Stebila and
Thom Wiggers } ,
title = { Improving Software Quality in Cryptography Standardization Projects } ,
booktitle = { {IEEE} European Symposium on Security and Privacy, EuroS{&}P 2022 - Workshops, Genoa, Italy, June 6-10, 2022 } ,
pages = { 19--30 } ,
publisher = { IEEE Computer Society } ,
address = { Los Alamitos, CA, USA } ,
year = { 2022 } ,
url = { https://eprint.iacr.org/2022/337 } ,
doi = { 10.1109/EuroSPW55150.2022.00010 } ,
}
Обратите внимание , что многие реализации, включенные в PQClean, взяты из оригинальных исследовательских проектов, и их авторы также будут признательны за упоминание.
Проверка пунктов этого списка все еще находится в стадии разработки. Проверенные элементы должны работать.
api.h
не может включать внешние файлы -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
с gcc
и clang
#if
/ #ifdef
только для инкапсуляции заголовка const
аргументы помечены как const
fips202.c
, sha2.c
, aes.c
, randombytes.c
0
в случае успеха nmake
) PQCLEAN_SCHEMENAME_
LICENSE
(см. ниже). META.yml
в котором содержится подробная информация о версии алгоритма, дизайнеры META.yml
. stdint.h
(необязательно, рекомендуется).size_t
(необязательно, рекомендуется).for (size_t i=...
) (необязательно, рекомендуется) Для следующих схем у нас есть реализации одного или нескольких наборов параметров. Для всех этих схем у нас есть чистый код на C, но для некоторых у нас также есть оптимизированный код.
Финалисты:
Альтернативные кандидаты:
Будущие стандарты:
Альтернативные кандидаты:
Реализации, ранее доступные в PQClean и исключенные в третьем раунде усилий по стандартизации NIST, доступны в теге round2
.
Реализации, ранее доступные в PQClean и исключенные в четвертом раунде усилий по стандартизации NIST, доступны в теге round3
.
PQClean по существу использует тот же API, который требуется для эталонных реализаций NIST, который также используется SUPERCOP и libpqcrypto. Единственные различия с этим API заключаются в следующем:
size_t
вместо unsigned long long
; и int PQCLEAN_SCHEME_IMPL_crypto_sign_signature (
uint8_t * sig , size_t * siglen ,
const uint8_t * m , size_t mlen ,
const uint8_t * sk );
int PQCLEAN_SCHEME_IMPL_crypto_sign_verify (
const uint8_t * sig , size_t siglen ,
const uint8_t * m , size_t mlen ,
const uint8_t * pk );
Как отмечалось выше, PQClean не предназначен для создания единой библиотеки: это набор исходного кода, который можно легко интегрировать в другие библиотеки. Репозиторий PQClean включает в себя различные тестовые программы, которые создают различные файлы, но вам не следует использовать полученные двоичные файлы.
Список необходимых зависимостей: gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
Каждый каталог реализации в PQClean (например, crypto_kem/kyber768_clean) можно извлечь для использования в вашем собственном проекте. Вам нужно будет:
common/randombytes.h
(криптографический генератор случайных чисел) и, возможно, common/sha2.h
(семейство хэш-функций SHA-2), common/aes.h (реализации AES), common/fips202.h (семейство хеш-функций SHA-2), common/aes.h
(реализации AES), common/fips202.h
Семейство хеш-функций SHA-3) и common/sp800-185.h
(семейство cSHAKE). Можно использовать реализации из папки common/
, но учтите, что они могут быть не самыми производительными и могут выполнять ненужные действия (например, выделение кучи) для наших целей тестирования.Что касается № 2, добавления файлов в систему сборки вашего проекта, каждая реализация в PQClean сопровождается двумя примерами make-файлов, которые показывают, как можно собрать файлы для этой реализации:
Makefile
, который можно использовать с GNU Make, BSD Make и, возможно, с другими.Makefile.Microsoft_nmake
, который можно использовать с nmake Visual Studio. Следующие проекты используют реализации PQClean и предоставляют собственные оболочки для этих реализаций. Их стратегии интеграции могут послужить примером для ваших собственных проектов.
Каждый подкаталог, содержащий реализации, содержит файл LICENSE
, в котором указано, под какой лицензией выпущена конкретная реализация. common
файлы содержат информацию о лицензировании в верхней части файла (и в настоящее время являются либо общедоступным, либо MIT). Весь остальной код в этом репозитории выпущен на условиях CC0.
См. https://github.com/PQClean/PQClean/wiki/Test-framework для получения подробной информации о платформе тестирования PQClean.
Хотя мы проводим обширное автоматическое тестирование на Github Actions ((эмулированные) сборки Linux, сборки MacOS и Windows) и Travis CI (сборки Aarch64), большинство тестов также можно запускать локально. Для этого убедитесь, что установлено следующее:
pytest
для Python 3. Мы также рекомендуем установить pytest-xdist
чтобы разрешить параллельный запуск тестов.
Вам также необходимо убедиться, что подмодули инициализированы, выполнив:
git submodule update --init
Запустите тесты на основе Python, перейдя в каталог test
и запустив pytest -v
или (рекомендуется) pytest -n=auto
для параллельного тестирования.
Вы также можете запустить python3 <testmodule>
, где <testmodule>
— это любой из файлов, начинающихся с test_
в папке test/
.