Šta je dvostruko heširanje?
Dvostruko heširanje podrazumeva da podatke propustite kroz heš dva puta, često koristeći istu funkciju, a ponekad dve različite. Rezultat je novi otisak koji je i dalje kratak i fiksne dužine, ali ima dodatni sloj zaštite. Zamislite to kao zaključavanje kofera, pa stavljanje tog kofera u drugi kofer koji takođe zaključate.
„Dvostruko heširanje uvek znači dvostruku bezbednost.“ Ne baš. Ono prvenstveno pomaže u odbrani od određenih napada i ograničenja u dizajnu, a u nekim sistemima bira se zbog jednostavnije implementacije, a ne zato što magično udvostručuje bezbednost.
Kako funkcioniše dvostruko heširanje
Evo kratkog primera koji prati logiku Bitcoina. Ukratko i jasno.
- Korak 1: Počinjete sa podacima, kao što su zaglavlje bloka ili transakcija.
- Korak 2: Propustite ih kroz kriptografsku heš funkciju da biste dobili sažetak.
- Korak 3: Ponovo heširate taj sažetak. Možete koristiti istu ili drugu funkciju, u zavisnosti od dizajna.
- Korak 4: Konačni sažetak koristite kao identifikator, na primer kao ID transakcije (TxID) ili heš zaglavlja bloka za proof of work.
- Korak 5: Svako može da proveri rezultat tako što će ponoviti oba heširanja i uporediti ih. Brzo, deterministički i gotovo.
To je dvostruko heširanje na delu.
Zašto je dvostruko heširanje važno
Šta dobijate time, osim prava na hvalisanje?
- Prednost: Dodatnu zaštitu od određenih klasa napada, kao što je napad proširenjem dužine kod nekih jednoproaznih postavki.
- Kontekst: Podržava provere na nivou mreže koje učvršćuju nepromenljivost zapisa koji su izrudaren i široko provereni.
- Relevantnost: Naići ćete na njega kod zaglavlja Bitcoin blokova, nekih formata adresa i brojnih biblioteka koje podrazumevano nude dvostruki SHA 256.
Kada testirate dvostruko heširanje, uporedite rezultat sa poznatim vektorima i obratite pažnju na redosled bajtova i kodiranje pre i posle svakog prolaza. Dovoljna je i najmanja nepodudarnost da krenete u lov na nepostojeće greške.
Ključne karakteristike dvostrukog heširanja
Najvažnije stvari koje treba da znate:
- Slojevi: Dva prolaza dodatno i nezavisno sažimaju podatke.
- Determinističnost: Isti ulaz svaki put daje isti izlaz, u oba prolaza.
- Praktičnost: Lako se proverava u velikom obimu jer je svaki prolaz brz.
Kako se izračunava dvostruko heširanje?
Izračunate heš ulaza, a zatim ponovo heširate taj rezultat. Zapisano formulom:
H2(x) = H(H(x)) Primer iz Bitcoin sveta:
H2(x) = SHA 256(SHA 256(x)) Za adrese se često koristi kombinacija dve funkcije:
Hmix(x) = RIPEMD 160(SHA 256(x)) Varijacije
Ista ideja, različite varijante:
- ista: Ista funkcija se koristi dva puta, na primer SHA 256, pa ponovo SHA 256.
- kombinovana: Dve različite funkcije koriste se uzastopno, na primer SHA 256, pa RIPEMD 160.
- za adresu: Bitcoin adrese heširaju javni ključ funkcijom SHA 256, pa zatim RIPEMD 160, što je klasična kombinacija dvostrukog heširanja.
Izračunavanje dvostrukog heširanja je jednostavno, ali pazite na ulazne podatke. Razlike u redosledu bajtova, pravila popunjavanja i znakovi za novi red mogu da pokvare rezultat čak i kada vaš kod izgleda savršeno.
Primer
Bitcoin rudari računaju SHA 256 dva puta nad zaglavljem bloka, a čvorovi ponavljaju ista dva prolaza pre nego što prihvate blok.
Zanimljivost
Satoshi je delimično izabrao dvostruki SHA 256 za zaglavlja da bi ublažio napade zasnovane na proširenju dužine i sprečio da se različite komponente oslanjaju na jedan sirovi prolaz — uredno inženjersko rešenje koje je dobro odolelo vremenu.
Zaključak
Ukratko, dvostruko heširanje znači heširanje podataka dva puta radi pouzdanijih provera i čistijeg dizajna — mali dodatni korak na koji se veliki sistemi svakodnevno oslanjaju.