Saltar al contenido
ecdsa.com

ES256

El algoritmo JWS de ECDSA en la curva P-256 con SHA-256 (RFC 7518 §3.4), cuya firma son exactamente 64 bytes de r‖s en bruto, no DER; en COSE, el algoritmo −7.
También se escribeES256ECDSA P-256 SHA-256COSE -7

Una firma JWS son los dos enteros big-endian de 32 bytes r y s, concatenados y codificados en base64url (86 caracteres). Firmar con OpenSSL, con el SHA256withECDSA predeterminado de Java, con ecdsa.SignASN1 de Go o con el crypto.sign() predeterminado de Node produce DER, que los verificadores rechazan; pide la salida IEEE P1363 o convierte la firma. La clave es una JWK EC con crv P-256.

ES256 es la opción por defecto para las llaves de acceso (COSE −7), las pruebas DPoP, los tokens de App Store Connect y de proveedor de APNs de Apple y muchos proveedores de identidad modernos, porque WebCrypto en los navegadores, Secure Enclave, los TPM y los KMS en la nube admiten P-256. Firmar es rápido (unas 87.000 firmas por segundo con OpenSSL 3.6.5 en un núcleo de un Apple M4 Max) y los tokens son unos 250 caracteres más cortos que los RS256 con claves de 2048 bits.

Una lección dura de 2022: las versiones 15 a 18 de Java aceptaban una firma ECDSA formada solo por ceros para cualquier mensaje y clave (CVE-2022-21449, «Psychic Signatures»), así que los JWT ES256 falsificados superaban la verificación. Mantén al día los parches de los entornos de ejecución y asegúrate de que los verificadores rechacen r o s fuera de 1…n−1.

Estándares y referencias

Todos los términos