Saltar al contenido
ecdsa.com

Formato de firma r‖s en bruto (IEEE P1363)

La codificación de longitud fija de una firma ECDSA o DSA como r y s concatenados, cada uno rellenado por la izquierda hasta la longitud en bytes del orden del grupo, que usan JOSE, COSE, WebCrypto y muchas API de HSM.
También se escribeIEEE P1363raw ECDSA signaturer||sconcatenated signature

Debe su nombre a IEEE Std 1363-2000. Las longitudes son fijas: 64 bytes para P-256 y secp256k1, 96 para P-384 y 132 para P-521. La alternativa es DER: una SEQUENCE de dos INTEGER mínimos en big-endian, cada uno con un 0x00 inicial cuando su bit más alto está activado, lo que da entre 70 y 72 bytes para P-256 y es variable por diseño.

El formato en bruto lo usan JWS ES256 y similares (RFC 7518 §3.4), COSE (RFC 9053 §2.1), WebCrypto, PKCS #11 CKM_ECDSA, Windows CNG y Apple CryptoKit. DER lo usan X.509 y CMS, CertificateVerify de TLS, las firmas de aserción de WebAuthn, OpenSSL, SHA256withECDSA de Java, ecdsa.SignASN1 de Go y crypto.sign() de Node. Para cambiar de formato: en Node, dsaEncoding: "ieee-p1363"; en Java, SHA256withECDSAinP1363Format; en Python, encode_dss_signature y decode_dss_signature.

Las conversiones deben rellenar: r o s mide menos de 32 bytes en aproximadamente una de cada 128 firmas, y conservar el byte de signo de DER u omitir el relleno produce firmas «en bruto» de 63 o 65 bytes que fallan en otros sistemas. El conversor DER ⇄ en bruto muestra ambas formas.

Estándares y referencias

Todos los términos