Securitatea schemelor de semnătură nu necesită criptarea mesajului. Algoritmul hash și parametrii algoritmului de semnătură sunt cunoscuți public și sunt singurii secreti cheia semnatarului trebuie ținută secretă tot timpul. Hashingul înainte de semnare face parte din schema de semnătură de la prima schemă de semnătură adevărată; Semnătura Rabin sistem.
În securitatea schemelor de semnătură avem un adversar, falsificatorul, al cărui scop este falsificarea unei semnături a unui mesaj care nu a fost niciodată semnat înainte. Pentru un joc simplu, puteți considera că falsificatorul a obținut $n$ perechi de $(\sigma_i,m_i)$ acestea sunt mesajul și perechea de semnături. Acum, dacă falsificatorul poate scoate un mesaj nou $m \neq m_i$ pentru $i \în \{1,n\}$ cu o semnătură valabilă $(\sigma,m)$ numim asta un fals pentru semnătura digitală cu Fals existential.
Este posibil să semnați criptografic un mesaj cu o cheie privată, păstrând public conținutul pre-imagine?
Da. Atâta timp cât mesajul nu trebuie să fie confidențial, nu există nicio problemă cu schemele securizate de semnătură precum RSASSA-PSS, DSA, ECDSA, EdDSA, Schnoor etc. Mesajul poate fi semnat necriptat. Acest lucru este comun în mediile digitale. Puteți vedea conținutul și semnătura unui PDF, imagine, documente guvernamentale etc. și puteți verifica semnătura dacă aveți adevărata cheie publică a semnatarului.
Rețineți că, dacă algoritmul hash nu este rezistent la a doua pre-imagine, atunci falsificarea este iminentă. Utilizați funcția criptografică rezistentă la coliziune pentru a obține cel puțin Falsificare universală (UF) sub Chosen-Message Attack (CMA) UF-CMA, cum ar fi SHA2, SHAKE din SHA3 și BLAKE2.
Dacă se bazează doar pe a doua rezistență pre-imagine a SHA-1, atunci există atacuri la coliziunea $\operatorname{SHA-1}$ ca;
- Alice creează două mesaje care au aceeași valoare SHA-1, $m_1$ este ceea ce Bob vrea să semneze și $m_2$ este ceea ce Alice are avantajul pentru ei.
- Alice trimite $m_1$ lui Bob și Bob citește și semnează. $$(\sigma,m_1) = Semn(\operatorname{SHA-1}(m_1))$$
- Alice trimite $(\sigma,m_2)$ lui Charlie.
- Charlie verifică semnul de atunci $\operatorname{SHA-1}(m_1) = \operatorname{SHA-1}(m_2)$
- Alice beneficiază.
Nu setați securitatea schemelor stricate, chiar dacă acestea atenuează riscurile actuale.