Čo je Double Hashing?
Double Hashing znamená, že dáta prejdú hashom dvakrát, často s rovnakou funkciou, niekedy s dvoma rôznymi. Výsledkom je nové otlačenie prsta, ktoré je stále krátke a pevné, len s ďalšou vrstvou ochrany. Predstavte si to ako zámok kufra, potom ho vložíte do iného kufra a ten tiež zamknete.
„Double Hashing znamená dvojnásobnú bezpečnosť, vždy.“ Nie celkom. V zásade pomáha proti špecifickým útokom a dizajnovým zvlášnostiam a v niektorých systémoch je zvolený pre jednoduchosť implementácie, nie pre magické dvojnásobné zvýšenie bezpečnosti.
Ako Double Hashing funguje
Tu je rýchly prechod pomocou logiky štýlu Bitcoin. Krátke a výstižné.
- Krok 1: Začnete s dátami, napríklad s hlavičkou bloku alebo transakciou.
- Krok 2: Prejdite ich cez kryptografickú hashovaciu funkciu na získanie digestu.
- Krok 3: Urobte hash tohto digestu znova. Rovnaká funkcia alebo iná, v závislosti od dizajnu.
- Krok 4: Ako konečný digest použite ako identifikátor, ako transaction ID (TxID) alebo hash hlavičky bloku pre proof of work.
- Krok 5: Každý to môže overiť opätovným opakovaním dvoch hashov a kontrolou zhody. Rýchle, deterministické, hotové.
Toto je Double Hashing, čo robí svoje.
Prečo na Double Hashing záleží
A čo zo seba vlastne získate okrem obdivu?
- Výhoda: Dodatočná ochrana proti určitým triedam útokov, ako je dĺžkové rozširovanie pri niektorých jednovrstvových nastaveniach.
- Hľadisko: Podporuje sieťové kontroly, ktoré posilňujú nemennosť záznamov, ktoré boli ťažené a široko overené.
- Relevantnosť: Narazíte na ňu pri Bitcoin block headeroch, niektorých formátoch adries a mnohých knižniciach, ktoré defaultne vystavujú double SHA 256.
Pri testovaní Double Hashing porovnávajte s known vectors a buďte opatrní s poradím bajtov a kódovaním pred a po každom prechode. Jedna malá nekonzistencia a budete zlodejať duchov.
Kľúčové charakteristiky Double Hashingu
Hlavné body, na ktoré sa zameriate:
- Vrstvy: Dva prechody dávajú druhú nezávislú šťavu na dáta.
- Determinizmus: Rovnaký vstup znamená rovnaký výstup vždy, naprieč oboma prechodmi.
- Praktickosť: Snáď overiteľné na škálu, keďže každý prechod je rýchly.
Ako sa počíta Double Hashing?
Najprv vypočítate hash vstupu, potom tento výsledok znova hashnete. Zapísané ako vzorec:
H2(x) = H(H(x)) Príklad v Bitcoin svete:
H2(x) = SHA 256(SHA 256(x)) Adresy často používajú zmiešaný pár:
Hmix(x) = RIPEMD 160(SHA 256(x)) Variácie
Rovnaká myšlienka, iné verzie:
- rovnaké: Jedna funkcia dvakrát, napríklad SHA 256 potom zase SHA 256.
- zmiešané: Dve odlišné funkcie po sebe, napríklad SHA 256 potom RIPEMD 160.
- adresové: Bitcoin štýl adries hashujú verejný kľúč so SHA 256 a potom RIPEMD 160, čo je klasická kombinácia Double Hashing.
Double Hashing je jednoduchý na výpočet, ale sledujte svoje vstupy. Endian špecifiká, pravidlá paddingu a nové riadky môžu sabotovať výsledok, aj keď váš kód vyzerá dokonale.
Príklad
Bitcoin ťažiari vypočítajú SHA 256 dvakrát na hlavičke bloku a uzly overia rovnaké dva prechody pred prijatím bloku.
Zaujímavý fakt
Satoshi zvolil dvojité SHA 256 pre hlavičky čiastočne na odrazenie útokov typu dĺžkové rozširovanie a aby rôzne komponenty nikdy nespoliehali na jeden surový prechod, čo bola prepracovaná rozhodnutie, ktoré odvtedy z aged well.
Wrap-Up
In short, Double Hashing is hashing twice for tighter checks and cleaner design, a tiny extra step that big systems count on every day.