Zum Inhalt springen
ecdsa.com

Rohes Signaturformat r‖s (IEEE P1363)

Die Kodierung einer ECDSA- oder DSA-Signatur mit fester Länge als Verkettung von r und s, jeweils links auf die Bytelänge der Gruppenordnung aufgefüllt; JOSE, COSE, WebCrypto und viele HSM-APIs verwenden sie.
Auch geschrieben alsIEEE P1363raw ECDSA signaturer||sconcatenated signature

Benannt nach IEEE Std 1363-2000. Die Längen sind fest: 64 Byte für P-256 und secp256k1, 96 für P-384, 132 für P-521. Die Alternative ist DER: eine SEQUENCE aus zwei minimal kodierten Big-Endian-Werten vom Typ INTEGER, jeweils mit führendem 0x00, wenn das oberste Bit gesetzt ist; das ergibt 70–72 Byte für P-256 und hat konstruktionsbedingt eine variable Länge.

Das rohe Format nutzen JWS mit ES256 und verwandten Algorithmen (RFC 7518 §3.4), COSE (RFC 9053 §2.1), WebCrypto, PKCS #11 mit CKM_ECDSA, Windows CNG und Apple CryptoKit. DER nutzen X.509 und CMS, TLS bei CertificateVerify, die Signaturen von WebAuthn-Assertions, OpenSSL, Java mit SHA256withECDSA, Go mit ecdsa.SignASN1 und Node mit crypto.sign(). Zum Umschalten: Node dsaEncoding: "ieee-p1363", Java SHA256withECDSAinP1363Format, Python encode_dss_signature und decode_dss_signature.

Konvertierungen müssen auffüllen: In etwa einer von 128 Signaturen ist r oder s kürzer als 32 Byte, und wer das Vorzeichenbyte von DER behält oder das Padding weglässt, erhält „rohe“ Signaturen mit 63 oder 65 Byte, die in anderen Implementierungen scheitern. Der Konverter DER ⇄ Raw zeigt beide Formen.

Standards und Quellen

Alle Begriffe