Puncte:0

Falsificarea semnăturilor digitale pe 60000 de mesaje cu forță brută

drapel us

Să presupunem că un sistem de operare folosește semnături digitale pentru a se asigura că fișierele executabile pot fi autentificate și nu pot fi modificate; unde semnăturile digitale sunt construite prin crearea unui hash al fișierului executabil (de exemplu, SHA256), criptarea hash-ului cu o cheie privată (de exemplu, RSA), apoi atașarea hash-ului criptat și a cheii publice (semnătura) la fișierul executabil.

Să presupunem că există 1000 de programe (de la mai mulți editori) care sunt actualizate (în medie) o dată pe lună timp de 5 ani.

Un atacator colectează hash-ul și semnătura digitală pentru toate cele 60.000 de componente software. Atacatorul își scrie propriul malware troian cu o umplutură de rezervă la sfârșitul fișierului executabil. Atacatorul calculează un hash parțial al executabilului său, dar se oprește (salvează starea de calcul hash) chiar înainte de umplutură.

Atacatorul resetează starea de calcul hash, termină extrem de rapid calculul hash, apoi verifică dacă hash-ul corespunde uneia dintre cele 60000 de semnături digitale pe care le-au colectat. Dacă nu, ei incrementează padding-ul la sfârșitul fișierului lor executabil și reîncearcă. Atacatorul face acest lucru pe mai multe computere (multi-CPU) în paralel, până când găsește semnătura altuia pe care o poate folosi pentru a-și semna malware-ul.

Cum poate fi prevenit acest lucru?

Puterea schemei de criptare este neimportantă. Creșterea dimensiunii hash înseamnă doar că atacatorul trebuie să colecteze mai multe semnături digitale și/sau să folosească mai multe procesoare mai mult timp pentru a găsi o semnătură validă pentru malware-ul său. Să presupunem că atacatorul poate obține mai multe procesoare ascunzând javascript într-o pagină web populară, folosind servicii cloud, ascunzându-l în software publicat cu propria semnătură legitimă (de exemplu, un utilitar de extragere a criptomonedei) etc.

Este vreun algoritm de hash existent suficient de puternic?

kelalaka avatar
drapel in
Legat de [Atacul multi-țintă pentru hashes](https://crypto.stackexchange.com/q/75880/18298)
Puncte:4
drapel my

Este vreun algoritm de hash existent suficient de puternic?

Da; de fapt, orice algoritm hash sigur din punct de vedere criptografic (cum ar fi SHA-2, SHA-3, Blake2) ar fi suficient de puternic.

Pentru a sublinia acest lucru, permiteți-mi să subliniez că MD5 este suficient de puternic. Acum, MD5 este considerat destul de slab (și nimeni de aici nu ar susține utilizarea lui); cu toate acestea, chiar și cu slăbiciunile sale cunoscute, este încă suficient de puternic împotriva acestui atac specific.

MD5 are o ieșire de 128 de biți (în contrast cu funcțiile hash criptografice pe care le folosim în practică, care au ieșiri mult mai mari). În plus, există modalități cunoscute de a genera „coliziune”, adică perechi de intrări pe care MD5-hash la aceeași valoare. Cu toate acestea, acele metode presupun că atacul are control asupra ambelor intrări - în acest caz, editorul valid generează imaginea validă, iar atacatorul nu poate modifica ceea ce semnează editorul și, prin urmare, slăbiciunea de coliziune a MD5 nu se aplică. MD5 nu are slăbiciuni cunoscute la atacurile „a doua preimagine” sau la un atac „multitarget a doua preimagine” (care este exact ceea ce este), așa că singura abordare pe care o are atacatorul este hash-ul diferitelor intrări până când găsește o potrivire.

Acum, presupunem că există 60.000 USD \aproximativ 2^{16}$ semnături valabile; dacă atacatorul ghiceste, aceasta are aproximativ a $2^{-128+16} = 2^{-112}$ probabilitatea de hashing la una dintre ținte. Cu alte cuvinte, pentru a avea o șansă de una la o mie de a găsi o imagine care se îndreaptă către una dintre ținte, ar trebui să indice $2^{102}$ imagini.

Acum, se estimează că industria globală de minerit bitcoin evaluează aproximativ $2^{68}$ hashes pe secundă (de fapt, puțin mai puțin); asta înseamnă că, dacă atacul ar putea să dedice toată acea procesare [1] pentru a ataca sistemul dvs., ar trebui să se ocupe de el timp de aproximativ $2^{34}$ secunde (sau aproximativ 500 de ani) pentru a ajunge la acea șansă de 1 la o mie.

Dacă schimbi MD5 cu un cripto hash real, acei 500 de ani se transformă într-un interval de timp de tip „moartea la căldură a universului”.

[1]: Desigur, infrastructura actuală de minerit bitcoin este construită în jurul SHA-256 - voi ignora acest detaliu.

drapel us
Treci cu vederea problema zilei de naștere? M-as fi asteptat la un 1
poncho avatar
drapel my
@Brendan: așa cum am menționat mai sus „în acest caz, editorul valid generează imaginea validă, iar atacatorul nu poate modifica ceea ce semnează editorul, astfel încât slăbiciunea de coliziune a MD5 nu se aplică”. Dacă acest lucru nu este adevărat (adică atacatorul își poate introduce propriile modificări în ceea ce semnează editorul), atunci MD5 poate fi insuficient. Pe de altă parte, dacă ar fi să ne întoarcem la SHA256 (mult mai realist), un atac de coliziune are nevoie de un hashe-uri de $2^{128}$ - care este aproape de numărul de evaluări pe care le-am primit pentru atacul preimagine multițintă MD5 - se aplică o estimare de timp similară.
poncho avatar
drapel my
@Brendan: desigur, dacă atacatorul își poate introduce propriile modificări în ceea ce semnează editorul, de ce nu și-ar include pur și simplu malware-ul în asta și nu și-ar deranja să încerce să genereze un fals?
drapel us
Ah, ai dreptate (am aplicat greșit atacurile de ziua de naștere). 1
Puncte:1
drapel kr

SHA-256 este rezistent la atacurile preimagine. Singura modalitate de a găsi o imagine prealabilă care produce hash este forțarea brută. Resursele de calcul curente utilizate pentru minerit bitcoin în lume calculează despre $2^{90}$ hashes pe an. Astfel, chiar dacă întreaga lume încearcă să creeze o imagine (în cazul tău, să găsească o anumită umplutură) cu hash-ul dat, nu va fi posibil nici măcar peste câteva milioane de ani.

poncho avatar
drapel my
De fapt, „în câteva milioane de ani” este mult prea optimist; la $2^{90}$ hash-uri/an și 60.000 de ținte, căutarea va dura 1,5 $ \times 10^{45}$ ani
drapel kr
@poncho: Corect :-) Dar mi-e teamă că este greu de imaginat dacă este cu adevărat mult timp. Puteți spune că este mai lung decât există Universul. Dar chiar și acest lucru poate fi greu de imaginat. Poate chiar și milioane de ani este greu de imaginat și mii ar putea fi mai buni :-) De aceea sper că utilizarea unei astfel de formulări face răspunsul mai util.
poncho avatar
drapel my
Înțeleg asta, totuși afirmația ta a sunat similar cu „stelele sunt la mai mult de 10 metri distanță”. Adevărat din punct de vedere tehnic, presupun, dar și o subestimare comică...

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.