1 puntos por GN⁺ 2024-02-02 | 1 comentarios | Compartir por WhatsApp

Criptografía resistente a la computación cuántica para el ecosistema Go

  • filippo.io/mlkem768 es una implementación pura en Go de ML-KEM-768, optimizada para la corrección y la legibilidad.
  • ML-KEM es un mecanismo de intercambio de claves resistente a la computación cuántica que está en proceso de estandarización por parte de NIST y ya se está adoptando en gran parte de la industria.
  • El paquete está compuesto por unas 500 líneas de código, 200 líneas de comentarios y 650 líneas de pruebas, y no tiene dependencias salvo golang.org/x/crypto/sha3.
  • Está previsto que se integre en la biblioteca estándar de Go, y fue diseñado para ofrecer un alto nivel de confianza en su seguridad mediante facilidad de revisión, simplicidad y pruebas exhaustivas.

Una implementación para validar la especificación

  • A diferencia de la mayoría de las implementaciones, este código no fue portado desde la biblioteca de referencia pq-crystals, sino que fue escrito desde cero sin leer en detalle otras bases de código.
  • El documento FIPS 203 es una excelente guía de implementación, ya que ofrece seudocódigo detallado, definiciones exhaustivas e información de tipos consistente.
  • Para aumentar la legibilidad del código y su valor como recurso de aprendizaje, los nombres de funciones y variables, así como el orden de las operaciones, se eligieron cuidadosamente para ajustarse a la especificación FIPS.

Suficiente polinomios y álgebra lineal para implementar

  • La especificación requiere un trasfondo matemático relativamente limitado, pero para facilitar el trabajo de quien implemente, se escribió "Sufficient Polynomials and Linear Algebra to Implement Kyber".
  • El resto queda como ejercicio para la persona lectora: 1) aritmética modular sobre el primo 3329, 2) implementación concreta de las funciones de compresión y descompresión de [0, 3329) a [0, 2ᵈ), 3) garantía de operaciones en tiempo constante.

Legibilidad y valor educativo

  • La legibilidad es uno de los principales objetivos de la implementación, ya que permite revisiones efectivas y sirve como recurso educativo para la próxima generación de responsables de mantenimiento e ingenieros de criptografía.
  • En algunos casos, para mejorar la legibilidad de funciones complejas, el código se hace más largo y menos reutilizable.

Alta confianza en la seguridad mediante pruebas

  • Se verifica que la generación de claves, la encapsulación y la desencapsulación se realicen correctamente, y se mantiene una cobertura de pruebas superior al 95%.
  • Se garantiza la interoperabilidad con vectores de prueba obtenidos de NIST y de otras implementaciones, y también se prueban exhaustivamente las operaciones aritméticas básicas de campos comparándolas con valores esperados.
  • Como parte del proyecto CCTV, se publican vectores de prueba reutilizables por otras implementaciones.

Rendimiento

  • El rendimiento no es el objetivo principal, pero el paquete necesita ser lo bastante rápido como para resultar útil.
  • ML-KEM es suficientemente rápido, y esta implementación simple puede competir con implementaciones de P-256 y X25519 optimizadas en ensamblador.
  • También se hicieron esfuerzos para mejorar el rendimiento siguiendo patrones de programación de Go y minimizando las asignaciones en el heap.

Usar una implementación de ML-KEM como Kyber v3

  • NIST hizo algunos cambios menores a la propuesta Round 3 de Kyber.
  • Algunos protocolos experimentales están definidos sobre Kyber v3 (o "draft00"), pero no hace falta crear un paquete separado.
  • Se puede usar ML-KEM para generar el secreto compartido K y luego aplicar una derivación de clave adicional para generar el secreto compartido de Kyber.

Opinión de GN⁺

  • Importancia de la criptografía resistente a la computación cuántica: con el avance de la computación cuántica, las técnicas de cifrado actuales podrían volverse vulnerables, por lo que el desarrollo y la estandarización de tecnologías resistentes a la computación cuántica como ML-KEM son muy importantes.
  • Escalabilidad del lenguaje Go: esta implementación muestra la escalabilidad y flexibilidad de Go, y el plan de integrar una biblioteca criptográfica en la biblioteca estándar la convertirá en un recurso útil para la comunidad de desarrolladores de Go.
  • Valor educativo: el enfoque centrado en la legibilidad del código y su valor educativo será de gran ayuda como recurso de aprendizaje para la próxima generación de ingenieros de criptografía y desarrolladores interesados.

1 comentarios

 
GN⁺ 2024-02-02
Comentarios en Hacker News
  • Pregunta sobre el estado actual de la computación cuántica

    Se plantea la duda de si la computación cuántica realmente ha alcanzado un nivel en el que sea necesaria, o si, como pasó con la IA, cambió la definición y se están relanzando productos existentes con un nombre nuevo.

  • Saludos y aporte de Kudelski Security

    Se presenta un caso reciente en el que Kudelski Security tuvo que discontinuar una de sus bibliotecas en Go para criptografía poscuántica. Se pueden ver más detalles en el texto enlazado.

  • Recomendación de un libro sobre sistemas criptográficos implementados en Go

    Se presenta el libro de John Arundel sobre implementación de sistemas criptográficos para la versión Go 1.22. En la parte final del libro se menciona la criptografía poscuántica, y el libro podría actualizarse después de la estandarización PQ de NIST.

  • Pregunta sobre implementaciones en otros lenguajes (Java, C#, etc.)

    Se pregunta por información sobre implementaciones similares en otros lenguajes de programación.

  • Preocupación por una implementación pura en Go

    Se expresa preocupación de que, si está escrita completamente en Go, podría ser vulnerable a ataques de canal lateral de temporización/consumo de energía.

  • Interés y pregunta sobre el soporte para Kyber v3

    Se valora positivamente el soporte para draft00/kyber v3 y se pregunta por la posibilidad de soportar el modo Kyber 90's sin SHA-3.

  • Broma sobre la tabla de llamadas al sistema de 32 bits

    Broma sobre que la tabla de llamadas al sistema de 32 bits "próximamente estará disponible".

  • Aprecio por el uso de nombres de variables con Unicode

    Aunque no se tiene la capacidad de juzgar la calidad del algoritmo o la implementación, se valora muy positivamente el uso de Unicode en los nombres de variables.

  • Elogio a otro proyecto de FiloSottile

    Se expresa aprecio por otra herramienta desarrollada por FiloSottile, age.

  • Se comparte el enlace al documento NIST FIPS 203

    Se comparte el enlace al documento NIST FIPS 203 mencionado en el artículo.