Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
mlkem-native — Segura, rápida e portátil implementação em C90 de ML-KEM / FIPS 203 | Kitploit
Ferramentas/GitHubGitHub/pq-code-package/mlkem-native
Segurança de Sistemas EmbarcadosAnálise EstáticaCriptografiaSegurança de Hardware
GitHubpq-code-package/mlkem-native

mlkem-native

Segura, rápida e portátil implementação em C90 de ML-KEM / FIPS 203

Ver Repositório
223659há 1 diaRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Site

mlkem-native

CI Benchmarks C90

License: Apache License: ISC License: MIT

mlkem-native é uma implementação segura, rápida e portável em C901 do ML-KEM2. É um fork da implementação de referência do ML-KEM3.

Todo o código C em mlkem/src/* e mlkem/src/fips202/* é comprovadamente seguro em relação à memória (sem estouro de memória) e seguro em relação a tipos (sem estouro de inteiros) usando CBMC4. Todo o assembly AArch64 e x86_64 é comprovadamente correto funcionalmente, seguro em relação à memória e de temporização independente de segredos (tempo constante), usando HOL-Light5.

mlkem-native inclui backends nativos para Arm (64 bits, Neon), Intel/AMD (64 bits, AVX2), RISC-V (64 bits, RVV) e POWER (ppc64le, VSX). Consulte benchmarks para dados de desempenho.

mlkem-native é apoiado pela Post-Quantum Cryptography Alliance como parte da Linux Foundation.

Início rápido para Ubuntu

root@kitploit:~
# Instalar pacotes base
sudo apt-get update
sudo apt-get install make gcc python3 git

# Clonar mlkem-native
git clone https://github.com/pq-code-package/mlkem-native.git
cd mlkem-native

# Compilar e executar testes
make build
make test

# O mesmo usando `tests`, um wrapper conveniente em torno de `make`
./scripts/tests all
# Mostrar todas as opções
./scripts/tests --help

Consulte BUILDING.md para mais informações.

Aplicações

mlkem-native é usado em

  • libOQS do projeto Open Quantum Safe desde 0.13.0 (como a implementação padrão de ML-KEM)
  • A biblioteca de criptografia da AWS AWS-LC desde v1.50.0
  • A biblioteca TLS rustls escrita em Rust desde 0.23.28 (através da AWS-LC como o provedor de criptografia padrão)
  • Pavona - uma biblioteca de blocos de silício abertos modulares, comprovados em tapeout e seguros por padrão

Verificação Formal

Todo o código C em mlkem/src/* e mlkem/src/fips202/* é comprovadamente seguro em relação à memória (sem estouro de memória) e seguro em relação a tipos (sem estouro de inteiros). Isso usa o C Bounded Model Checker (CBMC) e se baseia em contratos de função e anotações de invariantes de loop no código-fonte. Consulte proofs/cbmc para detalhes.

Todo o assembly AArch64 e x86_64 é comprovadamente correto funcionalmente, seguro em relação à memória e com temporização independente de segredos (tempo constante), no nível do código-objeto. Isso usa o provador de teoremas interativo HOL-Light e a infraestrutura de verificação s2n-bignum (que inclui modelos das partes relevantes das arquiteturas Arm e x86). Consulte proofs/hol_light para detalhes.

NOTA: A Verificação Formal nunca é absoluta. Consulte SOUNDNESS.md para uma análise detalhada do escopo, suposições e riscos dos esforços de verificação formal em torno do mlkem-native.

Segurança

Todo o assembly AArch64 e x86_64 em mlkem-native é formalmente comprovado em HOL Light como livre de fluxo de controle dependente de segredos, padrões de acesso à memória e instruções de latência variável, frustrando a maioria dos canais laterais de temporização (consulte proofs/hol_light para detalhes). O código C é endurecido contra canais laterais de temporização introduzidos pelo compilador (como KyberSlash6 ou clangover7) através de barreiras adequadas e padrões de tempo constante.

A ausência de ramificações dependentes de segredos, padrões de acesso à memória e instruções de latência variável também é testada usando valgrind com várias combinações de compiladores e opções de compilação.

Outros ataques. mlkem-native visa resistência apenas contra canais laterais de temporização. Outras classes de ataque, como canais laterais de potência e eletromagnéticos, canais laterais microarquiteturais (por exemplo, execução especulativa) ou ataques de injeção de falhas, estão atualmente fora do escopo.

Design

mlkem-native é dividido em um frontend e dois backends para aritmética e FIPS202 / SHA3. O frontend é fixo, escrito em C, e cobre todas as rotinas que não são críticas para o desempenho. Os backends são flexíveis, cuidam de rotinas sensíveis ao desempenho e podem ser implementados em C ou código nativo (assembly/intrínsecos); consulte mlkem/src/native/api.h para o backend aritmético e mlkem/src/fips202/native/api.h para o backend FIPS-202.

mlkem-native atualmente oferece os seguintes backends:

  • Backend C portável padrão
  • Backend Arm de 64 bits (usando Neon)
  • Backend Intel/AMD de 64 bits (usando AVX2)
  • Backend RISC-V de 64 bits (usando RVV)
  • Backend POWER de 64 bits (ppc64le, usando VSX; suporta POWER8 e superior)
  • Backend Armv8.1-M de 32 bits (usando Helium/MVE) -- consulte #1501. Isso ainda é experimental e desabilitado por padrão.

Se você quiser contribuir com novos backends, entre em contato ou apenas abra um PR.

Nosso assembly AArch64 é desenvolvido usando o superotimizador SLOTHY, seguindo a abordagem descrita no artigo SLOTHY8: Escrevemos assembly 'limpo' à mão e automatizamos micro-otimizações (por exemplo, consulte o NTT AArch64 clean vs otimizado). Consulte dev/README.md para mais detalhes.

Vetores de Teste

mlkem-native é testado contra todos os vetores de teste oficiais ACVP ML-KEM9 e os vetores de teste ML-KEM do Wycheproof10.

ACVP

Você pode executar testes ACVP usando o script tests ou o cliente ACVP diretamente:

root@kitploit:~
# Usando o script de testes
./scripts/tests acvp
# Usando uma versão específica do ACVP
./scripts/tests acvp --version v1.1.0.41

# Usando o cliente ACVP diretamente
python3 ./test/acvp/acvp_client.py
python3 ./test/acvp/acvp_client.py --version v1.1.0.41

# Usando arquivos de vetores de teste ACVP específicos (baixados do ACVP-Server)
# python3 ./test/acvp/acvp_client.py -p {PROMPT}.json -e {EXPECTED_RESULT}.json
# Por exemplo, supondo que você tenha executado o acima
python3 ./test/acvp/acvp_client.py \
  -p ./test/acvp/.acvp-data/v1.1.0.41/files/ML-KEM-keyGen-FIPS203/prompt.json \
  -e ./test/acvp/.acvp-data/v1.1.0.41/files/ML-KEM-keyGen-FIPS203/expectedResults.json

Wycheproof

Você pode executar testes Wycheproof10 usando o script tests ou o cliente Wycheproof diretamente:

root@kitploit:~
# Usando o script de testes
./scripts/tests wycheproof

# Usando o cliente Wycheproof diretamente
python3 ./test/wycheproof/wycheproof_client.py

Benchmarking

Você pode medir desempenho, uso de memória e tamanho do binário usando o script tests:

root@kitploit:~
# Benchmarks de velocidade (-c seleciona o contador de ciclos: NO, PMU, PERF ou MAC)
# Nota: PERF/MAC pode exigir a flag -r para executar binários de benchmarking usando sudo
./scripts/tests bench -c PMU
./scripts/tests bench -c PERF -r

# Análise de uso de pilha
./scripts/tests stack

# Medição do tamanho do binário
./scripts/tests size

Para resultados de benchmark de CI e dados históricos de desempenho, consulte a página de benchmarking.

Uso

Se você quiser usar mlkem-native, importe mlkem para a árvore de fontes do seu projeto e compile usando seu sistema de build favorito. Consulte mlkem para mais informações, e examples/basic para um exemplo simples. O sistema de build fornecido neste repositório é apenas para fins de desenvolvimento.

Consulte API-CONVENTIONS.md para convenções que se aplicam a todas as funções públicas, como valores de retorno, validade de ponteiros e o estado dos buffers de saída em caso de erro.

Posso trazer meu próprio FIPS-202?

mlkem-native depende e vem com uma implementação de FIPS-20211. Se sua biblioteca tem sua própria implementação de FIPS-202, você pode usá-la em vez da que acompanha o mlkem-native. Consulte FIPS202.md, e examples/bring_your_own_fips202 para um exemplo usando tiny_sha312.

Preciso usar os backends de assembly?

Não. Se você quiser um build somente em C, basta omitir os diretórios mlkem/src/native e/ou mlkem/src/fips202/native da sua importação e desdefinir MLK_CONFIG_USE_NATIVE_BACKEND_ARITH e/ou MLK_CONFIG_USE_NATIVE_BACKEND_FIPS202 no seu mlkem_native_config.h.

Preciso configurar o CBMC para usar mlkem-native?

Não. Embora recomendemos que você considere usá-lo, mlkem-native compilará e executará bem sem CBMC -- apenas certifique-se de incluir cbmc.h e ter CBMC indefinido. Em particular, você não precisa remover todos os contratos de função e invariantes de loop do código; eles serão ignorados a menos que CBMC esteja definido.

O mlkem-native suporta todos os níveis de segurança do ML-KEM?

Sim. O nível de segurança é um parâmetro de tempo de compilação configurado definindo MLK_CONFIG_PARAMETER_SET=512/768/1024 em mlkem_native_config.h. Se sua biblioteca/aplicação exigir vários níveis de segurança, você pode compilar + vincular três instâncias do mlkem-native enquanto compartilha código comum; isso é chamado de 'build multinível' e é demonstrado em examples/multilevel_build. Consulte também mlkem.

Posso trazer meu próprio backend?

Sim, você pode adicionar mais backends para aritmética nativa ML-KEM e/ou para FIPS-202. Siga os backends existentes como modelos ou consulte examples/custom_backend para um exemplo mínimo de como registrar um backend personalizado.

Tem uma Pergunta?

Se você acha que encontrou uma falha de segurança no mlkem-native, por favor relate a vulnerabilidade através do relatório privado de vulnerabilidades do Github. Por favor, não crie uma issue pública no GitHub.

Se você tiver qualquer outra pergunta / problema não relacionado à segurança / solicitação de recurso, por favor abra uma issue no GitHub.

Contribuindo

Se você quiser nos ajudar a construir o mlkem-native, entre em contato. Você pode contatar a equipe do mlkem-native através do Discord da PQCA. Consulte também CONTRIBUTING.md.

Footnotes

  1. Estritamente falando, dependemos de C90 + stdint.h + unsigned long long de 64 bits. ↩

  2. National Institute of Standards and Technology: FIPS 203 Module-Lattice-Based Key-Encapsulation Mechanism Standard, https://csrc.nist.gov/pubs/fips/203/final ↩

  3. Bos, Ducas, Kiltz, Lepoint, Lyubashevsky, Schanck, Schwabe, Seiler, Stehlé: CRYSTALS-Kyber C reference implementation, https://github.com/pq-crystals/kyber/tree/main/ref ↩

  4. Diffblue, Amazon Web Services: C Bounded Model Checker, https://github.com/diffblue/cbmc ↩

  5. John Harrison: HOL-Light Theorem Prover, https://hol-light.github.io/ ↩

  6. Bernstein, Bhargavan, Bhasin, Chattopadhyay, Chia, Kannwischer, Kiefer, Paiva, Ravi, Tamvada: KyberSlash: Exploiting secret-dependent division timings in Kyber implementations, https://kyberslash.cr.yp.to/papers.html ↩

  7. Antoon Purnal: clangover,

Baixar ferramenta
https://github.com/antoonpurnal/clangover
↩
  • Abdulrahman, Becker, Kannwischer, Klein: Fast and Clean: Auditable high-performance assembly via constraint solving, https://eprint.iacr.org/2022/1303 ↩

  • National Institute of Standards and Technology: Automated Cryptographic Validation Protocol (ACVP) Server, https://github.com/usnistgov/ACVP-Server ↩

  • Community Cryptography Specification Project: Project Wycheproof, https://github.com/C2SP/wycheproof ↩ ↩2

  • National Institute of Standards and Technology: FIPS202 SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, https://csrc.nist.gov/pubs/fips/202/final ↩

  • Markku-Juhani O. Saarinen: tiny_sha3, https://github.com/mjosaarinen/tiny_sha3 ↩