Dat fiind că persoana B are doar cheia publică, fișierul, semnătura și hash-ul, ar fi suficientă verificarea semnăturii folosind cheia publică pentru a dovedi că persoana A a semnat fișierul real?
Persoana B nu are nevoie de hash. Dacă îl primesc, îl pot folosi în scop de depanare sau pentru a anula verificarea devreme, dar nu ar trebui să aibă încredere în el. În cele ce urmează, ignor orice persoană hash pe care B ar fi primit-o.
Persoana B trebuie să trimită fișierul și să verifice dacă acel hash, cheia publică și semnătura sunt verificate.Asta ar trebui să dovedească că persoana A a semnat dosarul.
Hashing-ul este o parte importantă a verificării semnăturii, care este de obicei menționată astfel: Persoana B trebuie să verifice dacă fișierul, cheia publică și semnătura se verifică.
O excepție de la paragraful de mai sus este atunci când, pe lângă un sistem de semnătură deja potrivit pentru a semna un mesaj/fișier de orice lungime folosind un hash $H_1$, este adăugat un alt strat de hashing cu un hash $H_2$. În acest caz, s-ar spune: Persoana B va hash fișierul cu $H_2$, și verificați dacă acel hash, cheia publică și semnătura, verifică (implicit: cu funcția hash $H_1$ aplicat rezultatului de $H_2$ ca parte a verificării semnăturii). O astfel de hashing compozit se face uneori din motive de performanță, deoarece $H_2$ este prin proiect mai rapid decât $H_1$; sau/și pentru că $H_1$ este realizat de un dispozitiv (de exemplu, un Smart Card) și $H_2$ este efectuată de altul (de exemplu, un computer care utilizează cardul inteligent).
Ce hashe-uri și algoritmi sunt (potriviți) pentru asta?
Din punct de vedere teoretic, semnătura are nevoie de un algoritm hash care să fie rezistent la coliziuni (implicând rezistent la a doua preimagine) și cu lățime adecvată pentru sistemul de semnătură luat în considerare.
Dacă acea lățime este de cel mult 512 de biți, SHA-512 trunchiat în mod corespunzător va face. Pentru dimensiuni arbitrare, există SHAKE256. Pentru o viteză mai bună, există Blake2.
Din punct de vedere practic, hash-ul este de obicei specificat de sistemul de semnătură sau de parametrii acestuia, iar specificația respectivă este adesea încorporată cu cheia publică în certificatul cheii publice.
Un exemplu de algoritm de semnătură și hash de uz comun este ECDSA cu curba secp256r1 si hash SHA-256. Un alt exemplu este Ed25519, care specifică algoritmul, curba și hash (rețineți că Ed25519ph este ca Ed25519, cu excepția hashingului dual din excepția de mai sus).
¹ Nu există nimic ca dovada absolută: poate cheia publică nu este cea a persoanei A; sau cheia privată A unei persoane a fost furată; sau PC-ul lor era sub controlul unui actor rău intenționat, așa că A a vrut să semneze cu totul altceva; sau sistemul de semnătură sau hash-ul este spartâ¦