Atacul de prelungire a mesajului

În criptografie și securitatea computerelor , un atac de prelungire a mesajelor  este un tip de atac asupra unei funcții hash care adaugă informații noi la sfârșitul mesajului original. În acest caz, o nouă valoare hash poate fi calculată chiar dacă conținutul mesajului original rămâne necunoscut. Când utilizați o funcție hash ca inserție simulată , noua valoare va fi codul de autentificare valid pentru noul mesaj.

Un atac poate fi efectuat asupra hashurilor cu construcția H (K || m), unde K este o anumită cheie secretă , m este un mesaj și || înseamnă concatenare . [1] Astfel, funcțiile hash SHA-1 și MD5 bazate pe structura Merkle-Damgard sunt vulnerabile la acest tip de atac. [1] [2] [3] Pe de altă parte, HMAC nu este susceptibil la un atac de prelungire a mesajului deoarece nu folosește constructul H (K || m) descris. [4] De asemenea, algoritmul SHA-3 nu este vulnerabil la acest atac. [5]

Descriere

Algoritmul funcțiilor de hashing care sunt vulnerabile la acest tip de atac este de a calcula iterativ valoarea acestora. Mesajul de intrare este împărțit în părți, iar funcția procesează fiecare parte pe rând. Ca rezultat al lucrului cu fiecare bloc al mesajului, funcția hash își transformă starea internă, care este folosită pentru a procesa următoarea parte. Pentru primul bloc de mesaje, se aplică o valoare de inițializare predefinită .

După ce toate părțile mesajului au fost procesate, este generată rezultatul hash, care este o reprezentare a stării sale interne după procesarea ultimului bloc al mesajului. Prin urmare, din valoarea funcției, puteți restabili starea sa internă, care poate fi apoi folosită pentru a procesa date noi. Acum puteți prelungi mesajul original adăugând noi informații la sfârșit și calculați o valoare hash care va fi valabilă pentru noul mesaj.

Astfel, putem distinge următoarele principii de funcționare ale funcțiilor hash corespunzătoare [6]

Adică, mesajul este de fapt hashing

m' = m || umplutură,

unde m este mesajul original, padding este ceea ce funcția hash a umplut ultimul bloc.

Pentru a efectua un atac, este necesar să trimiți mesajul

m' = m || Captuseala || date noi || NewPadding ,

adică să atribuie informații noi mesajului original.

Astfel, pentru a prelungi un mesaj, trebuie să se ghicească lungimea mesajului original și apoi să se determine valoarea Padding. Formatul de umplere trebuie definit , altfel funcția ar produce rezultate diferite pentru aceeași intrare. [6]

Apărare împotriva atacului

Următoarele metode pot fi utilizate ca protecție împotriva unui atac de prelungire a mesajelor [7] H' = f(H(m)) H' = H(K || H(K || m)), unde K este cheia secretă H' = H(K || Padding || m || K ), unde Padding completează mesajul la un număr întreg de blocuri

Exemplu

Serviciul de livrare a vafelor unui anumit tip de vafe către un anumit utilizator user_id este implementat pentru a procesa solicitările de acest format :

Mesaj original: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo Semnătura originală: 6d5f807e23db210bc254a28be2d6759a0f5f5d99

Serverul va îndeplini această solicitare (livrează wafer-uri precum „Eggo” pentru id -ul utilizatorului 1) numai dacă semnătura este valabilă pentru acel utilizator. Semnătura este un cod de autentificare a mesajului, este semnată cu o cheie necunoscută atacatorului . Acest exemplu este, de asemenea, vulnerabil la atacurile de reluare atunci când aceeași cerere și semnătură sunt trimise a doua oară.

Un atacator ar putea modifica cererea, în acest exemplu, schimbând tipul de vafe dorite din „Eggo” în „Liege”. Acest lucru se poate face folosind flexibilitatea formatului mesajului: dacă există mai multe comenzi într-o linie, se preferă ultima. Asigurarea securității criptografice în acest exemplu ține în întregime de semnătură.

Mesaj dorit: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo&waffle=liege

Pentru a semna o nouă cerere, atacatorul trebuie să cunoască cheia care a fost folosită pentru a semna mesajul original. Totuși, aici el poate folosi un atac de extensie.

După ce a ghicit lungimea mesajului , atacatorul generează o nouă solicitare:

Mesaj nou: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo\x80\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x02\x28&waffle=liege

Acest mesaj include datele originale și partea adăugată la acesta, pe care funcția hash le-a generat anterior în timpul lucrului său ( Padding ). În exemplu, această parte este reprezentată în hexazecimal . În acest caz, funcția adaugă mesajul cu unu, urmat de zerouri, iar lungimea mesajului este adăugată la sfârșit. Atacatorul știe că starea funcției hash pentru mesajul original este identică cu starea sa pentru noul mesaj până la ultimul „&”. Starea internă a funcției hash în acest moment este determinată de valoarea hash din mesajul original, adică semnătura.

Algoritmul hash în starea corectă va procesa apoi restul noului mesaj și va crea o nouă semnătură validă.

Semnătură nouă: 0e41270260895979317fff3898ab85668953aaa2

Astfel, atacatorul a obținut o semnătură validă fără să cunoască cheia secretă.

La primirea unei noi cereri, serverul o va considera validă, întrucât semnătura este identică cu cea care ar fi generată dacă secretul ar fi cunoscut.

Surse

Link -uri

  1. 1 2 MD5 Length Extension Attack Revizuit - Pacea interioară a lui Vũ . vudang.com . Arhivat din original pe 29 octombrie 2014.
  2. Vulnerabilitatea la falsificarea semnăturii API-ului Flickr . Consultat la 12 noiembrie 2015. Arhivat din original la 09 aprilie 2021.
  3. Christopher Meyer. Atacuri de extensie de lungime hash . Java Code Geeks . Consultat la 12 noiembrie 2015. Arhivat din original la 14 aprilie 2021.
  4. Nu mai utilizați hashuri cu chei nesigure, utilizați HMAC . root labs rdist . Consultat la 12 noiembrie 2015. Arhivat din original la 6 mai 2021.
  5. Echipa Keccak. Punctele forte ale Keccak - Design și securitate . - " Spre deosebire de SHA-1 și SHA-2, Keccak nu are slăbiciunea extensiei de lungime, prin urmare nu are nevoie de construcția imbricată HMAC. În schimb, calculul MAC poate fi efectuat prin simpla adăugare a mesajului cu cheia. ". Consultat la 30 ianuarie 2013. Arhivat din original la 6 iunie 2017.
  6. 1 2 Articolul lui C. Meyer „Atacul de extensie de lungime hash” . Consultat la 12 noiembrie 2015. Arhivat din original la 14 aprilie 2021.
  7. H. Travis. Criptologie Web 2.0, un studiu asupra eșecului. . Consultat la 12 noiembrie 2015. Arhivat din original pe 19 noiembrie 2015.