Mitä on kaksoishajautus?
Kaksoishajautuksessa data hajautetaan kahdesti, usein samalla funktiolla ja toisinaan kahdella eri funktiolla. Tuloksena on uusi sormenjälki, joka on edelleen lyhyt ja kiinteän mittainen, mutta jossa on ylimääräinen suojakerros. Ajattele sitä niin, että lukitset matkalaukun ja panet sen sitten toiseen matkalaukkuun, jonka lukitset myös.
”Kaksoishajautus tarkoittaa aina kaksinkertaista tietoturvaa.” Ei aivan. Se auttaa lähinnä tiettyjä hyökkäyksiä ja suunnittelun erikoistapauksia vastaan. Joissakin järjestelmissä se valitaan toteutuksen yksinkertaisuuden vuoksi, ei siksi, että se maagisesti kaksinkertaistaisi turvallisuuden.
Näin kaksoishajautus toimii
Tässä lyhyt ja ytimekäs esimerkki Bitcoin-tyyppisestä toteutuksesta.
- Vaihe 1: Aloitat datasta, kuten lohkon otsakkeesta tai transaktiosta.
- Vaihe 2: Syötät sen kryptografiseen hajautusfunktioon, joka tuottaa tiivisteen.
- Vaihe 3: Hajautat tiivisteen uudelleen. Käytössä on sama tai eri funktio toteutuksesta riippuen.
- Vaihe 4: Käytät lopullista tiivistettä tunnisteena, kuten transaktion tunnisteena (TxID) tai proof of work -louhintaan käytettävänä lohkon otsakkeen tiivisteenä.
- Vaihe 5: Kuka tahansa voi varmistaa tuloksen toistamalla molemmat hajautukset ja tarkistamalla, että tulokset täsmäävät. Nopeaa, determinististä ja valmista.
Tällaista kaksoishajautus siis on käytännössä.
Miksi kaksoishajautuksella on merkitystä?
Mitä hyötyä siitä on kerskailun lisäksi?
- Hyöty: Lisäsuojaa tietynlaisia hyökkäyksiä vastaan, kuten pituudenpidennyshyökkäyksiä joissakin yhden hajautuskierroksen toteutuksissa.
- Näkökulma: Se tukee verkkotason tarkistuksia, jotka vahvistavat louhittujen ja laajasti varmennettujen tietueiden muuttumattomuutta.
- Merkitys käytännössä: Kaksoishajautusta tulee vastaan Bitcoinin lohkojen otsakkeissa, joissakin osoitemuodoissa ja monissa kirjastoissa, joissa double SHA 256 on oletusasetuksena.
Kun testaat kaksoishajautusta, vertaa tuloksia tunnettuihin testivektoreihin ja huomioi tavujärjestys sekä koodaus kummankin kierroksen alussa ja lopussa. Pienikin ero voi johtaa harhaan.
Kaksoishajautuksen tärkeimmät ominaisuudet
Tässä tärkeimmät huomioitavat asiat:
- Kerrokset: Kaksi kierrosta tuo datalle toisen riippumattoman tiivistyksen.
- Deterministisyys: Sama syöte tuottaa joka kerta saman tuloksen kummallakin kierroksella.
- Käytännöllisyys: Tarkistus on helppo tehdä laajassa mittakaavassa, sillä kumpikin kierros on nopea.
Miten kaksoishajautus lasketaan?
Lasket ensin syötteen tiivisteen ja hajautat sitten tuloksen uudelleen. Kaavana:
H2(x) = H(H(x)) Esimerkki Bitcoinista:
H2(x) = SHA 256(SHA 256(x)) Osoitteissa käytetään usein kahden funktion yhdistelmää:
Hmix(x) = RIPEMD 160(SHA 256(x)) Muunnelmat
Sama idea, eri toteutustapoja:
- sama: Yhtä funktiota käytetään kahdesti, esimerkiksi SHA 256 ja sen jälkeen SHA 256 uudelleen.
- yhdistelmä: Peräkkäin käytetään kahta eri funktiota, esimerkiksi SHA 256 ja sen jälkeen RIPEMD 160.
- osoite: Bitcoin-tyyppisissä osoitteissa julkinen avain hajautetaan ensin SHA 256 -funktiolla ja sitten RIPEMD 160 -funktiolla. Tämä on klassinen kaksoishajautuksen yhdistelmä.
Kaksoishajautus on helppo laskea, mutta tarkista syötteet huolellisesti. Tavujärjestyksen erikoisuudet, täydennyssäännöt ja rivinvaihtomerkit voivat pilata tuloksen, vaikka koodi näyttäisi täydelliseltä.
Esimerkki
Bitcoin-louhijat laskevat lohkon otsakkeelle SHA 256 -tiivisteen kahdesti. Solmut puolestaan tekevät samat kaksi kierrosta ennen lohkon hyväksymistä.
Hauska fakta
Satoshi valitsi lohkojen otsakkeille double SHA 256 -menetelmän osittain torjuakseen pituudenpidennystyyppisiä hyökkäyksiä ja varmistaakseen, ettei eri komponenttien tarvitse koskaan luottaa yhteen käsittelemättömään hajautuskierrokseen. Se oli siisti tekninen ratkaisu, joka on kestänyt aikaa.
Yhteenveto
Lyhyesti sanottuna kaksoishajautuksessa data hajautetaan kahdesti tarkempia tarkistuksia ja selkeämpää rakennetta varten. Se on pieni lisävaihe, johon suuret järjestelmät luottavat joka päivä.