miniatura|200x200px|Un exemplu de portofel bitcoin imprimabil pe hârtie, constând dintr-o adresă bitcoin pentru primire și cheia privată corespunzătoare pentru cheltuire. O semnătură digitală este o schemă matematică folosită pentru a demonstra autenticitatea mesajelor sau documentelor digitale. O semnătură digitală validă oferă destinatarului o bază solidă pentru a crede că mesajul a fost creat de către un expeditor cunoscut (autentificare), să fie sigur că expeditorul nu poate nega că a trimis mesajul (), și că mesajul nu a fost modificat pe parcurs ().

Semnăturile digitale sunt un element standard al celor mai multe suite de , și sunt frecvent utilizate pentru distribuirea de software, tranzacții financiare, , precum și în alte cazuri în care este important să se detecteze falsificarea sau manipularea datelor.

Explicație Semnăturile digitale sunt adesea utilizate pentru punerea în aplicare a , un termen mai larg care se referă la orice date electronice care poartă intenția de semnătură,US ESIGN Act of 2000 dar nu toate semnăturile electronice sunt semnături digitale.National Archives of Australia În unele țări, inclusiv în Statele Unite ale Americii, Turcia, India, Brazilia, Indonezia, Mexic, Arabia Saudită, Elveția și țările din Uniunea Europeană, semnăturile electronice au semnificație juridică.

Semnăturile digitale folosesc criptografia asimetrică. În multe cazuri, acestea oferă un strat de validare și de securitate pentru mesajele trimise printr-un canal nesecurizat: implementată corespunzător, o semnătură digitală oferă receptorului motiv să creadă că mesajul a fost trimis de către expeditorul declarat în mesaj. Sigiliile și semnăturile digitale sunt echivalente din punct de vedere legal cu semnătura olografă și cu sigiliile ștampilate.Regulatory Compliance: Digital signatures and seals are legally enforceable ESIGN (Electronic Signatures in Global and National Commerce) Act Semnăturile digitale sunt echivalente cu semnăturile olografe tradiționale în multe privințe, dar puse în aplicare în mod corespunzător semnăturile digitale sunt mult mai dificil de falsificat decat cele olografe. Sistemele de semnătură digitală, în sensul folosit aici, sunt criptografice, și trebuie să fie implementate corespunzător pentru a fi eficiente. Semnăturile digitale pot oferi și , în sensul că semnatarul nu mai poate susține că nu a semnat un mesaj și în același timp că ține secretă cheia privată; mai mult, unele sisteme de non-repudiere oferă o marcă temporală pentru semnătura digitală, astfel încât, chiar dacă cheia privată este expusă, semnătura rămâne validă. Mesajele semnate digital poate fi orice se poate reprezenta sub formă de : de exemplu, mesaje de e-mail, contracte, sau un mesaj transmis prin intermediul unui alt .

Definiția semnăturii digitale O schemă de semnătură digitală este formată de obicei din 3 algoritmi: Un algoritm de  care alege o cheie privată  dintr-un set de chei private posibile. Algoritmul produce la ieșire cheia privată împreună cu o cheie publică corespunzătoare. Un algoritm de semnare care, când i se prezintă un mesaj și o cheie privată, produce o semnătură. Un algoritm de verificare a semăturii care, primind mesajul, cheia publică și semnătura, poate accepta sau respinge mesajul în raport cu autenticitatea sa. Este nevoie de două două proprietăți principale. În primul rând, autenticitatea semnăturii generate dintr-un mesaj fix și cu o cheie privată fixă să poată fi verificată utilizând cheia publică corespunzătoare. În al doilea rând, să fie imposibil din punct de vedere computațional ca cineva să genereze o semnătură validă fără să știe cheia privată. O semnătură digitală este un mecanism de autentificare, care permite creatorului de mesaj să atașeze un cod care acționează ca o semnătură. Digital Signature Algorithm (DSA), dezvoltat de către National Institute of Standards and Technology, este unul din multe exemple algoritmi de semnare.

În următoarea discuție, 1n se referă la un număr unar.

