Pular para o conteúdo
ecdsa.com

ES256

O algoritmo JWS de ECDSA na curva P-256 com SHA-256 (RFC 7518 §3.4), cuja assinatura tem exatamente 64 bytes de r‖s bruto, não DER; no COSE, é o algoritmo −7.
Também escrito comoES256ECDSA P-256 SHA-256COSE -7

Uma assinatura JWS consiste nos dois inteiros big-endian de 32 bytes r e s, concatenados e codificados em base64url (86 caracteres). Assinar com o OpenSSL, com o SHA256withECDSA padrão do Java, com o ecdsa.SignASN1 do Go ou com o crypto.sign() padrão do Node produz DER, que os verificadores rejeitam; peça a saída IEEE P1363 ou faça a conversão. A chave é uma JWK EC com crv P-256.

O ES256 é o algoritmo padrão das chaves de acesso (COSE −7), das provas DPoP, dos tokens de provedor do App Store Connect e do APNs da Apple e de muitos provedores de identidade modernos, porque a P-256 é compatível com o WebCrypto dos navegadores, o Secure Enclave, os TPMs e os KMS de nuvem. A assinatura é rápida (cerca de 87.000 assinaturas por segundo com o OpenSSL 3.6.5 em um núcleo de Apple M4 Max), e os tokens ficam cerca de 250 caracteres mais curtos que os RS256 com chaves de 2048 bits.

Uma lição dura de 2022: as versões 15 a 18 do Java aceitavam uma assinatura ECDSA toda zerada para qualquer mensagem e chave (CVE-2022-21449, “Psychic Signatures”), e assim JWTs ES256 forjados passavam na verificação. Mantenha os runtimes atualizados e garanta que os verificadores rejeitem r ou s fora de 1…n−1.

Padrões e referências

Todos os termos