Vea el estado de compilación de cada componente aquí
PQClean , en resumen, es un esfuerzo por recopilar implementaciones limpias de los esquemas poscuánticos que se encuentran en el proyecto poscuántico del NIST. El objetivo de PQClean es proporcionar implementaciones independientes que
Lo que PQClean no pretende es
Como primer objetivo principal, estamos recopilando implementaciones de C que cumplan con los requisitos que se enumeran a continuación. También aceptamos implementaciones optimizadas, pero aún requerimos código probado y de alta calidad.
Revise también nuestras pautas para contribuyentes si está interesado en agregar un esquema a PQClean.
Para obtener un resumen de las lecciones aprendidas mientras trabajaba en PQClean, consulte:
Matthias J. Kannwischer, Peter Schwabe, Douglas Stebila y Thom Wiggers. "Mejora de la calidad del software en proyectos de estandarización de criptografía". En: Investigación sobre estandarización de la seguridad - Talleres EuroS&P 2022. 2022.
Encuentre el artículo en https://eprint.iacr.org/2022/337
Cite este trabajo cuando haga referencia a 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 } ,
}
Tenga en cuenta que muchas de las implementaciones incluidas en PQClean se originan a partir de proyectos de investigación originales y sus autores también agradecerán que los citen.
La verificación de los elementos de esta lista aún se está desarrollando. Los elementos marcados deberían estar funcionando.
api.h
no puede incluir archivos externos -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
con gcc
y clang
#if
/ #ifdef
s solo para encapsulación de encabezados const
están etiquetados como const
fips202.c
, sha2.c
, aes.c
, randombytes.c
0
en caso de éxito nmake
) PQCLEAN_SCHEMENAME_
LICENSE
(ver más abajo) META.yml
que brinda detalles sobre la versión del algoritmo y los diseñadores. META.yml
. stdint.h
(opcional, recomendado)size_t
(opcional, recomendado)for (size_t i=...
) (opcional, recomendado) Para los siguientes esquemas tenemos implementaciones de uno o más de sus conjuntos de parámetros. Para todos estos esquemas tenemos código C limpio, pero para algunos también tenemos código optimizado.
Finalistas:
Candidatos suplentes:
Estándares futuros:
Candidatos suplentes:
Las implementaciones anteriormente disponibles en PQClean y eliminadas en la Ronda 3 del esfuerzo de estandarización del NIST están disponibles en la etiqueta round2
.
Las implementaciones anteriormente disponibles en PQClean y eliminadas en la Ronda 4 del esfuerzo de estandarización del NIST están disponibles en la etiqueta round3
.
Básicamente, PQClean utiliza la misma API que se requiere para las implementaciones de referencia de NIST, que también utilizan SUPERCOP y libpqcrypto. Las únicas diferencias con esa API son las siguientes:
size_t
en lugar de unsigned long long
; y 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 );
Como se señaló anteriormente, PQClean no está diseñado para construirse como una biblioteca única: es una colección de código fuente que se puede integrar fácilmente en otras bibliotecas. El repositorio de PQClean incluye varios programas de prueba que crean varios archivos, pero no debes usar los binarios resultantes.
Lista de dependencias requeridas: gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
Cada directorio de implementación en PQClean (por ejemplo, crypto_kem/kyber768_clean) se puede extraer para usarlo en su propio proyecto. Necesitará:
common/randombytes.h
(un generador criptográfico de números aleatorios) y posiblemente common/sha2.h
(la familia de funciones hash SHA-2), common/aes.h
(implementaciones AES), common/fips202.h
(el familia de funciones hash SHA-3) y common/sp800-185.h
(la familia cSHAKE). Es posible utilizar las implementaciones de la carpeta common/
, pero tenga en cuenta que es posible que no sean las implementaciones de mayor rendimiento y que hagan cosas innecesarias (como asignaciones de montón) para nuestros propósitos de prueba.Con respecto al punto 2, agregar los archivos al sistema de compilación de su proyecto, cada implementación en PQClean va acompañada de dos archivos MAKE de ejemplo que muestran cómo se pueden compilar los archivos para esa implementación:
Makefile
que se puede utilizar con GNU Make, BSD Make y posiblemente con otros.Makefile.Microsoft_nmake
que se puede utilizar con nmake de Visual Studio. Los siguientes proyectos consumen implementaciones de PQClean y proporcionan sus propios contenedores alrededor de las implementaciones. Sus estrategias de integración pueden servir como ejemplos para sus propios proyectos.
Cada subdirectorio que contiene implementaciones contiene un archivo LICENSE
que indica bajo qué licencia se publica esa implementación específica. Los archivos en common
contienen información de licencia en la parte superior del archivo (y actualmente son de dominio público o del MIT). El resto del código de este repositorio se publica bajo las condiciones de CC0.
Consulte https://github.com/PQClean/PQClean/wiki/Test-framework para obtener detalles sobre el marco de prueba de PQClean.
Si bien realizamos pruebas automáticas exhaustivas en Github Actions (compilaciones de Linux (emuladas), compilaciones de MacOS y Windows) y Travis CI (compilaciones de Aarch64), la mayoría de las pruebas también se pueden ejecutar localmente. Para hacer esto, asegúrese de que esté instalado lo siguiente:
pytest
para Python 3. También recomendamos instalar pytest-xdist
para permitir la ejecución de pruebas en paralelo.
También deberá asegurarse de que los submódulos estén inicializados ejecutando:
git submodule update --init
Ejecute las pruebas basadas en Python ingresando al directorio test
y ejecutando pytest -v
o (recomendado) pytest -n=auto
para pruebas paralelas.
También puede ejecutar python3 <testmodule>
donde <testmodule>
es cualquiera de los archivos que comienzan con test_
en la carpeta test/
.