Mikä on tiiviste ja miksi se on kaikkialla teknologiassa?
Olet todennäköisesti nähnyt merkkijonoja kuten tämä:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
Ne esiintyvät ohjelmistojen latauksissa ("varmista SHA-256-tiiviste"), lohkoketjukeskusteluissa, salasanaturvallisuusdiskussioissa ja lukemattomissa kehittäjätyökaluissa. Mutta mikä tiiviste oikein on ja miksi se on niin keskeinen modernille teknologialle?
Käsite selkeällä kielellä
Tiivistefunktio ottaa minkä tahansa syötteen – sanan, lauseen, kokonaisen tiedoston – ja tuottaa kiinteänpituisen tuloksen jota kutsutaan tiivistearvoksi (kutsutaan myös digestiksi, tarkistussummaksi tai sormenjäljeksi). Keskeiset ominaisuudet ovat:
- Deterministinen. Sama syöte tuottaa aina saman tuloksen.
- Kiinteä pituus. Riippumatta syötteen koosta, tulos on aina sama koko.
- Yksisuuntainen. Et pysty rekonstruoimaan alkuperäistä syötettä tiivistetuloksesta.
- Lumivyöryefekti. Pieni muutos syötteessä tuottaa täysin erilaisen tiivisteen.
Ajattele sitä dataotoksen sormenjälkenä. Aivan kuten sormenjälkesi identifioivat sinut yksilöllisesti mutta ei voida käyttää rekonstruoimaan kasvojasi, tiiviste identifioi datan yksilöllisesti mutta sitä ei voida käyttää alkuperäisen rekonstruoimiseen.
Yksinkertainen esimerkki
Tässä mitä SHA-256-tiivistefunktio tekee kahdelle hyvin samankaltaiselle syötteelle:
| Syöte | SHA-256-tiiviste (ensimmäiset 16 merkkiä) |
|---|---|
| "Hello" | 185f8db32271fe25... |
| "hello" | 2cf24dba5fb0a30e... |
| "hello!" | ce06092fb948d9ff... |
Yhden merkin muuttaminen (iso H pieneksi h:ksi) tai huutomerkin lisääminen tuottaa täysin erilaisen tiivisteen. Ei ole mallia, ei ennustettavaa suhdetta. Tämä on lumivyöryefekti käytännössä.
Tiesitkö? Tyhjän syötteen (kirjaimellisesti ei mitään) SHA-256-tiiviste on e3b0c44298fc1c14.... Tämä on tunnettu vakio. Jokainen SHA-256-toteutus maailmassa tuottaa täsmälleen saman tuloksen tyhjälle syötteelle.
Yleiset tiivistealgoritmit
MD5
- Tulos: 128 bittiä (32 heksadesimaalimerkkiä)
- Tila: Rikki turvallisuustarkoituksiin. Törmäykset (eri syötteet jotka tuottavat saman tiivisteen) voidaan generoida sekunneissa.
- Käytetään edelleen: Tiedostojen eheyden tarkistuksiin joissa turvallisuus ei ole huolenaihe (esim. latauksen vahvistaminen ettei se vaurioitunut).
SHA-1
- Tulos: 160 bittiä (40 heksadesimaalimerkkiä)
- Tila: Vanhentunut turvallisuuteen. Törmäykset on demonstroitu.
- Käytetään edelleen: Vanhoissa järjestelmissä, Git-commitin tunnistimissa.
SHA-256
- Tulos: 256 bittiä (64 heksadesimaalimerkkiä)
- Tila: Nykyinen standardi. Ei tunnettuja käytännöllisiä hyökkäyksiä.
- Käytetään: Salasanojen tallentamiseen, digitaalisiin allekirjoituksiin, lohkoketjuun, tiedostojen varmentamiseen, TLS-sertifikaatteihin.
SHA-512
- Tulos: 512 bittiä (128 heksadesimaalimerkkiä)
- Tila: Nykyinen standardi. Jopa suurempi turvallisuusmarginaali kuin SHA-256.
- Käytetään: Korkean turvallisuuden sovelluksiin, joihinkin salasanan tiivistysskeemoihin.
Varoitus MD5:tä ja SHA-1:tä ei pidä koskaan käyttää turvallisuustarkoituksiin (salasanat, digitaaliset allekirjoitukset, sertifikaatit). Ne ovat kryptografisesti rikki. Käytä SHA-256:ta tai SHA-512:ta kaikessa turvallisuuteen liittyvässä.
Missä tiivisteitä käytetään
Salasanojen tallentaminen
Kun luot tilin, verkkosivusto ei tallenna (tai sen ei pitäisi tallentaa) salasanaasi sellaisenaan. Sen sijaan se tallentaa salasanasi tiivisteen. Kirjautuessasi sisään järjestelmä tiivistää syöttämäsi salasanan ja vertaa sitä tallennettuun tiivisteeseen. Jos ne vastaavat, olet sisällä.
Tämä tarkoittaa, että vaikka tietokanta murtautuisi, hyökkääjät saavat tiivisteitä, eivät salasanoja. He eivät pysty peruuttamaan tiivistettä löytääkseen salasanasi (vaikka he voivat yrittää arvata sen tiivistämällä yleisiä salasanoja ja vertaamalla).
Moderni salasanatiivistäminen menee pidemmälle algoritmeilla kuten bcrypt, scrypt ja Argon2, jotka lisäävät suolaa (satunnaista dataa) ja ovat tarkoituksellisesti hitaita tekemään raa'an voiman arvaamisen epäkäytännölliseksi.
Tiedostojen varmentaminen
Kun lataat ohjelmiston, verkkosivusto tarjoaa usein SHA-256-tiivisteen tiedostosta. Latauksen jälkeen tiivistät tiedoston itse ja vertaat. Jos tiivisteet vastaavat, tiedosto on täsmälleen mitä julkaisija tarkoitti. Jos ne eroavat, tiedosto on vaurioitunut tai peukalioitu latauksen aikana.
Odotettu: a1b2c3d4e5f6...
Tiedostosi: a1b2c3d4e5f6... ✓ Vastaa — tiedosto on aito
Lohkoketju ja kryptovaluutta
Jokainen lohkoketjun lohko sisältää edellisen lohkon tiivisteen, luoden katkeamattoman ketjun. Jos joku yrittää muuttaa aiempaa tapahtumaa, kyseisen lohkon tiiviste muuttuu, mikä katkaisee ketjun siitä kohdasta eteenpäin, tehden peukaloimisesta välittömästi havaittavaa.
Bitcoin-louhinta on pohjimmiltaan kilpailu löytää syöte joka tuottaa SHA-256-tiivisteen joka alkaa tietyllä nollamäärällä.
Digitaaliset allekirjoitukset
Kun digitaalisesti allekirjoitat asiakirjan, et oikeasti salaa koko asiakirjaa yksityisavaimellasi. Sen sijaan asiakirja tiivistetään ja tiiviste salataan. Tämä on paljon nopeampaa ja tuottaa tiiviin allekirjoituksen.
Datan deduplikointi
Pilvivarastointipalvelut käyttävät tiivisteitä tiedostojen kaksoiskappaleiden tunnistamiseen. Jos kaksi käyttäjää lataa saman tiedoston, sillä on sama tiiviste ja palvelun täytyy tallentaa vain yksi kopio.
Git-versionhallinta
Jokainen commit, tiedosto ja puu Gitissä tunnistetaan sen SHA-1-tiivisteellä. Näin Git tietää onko tiedosto muuttunut ja kuinka se seuraa projektin koko historiaa.
Tiesitkö? Git siirtyy vähitellen SHA-1:stä SHA-256:een. Siirtymä alkoi koska SHA-1-törmäykset demonstroitiin vuonna 2017, teoreettisesti antaen jollekulle mahdollisuuden luoda kaksi erilaista commitia samalla tunnisteella.
Palautuvuusongelma (ja miksi se on tärkeää)
Tiivisteiden yksisuuntainen luonne on sekä niiden suurin vahvuus että usein sekaannuksen lähde.
Et pysty "purkamaan" tiivistettä. Tiiviste ei ole salaus. Salaus on kaksisuuntainen: salaa avaimella, pura avaimella. Tiivistäminen on yksisuuntainen: voit laskea tiivisteen syötteestä mutta et pysty laskemaan syötettä tiivisteestä.
Ainoa tapa "peruuttaa" tiiviste on arvata alkuperäinen syöte, tiivistää arvauksesi ja tarkistaa vastaako se. Lyhyille, yksinkertaisille syötteille (kuten yleisille salasanoille) tämä on mahdollista. Pitkille, satunnaisille syötteille se on laskennallisesti mahdotonta.
Siksi salasanan pituus on niin tärkeää. Tiivisteen "password123" voidaan löytää kokeilemalla yleisiä salasanoja. Tiivisteen "j8#kL9$mN2@pQ5&" löytäminen arvauksella kestäisi kauemmin kuin universumin ikä.
Kokeile itse
Paras tapa ymmärtää tiivisteitä on kokeilla. Tiivistä sana, muuta sitten yksi merkki ja katso miten tulos muuttuu täysin. Tiivistä tiedosto ennen ja jälkeen muutoksen ja katso ero.
Vinkki Generoi ja varmista tiivisteitä mille tahansa tekstille tai tiedostolle: Kuinka generoida ja varmistaa tiivisteitä. Kokeile SHA-256:ta, MD5:tä, SHA-512:ta ja muita – välittömästi, ilmaiseksi, selaimessasi.
Tutki tiivisteitä käytännössä:
Ilmainen, välitön eikä rekisteröitymistä tarvita.