Envío de criptografía post-cuántica a Python
Compartir
Estás leyendo un resumen. El contenido completo está en blog.trailofbits.com.
La criptografía post-cuántica está ahora a una instalación de pip de todo el ecosistema de Python. Con financiamiento de la Agencia de Tecnología Soberana, implementamos soporte para ML-KEM, el primitivo de establecimiento de claves estándar NIST, y ML-DSA, el primitivo de firma digital estándar NIST, en pyca/cryptography. El 22 de junio de 2026, la Casa Blanca ordenó al gobierno de EE. UU. acelerar su transición a la criptografía post-cuántica. La orden dice que las computadoras cuánticas de gran escala, especialmente en manos adversarias, amenazarán sistemas criptográficos de uso generalizado, y que los atacantes pueden estar recolectando datos cifrados ahora para poder descifrarlos más tarde. También establece plazos concretos de migración: los sistemas federales de alto valor e impacto deben usar establecimiento de claves post-cuánticas antes del 31 de diciembre de 2030 y firmas digitales post-cuánticas antes del 31 de diciembre de 2031. E incluso si no te interesa la resistencia cuántica, eso no es un problema porque la resistencia cuántica no es el principal beneficio de la criptografía post-cuántica. Esa transición no puede ocurrir solo a nivel de política. Cada aplicación que firma paquetes, valida certificados, establece canales seguros o protege secretos de larga duración depende de bibliotecas criptográficas. Si esas bibliotecas no exponen algoritmos post-cuánticos, la pila de software no puede migrar. Casi cada programa de Python que toca la criptografía pasa por pyca/cryptography. Actualmente es el undécimo paquete más descargado en PyPI, acumulando 1.2 mil millones de descargas solo en el último mes. El paquete pyca/cryptography maneja las operaciones criptográficas de proyectos como Ansible, Certbot (el cliente de LetsEncrypt), Apache Airflow, paramiko (el cliente SSH solo para Python) y muchos otros. Si pyca/cryptography no envía primitivos post-cuánticos, el ecosistema de Python no puede comenzar a migrar. El soporte post-cuántico está ahora a una instalación de pip de distancia. A partir de cryptography>=48, el soporte para algoritmos post-cuánticos está a solo una instalación de pip. La versión 48 incluye nuestros enlaces de Rust para ML-KEM y ML-DSA, la API de enlace cruzado y pruebas, y soporte para AWS-LC como un backend criptográfico. También incluye trabajo de los mantenedores de pyca/cryptography para soportar otros backends criptográficos. Lamentablemente, esto no es suficiente para un intercambio directo de migración post-cuántica. Estos primitivos tienen diferentes tamaños, rendimiento y compromisos de integración en comparación con los algoritmos clásicos que reemplazan. Compromisos de algoritmos PQ. Los primitivos post-cuánticos mantienen la misma fortaleza de seguridad, pero cambian el tamaño de los datos en la transmisión. Las claves públicas, firmas y textos cifrados son a menudo de 1 a 2 órdenes de magnitud mayores que los valores clásicos que reemplazan. Las operaciones también son más complejas y, por lo tanto, más lentas, pero en hardware moderno siguen siendo imperceptibles para el uso regular, y es probable que se vuelvan más rápidas con hardware y algoritmos mejorados. Para las firmas, así es como el primitivo clásico (Ed25519) se compara con su equivalente post-cuántico (ML-DSA-65): Algoritmo Clave pública Clave privada Salida Ed25519 32 B 32 B 64 B sig ML-DSA-65 1,952 B 32 B 3,309 B sig Y para el intercambio de claves y cifrado, así es como X25519 se compara con su equivalente post-cuántico (ML-KEM-768): Algoritmo Clave pública Clave privada Salida X25519 32 B 32 B 32 B compartido ML-KEM-768 1,184 B 64 B 1,088 B texto cifrado Si mantienes un protocolo o formato de transmisión que codifica en duro firmas del tamaño de Ed25519 o claves públicas del tamaño de X25519, la migración post-cuántica involucra más que un simple intercambio de primitivas. Los campos circundantes, los prefijos de longitud y las suposiciones de fragmentación necesitan crecer con ello. Usando ML-DSA (FIPS 204): Firmas resistentes a la cuántica. ML-DSA es el esquema de firma digital basado en rejillas que reemplaza RSA, ECDSA y Ed25519. La API de Python refleja los primitivos asimétricos existentes: from cryptography.hazmat.primitives.asymmetric import mldsa private_key = mldsa.MLDSA65PrivateKey.generate() public_key = private_key.public_key() signature = private_key.sign(b"mensaje") public_key.verify(signature, b"mensaje") # lanza InvalidSignature en caso de fallo Usando ML-KEM (FIPS 203): Encapsulación de claves para la era post-cuántica. ML-KEM es un mecanismo de encapsulación de claves (KEM) para establecer secretos compartidos. La construcción es diferente, sin embargo. ML-KEM es un mecanismo de encapsulación de claves, no un intercambio de Diffie-Hellman. En lugar de que ambas partes combinen participantes de clave para derivar un secreto compartido, una parte encapsula un nuevo secreto compartido a la clave pública del receptor, y el receptor lo descapsula con la clave privada correspondiente. Estas operaciones permiten a ambas partes intercambiar un secreto, pero de una manera fundamentalmente diferente al intercambio de Diffie-Hellman, y resistente a ataques de factorización cuántica. from cryptography.hazmat.primitives.asymmetric import mlkem # El receptor genera un par de claves y publica la clave pública. private_key = mlkem.MLKEM768PrivateKey.generate() public_key = private_key.public_key() # El emisor encapsula un nuevo secreto compartido a esa clave pública. shared_secret_sender, ciphertext = public_key.encapsulate() # El receptor descapsula el mismo secreto compartido del texto cifrado. shared_secret_receiver = private_key.decapsulate(ciphertext) assert shared_secret_sender == shared_secret_receiver El camino por delante: SLH-DSA e integración de protocolos. Dos áreas aún están en progreso: un tercer estándar NIST y el trabajo de integrar estos primitivos en protocolos reales. SLH-DSA. SLH-DSA (FIPS 205) es el estándar de firma digital basado en hash de NIST. Al igual que ML-DSA, está destinado a reemplazar esquemas de firma clásicos como RSA, ECDSA y Ed25519. Su compromiso es diferente: SLH-DSA tiene firmas muy grandes y un tiempo de firma lento, pero se basa únicamente en las propiedades de seguridad de las funciones hash, que se han estudiado durante décadas. Eso lo convierte en una retaguardia conservadora si el futuro análisis criptográfico debilita las firmas basadas en rejillas. SLH-DSA no está soportado en pyca/cryptography 48, pero hemos comenzado a trabajar en ello. Post-cuántico en protocolos. Los primitivos son la base, pero la migración post-cuántica solo estará completa cuando los protocolos utilicen los algoritmos resistentes a la cuántica. Es poco probable que utilices algoritmos PQ directamente en herramientas como Certbot o Ansible hasta que los protocolos comunes agreguen soporte para ellos. Aunque estén bien diseñados para reemplazar las implementaciones existentes, los cambios de algoritmo requieren un desarrollo cuidadoso, pruebas y auditoría. Estamos trabajando activamente para ayudar a los mantenedores a integrar algoritmos PQ en sus aplicaciones. Agradecimientos. Este trabajo fue financiado por la Agencia de Tecnología Soberana, cuya misión es apoyar la infraestructura de código abierto de la que dependen los sistemas digitales públicos. También estamos en deuda con los mantenedores de pyca/cryptography, Paul Kehrer y Alex Gaynor, que ofrecieron comentarios constantes y revisiones durante todo el proceso de desarrollo, y continúan supervisando esta pieza crítica de software de código abierto.
Enlace externo a blog.trailofbits.com
Artículos relacionados
cybersecurity
El ransomware JadePuffer utilizó un agente de IA para automatizar todo el ataque.
cybersecurity
Entidad del gobierno de EE. UU. pagó a Kairos 1 millón de dólares en caso de extorsión por robo de datos.
cybersecurity