Formal, o schemă de semnătură digitală este o tripletă de algoritmi probabilistici în timp polinomial, (G, S, V), care satisfac condițiile: G (generatorul de chei) generează o cheie publică, pk, și o cheie privată corespunzătoare, sk, la intrarea 1n, unde n este parametrul de securitate. S (semnarea) returnează o etichetă, t, pe intrările: cheia privată, sk, și un șir de caractere, x. V (verificarea) produce la ieșire acceptat sau respins cu intrările: cheia publică, pk, un șir de caractere, x, și o etichetă, t. Pentru corectitudine, S și V trebuie să îndeplinească Pr [ (pk, sk) ← G(1n), V( pk, x, S(sk, x) ) = acceptat ] = 1.Pass, def 135.1 Un sistem de semnătură digitală este sigur dacă pentru orice adversar A neuniform, probabilistic, în timp polinomial Pr [ (pk, sk) ← G(1n), (x, t) ← OS(sk, · )(pk, 1n), x ∉ Q, V(pk, x, t) = acceptat] < (n), unde cu AS(sk, · ) se notează că A are acces la , cu S(sk, · ) și Q se notează un set de întrebări despre S pus de A, care știe cheia publică pk, și parametrul de securitate, n. Este obligatoriu ca adversarul să nu poate interoga direct șirul x, pe S.Goldreich's FoC, vol. 2, def 6.1.2.

Istoria semnăturii digitale În 1976, Whitfield Diffie și Martin Hellman au descris pentru prima dată noțiunea de schemă de semnătură digitală, cu toate ca ei presupuneau că există astfel de sisteme bazate pe funcții care sunt permutări-trapă, în sens unic."New Directions in Cryptography", IEEE Transactions on Information Theory, IT-22(6):644–654, Nov. 1976."Signature Schemes and Applications to Cryptographic Protocol Design ", Anna Lysyanskaya, PhD thesis, MIT, 2002. Curând după aceea, Ronald Rivest, Adi Shamir, și Len Adleman au inventat algoritmul RSA, care poate fi utilizat pentru a produce semnături digitale primitive (deși numai ca demonstrație –semnăturile RSA „simple” nu sunt sigureDe exemplu, orice întreg, r, „semnează” m=re și produsul, s1s2, a două semnături valide, s1, s2 ale lui m1, respectiv m2, reprezintă o semnătură validă a produsului m1m2.). Primul pachet de software comercializat pe scară largă care a oferit semnătură digitală a fost 1.0, lansat în 1989, care folosea algoritmul RSA.

Alte scheme de semnătură digitală au fost elaborate curând după RSA, cele mai vechi fiind ,"Constructing digital signatures from a one-way function.", Leslie Lamport, Technical Report CSL-98, SRI International, Oct. 1979. semnăturile Merkle (denumite și „arbori Merkle” sau mai simplu „arbori hash”),"A certified digital signature", Ralph Merkle, In Gilles Brassard, ed., Advances in Cryptology – '89, vol. 435 of Lecture Notes in Computer Science, pp. 218–238, Spring Verlag, 1990. și ."Digitalized signatures as intractable as factorization." Michael O. Rabin, Technical Report MIT/LCS/TR-212, MIT Laboratory for Computer Science, Jan. 1979

În 1984, , , și Ronald Rivest au devenit primii care au definit riguros cerințele de securitate pentru schemele de semnături digitale."A digital signature scheme secure against adaptive chosen-message attacks.", Shafi Goldwasser, Silvio Micali, and Ronald Rivest. SIAM Journal on Computing, 17(2):281–308, Apr. 1988. Ei au descris o ierarhie de modele de atacuri asupra schemelor de semnătură, și au prezentat și schema de semnătură GMR, prima despre care se putea demonstra că previne chiar și un fals existențial împotriva unui mesaj de atac ales, care este în prezent definiția acceptată a securității schemelor de semnătură. Primul astfel de sistem, care nu este construit pe baza funcțiilor-trapă, ci mai degrabă pe o familie de funcții cu o cerință mult mai relaxată a acestor permutări cu sens unic, a fost prezentat de către și .Moni Naor, Moti Yung: Universal One-Way Hash Functions and their Cryptographic Applications. STOC 1989: 33-43

Cum funcționează Pentru a crea chei de semnătură RSA, se generează o pereche de chei RSA cu un modul, N, care este produsul a două numere prime mari, împreună cu numerele întregi e și d, astfel încât e d ≡ 1 (mod φ(N)), unde φ este funcția phi a lui Euler. Cheia publică a semnatarului este formată din N și e, iar cheia secretă a semnatarului conține d.

