Voir l'état de construction de chaque composant ici
En bref, PQClean est un effort visant à collecter des implémentations propres des schémas post-quantiques du projet post-quantique du NIST. L'objectif de PQClean est de fournir des implémentations autonomes qui
Ce que PQClean ne vise pas , c'est
Comme premier objectif principal, nous collectons les implémentations C qui répondent aux exigences énumérées ci-dessous. Nous acceptons également les implémentations optimisées, mais nécessitant toujours un code testé de haute qualité.
Veuillez également consulter nos directives destinées aux contributeurs si vous souhaitez ajouter un système à PQClean.
Pour un résumé des leçons apprises en travaillant sur PQClean, veuillez vous référer à :
Matthias J. Kannwischer, Peter Schwabe, Douglas Stebila et Thom Wiggers. « Amélioration de la qualité des logiciels dans les projets de normalisation de la cryptographie. » Dans : Recherche sur la normalisation de la sécurité – Ateliers EuroS&P 2022. 2022.
Retrouvez l'article sur https://eprint.iacr.org/2022/337
Veuillez citer ce travail en faisant référence à 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 } ,
}
Veuillez noter que bon nombre des implémentations incluses dans PQClean proviennent elles-mêmes de projets de recherche originaux, et leurs auteurs apprécieront également d'être cités.
La vérification des éléments de cette liste est encore en cours de développement. Les éléments cochés devraient fonctionner.
api.h
ne peut pas inclure de fichiers externes -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
avec gcc
et clang
#if
/ #ifdef
s uniquement pour l'encapsulation d'en-tête const
sont étiquetés comme const
fips202.c
, sha2.c
, aes.c
, randombytes.c
0
en cas de succès nmake
) PQCLEAN_SCHEMENAME_
LICENSE
(voir ci-dessous) META.yml
donnant des détails sur la version de l'algorithme, les concepteurs META.yml
. stdint.h
(facultatif, recommandé)size_t
(facultatif, recommandé)for (size_t i=...
) (facultatif, recommandé) Pour les schémas suivants, nous avons des implémentations d'un ou plusieurs de leurs jeux de paramètres. Pour tous ces schémas, nous avons du code C propre, mais pour certains, nous avons également du code optimisé.
Finalistes :
Candidats suppléants :
Normes à venir :
Candidats suppléants :
Les implémentations précédemment disponibles dans PQClean et abandonnées lors du troisième cycle de l'effort de normalisation du NIST sont disponibles dans la balise round2
.
Les implémentations précédemment disponibles dans PQClean et abandonnées lors du Round 4 de l'effort de normalisation du NIST sont disponibles dans la balise round3
.
PQClean utilise essentiellement la même API que celle requise pour les implémentations de référence NIST, qui est également utilisée par SUPERCOP et par libpqcrypto. Les seules différences par rapport à cette API sont les suivantes :
size_t
au lieu de unsigned long long
; et 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 );
Comme indiqué ci-dessus, PQClean n'est pas destiné à être construit comme une bibliothèque unique : il s'agit d'une collection de code source qui peut être facilement intégrée à d'autres bibliothèques. Le référentiel PQClean comprend divers programmes de test qui créent divers fichiers, mais vous ne devez pas utiliser les binaires résultants.
Liste des dépendances requises : gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
Chaque répertoire d'implémentation dans PQClean (par exemple, crypto_kem/kyber768_clean) peut être extrait pour être utilisé dans votre propre projet. Vous devrez :
common/randombytes.h
(un générateur de nombres aléatoires cryptographiques), et éventuellement common/sha2.h
(la famille de fonctions de hachage SHA-2), common/aes.h
(implémentations AES), common/fips202.h
(le famille de fonctions de hachage SHA-3) et common/sp800-185.h
(la famille cSHAKE). Il est possible d'utiliser les implémentations du dossier common/
, mais notez qu'elles ne sont peut-être pas les implémentations les plus performantes et peuvent faire des choses inutiles (comme les allocations de tas) pour nos besoins de tests.Concernant le point 2, l'ajout des fichiers au système de build de votre projet, chaque implémentation dans PQClean est accompagnée de deux exemples de makefiles qui montrent comment construire les fichiers pour cette implémentation :
Makefile
qui peut être utilisé avec GNU Make, BSD Make et éventuellement d'autres.Makefile.Microsoft_nmake
qui peut être utilisé avec nmake de Visual Studio. Les projets suivants consomment des implémentations de PQClean et fournissent leurs propres wrappers autour des implémentations. Leurs stratégies d'intégration peuvent servir d'exemples pour vos propres projets.
Chaque sous-répertoire contenant les implémentations contient un fichier LICENSE
indiquant sous quelle licence cette implémentation spécifique est publiée. Les fichiers common
contiennent des informations de licence en haut du fichier (et sont actuellement soit du domaine public, soit du MIT). Tous les autres codes de ce référentiel sont publiés sous les conditions de CC0.
Voir https://github.com/PQClean/PQClean/wiki/Test-framework pour plus de détails sur le framework de test PQClean.
Bien que nous effectuions des tests automatiques approfondis sur les actions Github (versions Linux (émulées), versions MacOS et Windows) et Travis CI (versions Aarch64), la plupart des tests peuvent également être exécutés localement. Pour ce faire, assurez-vous que les éléments suivants sont installés :
pytest
pour python 3. Nous vous recommandons également d'installer pytest-xdist
pour permettre l'exécution de tests en parallèle.
Vous devrez également vous assurer que les sous-modules sont initialisés en exécutant :
git submodule update --init
Exécutez les tests basés sur Python en accédant au répertoire test
et en exécutant pytest -v
ou (recommandé) pytest -n=auto
pour les tests parallèles.
Vous pouvez également exécuter python3 <testmodule>
où <testmodule>
correspond à l'un des fichiers commençant par test_
dans le dossier test/
.