Trebuie să semnez un mesaj folosind o cheie privată și să verific mesajul cu o cheie publică, asigurându-mă în același timp că mesajul nu a fost modificat.
Știu că SHA-256 în sine este predispus la atacuri de extindere a lungimii.
De asemenea, știu că lucruri precum HMAC au fost special concepute pentru a evita astfel de atacuri.
Dar ce se întâmplă dacă semnez un mesaj cu RSA și SHA-256? Sunt în siguranță?
Trebuie să semnez RSA/SHA3 pentru a fi protejat? Sau poate versiuni trunchiate de SHA2 (și anume SHA-384 și SHA-512/256) care se presupune că sunt nu susceptibil la atacuri de extensie de lungime?
Ar fi HMAC o abordare mai bună a acestei probleme?
Mă gândesc să folosesc RSA, care este probabil cel mai faimos dintre criptografia asimetrică. Simțiți-vă liber să-mi indicați altceva dacă există o opțiune mai bună. Am nevoie de ceva susținut de OpenSSL și de modulul cripto Node.js (care, din câte știu eu, se bazează și pe OpenSSL).
PS. Sunt puțin nou în comunitatea cripto, așa că sper că cuvintele mele au sens.
-- addendum --
Iată îngrijorarea mea cu privire la RSA-SHA256.
Să presupunem că mesajul este $M$ și hașul său este $SHA256(M)$.
Un atacator le poate folosi pentru a calcula $M||X$ și $SHA256(M||X)$, chiar și fără a cunoaște cheia privată.În acest caz, destinatarul $M||X$ și semnătura acesteia $SHA256(M||X)$ va crede că mesajul este valid deoarece mesajul și semnătura lui se potrivesc.
Cel puțin asta se întâmplă dacă RSA_sign folosește pur și simplu hashul brut. Dacă RSA trece hash-ul printr-o tehnică asemănătoare HMAC sau orice algoritm care împiedică atacatorul să falsifice o semnătură, cred că suntem în siguranță.