Criptografía Post-Cuántica
Archivo: src/crypto_pq.rs (385 líneas)
¿Por qué existe?
Implementa un KEM (Key Encapsulation Mechanism) de estilo Kyber (ML-KEM, FIPS 205) usando criptografía basada en retículos (Ring-LWE). Es una implementación educativa de los estándares post-cuánticos que eventualmente reemplazarán a RSA y ECC cuando las computadoras cuánticas sean prácticas.
Parámetros
| Parámetro | Valor | Significado |
|---|---|---|
n | 256 | Grado del polinomio (anillo Z_q[x]/(x^256+1)) |
q | 3329 | Módulo primo |
k | 1 | Module-LWE rank (un solo polinomio) |
¿Cómo funciona?
El esquema Kyber se basa en la dificultad del problema Module-LWE (Learning With Errors sobre módulos):
- KeyGen: Genera clave pública
t = A*s + ey clave secretas - Encaps: Genera
u = A*r + e1yv = t*r + e2 + msg→ ciphertext(u, v') - Decaps: Recupera
msg = v - s*u
Donde s, r, e, e1, e2 son polinomios pequeños (errores), A es una matriz pública aleatoria, y msg es el mensaje codificado.
Estructuras
| Estructura | Descripción |
|---|---|
Poly | Polinomio de 256 coeficientes en Z_q |
PolyVec | Vector de polinomios (para Module-LWE rank k) |
KyberKeyPair | Par (clave_publica, clave_secreta) |
KyberCiphertext | Texto cifrado del KEM |
API Pública
| Función | Descripción |
|---|---|
kyber_keygen() -> KyberKeyPair | Genera un nuevo par de claves post-cuánticas |
kyber_encaps(pk) -> (KyberCiphertext, Vec<u8>) | Encapsula una clave compartida |
kyber_decaps(sk, ct) | Recupera la clave compartida |
Uso desde Forja
Expuesto a través del módulo crypto.fa de la stdlib, que provee funciones como generar_claves_pq, encapsular_pq, y desencapsular_pq.
🔬 Nota educativa: Esta implementación está simplificada para fines de aprendizaje y demostración. Los parámetros siguen el estándar ML-KEM (FIPS 205) de NIST, pero no está auditada para producción.