1 pontos por GN⁺ 2024-02-02 | 1 comentários | Compartilhar no WhatsApp

Criptografia resistente a quântica para o ecossistema Go

  • filippo.io/mlkem768 é uma implementação pura em Go do ML-KEM-768, otimizada para correção e legibilidade.
  • O ML-KEM é um mecanismo de troca de chaves resistente a quântica em processo de padronização pelo NIST e já adotado na maior parte da indústria.
  • O pacote é composto por cerca de 500 linhas de código, 200 linhas de comentários e 650 linhas de testes, sem dependências além de golang.org/x/crypto/sha3.
  • Está previsto para ser integrado à biblioteca padrão do Go e foi projetado para oferecer alta confiança de segurança por meio de facilidade de revisão, simplicidade e testes rigorosos.

Implementação para verificação da especificação

  • Ao contrário da maioria das implementações, este código não foi portado da biblioteca de referência pq-crystals e foi escrito do zero, sem ler detalhadamente outras bases de código.
  • O documento FIPS 203 oferece pseudocódigo detalhado, definições rigorosas e informações de tipos consistentes, servindo como um excelente guia de implementação.
  • Para aumentar a legibilidade do código e seu valor como recurso de aprendizado, os nomes de funções e variáveis, assim como a ordem das operações, foram cuidadosamente alinhados à especificação FIPS.

Álgebra linear e polinomial suficiente para implementar

  • A especificação exige uma base matemática relativamente limitada, mas, para facilitar o trabalho de quem implementa, foi escrito o texto 'Álgebra linear e polinomial suficiente para implementar Kyber'.
  • O restante fica como exercício para o leitor, incluindo 1) aritmética modular no primo 3329, 2) implementação concreta das funções de compressão e descompressão de [0, 3329) para [0, 2ᵈ), e 3) garantia de operações em tempo constante.

Legibilidade e valor educacional

  • A legibilidade é um dos principais objetivos da implementação, permitindo revisões eficazes e atuando como recurso educacional para a próxima geração de mantenedores e engenheiros de criptografia.
  • Em alguns casos, o código é tornado mais longo e menos reutilizável para aumentar a legibilidade de funções complexas.

Alta confiança de segurança por meio de testes

  • Verifica-se se a geração de chaves, encapsulamento e desencapsulamento funcionam corretamente, mantendo cobertura de testes acima de 95%.
  • Garante interoperabilidade com vetores de teste obtidos do NIST e de outras implementações, além de testar minuciosamente operações aritméticas básicas de campo comparando com valores esperados.
  • Como parte do projeto CCTV, são publicados vetores de teste reutilizáveis por outras implementações.

Desempenho

  • Desempenho não é o objetivo principal, mas o pacote precisa ser rápido o suficiente para ser útil.
  • O ML-KEM é suficientemente rápido, e esta implementação simples consegue competir com implementações de P-256 e X25519 otimizadas em assembly.
  • Também houve esforço para melhorar o desempenho seguindo padrões de programação em Go e minimizando alocações no heap.

Usando a implementação de ML-KEM como Kyber v3

  • O NIST fez algumas pequenas alterações na submissão da Round 3 do Kyber.
  • Alguns protocolos experimentais foram definidos com base no Kyber v3 (ou "draft00"), mas não há necessidade de criar um pacote separado.
  • É possível usar o ML-KEM para gerar o segredo compartilhado K e depois aplicar uma derivação de chave adicional para gerar o segredo compartilhado do Kyber.

Opinião do GN⁺

  • Importância da criptografia resistente a quântica: com o avanço da computação quântica, as técnicas criptográficas existentes podem se tornar vulneráveis, por isso o desenvolvimento e a padronização de tecnologias resistentes a quântica como o ML-KEM são muito importantes.
  • Escalabilidade da linguagem Go: esta implementação mostra a escalabilidade e a flexibilidade da linguagem Go, além de planejar integrar a biblioteca criptográfica à biblioteca padrão, o que deve torná-la um recurso útil para a comunidade de desenvolvedores Go.
  • Valor educacional: a abordagem focada em legibilidade e valor educacional deve ser de grande ajuda como recurso de aprendizado para a próxima geração de engenheiros de criptografia e desenvolvedores interessados.

1 comentários

 
GN⁺ 2024-02-02
Comentários do Hacker News
  • Pergunta sobre o estado atual da computação quântica

    Levanta a dúvida se a computação quântica já atingiu um nível em que é realmente necessária ou se, como aconteceu com a IA, a definição mudou para relançar produtos existentes com um novo nome.

  • Saudações e compartilhamento da Kudelski Security

    Apresenta um caso recente em que a Kudelski Security precisou descontinuar uma de suas bibliotecas em Go para criptografia resistente a quântica. Mais detalhes podem ser vistos no texto linkado.

  • Recomendação de livro sobre sistemas criptográficos implementados em Go

    Apresenta o livro de John Arundel sobre a implementação de sistemas criptográficos com a versão Go 1.22. A parte final do livro menciona criptografia resistente a quântica, e ele pode ser atualizado após a padronização PQ do NIST.

  • Pergunta sobre implementações em outras linguagens (Java, C# etc.)

    Pergunta por informações sobre implementações semelhantes em outras linguagens de programação.

  • Preocupação com uma implementação pura em Go

    Expressa preocupação de que, se for escrita puramente em Go, ela possa ser vulnerável a ataques de canal lateral de tempo/energia.

  • Interesse e pergunta sobre suporte ao Kyber v3

    Avalia positivamente o suporte a draft00/kyber v3 e pergunta sobre a possibilidade de oferecer suporte ao modo Kyber 90's sem SHA-3.

  • Piada sobre a tabela de chamadas de sistema de 32 bits

    Piada dizendo que a tabela de chamadas de sistema de 32 bits será "lançada em breve".

  • Apreço pelo uso de nomes de variáveis Unicode

    Diz que não tem capacidade de julgar a qualidade do algoritmo ou da implementação, mas avalia de forma muito positiva o uso de Unicode nos nomes das variáveis.

  • Elogio a outros projetos do FiloSottile

    Expressa apreço por outra ferramenta desenvolvida por FiloSottile, o age.

  • Compartilhamento do link para o documento NIST FIPS 203

    Compartilha o link para o documento NIST FIPS 203 mencionado no artigo.