Die Schlüssel sind ein privater Skalar d in 1…n−1 und der öffentliche Punkt Q = d·G, wobei G der Basispunkt der Kurve ist und n ihre Primordnung. Um einen Hash z zu signieren, wählt der Signierer eine geheime Nonce k, setzt r auf die x-Koordinate von k·G modulo n und berechnet s = k⁻¹·(z + r·d) mod n; der Verifizierer berechnet u₁ = z·s⁻¹ und u₂ = r·s⁻¹ und prüft, ob die x-Koordinate von u₁·G + u₂·Q gleich r ist (FIPS 186-5 §6.4). Der Hash wird auf die Bitlänge von n gekürzt, SHA-512 mit P-256 nutzt also nur die linken 256 Bit.
Gängige Kennungen: In X.509 hat ecdsa-with-SHA256 die OID 1.2.840.10045.4.3.2 (SHA-384: …4.3.3, SHA-512: …4.3.4); in JOSE ES256, ES384, ES512 und ES256K; in COSE −7, −35, −36 und −47; in TLS 1.3 ecdsa_secp256r1_sha256 (0x0403). Die üblichen Kurven sind P-256, P-384, P-521 und für Blockchains secp256k1.
Dieselbe Signatur kommt in zwei Kodierungen vor: roh als r‖s fester Länge (64 Byte bei P-256; JOSE, WebCrypto, COSE) und als SEQUENCE in ASN.1 DER aus zwei Werten vom Typ INTEGER (70–72 Byte bei P-256; X.509, TLS, OpenSSL, Java). Zu jedem gültigen (r, s) besteht auch das Paar (r, n − s) die Prüfung, weshalb Blockchains Low-S-Signaturen verlangen.
Die Nonce ist der Schwachpunkt: Ein wiederholtes oder auch nur leicht verzerrtes k verrät den privaten Schlüssel, deshalb leiten moderne Bibliotheken es deterministisch ab (RFC 6979, von FIPS 186-5 §6.3.2 zugelassen) oder mischen zusätzlich Zufall bei (Hedging). Auf einem Kern eines Apple M4 Max schafft OpenSSL 3.6.5 etwa 87.000 P-256-Signaturen und 29.000 Prüfungen pro Sekunde. NIST IR 8547 (erster öffentlicher Entwurf) schlägt vor, ECDSA nach 2035 in jeder Sicherheitsstufe nicht mehr zuzulassen, weil der Shor-Algorithmus es bricht.