
C-Bibliothek für Prototyping und Experimentieren mit quantenresistenter Kryptografie
liboqs ist eine Open-Source-C-Bibliothek für quantensichere kryptografische Algorithmen.
liboqs bietet:
liboqs ist Teil des Open Quantum Safe (OQS)-Projekts, das darauf abzielt, quantensichere Kryptografie zu entwickeln und in Anwendungen zu integrieren, um die Bereitstellung und Erprobung in realen Kontexten zu erleichtern. Insbesondere stellt OQS prototypische Integrationen von liboqs in Protokolle wie TLS, X.509 und S/MIME über unseren OpenSSL 3 Provider bereit, und wir bieten eine Vielzahl weiterer Post-Quantum-fähiger Demos an.
Das OQS-Projekt wird von der Post-Quantum Cryptography Alliance als Teil der Linux Foundation unterstützt. Weitere Informationen über das Open Quantum Safe-Projekt finden Sie unter openquantumsafe.org.
OQS führt eine Umfrage durch, um unsere Community besser zu verstehen. Wir möchten von Organisationen und Einzelpersonen erfahren, wie sie das Open Quantum Safe-Projekt nutzen und welches Interesse sie daran haben. Bitte nehmen Sie sich ein paar Minuten Zeit, um die Umfrage auszufüllen: https://linuxfoundation.surveymonkey.com/r/oqssurvey
Die folgende Tabelle fasst jede derzeit in liboqs integrierte Algorithmusfamilie zusammen. Details zu den einzelnen Varianten (einschließlich NIST-Stufe, Konstantzeit-Status, formaler Verifikation und verfügbaren Optimierungen) finden Sie in ALGORITHMS.md; für Upstream-Quellen und Empfehlungen siehe die algorithmusspezifischen Seiten unter docs/algorithms.
Die Namen der von NIST standardisierten Algorithmen — ML-KEM, ML-DSA und SLH-DSA — sind stabil; falls NIST die Implementierungsdetails ändert, wird liboqs entsprechend angepasst, sodass Benutzer vor solchen Änderungen geschützt sind. Alle anderen Namen können sich ändern. Welche Algorithmen gebaut werden, kann über OQS_ALGS_ENABLED gesteuert werden; standardmäßig wird liboqs mit Unterstützung für jeden Algorithmus in der Tabelle gebaut, einschließlich experimenteller.
Obwohl zum Zeitpunkt der Erstellung dieses Dokuments keine Schwachstellen in den in dieser Bibliothek verwendeten quantensicheren Algorithmen bekannt sind, ist bei der Bereitstellung quantensicherer Algorithmen Vorsicht geboten, da die meisten Algorithmen und die Software nicht demselben Maß an Prüfung unterzogen wurden wie derzeit eingesetzte Algorithmen. Besondere Aufmerksamkeit sollte den Empfehlungen der Standardisierungsgemeinschaft gelten, insbesondere dem Post-Quantum Cryptography Standardization-Projekt von NIST. Mit fortschreitender Forschung können sich die unterstützten Algorithmen in ihrer Sicherheit schnell ändern und sich sogar als unsicher gegenüber klassischen und Quantencomputern erweisen. Beachten Sie außerdem, dass sntrup761 nur für Interop-Tests enthalten ist.
liboqs beabsichtigt nicht, "Gewinner zu küren": Die Algorithmusunterstützung orientiert sich am NIST-PQC-Standardisierungsprojekt. Wir empfehlen nachdrücklich, dass Anwendungen und Protokolle bei der Bereitstellung von Post-Quantum-Kryptografie auf die Ergebnisse dieser Bemühungen vertrauen.
Wir sind uns bewusst, dass einige Parteien quantensichere Kryptografie vor dem Abschluss des NIST-PQC-Standardisierungsprojekts bereitstellen möchten. Wir empfehlen solchen Versuchen nachdrücklich, die sogenannte Hybrid-Kryptografie zu verwenden, bei der quantensichere Public-Key-Algorithmen zusammen mit traditionellen Public-Key-Algorithmen (wie RSA oder elliptischen Kurven) eingesetzt werden, sodass die Lösung mindestens so sicher ist wie die bestehende traditionelle Kryptografie.
WIR EMPFEHLEN DERZEIT NICHT, SICH IN EINER PRODUKTIONSUMGEBUNG AUF DIESE BIBLIOTHEK ZU VERLASSEN ODER DAMIT SENSIBLE DATEN ZU SCHÜTZEN. Diese Bibliothek dient der Forschung und Prototypenerstellung. Obwohl wir uns nach besten Kräften bemühen, Sicherheitsfehler zu vermeiden, wurde diese Bibliothek nicht dem Maß an Prüfung und Analyse unterzogen, das für den Einsatz in Hochsicherheitsumgebungen erforderlich wäre.
Weitere Informationen zur Meldung von Schwachstellen und zum OQS-Schwachstellenreaktionsprozess finden Sie in SECURITY.md.
Um den Support-Aufwand zu optimieren,
Abhängigkeiten installieren:
Auf Ubuntu:
sudo apt install astyle cmake gcc ninja-build libssl-dev unzip xsltproc doxygen graphviz valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
Auf macOS, mit einem Paketmanager Ihrer Wahl (wir haben Homebrew gewählt):
brew install cmake ninja openssl@3 wget doxygen graphviz astyle valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
Mit Nix:
nix develop
Beachten Sie, dass Sie OpenSSL installiert haben müssen (Version 3.x empfohlen; die EOL-Version 1.1.1 ist ebenfalls noch möglich), wenn liboqs OpenSSL für verschiedene symmetrische Krypto-Algorithmen (AES, SHA-2 usw.) verwenden soll.
Den Quellcode holen:
git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
und bauen:
mkdir build && cd build
cmake -GNinja ..
ninja
Verschiedene cmake-Buildoptionen zur Anpassung der resultierenden Artefakte sind verfügbar und werden in CONFIGURE.md dokumentiert. Alle unterstützten Optionen sind auch in der Datei .CMake/alg-support.cmake aufgelistet und können durch Ausführen von cmake -LAH -N .. im Verzeichnis build angezeigt werden.
Die folgenden Anweisungen gehen davon aus, dass wir uns in build befinden.
Standardmäßig ist das Haupt-Build-Ergebnis lib/liboqs.a, eine statische Bibliothek. Wenn Sie eine gemeinsame/dynamische Bibliothek bauen möchten, fügen Sie -DBUILD_SHARED_LIBS=ON zum obigen Befehl cmake -GNinja .. hinzu, und das Ergebnis wird lib/liboqs.so|dylib|dll sein. Die öffentlichen Header befinden sich im Verzeichnis include. Es gibt auch eine Vielzahl von Programmen, die im Verzeichnis tests gebaut werden:
test_kem: Einfaches Test-Framework für Schlüsselkapselungsmechanismentest_sig: Einfaches Test-Framework für Signaturschematatest_sig_stfl: Einfaches Test-Framework für zustandsbehaftete Signaturschematatest_kem_mem: Einfaches Test-Framework zur Überprüfung des Speicherverbrauchs von Schlüsselkapselungsmechanismentest_sig_mem: Einfaches Test-Framework zur Überprüfung des Speicherverbrauchs von SignaturschemataBinärdateien können mit Visual Studio 2019 mit der installierten Erweiterung CMake Tools erzeugt werden. Dieselben Optionen wie oben für Linux/macOS erläutert, können verwendet werden, und Build-Artefakte werden in den angegebenen build-Ordnern erzeugt.
Wenn Sie Visual-Studio-Builddateien erstellen möchten, z. B. wenn Sie ninja nicht verwenden, achten Sie darauf, den Parameter -GNinja nicht an den cmake-Befehl zu übergeben, wie oben beispielhaft gezeigt. Sie können dann alle Komponenten mit msbuild bauen, z. B. wie folgt: msbuild ALL_BUILD.vcxproj und alle Artefakte installieren, z. B. mit diesem Befehl: msbuild INSTALL.vcxproj.
Sie können liboqs für verschiedene Plattformen kreuzkompilieren. Detaillierte Informationen finden Sie im Wiki.
Detailliertere Informationen zum Bauen, zu optionalen Build-Parametern, Beispielanwendungen, Codierungskonventionen und mehr finden Sie im Wiki.
Beiträge, die die Akzeptanzkriterien erfüllen, werden dankbar angenommen. Weitere Einzelheiten finden Sie in unserem Leitfaden für Mitwirkende.
liboqs ist unter der MIT-Lizenz lizenziert; siehe LICENSE.txt für Details.
liboqs enthält einige Drittanbieter-Bibliotheken oder -Module, die anders lizenziert sind; der entsprechende Unterordner enthält die Lizenz, die in diesem Fall gilt. Insbesondere:
.CMake/CMakeDependentOption.cmake: BSD-3-Clause-Lizenzsrc/common/common.c: enthält Teile, die unter der Apache-Lizenz v2.0 stehensrc/common/crypto/aes/aes_c.c: Public Domain oder eine beliebige OSI-zugelassene Lizenzsrc/common/crypto/aes/aes*_ni.c: Public Domainsrc/common/crypto/sha2/sha2_c.c: Public Domainsrc/common/crypto/sha3/xkcp_low : CC0 (Public Domain), außer brg_endian.h und KeccakP-1600-AVX2.ssrc/common/crypto/sha3/xkcp_low/.../brg_endian.h : BSD-3-Clause-Lizenzsrc/common/crypto/sha3/xkcp_low/.../KeccakP-1600-AVX2.s : BSD-ähnliche CRYPTOGAMS-Lizenzsrc/common/rand/rand_nist.c: Siehe DateiDas OQS-Projekt wird von der Post-Quantum Cryptography Alliance als Teil der Linux Foundation unterstützt.
Das OQS-Projekt wurde von Douglas Stebila und Michele Mosca an der University of Waterloo gegründet. Mitwirkende an liboqs umfassen einzelne Mitwirkende, Akademiker und Forscher sowie verschiedene Unternehmen, darunter Amazon Web Services, Cisco Systems, evolutionQ, IBM Research, Microsoft Research, SandboxAQ und softwareQ.
Finanzielle Unterstützung für die Entwicklung von Open Quantum Safe wurde von Amazon Web Services, dem Canadian Centre for Cyber Security, Cisco, dem Unitary Fund, dem NGI Assure Fund und VeriSign Inc. bereitgestellt.
Forschungsprojekte, die spezifische Komponenten von OQS entwickelt haben, wurden durch verschiedene Forschungszuschüsse unterstützt, einschließlich der Finanzierung durch den Natural Sciences and Engineering Research Council of Canada (NSERC); siehe die Quellpapiere für Finanzierungsdanksagungen.
| Algorithmusfamilie | Standardisierungsstatus | Primäre Implementierung | Upstream-Wartung | OQS-Stufe |
|---|
| BIKE | Nicht von NIST ausgewählt | awslabs/bike-kem | TBD | Stufe 3 (Community) |
| Classic McEliece | Unter ISO-Prüfung | PQClean/PQClean@1eacfda | Keine aktive Wartung | Stufe 3 (Community) |
| FrodoKEM | Unter ISO-Prüfung | microsoft/PQCrypto-LWEKE@a2f9dec | Best effort | Stufe 2 (Unterstützt) |
| HQC | Von NIST für die bevorstehende Standardisierung ausgewählt | pqc-hqc/hqc@161cd4f | TBD | Stufe 2 (Unterstützt) |
| Kyber | Von NIST als Grundlage für ML-KEM (FIPS 203) ausgewählt | pq-crystals/kyber@441c051 | Aktiv gewartet | Stufe 3 (Community) |
| ML-KEM | Von NIST standardisiert | pq-code-package/mlkem-native@0ba906c | Aktiv gewartet | Stufe 1 (Kern) |
| NTRU | Nicht von NIST ausgewählt, unter Standardisierungsprüfung durch NTT | PQClean/PQClean@4c9e5a3 | Aktiv gewartet | Stufe 3 (Community) |
| NTRU-Prime | Nicht von NIST ausgewählt | openssh/openssh-portable | Aktiv gewartet | Stufe 3 (Community) |
| Algorithmusfamilie | Standardisierungsstatus | Primäre Implementierung | Upstream-Wartung | OQS-Stufe |
|---|
| CROSS | Unter NIST-Prüfung | CROSS-signature/CROSS-lib-oqs@179d61b | Aktiv gewartet | Stufe 3 (Community) |
| Falcon | Von NIST für die bevorstehende Standardisierung ausgewählt | PQClean/PQClean@1eacfda | TBD | Stufe 3 (Community) |
| MAYO | Unter NIST-Prüfung | PQCMayo/MAYO-C@64e15c6 | Aktiv gewartet | Stufe 3 (Community) |
| ML-DSA | Von NIST standardisiert | pq-code-package/mldsa-native@9b0ee84 | Aktiv gewartet | Stufe 2 (Unterstützt) |
| MQOM | Unter NIST-Prüfung | mqom/mqom-v2@ec6b7fa | Aktiv gewartet | Stufe 3 (Community) |
| SLH-DSA | Von NIST standardisiert | pq-code-package/slhdsa-c@a0fc1ff | Best effort | Stufe 3 (Community) |
| SNOVA | Unter NIST-Prüfung | vacuas/SNOVA@1c3ca6f | Best effort | Stufe 3 (Community) |
| UOV | Unter NIST-Prüfung | pqov/pqov@33fa527 | Best effort | Stufe 3 (Community) |
| Algorithmusfamilie | Standardisierungsstatus | Primäre Implementierung | Upstream-Wartung | OQS-Stufe |
|---|
| LMS | Von IRTF standardisiert, von NIST genehmigt | cisco/hash-sigs | Best effort | Stufe 2 (Unterstützt) |
| XMSS | Von IRTF standardisiert, von NIST genehmigt | XMSS/xmss-reference | Aktiv gewartet | Stufe 2 (Unterstützt) |
kat_kem: Programm, das Known-Answer-Test (KAT)-Werte für Schlüsselkapselungsmechanismen mit demselben Verfahren wie die NIST-Einreichungsanforderungen generiert, zur Überprüfung gegen eingereichte KAT-Werte mit tests/test_kat.pykat_sig: Programm, das Known-Answer-Test (KAT)-Werte für Signaturschemata mit demselben Verfahren wie die NIST-Einreichungsanforderungen generiert, zur Überprüfung gegen eingereichte KAT-Werte mit tests/test_kat.pykat_sig_stfl: Programm zur Überprüfung der Ergebnisse gegen eingereichte KAT-Werte mit tests/test_kat.pyspeed_kem: Benchmark-Programm für Schlüsselkapselungsmechanismen; siehe ./speed_kem --help für Verwendungshinweisespeed_sig: Benchmark-Programm für Signaturmechanismen; siehe ./speed_sig --help für Verwendungshinweisespeed_sig_stfl: Benchmark-Programm für zustandsbehaftete Signaturmechanismen; siehe ./speed_sig_stfl --help für Verwendungshinweiseexample_kem: Minimales ausführbares Beispiel, das die Verwendung der KEM-API zeigtexample_sig: Minimales ausführbares Beispiel, das die Verwendung der Signatur-API zeigtexample_sig_stfl: Minimales ausführbares Beispiel, das die Verwendung der zustandsbehafteten Signatur-API zeigttest_aes, test_sha3: Einfache Test-Frameworks für Krypto-Unterkomponententest_portability: Einfache Test-Frameworks zur Überprüfung der Code-Portabilität über CPUs hinweg; erfordert das Vorhandensein von qemu; der ordnungsgemäße Betrieb wurde nur unter Ubuntu validiertDie vollständige Testsuite kann mit folgendem Befehl ausgeführt werden:
ninja run_tests
Um HTML-Dokumentation der API zu generieren, führen Sie Folgendes aus:
ninja gen_docs
Öffnen Sie dann docs/html/index.html in Ihrem Webbrowser.
ninja install kann ausgeführt werden, um die gebaute Bibliothek und die include-Dateien an einem Ort Ihrer Wahl zu installieren, der durch Übergabe der Option -DCMAKE_INSTALL_PREFIX=<dir> an cmake zur Konfigurationszeit angegeben werden kann. Alternativ kann ninja package ausgeführt werden, um ein Installationspaket zu erstellen.
ninja uninstall kann ausgeführt werden, um alle Installationsdateien zu entfernen.
src/kem/bike/additional: Apache-Lizenz v2.0src/kem/classic_mceliece/pqclean_*: Public Domainsrc/kem/kyber/pqcrystals-*: Public Domain (CC0) oder Apache-Lizenz v2.0src/kem/kyber/pqclean_*: Public Domain (CC0), und Public Domain (CC0) oder Apache-Lizenz v2.0, und Public Domain (CC0) oder MIT, und MITsrc/kem/kyber/libjade_* Public Domain (CC0) oder Apache-Lizenz v2.src/kem/ml_kem/mlkem-native_*: MIT oder Apache-Lizenz v2.0 oder ISC-Lizenzsrc/kem/ntru/pqclean_*: Public Domain (CC0)src/kem/ntruprime/sntrup761_openssh: Public Domainsrc/sig/mayo/*: Apache-Lizenz v2.0src/sig/ml_dsa/pqcrystals-*: Public Domain (CC0) oder Apache-Lizenz v2.0