Veja o status de construção de cada componente aqui
PQClean , em resumo, é um esforço para coletar implementações limpas dos esquemas pós-quânticos que estão no projeto pós-quântico do NIST. O objetivo do PQClean é fornecer implementações independentes que
O que o PQClean não pretende é
Como primeiro objetivo principal, estamos coletando implementações C que atendam aos requisitos listados abaixo. Também aceitamos implementações otimizadas, mas ainda exigindo código testado e de alta qualidade.
Revise também nossas diretrizes para contribuidores se estiver interessado em adicionar um esquema ao PQClean.
Para um resumo das lições aprendidas ao trabalhar no PQClean, consulte:
Matthias J. Kannwischer, Peter Schwabe, Douglas Stebila e Thom Wiggers. “Melhorando a qualidade do software em projetos de padronização de criptografia.” In: Pesquisa de Padronização de Segurança – Workshops EuroS&P 2022. 2022.
Encontre o artigo em https://eprint.iacr.org/2022/337
Por favor, cite este trabalho ao se referir ao 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 } ,
}
Observe que muitas das implementações incluídas no PQClean se originam de projetos de pesquisa originais, e seus autores também apreciarão ser citados.
A verificação dos itens desta lista ainda está em desenvolvimento. Os itens verificados devem estar funcionando.
api.h
não pode incluir arquivos externos -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes
com gcc
e clang
#if
/ #ifdef
s apenas para encapsulamento de cabeçalho const
são rotulados como const
fips202.c
, sha2.c
, aes.c
, randombytes.c
0
em caso de sucesso nmake
) PQCLEAN_SCHEMENAME_
LICENSE
(veja abaixo) META.yml
fornecendo detalhes sobre a versão do algoritmo, designers META.yml
. stdint.h
(opcional, recomendado)size_t
(opcional, recomendado)for (size_t i=...
) (opcional, recomendado) Para os esquemas a seguir, temos implementações de um ou mais de seus conjuntos de parâmetros. Para todos esses esquemas temos código C limpo, mas para alguns também temos código otimizado.
Finalistas:
Candidatos suplentes:
Padrões futuros:
Candidatos suplentes:
Implementações anteriormente disponíveis no PQClean e descartadas na Rodada 3 do esforço de padronização do NIST estão disponíveis na tag round2
.
Implementações anteriormente disponíveis no PQClean e descartadas na Rodada 4 do esforço de padronização do NIST estão disponíveis na tag round3
.
PQClean usa essencialmente a mesma API necessária para as implementações de referência do NIST, que também é usada pelo SUPERCOP e pela libpqcrypto. As únicas diferenças para essa API são as seguintes:
size_t
em vez de unsigned long long
; e 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 );
Conforme observado acima, o PQClean não deve ser construído como uma biblioteca única: é uma coleção de código-fonte que pode ser facilmente integrada a outras bibliotecas. O repositório PQClean inclui vários programas de teste que criam vários arquivos, mas você não deve usar os binários resultantes.
Lista de dependências necessárias: gcc or clang, make, python3, python-yaml library, valgrind, astyle (>= 3.0)
.
Cada diretório de implementação no PQClean (por exemplo, crypto_kem/kyber768_clean) pode ser extraído para uso em seu próprio projeto. Você precisará:
common/randombytes.h
(um gerador criptográfico de números aleatórios) e possivelmente common/sha2.h
(a família de funções hash SHA-2), common/aes.h
(implementações AES), common/fips202.h
(o família de funções hash SHA-3) e common/sp800-185.h
(a família cSHAKE). É possível usar as implementações da pasta common/
, mas observe que elas podem não ser as implementações de melhor desempenho e podem fazer coisas desnecessárias (como alocações de heap) para nossos propósitos de teste.Em relação ao item 2, adicionando os arquivos ao sistema de construção do seu projeto, cada implementação no PQClean é acompanhada por dois exemplos de makefiles que mostram como se pode construir os arquivos para aquela implementação:
Makefile
que pode ser usado com GNU Make, BSD Make e possivelmente outros.Makefile.Microsoft_nmake
que pode ser usado com o nmake do Visual Studio. Os projetos a seguir consomem implementações do PQClean e fornecem seus próprios wrappers em torno das implementações. Suas estratégias de integração podem servir de exemplo para seus próprios projetos.
Cada subdiretório que contém implementações contém um arquivo LICENSE
informando sob qual licença essa implementação específica é lançada. Os arquivos em common
contêm informações de licenciamento no topo do arquivo (e atualmente são de domínio público ou MIT). Todos os outros códigos neste repositório são lançados sob as condições CC0.
Consulte https://github.com/PQClean/PQClean/wiki/Test-framework para obter detalhes sobre a estrutura de teste PQClean.
Embora executemos testes automáticos extensivos em Github Actions (compilações (emuladas) de Linux, compilações MacOS e Windows) e Travis CI (compilações Aarch64), e a maioria dos testes também pode ser executada localmente. Para fazer isso, certifique-se de que o seguinte esteja instalado:
pytest
para python 3. Também recomendamos a instalação pytest-xdist
para permitir a execução de testes em paralelo.
Você também precisará certificar-se de que os submódulos foram inicializados executando:
git submodule update --init
Execute os testes baseados em Python acessando o diretório test
e executando pytest -v
ou (recomendado) pytest -n=auto
para testes paralelos.
Você também pode executar python3
onde
é qualquer um dos arquivos começando com test_
na pasta test/
.