Zum Inhalt springen
ecdsa.com

ES256

Der JWS-Algorithmus für ECDSA auf der Kurve P-256 mit SHA-256 (RFC 7518 §3.4), dessen Signatur genau 64 Byte rohes r‖s statt DER ist; auch COSE-Algorithmus −7.
Auch geschrieben alsES256ECDSA P-256 SHA-256COSE -7

Eine JWS-Signatur besteht aus den beiden 32-Byte-Ganzzahlen r und s in Big-Endian, aneinandergehängt und base64url-kodiert (86 Zeichen). Signierst du mit OpenSSL, dem Standard SHA256withECDSA von Java, ecdsa.SignASN1 von Go oder crypto.sign() von Node in der Standardeinstellung, entsteht stattdessen DER, das Verifizierer ablehnen; fordere eine Ausgabe nach IEEE P1363 an oder konvertiere die Signatur. Der Schlüssel ist ein EC-JWK mit crv P-256.

ES256 ist der Standard für Passkeys (COSE −7), DPoP-Proofs, die Tokens von Apple für App Store Connect und APNs-Provider sowie viele moderne Identity Provider, weil P-256 von WebCrypto in Browsern, der Secure Enclave, TPMs und Cloud-KMS unterstützt wird. Das Signieren ist schnell (etwa 87.000 Signaturen pro Sekunde mit OpenSSL 3.6.5 auf einem Kern eines Apple M4 Max), und die Tokens sind etwa 250 Zeichen kürzer als RS256-Tokens mit 2048-Bit-Schlüsseln.

Eine harte Lektion aus dem Jahr 2022: Die Java-Versionen 15 bis 18 akzeptierten für jede Nachricht und jeden Schlüssel eine ECDSA-Signatur aus lauter Nullen (CVE-2022-21449, „Psychic Signatures“), sodass gefälschte ES256-JWTs die Prüfung bestanden. Halte Laufzeitumgebungen gepatcht und stelle sicher, dass Verifizierer r oder s außerhalb von 1…n−1 ablehnen.

Standards und Quellen

Alle Begriffe