
Bibliothèque C pour le prototypage et l'expérimentation de la cryptographie résistante aux ordinateurs quantiques.
liboqs est une bibliothèque C open source pour les algorithmes cryptographiques résistants aux ordinateurs quantiques.
liboqs fournit :
liboqs fait partie du projet Open Quantum Safe (OQS), qui vise à développer et à intégrer dans des applications la cryptographie résistante aux ordinateurs quantiques afin de faciliter le déploiement et les tests dans des contextes réels. En particulier, OQS fournit des intégrations prototypes de liboqs dans des protocoles comme TLS, X.509 et S/MIME, via notre OpenSSL 3 Provider, et nous fournissons une variété d'autres démos post-quantiques.
Le projet OQS est soutenu par la Post-Quantum Cryptography Alliance dans le cadre de la Linux Foundation. Plus d'informations sur le projet Open Quantum Safe sont disponibles sur openquantumsafe.org.
OQS mène une enquête pour mieux comprendre sa communauté. Nous souhaitons recueillir l'avis des organisations et des individus sur leur intérêt pour le projet Open Quantum Safe et son utilisation. Merci de prendre quelques minutes pour remplir l'enquête : https://linuxfoundation.surveymonkey.com/r/oqssurvey
Le tableau ci-dessous résume chaque famille d'algorithmes actuellement intégrée dans liboqs. Pour le détail par variante (y compris le niveau NIST, le statut à temps constant, la vérification formelle et les optimisations disponibles), voir ALGORITHMS.md ; pour les sources en amont et les avis, voir les pages par algorithme sous docs/algorithms.
Les noms des algorithmes normalisés par le NIST — ML-KEM, ML-DSA et SLH-DSA — sont stables ; si le NIST modifie les détails d'implémentation, liboqs s'adaptera afin que les utilisateurs soient protégés de ces changements. Tous les autres noms sont susceptibles de changer. Les algorithmes à compiler peuvent être contrôlés via OQS_ALGS_ENABLED ; par défaut, liboqs est compilé avec la prise en charge de tous les algorithmes du tableau, y compris les algorithmes expérimentaux.
Bien qu'au moment de la rédaction de ce document aucune vulnérabilité ne soit connue dans les algorithmes résistants aux ordinateurs quantiques utilisés dans cette bibliothèque, la prudence est recommandée lors du déploiement d'algorithmes résistants aux ordinateurs quantiques, car la plupart des algorithmes et des logiciels n'ont pas fait l'objet du même degré d'examen que les algorithmes actuellement déployés. Une attention particulière doit être portée aux recommandations fournies par la communauté de normalisation, en particulier celles du projet Post-Quantum Cryptography Standardization du NIST. À mesure que la recherche progresse, les algorithmes pris en charge peuvent connaître des changements rapides dans leur sécurité et peuvent même s'avérer non sécurisés face aux ordinateurs classiques et quantiques. De plus, notez que sntrup761 n'est inclus que pour les tests d'interopérabilité.
liboqs n'a pas pour intention de « désigner des gagnants » : la prise en charge des algorithmes est guidée par le projet de normalisation PQC du NIST. Nous recommandons fortement que les applications et les protocoles s'appuient sur les résultats de cet effort lors du déploiement de la cryptographie post-quantique.
Nous sommes conscients que certaines parties peuvent souhaiter déployer la cryptographie résistante aux ordinateurs quantiques avant la conclusion du projet de normalisation PQC du NIST. Nous recommandons fortement que de telles tentatives utilisent ce que l'on appelle la cryptographie hybride, dans laquelle les algorithmes à clé publique résistants aux ordinateurs quantiques sont utilisés en parallèle des algorithmes à clé publique traditionnels (comme RSA ou les courbes elliptiques), afin que la solution soit au moins aussi sécurisée que la cryptographie traditionnelle existante.
NOUS NE RECOMMANDONS PAS ACTUELLEMENT DE S'APPUYER SUR CETTE BIBLIOTHÈQUE DANS UN ENVIRONNEMENT DE PRODUCTION NI DE L'UTILISER POUR PROTÉGER DES DONNÉES SENSIBLES. Cette bibliothèque est destinée à faciliter la recherche et le prototypage. Bien que nous fassions de notre mieux pour éviter les failles de sécurité, cette bibliothèque n'a pas reçu le niveau d'audit et d'analyse nécessaire pour pouvoir s'y fier dans des contextes de haute sécurité.
Veuillez consulter SECURITY.md pour plus de détails sur la manière de signaler une vulnérabilité et sur le processus de réponse aux vulnérabilités d'OQS.
Afin d'optimiser l'effort de prise en charge,
Installer les dépendances :
Sur 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
Sur macOS, en utilisant un gestionnaire de paquets de votre choix (nous avons choisi Homebrew) :
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
En utilisant Nix :
nix develop
Notez que, si vous souhaitez que liboqs utilise OpenSSL pour divers algorithmes cryptographiques symétriques (AES, SHA-2, etc.), vous devez avoir OpenSSL installé (version 3.x recommandée ; la version EOL 1.1.1 reste également possible).
Obtenir le code source :
git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
et compiler :
mkdir build && cd build
cmake -GNinja ..
ninja
Diverses options de compilation cmake pour personnaliser les artefacts résultants sont disponibles et sont documentées dans CONFIGURE.md. Toutes les options prises en charge sont également listées dans le fichier .CMake/alg-support.cmake, et peuvent être consultées en exécutant cmake -LAH -N .. dans le répertoire build.
Les instructions suivantes supposent que nous sommes dans build.
Par défaut, le principal résultat de compilation est lib/liboqs.a, une bibliothèque statique. Si vous souhaitez compiler une bibliothèque partagée/dynamique, ajoutez -DBUILD_SHARED_LIBS=ON à la commande cmake -GNinja .. ci-dessus et le résultat sera lib/liboqs.so|dylib|dll. Les en-têtes publics se trouvent dans le répertoire include. Il existe également une variété de programmes compilés dans le répertoire tests :
test_kem : Harness de test simple pour les mécanismes d'encapsulation de cléstest_sig : Harness de test simple pour les schémas de signaturetest_sig_stfl : Harness de test simple pour les schémas de signature avec étattest_kem_mem : Harness de test simple pour vérifier la consommation mémoire des mécanismes d'encapsulation de cléstest_sig_mem : Harness de test simple pour vérifier la consommation mémoire des schémas de signatureDes binaires peuvent être générés en utilisant Visual Studio 2019 avec l'extension CMake Tools installée. Les mêmes options que celles expliquées ci-dessus pour Linux/macOS peuvent être utilisées et les artefacts de compilation sont générés dans les dossiers build spécifiés.
Si vous souhaitez créer des fichiers de compilation Visual Studio, par exemple si vous n'utilisez pas ninja, assurez-vous de ne pas passer le paramètre -GNinja à la commande cmake comme illustré ci-dessus. Vous pouvez ensuite compiler tous les composants en utilisant msbuild, par exemple comme suit : msbuild ALL_BUILD.vcxproj et installer tous les artefacts, par exemple en utilisant cette commande : msbuild INSTALL.vcxproj.
Vous pouvez compiler liboqs en croisé pour diverses plateformes. Des informations détaillées sont disponibles dans le Wiki.
Des informations plus détaillées sur la compilation, les paramètres de compilation optionnels, les exemples d'applications, les conventions de codage et plus encore peuvent être trouvées dans le wiki.
Les contributions qui répondent aux critères d'acceptation sont les bienvenues. Voir notre Guide de contribution pour plus de détails.
liboqs est sous licence MIT ; voir LICENSE.txt pour plus de détails.
liboqs inclut certaines bibliothèques ou modules tiers qui sont sous des licences différentes ; le sous-dossier correspondant contient la licence qui s'applique dans ce cas. En particulier :
.CMake/CMakeDependentOption.cmake : Licence BSD 3-Clausesrc/common/common.c : inclut des portions sous licence Apache License v2.0src/common/crypto/aes/aes_c.c : domaine public ou toute licence approuvée OSIsrc/common/crypto/aes/aes*_ni.c : domaine publicsrc/common/crypto/sha2/sha2_c.c : domaine publicsrc/common/crypto/sha3/xkcp_low : CC0 (domaine public), sauf brg_endian.h et KeccakP-1600-AVX2.ssrc/common/crypto/sha3/xkcp_low/.../brg_endian.h : Licence BSD 3-Clausesrc/common/crypto/sha3/xkcp_low/.../KeccakP-1600-AVX2.s : licence de type BSD CRYPTOGAMSsrc/common/rand/rand_nist.c : Voir le fichierLe projet OQS est soutenu par la Post-Quantum Cryptography Alliance dans le cadre de la Linux Foundation.
Le projet OQS a été fondé par Douglas Stebila et Michele Mosca à l'Université de Waterloo. Les contributeurs à liboqs incluent des contributeurs individuels, des universitaires et chercheurs, et diverses entreprises, notamment Amazon Web Services, Cisco Systems, evolutionQ, IBM Research, Microsoft Research, SandboxAQ et softwareQ.
Le soutien financier pour le développement d'Open Quantum Safe a été fourni par Amazon Web Services, le Centre canadien pour la cybersécurité, Cisco, l'Unitary Fund, le NGI Assure Fund et VeriSign Inc.
Les projets de recherche qui ont développé des composants spécifiques d'OQS ont été soutenus par diverses subventions de recherche, y compris un financement du Conseil de recherches en sciences naturelles et en génie du Canada (CRSNG) ; voir les articles sources pour les remerciements de financement.
| Famille d'algorithmes | Statut de normalisation | Implémentation principale | Maintenance en amont | Niveau OQS |
|---|
| BIKE | Non sélectionné par le NIST | awslabs/bike-kem | À déterminer | Niveau 3 (Communauté) |
| Classic McEliece | À l'étude par l'ISO | PQClean/PQClean@1eacfda | Aucune maintenance active | Niveau 3 (Communauté) |
| FrodoKEM | À l'étude par l'ISO | microsoft/PQCrypto-LWEKE@a2f9dec | Au mieux | Niveau 2 (Pris en charge) |
| HQC | Sélectionné par le NIST pour une normalisation à venir | pqc-hqc/hqc@161cd4f | À déterminer | Niveau 2 (Pris en charge) |
| Kyber | Sélectionné par le NIST comme base pour ML-KEM (FIPS 203) | pq-crystals/kyber@441c051 | Maintenu activement | Niveau 3 (Communauté) |
| ML-KEM | Normalisé par le NIST | pq-code-package/mlkem-native@0ba906c | Maintenu activement | Niveau 1 (Cœur) |
| NTRU | Non sélectionné par le NIST, à l'étude de normalisation par NTT | PQClean/PQClean@4c9e5a3 | Maintenu activement | Niveau 3 (Communauté) |
| NTRU-Prime | Non sélectionné par le NIST | openssh/openssh-portable | Maintenu activement | Niveau 3 (Communauté) |
| Famille d'algorithmes | Statut de normalisation | Implémentation principale | Maintenance en amont | Niveau OQS |
|---|
| CROSS | À l'étude par le NIST | CROSS-signature/CROSS-lib-oqs@179d61b | Maintenu activement | Niveau 3 (Communauté) |
| Falcon | Sélectionné par le NIST pour une normalisation à venir | PQClean/PQClean@1eacfda | À déterminer | Niveau 3 (Communauté) |
| MAYO | À l'étude par le NIST | PQCMayo/MAYO-C@64e15c6 | Maintenu activement | Niveau 3 (Communauté) |
| ML-DSA | Normalisé par le NIST | pq-code-package/mldsa-native@9b0ee84 | Maintenu activement | Niveau 2 (Pris en charge) |
| MQOM | À l'étude par le NIST | mqom/mqom-v2@ec6b7fa | Maintenu activement | Niveau 3 (Communauté) |
| SLH-DSA | Normalisé par le NIST | pq-code-package/slhdsa-c@a0fc1ff | Au mieux | Niveau 3 (Communauté) |
| SNOVA | À l'étude par le NIST | vacuas/SNOVA@1c3ca6f | Au mieux | Niveau 3 (Communauté) |
| UOV | À l'étude par le NIST | pqov/pqov@33fa527 | Au mieux | Niveau 3 (Communauté) |
| Famille d'algorithmes | Statut de normalisation | Implémentation principale | Maintenance en amont | Niveau OQS |
|---|
| LMS | Normalisé par l'IRTF, approuvé par le NIST | cisco/hash-sigs | Au mieux | Niveau 2 (Pris en charge) |
| XMSS | Normalisé par l'IRTF, approuvé par le NIST | XMSS/xmss-reference | Maintenu activement | Niveau 2 (Pris en charge) |
kat_kem : Programme qui génère des valeurs de test à réponse connue (KAT) pour les mécanismes d'encapsulation de clés en utilisant la même procédure que les exigences de soumission NIST, pour vérification par rapport aux valeurs KAT soumises à l'aide de tests/test_kat.pykat_sig : Programme qui génère des valeurs de test à réponse connue (KAT) pour les schémas de signature en utilisant la même procédure que les exigences de soumission NIST, pour vérification par rapport aux valeurs KAT soumises à l'aide de tests/test_kat.pykat_sig_stfl : Programme pour vérifier les résultats par rapport aux valeurs KAT soumises à l'aide de tests/test_kat.pyspeed_kem : Programme de benchmarking pour les mécanismes d'encapsulation de clés ; voir ./speed_kem --help pour les instructions d'utilisationspeed_sig : Programme de benchmarking pour les mécanismes de signature ; voir ./speed_sig --help pour les instructions d'utilisationspeed_sig_stfl : Programme de benchmarking pour les mécanismes de signature avec état ; voir ./speed_sig_stfl --help pour les instructions d'utilisationexample_kem : Exemple minimal exécutable montrant l'utilisation de l'API KEMexample_sig : Exemple minimal exécutable montrant l'utilisation de l'API de signatureexample_sig_stfl : Exemple minimal exécutable montrant l'utilisation de l'API de signature avec étattest_aes, test_sha3 : Harnesses de test simples pour les sous-composants cryptographiquestest_portability : Harnesses de test simples pour vérifier la portabilité du code entre processeurs ; nécessite la présence de qemu ; un fonctionnement correct n'est validé que sur UbuntuLa suite de tests complète peut être exécutée en utilisant
ninja run_tests
Pour générer la documentation HTML de l'API, exécutez :
ninja gen_docs
Puis ouvrez docs/html/index.html dans votre navigateur web.
ninja install peut être exécuté pour installer la bibliothèque compilée et les fichiers include à un emplacement de votre choix, qui peut être spécifié en passant l'option -DCMAKE_INSTALL_PREFIX=<dir> à cmake au moment de la configuration. Alternativement, ninja package peut être exécuté pour créer un paquet d'installation.
ninja uninstall peut être exécuté pour supprimer tous les fichiers d'installation.
src/kem/bike/additional : Apache License v2.0src/kem/classic_mceliece/pqclean_* : domaine publicsrc/kem/kyber/pqcrystals-* : domaine public (CC0) ou Apache License v2.0src/kem/kyber/pqclean_* : domaine public (CC0), et domaine public (CC0) ou Apache License v2.0, et domaine public (CC0) ou MIT, et MITsrc/kem/kyber/libjade_* : domaine public (CC0) ou Apache License v2.src/kem/ml_kem/mlkem-native_* : MIT ou Apache License v2.0 ou licence ISCsrc/kem/ntru/pqclean_* : domaine public (CC0)src/kem/ntruprime/sntrup761_openssh : domaine publicsrc/sig/falcon/pqclean_\*\_aarch64 : Apache License v2.0src/sig/mayo/* : Apache License v2.0src/sig/ml_dsa/pqcrystals-* : domaine public (CC0) ou Apache License v2.0