Ir al contenido

Compliance FIPS 203

AegisQ se desarrolló por fases. Las tablas describen componentes implementados y releases históricas, no una certificación ni el resultado de una ejecución actual de tests. Las versiones publicadas están en PyPI; los manifiestos declaran la versión del checkout y CHANGELOG.md registra el historial.

v1.0–v1.2 — Core FIPS 203 ML-KEM + Hybrid KEM-DEM

Sección titulada «v1.0–v1.2 — Core FIPS 203 ML-KEM + Hybrid KEM-DEM»
FaseComponenteReferenciaEstado
1Aritmética de campo (ℤq) y reducción BarrettFIPS 203 §4.2✅
2NTT y NTT inversaFIPS 203 §4.3✅
3Operaciones polinomialesFIPS 203 §4.1✅
4Compress / DecompressFIPS 203 §4.2.1✅
5Módulo de parámetrosFIPS 203 §5✅
6Muestreo CBD y XOFFIPS 203 §4.1, §4.2.2✅
7KeyGen (Algorithm 15)FIPS 203 Alg. 15✅
8Encaps (Algorithm 16)FIPS 203 Alg. 16✅
9Decaps con implicit rejectionFIPS 203 Alg. 17✅
10API pública KEM (kem.rs)—✅
11AES-256-GCM Hybrid (hybrid.rs)NIST SP 800-38D✅
12Tipos de error FFI—✅
13Tipos PyO3 (KeyPair, SecurityLevel)—✅
14Bindings PyO3 KEM—✅
15Bindings PyO3 Hybrid—✅
16Registro del módulo PyO3—✅
17Excepciones Python—✅
18Stubs de tipo PythonPEP 561✅
19API Python KEM (MlKem)—✅
20API Python de alto nivel (AegisCipher)—✅
21Exports del paquete Python—✅
22Tests del bridge KEM—✅
23Tests del bridge Hybrid—✅
24Tests end-to-end de AegisCipher—✅
25Tests API KEM + vectores NIST KAT—✅
26GitHub Actions CI/CD—✅
27Archivos JSON con vectores NIST ACVP KATvectores NIST✅
27bTests de verificación de vectores KATvectores NIST✅
28EphemeralSession (ciclo de vida del keypair de sesión)—✅
29Soporte async (encrypt_async, decrypt_async)—✅

v1.3.0 — KDF, Key Wrap y Serialización de Claves

Sección titulada «v1.3.0 — KDF, Key Wrap y Serialización de Claves»
FaseComponenteReferenciaEstado
30HKDF-SHA3-256 + AES-256-GCM key wrap (kdf.rs, key_wrap.rs)RFC 5869, NIST SP 800-38D✅
31Serialización de claves: PEM, JSON, PEM cifrado (key_io_bindings.rs, aegisq/keys.py)RFC 7468 (adaptado)✅

v1.4.0 — Safe Repr, Context Manager, Cobertura de Implicit Rejection

Sección titulada «v1.4.0 — Safe Repr, Context Manager, Cobertura de Implicit Rejection»
FaseComponenteReferenciaEstado
32KeyPair.__repr__ con fingerprint + context manager de AegisCipher + suite de regresión de __repr__ de 25 casos + suite de regresión de implicit-rejection de 25 casos (FIPS 203 §7.3)FIPS 203 §7.3✅
FaseComponenteReferenciaEstado
33aCifrado/descifrado en streaming (stream.rs, stream_bindings.rs, encrypt_stream / decrypt_stream)Primitiva AES-GCM: SP 800-38D; framing: específico de AegisQ✅
33bBenchmarks de Criterion para NTT y KEM (benches/ntt.rs, benches/kem.rs)—✅
EstándarDescripción
FIPS 203ML-KEM — Module-Lattice-Based Key-Encapsulation Mechanism (NIST, 2024)
NIST SP 800-38DAES-GCM — Especificación de Galois/Counter Mode
RFC 5869HMAC-based Extract-and-Expand Key Derivation Function (HKDF)
RFC 4648Encodings Base16, Base32, Base64 (usado para cuerpos PEM y claves Base64 URL-safe)
RFC 7468Encodings textuales de estructuras PKIX, PKCS y CMS (formato PEM adaptado para ML-KEM)
PEP 561Distribución y empaquetado de información de tipos (AegisQ incluye py.typed + stubs .pyi)

Las versiones son requisitos de los manifiestos actuales, no resoluciones exactas del lockfile ni un inventario histórico de v1.5.0. Las declaraciones compartidas viven en Cargo.toml; PyO3 y Criterion están en los manifiestos del bridge/core. Cargo.lock registra las versiones resueltas.

CrateVersiónPropósitono_std
aes-gcm0.11AES-256-GCM cifrado autenticado (hardware AES-NI)✅
sha30.12SHA3-256/512 para ML-KEM✅
shake0.1Variantes XOF movidas fuera de sha3 upstream (RustCrypto/XOFs split)✅
zeroize1.9Borrado seguro de memoria de secretos✅
subtle2.6Comparaciones en tiempo constante✅
getrandom0.4CSPRNG a nivel del SO (OsRng) para nonces y keygen✅
base640.23Encoding del cuerpo PEM✅
thiserror2.0Definiciones de tipos de error✅
pyo30.29Bindings Rust-Python FFI (abi3-py311)—
criterion (dev)0.5Benchmarks para operaciones NTT y KEM—

Todos los crates criptográficos son compatibles con no_std. pyo3 y criterion están excluidos — se usan solo en las capas de FFI y dev-dependency respectivamente.

AegisQ verifica su implementación de ML-KEM contra los vectores de prueba oficiales del NIST ACVP (Automated Cryptographic Validation Program):

  • KeyGen — tests/python/json-files/ML-KEM-keyGen-FIPS203/
  • Encap/Decap — tests/python/json-files/ML-KEM-encapDecap-FIPS203/

tests/python/test_kat_vectors.py compara explícitamente las salidas esperadas de KeyGen y encapsulación byte por byte. No invoca la desencapsulación ni verifica las salidas esperadas de desencapsulación/rechazo del corpus combinado. tests/python/test_kem_api.py comprueba roundtrips por separado y tests/python/test_implicit_rejection.py cubre contenido inválido de capsules. Esos tests no sustituyen los tests de respuesta conocida de desencapsulación.

Superar estos tests aporta evidencia de corrección para las entradas comprobadas, no una prueba de seguridad, cobertura exhaustiva ni certificación oficial. Cualquier afirmación de éxito debe referirse a una ejecución real con el código y la extensión nativa correspondientes.