Перейти к содержимому
ecdsa.com

Формат подписи raw r‖s (IEEE P1363)

Кодирование подписи ECDSA или DSA фиксированной длины: r и s записываются подряд, каждое дополнено слева до длины порядка группы в байтах; его используют JOSE, COSE, WebCrypto и API многих HSM.
Другие написанияIEEE P1363raw ECDSA signaturer||sconcatenated signature

Название происходит от стандарта IEEE Std 1363-2000. Длина фиксирована: 64 байта для P-256 и secp256k1, 96 для P-384, 132 для P-521. Альтернатива — DER: SEQUENCE из двух INTEGER минимальной длины в порядке big-endian, каждый с ведущим байтом 0x00, если установлен его старший бит; для P-256 это 70–72 байта, и переменная длина заложена в сам формат.

Формат raw используют JWS ES256 и родственные алгоритмы (RFC 7518, § 3.4), COSE (RFC 9053, § 2.1), WebCrypto, PKCS #11 CKM_ECDSA, Windows CNG и Apple CryptoKit. DER используют X.509 и CMS, CertificateVerify в TLS, подписи assertion в WebAuthn, OpenSSL, SHA256withECDSA в Java, ecdsa.SignASN1 в Go и crypto.sign() в Node. Переключение формата: Node — dsaEncoding: "ieee-p1363", Java — SHA256withECDSAinP1363Format, Python — encode_dss_signature и decode_dss_signature.

При преобразовании обязательно дополнение: r или s короче 32 байт примерно в одной подписи из 128, и если сохранить знаковый байт DER или отбросить дополнение, получатся «raw»-подписи длиной 63 или 65 байт, которые не проходят проверку в других системах. Конвертер DER ⇄ raw показывает обе формы.

Стандарты и ссылки

Все термины