Puncte:0

Sunt semnăturile RSA-SHA256 predispuse la atacuri de extensie de lungime?

drapel mq

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ță.

kelalaka avatar
drapel in
O posibilă înșelăciune de: [Cum poate fi Hashed Value să fie aceeași în lungimea atacului de extensie?](https://crypto.stackexchange.com/q/87696/18298)
AleksanderCH avatar
drapel nl
Răspunde asta la întrebarea ta? [Este necesar HMAC pentru un MAC bazat pe SHA-3?](https://crypto.stackexchange.com/questions/17735/is-hmac-needed-for-a-sha-3-based-mac)
vdavid avatar
drapel mq
@AleksanderCH mulțumesc pentru link. Răspunde parțial la întrebare. Arată că un MAC bazat pe SHA3 ar fi sigur fără un HMAC, ceea ce a fost una dintre presupunerile mele. Dar nu spune dacă semnul/verificarea RSA-SHA256 este sigur, care este întrebarea mea principală.
kelalaka avatar
drapel in
Răspunde asta la întrebarea ta? [Cum poate fi Hashed Value aceeași în atacul cu extensia de lungime?](https://crypto.stackexchange.com/questions/87696/how-can-hashed-value-be-same-in-length-extension-attack)
vdavid avatar
drapel mq
@kelalaka este o lectură interesantă despre modul în care funcționează atacurile cu extensie de lungime, dar nu spune dacă RSA-SHA256 este susceptibil la acestea.
Puncte:5
drapel my

Dar ce se întâmplă dacă semnez un mesaj cu RSA și SHA-256? Sunt în siguranță?

Atacurile de prelungire a lungimii nu sunt o preocupare.

Iată ce vă permite să faceți un atac de extensie de lungime: dacă vi se dă hash $\text{SHA256}(M)$, dar nu cunoașteți mesajul original $M$ (dar îi cunoașteți lungimea), apoi puteți calcula valoarea hash-ului $\text{SHA256}(M || X)$ (Unde $||$ este concatenarea șirurilor de biți și pentru unele valori ale șirului $X$); valoarea acestui hash va fi diferită de cea originală.

Deci, de ce nu este aceasta o preocupare:

  • Când aveți o semnătură a unui mesaj cunoscut $M$, evident că știi $M$; poți (dacă vrei) să calculezi $\text{SHA256}(M || X)$ pentru orice șir $X$ tu vrei; nu aveți nevoie de un „atac de extensie de lungime”

  • RSA semnează valoarea $\text{SHA256}(M)$; valoarea $\text{SHA256}(M || X)$ va fi diferit, și așadar dacă înlocuiți $M$ cu $M || X$, semnătura nu se va verifica

vdavid avatar
drapel mq
Îngrijorarea mea este că atacatorul știe `M` și `SHA256(M)`, așa că poate calcula `M||X` și `SHA256(M||X)` (chiar și fără a cunoaște cheia privată). În acest caz, destinatarul lui `M||X` și semnătura sa `SHA256(M||X)` nu va ști că mesajul a fost falsificat deoarece mesajul modificat și semnătura lui se vor potrivi. Ei bine, 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, cred că suntem în siguranță.
poncho avatar
drapel my
@vdavid: „deci el poate calcula `M||X` și `SHA256(M||X)` (chiar și fără a cunoaște cheia privată)." - cu ce este diferit de (să zicem) SHA3? Cu SHA3, dacă știe $M$ și selectează $X$, el poate calcula `SHA3(M||X)`. Dacă vă gândiți că `SHA256(M||X)` va avea aceeași valoare cu `SHA256(M)`, ei bine, nu, nu așa funcționează.
fgrieu avatar
drapel ng
@vdavid: _"destinatarul lui `M||X` și semnătura sa `SHA256(M||X)`â¦"_ sunt greșite. `SHA256(M||X)` nu este semnătura lui `M||X`. Este un pas intermediar în calcularea unei semnături a lui `M||X`, în funcție de `SHA256(M||X)`, cheie privată, aleatorie opțională. Dintre cele trei intrări ale acestei funcții, doar cheia privată este secretă. Prin urmare, nu este o problemă faptul că `SHA256(M||X)` este ușor de calculat; este o cerință funcțională.
vdavid avatar
drapel mq
@poncho SHA3 este teoretic mai bun pentru că, spre deosebire de SHA-256, cred că *nu putem* folosi `M` și `SHA3(M)` pentru a crea un `SHA3(M||X)`
vdavid avatar
drapel mq
@fgrieu OK dacă hash-ul este un pas intermediar, bănuiesc că semnătura nu poate fi manipulată
fgrieu avatar
drapel ng
@vdavid: aveți dreptate că SHA3, spre deosebire de SHA-256, nu are nicio proprietate de extensie a lungimii. Cu toate acestea, sunteți greșit în ceea ce vă împiedică. Împiedică calculul `SHA3(M||X)` din `SHA3(M)` _cu excepția cazului în care cineva are cunoștințe complete despre `M` (în cazul SHA-256, mai trebuie să se limiteze la un `X` cu exact începutul corect, în funcție de lungimea lui `M`). Cu cunoștințele lui `M` și `X` se poate calcula `SHA3(M||X)`, pentru orice `M` și `X`. Notă: Lucrul corect va fi să acceptați răspunsul lui poncho făcând clic pe bifă.
vdavid avatar
drapel mq
@fgrieu Ai dreptate. Și pentru că `M` nu este secret în cazul meu, cred că această proprietate nu oferă SHA3 un avantaj semnificativ față de SHA-256 (cel puțin, nu din punct de vedere al extinderii lungimii).
kelalaka avatar
drapel in
De fapt, ar trebui să fie $\text{SHA256}(M || padding_1|| X)$, deoarece hash-ul original are o umplutură și în timpul extensiei SHA-256 calculează o altă umplutură.
poncho avatar
drapel my
@kelalaka: de fapt, am inclus $padding_1$ în $X$ - de aceea am spus că este pentru „un X” - nu am crezut că detaliile atacului cu extensia de lungime sunt de fapt relevante - el nu încearcă să efectuează atacul, în schimb, el întreabă despre implicații.
kelalaka avatar
drapel in
$M$ este mesajul care este gratuit pentru toți să verifice semnătura cu el, Imho, acest detaliu este încă important.
vdavid avatar
drapel mq
@kelalaka Aș spune că umplutura contează dacă umplutura greșită face ca RSA să fie vulnerabilă la falsificarea unei semnături valide pentru un mesaj falsificat. Este ceva de care ar trebui să mă preocup?
poncho avatar
drapel my
@vdavid: *padding* este folosit în două sensuri diferite; una este o umplutură făcută ca parte a calculului SHA256 (care este un detaliu de care nu trebuie să vă preocupați, cu excepția cazului în care implementați SHA256). Celălalt este umplutura făcută după hash și chiar înainte de calculul RSA brut - acest lucru este important (înțelegerea greșit ar permite cuiva să genereze falsuri), totuși nu are nimic de-a face cu atacurile cu extensie de lungime.
vdavid avatar
drapel mq
@poncho ce fel de alte falsuri s-ar putea întâmpla dacă folosesc umplutura greșită? Există o umplutură recomandată? Încă nu am ales unul dintre PKCS (sau oricare altul care ar fi mai bun pentru RSA).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.