Semnarea cheii public-private funcționează în general astfel
Nu, nu este. RSA poate fi vizualizat în acest fel (dacă stați la nivelul de 10.000 de picioare); totuși a) utilizarea aceleiași chei atât pentru a semna, cât și a decriptării nu este încurajată și b) RSA este, în esență, singurul algoritm de semnătură care poate fi descris în acest fel.
Cu toate acestea, asta nu abordează adevărata ta întrebare:
Semnarea funcției de hashing
Ei bine, nu ați descris-o corect - pentru unul, nu există nimic care să lege mesajul de valoarea cheie revelată. Adică, cineva ar putea modifica mesajul în zbor, iar valoarea cheii va verifica în continuare.
Ce înseamnă în general Lampport:
Alegem $k$ preimagini hash $c_1, c_2, ..., c_k$, și hash fiecare dintre ele și publică rezultatul fiecărui hash $H(c_1), H(c_2), ..., H(c_k)$ ca cheie publică
Când semnăm mesajul, convertim mesajul într-o serie de valori $b_1, b_2, ..., b_n$ (fiecare valoare între $1$ și $k$) - această conversie se face în așa fel încât este greu să găsești un al doilea mesaj care să se transforme într-o serie de biți care constau numai din valorile din $b_1, b_2, ..., b_n$).
Semnătura constă din preimaginile revelate $c_{b_1}, c_{b_2}, ..., c_{b_n}$
Verificatorul poate prelua mesajul și îl poate transforma într-o serie de valori $b_1, b_2, ..., b_n$, și verificați dacă fiecare dintre preimaginile din semnătură se încadrează la valoarea din cheia publică.
Ar trebui să fie ușor de observat că falsificarea unei semnături ar necesita fie a) găsirea unui mesaj care se transformă în valori care sunt toate relevate în semnătura bună (care am presupus că este dificilă), fie b) găsirea unei preimagine pentru o valoare care nu a fost dezvăluit (ceea ce presupunem că este greu).
Acestea fiind spuse, întrebarea ta a fost într-adevăr:
Văd că hashing/semnarea simetrică are nevoie de îngrijire suplimentară
Ei bine, Lampport este util doar dacă trebuie să semnezi un singur mesaj cu o cheie publică. Când te uiți la blockchain (unde presupunem că verificatorul vede toate semnăturile și putem include următoarea cheie publică împreună cu semnătura (și ca mesajul care este semnat să includă următoarea cheie publică, desigur), acest lucru poate funcționa - așa cum subliniați, ne cere să ne amintim următoarea cheie publică (care se va schimba pentru fiecare semnătură), dar este posibil.
În multe alte contexte, acest lucru nu funcționează. Cu toate acestea, există o serie de modificări ale semnăturilor bazate pe hash care nu au aceste limitări:
Semnături bazate pe hash cu stat (cum ar fi LMS și XMSS); acestea funcționează ca Lamport, cu excepția faptului că o cheie publică poate semna un număr mare de mesaje diferite (și putem face acest „număr mare” mai mare decât numărul de mesaje pe care le vom vedea vreodată). Au cerința ca semnatarul să țină evidența stării (care se schimbă cu fiecare semnătură)
Semnături apatride bazate pe hash (cum ar fi Sfincii+); acest lucru elimină necesitatea de a urmări orice stare în timpul semnării și astfel acționează la fel ca orice alt algoritm de semnătură
Și, dacă presupuneți că RSA și semnăturile bazate pe hash sunt singurele opțiuni de pe masă, ei bine, nu sunt. Există, de asemenea, diverse scheme bazate pe zăbrele, scheme multivariate, scheme bazate pe dovezi de cunoștințe zero (Picnic) - există o serie de opțiuni diferite.