Den Build-Status für jede Komponente finden Sie hier
Kurz gesagt, PQClean ist ein Versuch, saubere Implementierungen der Post-Quantum-Schemata zu sammeln, die im NIST-Post-Quantum-Projekt enthalten sind. Das Ziel von PQClean besteht darin, eigenständige Implementierungen bereitzustellen
Was PQClean nicht anstrebt, ist
Als erstes Hauptziel sammeln wir C-Implementierungen, die die unten aufgeführten Anforderungen erfüllen. Wir akzeptieren auch optimierte Implementierungen, die jedoch weiterhin hochwertigen, getesteten Code erfordern.
Bitte lesen Sie auch unsere Richtlinien für Mitwirkende, wenn Sie daran interessiert sind, ein Schema zu PQClean hinzuzufügen.
Eine Zusammenfassung der Erkenntnisse aus der Arbeit an PQClean finden Sie unter:
Matthias J. Kannwischer, Peter Schwabe, Douglas Stebila und Thom Wiggers. „Verbesserung der Softwarequalität in Kryptographie-Standardisierungsprojekten.“ In: Security Standardization Research – EuroS&P Workshops 2022. 2022.
Das Papier finden Sie unter https://eprint.iacr.org/2022/337
Bitte zitieren Sie dieses Werk, wenn Sie sich auf PQClean beziehen:
@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 } ,
}
Bitte beachten Sie , dass viele der in PQClean enthaltenen Implementierungen selbst aus ursprünglichen Forschungsprojekten stammen und ihre Autoren sich ebenfalls über eine Erwähnung freuen würden.
Die Überprüfung der Elemente dieser Liste befindet sich noch in der Entwicklung. Die überprüften Elemente sollten funktionieren.
api.h
kann keine externen Dateien einschließen -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
mit gcc
und clang
#if
/ #ifdef
dient nur der Header-Kapselung const
Argumente werden als const
gekennzeichnet fips202.c
, sha2.c
, aes.c
, randombytes.c
0
zurück nmake
) PQCLEAN_SCHEMENAME_
LICENSE
Datei geliefert (siehe unten). META.yml
Datei mit Details zur Version des Algorithmus und den Designern META.yml
angegeben. stdint.h
Typen (optional, empfohlen).size_t
(optional, empfohlen)for (size_t i=...
) (optional, empfohlen) Für die folgenden Schemata haben wir Implementierungen eines oder mehrerer ihrer Parametersätze. Für alle diese Schemata verfügen wir über sauberen C-Code, für einige jedoch auch über optimierten Code.
Finalisten:
Ersatzkandidaten:
Zukünftige Standards:
Ersatzkandidaten:
Implementierungen, die zuvor in PQClean verfügbar waren und in Runde 3 der NIST-Standardisierungsbemühungen entfernt wurden, sind im Tag round2
verfügbar.
Implementierungen, die zuvor in PQClean verfügbar waren und in Runde 4 der NIST-Standardisierungsbemühungen entfernt wurden, sind im Tag round3
verfügbar.
PQClean verwendet im Wesentlichen dieselbe API wie für die NIST-Referenzimplementierungen, die auch von SUPERCOP und libpqcrypto verwendet wird. Die einzigen Unterschiede zu dieser API sind die folgenden:
size_t
anstelle von unsigned long long
übergeben; Und 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 );
Wie oben erwähnt, ist PQClean nicht dafür gedacht, als einzelne Bibliothek erstellt zu werden: Es handelt sich um eine Sammlung von Quellcode, die problemlos in andere Bibliotheken integriert werden kann. Das PQClean-Repository enthält verschiedene Testprogramme, die verschiedene Dateien erstellen. Sie sollten die resultierenden Binärdateien jedoch nicht verwenden.
Liste der erforderlichen Abhängigkeiten: gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
Jedes Implementierungsverzeichnis in PQClean (z. B. crypto_kem/kyber768_clean) kann zur Verwendung in Ihrem eigenen Projekt extrahiert werden. Sie müssen Folgendes tun:
common/randombytes.h
(ein kryptografischer Zufallszahlengenerator) und möglicherweise common/sha2.h
(die SHA-2-Hash-Funktionsfamilie), common/aes.h
(AES-Implementierungen), common/fips202.h
(die SHA-3-Hash-Funktionsfamilie) und common/sp800-185.h
(die cSHAKE-Familie). Es ist möglich, die Implementierungen aus dem Ordner common/
zu verwenden. Beachten Sie jedoch, dass diese möglicherweise nicht die leistungsstärksten Implementierungen sind und möglicherweise unnötige Dinge (z. B. Heap-Zuweisungen) für unsere Testzwecke tun.Bezüglich #2, dem Hinzufügen der Dateien zum Build-System Ihres Projekts, wird jede Implementierung in PQClean von zwei Beispiel-Makefiles begleitet, die zeigen, wie man die Dateien für diese Implementierung erstellen könnte:
Makefile
, die mit GNU Make, BSD Make und möglicherweise anderen verwendet werden kann.Makefile.Microsoft_nmake
, die mit nmake von Visual Studio verwendet werden kann. Die folgenden Projekte nutzen Implementierungen von PQClean und stellen ihre eigenen Wrapper um die Implementierungen bereit. Ihre Integrationsstrategien können als Beispiele für Ihre eigenen Projekte dienen.
Jedes Unterverzeichnis, das Implementierungen enthält, enthält eine LICENSE
Datei, die angibt, unter welcher Lizenz diese spezifische Implementierung veröffentlicht wird. Die common
Dateien enthalten oben in der Datei Lizenzinformationen (und sind derzeit entweder Public Domain oder MIT). Der gesamte andere Code in diesem Repository wird unter den Bedingungen von CC0 veröffentlicht.
Einzelheiten zum PQClean-Testframework finden Sie unter https://github.com/PQClean/PQClean/wiki/Test-framework.
Während wir umfangreiche automatische Tests auf Github Actions ((emulierte) Linux-Builds, MacOS- und Windows-Builds) und Travis CI (Aarch64-Builds) durchführen, können die meisten Tests auch lokal ausgeführt werden. Stellen Sie dazu sicher, dass Folgendes installiert ist:
pytest
für Python 3. Wir empfehlen außerdem die Installation pytest-xdist
um die parallele Ausführung von Tests zu ermöglichen.
Sie müssen außerdem sicherstellen, dass die Submodule initialisiert sind, indem Sie Folgendes ausführen:
git submodule update --init
Führen Sie die Python-basierten Tests aus, indem Sie in das test
gehen und pytest -v
oder (empfohlen) pytest -n=auto
für parallele Tests ausführen.
Sie können auch python3 <testmodule>
ausführen, wobei <testmodule>
eine der Dateien ist, die mit test_
im Ordner test/
beginnen.