O semnatura digitala este o schema matematica pentru verificarea autenticitatii mesajelor sau documentelor digitale. O semnatura digitala valida, in care sunt indeplinite conditiile prealabile, ofera destinatarului un motiv foarte puternic pentru a crede ca mesajul a fost creat de un expeditor cunoscut (autentificare) si ca mesajul nu a fost modificat in tranzit (integritate).
Semnaturile digitale sunt un element standard al majoritatii suitelor de protocol criptografic si sunt utilizate in mod obisnuit pentru distributia de software, tranzactii financiare, software de gestionare a contractelor si in alte cazuri in care este important sa se detecteze falsificarea.
Semnaturile digitale sunt adesea folosite pentru a implementa semnaturi electronice, care includ orice date electronice care poarta intentia unei semnaturi, dar nu toate semnaturile electronice folosesc semnaturi digitale. In unele tari, inclusiv Canada, Africa de Sud, Statele Unite, Algeria, Turcia, India, Brazilia, Indonezia, Mexic, Arabia Saudita, Uruguay, Elvetia , Chile si tarile Uniunii Europene, semnaturile electronice au semnificatie juridica.
Semnaturile digitale utilizeaza criptografie asimetrica. In multe cazuri, acestea ofera un strat de validare si securitate pentru mesajele trimise printr-un canal nesecurizat: implementata corect, o semnatura digitala ii ofera destinatarului motive sa creada ca mesajul a fost trimis de expeditorul revendicat.
Semnaturile digitale sunt echivalente cu semnaturile traditionale scrise de mana in multe privinte, dar semnaturile digitale implementate corect sunt mai greu de falsificat decat tipul scris de mana. Schemele de semnaturi digitale, in sensul utilizat aici, sunt bazate pe criptografie si trebuie sa fie implementate in mod corespunzator pentru a fi eficiente.
De asemenea, acestea pot furniza non-respingere, ceea ce inseamna ca semnatarul nu poate sustine cu succes ca nu a semnat un mesaj. Mai mult, unele scheme de non-respingere ofera un timestamp pentru semnatura digitala, astfel incat, chiar daca cheia privata este expusa, semnatura este valabila. Mesajele semnate digital pot fi orice lucru reprezentabil ca un sir de biti: exemple includ posta electronica, contractele sau un mesaj trimis prin alt protocol criptografic.
Definitie
O schema de semnaturi digitale consta de obicei din trei algoritmi;
- Un algoritm de generare a cheilor care selecteaza o cheie privata in mod uniform la intamplare dintr-un set de posibile chei private. Algoritmul afiseaza cheia privata si o cheie publica corespunzatoare.
- Un algoritm de semnare care, dat fiind un mesaj si o cheie privata, produce o semnatura.
- Un algoritm de verificare a semnaturii care, avand in vedere mesajul, cheia publica si semnatura, accepta sau respinge pretentia mesajului la autenticitate.
Sunt necesare doua proprietati principale. In primul rand, autenticitatea unei semnaturi generate dintr-un mesaj fix si o cheie privata fixa, poate fi verificata utilizand cheia publica corespunzatoare. In al doilea rand, ar trebui sa fie imposibil de calculat pentru a genera o semnatura valida pentru o parte, fara a cunoaste cheia privata a acesteia. O semnatura digitala este un mecanism de autentificare care permite creatorului mesajului sa ataseze un cod care actioneaza ca o semnatura. Algoritmul semnaturii digitale (DSA), dezvoltat de Institutul National de Standarde si Tehnologie, este unul dintre multele exemple de algoritm de semnare.
In mod formal, o schema de semnatura digitala este un triplu al algoritmilor probabilistici de timp polinomial, (G, S, V), satisfacand:
- G (generator de chei) care genereaza o cheie publica (pk) si o cheie privata corespunzatoare (sk), la intrarea 1n, unde n este parametrul de securitate.
- S (semnare) returneaza o eticheta, t, pe intrari: cheia privata (sk) si un sir (x).
- V (verificarea) iesirilor acceptate sau respinse pe intrari: cheia publica (pk), un sir (x) si o eticheta (t).
- Pentru corectitudine, S si V trebuie sa satisfaca Pr [(pk, sk) ← G (1n), V (pk, x, S (sk, x)) = acceptat] = 1.
Metoda
O schema de semnaturi digitale (dintre multe altele) se bazeaza pe RSA. Pentru a crea chei de semnatura, generati o pereche de chei RSA care contine un modul, N, care este produsul a doua prime secrete distincte aleatorii, impreuna cu numere intregi, e si d, astfel incat ed ≡ 1 (mod φ (N)), φ este functia totient a lui Euler. Cheia publica a semnatarului este formata din N si e, iar cheia secreta a semnatarului contine d.
Pentru a semna un mesaj, m, semnatarul calculeaza o semnatura, σ, astfel incat σ ≡ md (mod N). Pentru a verifica, receptorul verifica daca σe ≡ m (mod N).
Mai multe scheme de semnare timpurie au fost de un tip similar: ele implica utilizarea unei permutari prin trapa, cum ar fi functia RSA, sau in cazul schemei de semnatura Rabin, calculand compozit modulo patrat, N. O familie de permutare prin trapa este o familie de permutari, specificate de un parametru, care este usor de calculat in directia inainte, dar este dificil de calculat in directia inversa fara a cunoaste deja cheia privata („trapdoor”).
Permutarile Trapdoor pot fi utilizate pentru schemele de semnaturi digitale, unde calcularea directiei inverse cu cheia secreta este necesara pentru semnare, iar calcularea directiei inainte este utilizata pentru verificarea semnaturilor.
Folosit direct, acest tip de schema de semnaturi este vulnerabil la atacul de falsificare existentiala numai cu cheie. Pentru a crea o falsificare, atacatorul alege o semnatura aleatorie σ si foloseste procedura de verificare pentru a determina mesajul, m, corespunzator acelei semnaturi. In practica, totusi, acest tip de semnatura nu este utilizat direct, ci mai degraba, mesajul care trebuie semnat trece printr-o procedura de tip hash, pentru a produce un rezumat scurt, apoi semnat cu functia de trapa inversa.
Acest atac fals, deci, produce doar iesirea functiei de hash care corespunde lui σ, dar nu un mesaj care duce la acea valoare, care nu duce la un atac. In modelul oracle aleatoriu, hash-then-sign (o versiune idealizata a acelei practici in care hash-ul si padding-ul combinat au aproape de N iesiri posibile), aceasta forma de semnatura este de neuitat existential, chiar si impotriva unui atac de tip text ales.
Exista mai multe motive pentru a semna un astfel de hash (sau rezumat de mesaje) in locul intregului document.
1. Pentru eficienta
Semnatura va fi mult mai scurta si astfel va economisi timp, deoarece hashing-ul este, in general, mult mai rapid decat semnarea in practica.
2. Pentru compatibilitate
Mesajele sunt de obicei siruri de biti, dar unele scheme de semnaturi opereaza pe alte domenii (cum ar fi, in cazul RSA, numere modulo un numar compus N). O functie hash poate fi utilizata pentru a converti o intrare arbitrara in formatul adecvat.
3. Pentru integritate
Fara functia hash, este posibil ca textul „de semnat” sa fie divizat (separat) in blocuri suficient de mici pentru ca schema de semnaturi sa actioneze asupra lor direct. Cu toate acestea, receptorul blocurilor semnate nu este capabil sa recunoasca daca toate blocurile sunt prezente si in ordinea corespunzatoare.
Notiuni de securitate
In lucrarea lor fundamentala, Goldwasser, Micali si Rivest prezinta o ierarhie a modelelor de atac impotriva semnaturilor digitale:
- Intr-un atac numai cu cheie, atacatorului i se da doar cheia de verificare publica.
- Intr-un atac de mesaj cunoscut, atacatorului i se ofera semnaturi valide pentru o varietate de mesaje cunoscute de atacator, dar care nu sunt alese de atacator.
- Intr-un atac de mesaje adaptate, atacatorul invata mai intai semnaturi pe mesaje arbitrare la alegerea atacatorului.
De asemenea, descriu o ierarhie a rezultatelor atacului:
- pauza totala duce la recuperarea cheii de semnare.
- Un atac universal fals are ca rezultat capacitatea de a falsifica semnaturi pentru orice mesaj.
- Un atac selectiv de fals rezulta intr-o semnatura pe un mesaj ales de adversar.
- falsificare existentiala are ca rezultat doar o pereche valida de mesaje / semnaturi care nu sunt deja cunoscute de adversar.
Prin urmare, cea mai puternica notiune de securitate este securitatea impotriva falsificarii existentiale in cadrul unui atac adaptat al mesajului.
Aplicatii
Pe masura ce organizatiile se indeparteaza de documentele pe hartie cu semnaturi de cerneala sau stampile de autenticitate, semnaturile digitale pot oferi asigurari suplimentare privind dovezile privind provenienta, identitatea si starea unui document electronic, precum si recunoasterea consimtamantului informat si aprobarea de catre un semnatar. Biroul de tiparire al guvernului Statelor Unite (GPO) publica versiuni electronice ale bugetului, legile publice si private si facturile congresului cu semnaturi digitale. Universitati, inclusiv Penn State, Universitatea din Chicago si Stanford, publica transcrieri electronice ale studentilor cu semnaturi digitale.
Mai jos sunt cateva motive obisnuite pentru aplicarea unei semnaturi digitale la comunicatii:
Autentificare
Desi mesajele pot include adesea informatii despre entitatea care trimite un mesaj, este posibil ca aceste informatii sa nu fie exacte. Semnaturile digitale pot fi utilizate pentru a autentifica identitatea mesajelor sursa. Cand detinerea unei chei secrete de semnatura digitala este legata de un anumit utilizator, o semnatura valida arata ca mesajul a fost trimis de catre acel utilizator. Importanta increderii ridicate in autenticitatea expeditorului este evidenta mai ales intr-un context financiar. De exemplu, sa presupunem ca sucursala unei banci trimite instructiuni catre biroul central solicitand o modificare a soldului unui cont. Daca biroul central nu este convins ca un astfel de mesaj este trimis cu adevarat de la o sursa autorizata, actionarea la o astfel de cerere ar putea fi o greseala grava.
Integritate
In multe scenarii, expeditorul si receptorul unui mesaj pot avea nevoie de incredere ca mesajul nu a fost modificat in timpul transmiterii. Desi criptarea ascunde continutul unui mesaj, poate fi posibil sa schimbati un mesaj criptat fara a-l intelege. (Unii algoritmi de criptare, numiti nonmalleable, impiedica acest lucru, dar altii nu.) Cu toate acestea, daca un mesaj este semnat digital, orice modificare a mesajului dupa semnare invalideaza semnatura. Mai mult decat atat, nu exista o modalitate eficienta de a modifica un mesaj si semnatura acestuia pentru a produce un mesaj nou cu o semnatura valida, deoarece acest lucru este inca considerat ca fiind infezabil din punct de vedere computerizat de majoritatea functiilor hash criptografice (vezi rezistenta la coliziune).
Utilizarea semnaturilor digitale numai cu aplicatii de incredere
Una dintre principalele diferente dintre o semnatura digitala si o semnatura scrisa este aceea ca utilizatorul nu „vede” ce semneaza. Aplicatia prezinta un cod hash care trebuie semnat de algoritmul de semnare digitala, utilizand cheia privata. Un atacator care castiga controlul asupra computerului utilizatorului poate inlocui aplicatia utilizatorului cu un inlocuitor strain, de fapt inlocuind comunicarile proprii ale utilizatorului cu cele ale atacatorului. Acest lucru ar putea permite unei aplicatii rau intentionate sa pacaleasca un utilizator sa semneze orice document afisand pe ecran ecranul original al utilizatorului, dar prezentand propriile documente ale atacatorului catre aplicatia de semnare.
Pentru a va proteja impotriva acestui scenariu, se poate configura un sistem de autentificare intre aplicatia utilizatorului (procesor de text, client de e-mail etc.) si aplicatia de semnare. Ideea generala este de a oferi niste mijloace atat pentru aplicatia utilizator, cat si pentru semnarea aplicatiei, pentru a se verifica integritatea celuilalt. De exemplu, aplicatia de semnare poate solicita ca toate cererile sa provina din binare semnate digital.