Módulo Criptográfico

Archivo: src/crypto.rs (1004 líneas)

¿Por qué existe?

Implementa operaciones criptográficas esenciales sin dependencias externas. Incluye generación de números aleatorios seguros, cifrado simétrico (AES-256-GCM, ChaCha20-Poly1305), y derivación de claves (PBKDF2). Todo implementado a mano en Rust puro.

Componentes

1. CSPRNG — Aleatoriedad segura

Genera bytes criptográficamente aleatorios usando la API del sistema operativo:

2. Comparación en tiempo constante

constant_time_equal(a, b) -> bool — Compara dos slices de bytes sin cortocircuitos, previniendo ataques de canal lateral (timing attacks).

3. AES-256

Implementación manual completa:

4. ChaCha20 + Poly1305

Implementación del AEAD RFC 8439:

5. PBKDF2-HMAC-SHA256

Derivación de claves a partir de contraseñas con salt automático y número configurable de iteraciones. Usa HMAC-SHA256 como PRF subyacente.

API Pública

FunciónDescripción
random_bytes(n)Genera n bytes aleatorios seguros
constant_time_equal(a, b)Comparación en tiempo constante
aes256_gcm_encrypt(clave, iv, datos, aad)Cifrado AES-256-GCM
aes256_gcm_decrypt(clave, iv, cifrado, aad, tag)Descifrado AES-256-GCM
chacha20_poly1305_encrypt(clave, nonce, datos, aad)Cifrado ChaCha20-Poly1305
chacha20_poly1305_decrypt(clave, nonce, cifrado, aad, tag)Descifrado ChaCha20-Poly1305
pbkdf2_sha256(contraseña, salt, iteraciones, len)Derivación de clave PBKDF2

Uso desde Forja

Estas operaciones se exponen a través del módulo crypto.fa de la stdlib, que provee una API en español: cifrar_aes_gcm, descifrar_aes_gcm, cifrar_chacha20, etc.

🔐 Filosofía: Forja implementa criptografía manualmente para educar sobre cómo funcionan estos algoritmos por debajo, y para mantener la promesa de ejecutable único sin dependencias.