
Biblioteca em C que implementa o FrodoKEM, um mecanismo de encapsulamento de chaves pós-quântico baseado no problema Learning with Errors, com variantes para AES e SHAKE, incluindo modos efêmero e padrão.
Esta biblioteca em C implementa o FrodoKEM, um protocolo de encapsulamento de chave (KEM) seguro sob IND-CCA baseado no bem estudado problema Learning with Errors (LWE) [1,3], que por sua vez tem conexões estreitas com problemas conjecturados como difíceis em reticulados genéricos e "algebricamente não estruturados". Este pacote também inclui implementações de referência em Python. FrodoKEM é conjecturado como seguro contra ataques de computadores quânticos.
FrodoKEM consiste em duas variantes principais:
Em contraste com o eFrodoKEM, o FrodoKEM padrão usa uma semente ampliada para gerar a semente para amostragem das matrizes secretas e de erro, e inclui um sal adicional em uma das computações de hash no encapsulamento e desencapsulamento. Essas contramedidas protegem o FrodoKEM padrão contra alguns ataques de múltiplos textos cifrados. Consulte [3] para mais detalhes sobre essas duas variantes.
Concretamente, esta biblioteca inclui os seguintes esquemas KEM usando AES128 para a geração da matriz pública "A":
E os seguintes esquemas KEM usando SHAKE128 para a geração da matriz pública "A":
O rótulo "eFrodoKEM" corresponde às variantes efêmeras.
A biblioteca foi desenvolvida pela equipe FrodoKEM e pela Microsoft Research para fins de experimentação.
common: funções aleatórias, implementações de AES e SHA-3.eFrodoKEM: implementações em C e Python3 do eFrodoKEM.estimates: estimativas de criptoanálise do FrodoKEM relatadas em [3].FrodoKEM: implementações em C e Python3 do FrodoKEM padrão.LICENSE: arquivo de licença MIT.README.md: este arquivo readme.A biblioteca FrodoKEM é suportada em uma ampla gama de plataformas, incluindo processadores x64, x86, ARM, PowerPC e s390x executando Windows, Linux ou macOS, e suporta formatos little-endian e big-endian. Testamos a biblioteca com Microsoft Visual Studio, GNU GCC e clang.
Este software é licenciado sob a Licença MIT; consulte o arquivo LICENSE para detalhes. A implementação em Python3 é licenciada sob a licença Creative Commons Zero v1.0 Universal. Inclui alguns módulos de terceiros que são licenciados de forma diferente. Em particular:
common/aes/aes_c.c: domínio públicocommon/aes/aes_ni.c: domínio públicocommon/sha3/fips202.c: domínio públicocommon/sha3/fips202x4.c: domínio públicocommon/sha3/keccak4x: todos os arquivos nesta pasta são de domínio público (CC0), excetocommon/sha3/keccak4x/brg_endian.h que tem direitos autorais de Brian Gladman e vem com uma licença BSD de 3 cláusulas.<FrodoKEM_variant>/tests/ds_benchmark.h: domínio público<FrodoKEM_variant>/tests/PQCtestKAT_kem<#>.c: com direitos autorais de Lawrence E. Bassham<FrodoKEM_variant>/tests/PQCtestKAT_kem<#>_shake.c: com direitos autorais de Lawrence E. Bassham<FrodoKEM_variant>/tests/rng.c: com direitos autorais de Lawrence E. Bassham[1] Erdem Alkim, Joppe W. Bos, Léo Ducas, Karen Easterbrook, Brian LaMacchia, Patrick Longa, Ilya Mironov, Michael Naehrig, Valeria Nikolaenko, Chris Peikert, Ananth Raghunathan e Douglas Stebila,
"FrodoKEM: Learning With Errors Key Encapsulation". Submissão ao projeto de Padronização Pós-Quântica do NIST, 2021-2023. A especificação da rodada 3 do FrodoKEM está disponível aqui.
[2] Joppe W. Bos, Craig Costello, Léo Ducas, Ilya Mironov, Michael Naehrig, Valeria Nikolaenko, Ananth Raghunathan e Douglas Stebila,
"Frodo: Take off the ring! Practical, quantum-secure key exchange from LWE".
ACM CCS 2016, 2016. A versão preprint está disponível aqui.
[3] Lewis Glabush, Patrick Longa, Michael Naehrig, Chris Peikert, Douglas Stebila e Fernando Virdia, "FrodoKEM: A CCA-Secure Learning With Errors Key Encapsulation Mechanism". IACR Communications in Cryptology (a publicar), 2025.
Este projeto adotou o Código de Conduta de Código Aberto da Microsoft. Para mais informações, consulte as Perguntas Frequentes sobre o Código de Conduta ou entre em contato com [email protected] com quaisquer perguntas ou comentários adicionais.