Pentru a semna un mesaj m, semnatarul calculează o semnătură σ, astfel încât σ ≡ md (mod N). Pentru a verifica, receptorul verifică dacă σe ≡ m (mod N).

După cum s-a menționat mai devreme, această schemă de bază nu este foarte sigură. Pentru a preveni atacurile, se poate aplica mai întâi o  asupra mesajului m, și apoi se aplică algoritmul RSA descris mai sus asupra rezultatului. Această abordare este sigură presupunând că funcția hash este un .

Primele scheme de semnătură erau de un tip similar: acestea implică utilizarea unei , cum ar fi funcția RSA, sau, în cazul schemei de semnătură Rabin, calculul unui pătrat modulo compozit, n. O familie de permutări-trapă este o familie de permutări, specificată printr-un parametru, care este ușor de calculat în direcția înainte, dar dificil de a calculat în sens invers, fără a ști deja cheia privată („trapa”). Permutările-trapă pot fi folosite pentru sisteme de semnătură digitală, unde calculul direcției inverse cu cheia secretă este necesar pentru semnare, iar calculul pe direcția înainte este folosit pentru a verifica semnăturile.

Folosit în mod direct, acest tip de sistem de semnătură este vulnerabil la un atac cu fals existențial doar cu cheie. Pentru a crea un fals, atacatorul alege o semnătură aleatorie σ și utilizează procedura de a verifica mesajul m, corespunzător semnăturii."Modern Cryptography: Theory & Practice", Wenbo Mao, Prentice Hall Professional Technical Reference, New Jersey, 2004, pg. 308. În practică însă, acest tip de semnătură nu este folosit direct, ci, mai degrabă, mesajul în clar este mai întâi trecut printr-un hash pentru a produce un rezumat scurt, care este apoi semnat. Acest atac produce, atunci, doar hash-ul care corespunde lui σ, și nu un mesaj care duce la acea valoare, ceea ce nu duce la un adevărat atac. În modelul cu oracol aleator, această formă de semnătură hash-apoi-semnare este nefalsificabilă existențial, chiar și în fața unui atac cu text clar ales.

Există mai multe motive de a semna un astfel de hash (sau rezumat) în locul întregului document. Pentru eficiență Semnătura va fi mult mai scurtă și, astfel, se economisește timp, întrucât hashingul, în general, mult mai rapid în practică decât semnarea. Pentru compatibilitate Mesajele sunt de obicei șiruri de biți, dar unele sisteme de semnătură funcționează pe alte domenii (cum ar fi, în cazul RSA, numerele modulo un număr compus N). O funcție hash poate fi folosită pentru a converti o intrare arbitrară în formatul corespunzător. Pentru integritate Fără funcția hash, textul „de semnat” ar poatea să trebuiască să fie divizate (separat) în blocuri suficient de mici pentru ca sistemul de semnătură să acționeze asupra lor în mod direct. Cu toate acestea, receptorul blocurilor semnate nu poate recunoaște dacă sunt prezente toate blocurile și sunt și în ordinea corespunzătoare.

Noțiuni de securitate În articolul lor fundamental, Goldwasser, Micali, și Rivest stabileau o ierarhie de modele de atac împotriva semnături digitale: Într-un atac doar asupra cheii, atacatorul are acces doar la cheia publică de verificare. Într-un atac cu mesaj cunoscut, atacatorul are la dispoziție semnături valabile pentru o varietate de mesaje cunoscute de către atacator, dar nu alese de către atacator. Într-un atac adaptiv cu mesaj ales, atacatorul află mai întâi semnături asupra unor mesaje arbitrare alese de atacator. Ei descriu și o ierarhie de rezultate ale atacurilor: O spargere totală care are ca rezultat recuperarea cheii de semnare. Un atac cu fals universal care are ca rezultat capacitatea de a falsifica semnături pentru orice mesaj. Un atac cu fals selectiv rezultă într-o semnătură falsă aplicată pe un mesaj ales de adversar. Un fals existențial rezultă doar într-o pereche mesaj valid/semnătură care nu sunt deja cunoscute de către adversar.