Aller au contenu
ecdsa.com

Format de signature r‖s brut (IEEE P1363)

L’encodage à longueur fixe d’une signature ECDSA ou DSA sous forme de r et s concaténés, chacun avec un remplissage à gauche jusqu’à la longueur en octets de l’ordre du groupe, utilisé par JOSE, COSE, WebCrypto et de nombreuses API de HSM.
Autres graphiesIEEE P1363raw ECDSA signaturer||sconcatenated signature

Il doit son nom à la norme IEEE Std 1363-2000. Les longueurs sont fixes : 64 octets pour P-256 et secp256k1, 96 pour P-384, 132 pour P-521. L’alternative est DER : une SEQUENCE de deux INTEGER big-endian minimaux, chacun précédé d’un 0x00 lorsque son bit de poids fort vaut 1, ce qui donne de 70 à 72 octets pour P-256 et une longueur variable par construction.

Le format brut est utilisé par JWS ES256 et consorts (RFC 7518 §3.4), COSE (RFC 9053 §2.1), WebCrypto, PKCS #11 CKM_ECDSA, Windows CNG et Apple CryptoKit. DER est utilisé par X.509 et CMS, CertificateVerify de TLS, les signatures d’assertion WebAuthn, OpenSSL, SHA256withECDSA de Java, ecdsa.SignASN1 de Go et crypto.sign() de Node. Pour basculer : Node dsaEncoding: "ieee-p1363", Java SHA256withECDSAinP1363Format, Python encode_dss_signature et decode_dss_signature.

Les conversions doivent appliquer le remplissage : r ou s fait moins de 32 octets dans environ une signature sur 128, et conserver l’octet de signe de DER ou omettre le remplissage produit des signatures « brutes » de 63 ou 65 octets, qui échouent ailleurs. Le convertisseur DER ⇄ brut montre les deux formes.

Normes et références

Tous les termes