Saltar al contenido
ecdsa.com

Firma con pre-hash (HashEdDSA, HashML-DSA)

Firmar un resumen del mensaje en lugar del propio mensaje, ya sea de forma implícita (ECDSA, RSA) o mediante variantes explícitas y distintas, con separación de dominios, como Ed25519ph y HashML-DSA.
También se escribeprehashHashEdDSAEd25519phHashML-DSAHashSLH-DSAexternal mu

ECDSA y RSA siempre firman un hash, así que el hash de los datos puede calcularse en flujo (streaming) o en otra máquina, y un HSM solo llega a ver entre 32 y 64 bytes. En cambio, PureEdDSA y ML-DSA procesan el mensaje completo junto con valores que dependen de la clave (tanto el nonce como el desafío de EdDSA calculan el hash del mensaje; ML-DSA incorpora un hash de la clave pública en su representante del mensaje μ), así que el mensaje entero debe llegar al firmante.

Para este caso existen variantes con pre-hash: Ed25519ph y Ed448ph (RFC 8032; HashEdDSA en FIPS 186-5 §7.8), HashML-DSA (FIPS 204 §5.4) y HashSLH-DSA (FIPS 205 §10.2.2); las dos últimas incluyen el OID de la función hash en lo que se firma. Son algoritmos distintos con firmas distintas, así que un verificador de la variante pura las rechaza. FIPS 204 también permite que todos los pasos de ML-DSA excepto la generación de la aleatoriedad de la firma se ejecuten fuera del módulo de firma, algo que las interfaces de HSM aprovechan para aceptar un μ precalculado.

El pre-hash hace que la seguridad dependa de la resistencia a colisiones del hash, mientras que EdDSA puro tolera las colisiones de hash. Usa las variantes puras salvo que el procesamiento en flujo o un firmante remoto obliguen a otra cosa, y nunca mezcles ambas variantes con una misma clave sin separación de dominios (RFC 8032 §8.6; FIPS 204 recomienda una sola variante por clave).

Estándares y referencias

Todos los términos