Volver a actualizaciones
Nuevo releaseSep 3, 2026

rscrypto v0.9.0

Criptografía en Rust sin dependencias obligatorias: hashes, checksums, MACs, KDFs, hashing de contraseñas, AEADs, firmas, RSA, intercambio de claves, ML-KEM y ML-DSA. Referencia portátil en Rust con backends SIMD y ASM.

Compartir

rscrypto

Crates.io Docs.rs MSRV 1.100.0 License: MIT OR Apache-2.0

rscrypto es una biblioteca de Rust de primitivas criptográficas, hashes, hashing de contraseñas y sumas de verificación. Un único modelo de características controla todas ellas. El Rust portátil es la implementación de referencia. Los backends SIMD y de ensamblador la hacen más rápida en los objetivos compatibles. Las compilaciones de producción no dependen de C, FFI, OpenSSL ni bibliotecas del sistema.

rscrypto proporciona únicamente primitivas. No es una pila TLS, un conjunto de herramientas PKI, un almacén de claves ni una implementación de protocolos.

Instalación

rscrypto necesita Rust 1.100. Hasta que Rust 1.100 sea estable, usa la beta de 1.100 o una nightly más reciente. Las compilaciones aceleradas para POWER, IBM Z y RISC-V necesitan un compilador nightly; las compilaciones portable-only admiten la MSRV declarada. Consulta Toolchain.

Compilación no_std mínima solo con SHA-2:

[dependencies]
rscrypto = { version = "0.11", default-features = false, features = ["sha2"] }

Todas las primitivas, con aleatoriedad del sistema operativo:

[dependencies]
rscrypto = { version = "0.11", features = ["full", "getrandom"] }

La característica predeterminada es std. Establece default-features = false para eliminarla. Habilita getrandom solo para las API que obtienen sales, claves, nonces o entropía para la generación de claves RSA del sistema operativo. La guía de características explica cómo seleccionar características. Cargo.toml define el grafo exacto de características.

Inicio rápido

use rscrypto::Sha256;

let one_shot = Sha256::digest(b"hello world");

let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");

assert_eq!(hasher.finalize(), one_shot);

Los tipos de hash admiten uso único y en streaming. examples/README.md contiene ejemplos ejecutables de AEAD, firmas, RSA, ECDH P-256 y P-384, X25519, ML-KEM, hashing de contraseñas e introspección de backends.

Primitivas y características

FamiliaPrimitivasCaracterística
Sumas de verificaciónCRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMechecksums o una característica hoja
Hashes criptográficosSHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOFcrypto-hashes o una característica hoja
Hashes rápidosXXH3-64/128, RapidHash V3-64fast-hashes o una característica hoja
MACs y KDFsHMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2macs, kdfs o una característica hoja
Hashing de contraseñasArgon2d/i/id, scrypt, registros de contraseña PHC acotadospassword-hashing o una característica hoja
Firmas y RSAECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, SLH-DSA (los 12 conjuntos de FIPS 205, pure y HashSLH-DSA), firma, verificación, cifrado y generación de claves RSAsignatures o una característica hoja
Intercambio de claves y KEMsECDH P-256, ECDH P-384, X25519, ML-KEM-512/768/1024key-exchange o una característica hoja
AEADsAES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128aead o una característica hoja

Las claves de firma y de KEM importan y exportan DER estándar (PKCS #8 y SubjectPublicKeyInfo) para ECDSA, Ed25519, RSA, ML-DSA, ML-KEM y SLH-DSA.

El digest de aceptación de WebSocket existe solo por compatibilidad de protocolo. Necesita la característica websocket-sha1. Ninguna característica paraguas, incluida full, lo habilita.

Consulta docs.rs para los tipos y métodos exactos. Las notas de compatibilidad de la API explican los tipos de salida, las semillas de colecciones y los nombres de métodos conservados. La guía de resiliencia criptográfica explica los supuestos de seguridad, los límites de migración y la evidencia que hay que revisar al elegir criptografía más fuerte.

Plataformas y despacho

La implementación portátil en Rust define la salida correcta, byte a byte. Todos los backends acelerados deben dar la misma salida. En tiempo de compilación, el objetivo determina qué backends están disponibles. Con std, rscrypto también detecta características de la CPU en tiempo de ejecución y selecciona un backend. Si no hay ningún backend acelerado disponible, se ejecuta la implementación portátil.

La guía de plataformas enumera los objetivos compatibles. También explica el despacho, la compatibilidad con no_std y los límites de portable-only.

Garantías

Una afirmación de seguridad existe solo mientras su evidencia se supera. La evidencia ausente o antigua elimina la afirmación; nunca debilita una barrera.

  • Corrección: vectores de NIST, RFC, upstream y Wycheproof, implementaciones independientes, pruebas de propiedades, pruebas negativas y Miri.
  • Fuzzing: los objetivos de fuzzing ejecutan el código de producción en primitivas, analizadores, máquinas de estados y límites de traits. Las entradas minimizadas se reproducen como pruebas. Un carril separado las ejecuta con sanitizadores.
  • Backends: las pruebas diferenciales comparan cada backend acelerado con el Rust portátil. Cubren longitudes, alineaciones, colas, transiciones de estado, despacho y fallback en objetivos nativos.
  • Tiempo constante: ct.toml enumera las operaciones exactas bajo prueba. La evidencia combina la inspección de binarios enlazados optimizados, pruebas BINSEC para kernels de forma fija y pruebas de temporización DudeCT para operaciones de extremo a extremo.
  • Secretos: los tipos que poseen secretos ocultan su contenido en la salida de Debug y borran su almacenamiento inicializado al destruirse. Las reglas de copia varían según el tipo; por ejemplo, el estado de BLAKE2 y BLAKE3 con clave admite Clone. El inventario de propiedad de secretos enumera cada tipo.
  • Fallos: los fallos de verificación no indican por qué fallaron. Una apertura AEAD fallida borra el texto plano no autenticado.

Una afirmación de tiempo constante se aplica solo al objetivo, las características, el compilador, el perfil y la operación que cubre su evidencia. El código fuente que parece sin ramas no es una prueba.

Para más detalles, consulta la evidencia de pruebas, el modelo de tiempo constante, el ciclo de vida de los secretos y el modelo de amenazas.

Categorías