Kuvittele, että voisit ottaa minkä tahansa datanpalan — yksittäisen sanan, romaanin, 4 Gt:n videon — ja tiivistää sen lyhyeksi, kiinteäpituiseksi merkkijonoksi, joka yksilöi sen. Muuta yksi pilkku alkuperäisessä, ja merkkijono muuttuu täysin erilaiseksi. Eikä prosessia voi kääntää alkuperäisen datan palauttamiseksi.
Juuri niin kryptografinen tiivistefunktio tekee. Se on yksi modernin tietoturvan perustavanlaatuisimmista rakennuspalikoista, ja se suojaa hiljaisesti lähes kaikkea, mitä teet verkossa.
Sormenjälkimetafora
Tiiviste toimii kuin digitaalinen sormenjälki. Sormenjälkesi yksilöi sinut, mutta kukaan ei voi rekonstruoida kasvojasi siitä. Samalla tavalla kryptografinen tiiviste yksilöi datanpalan paljastamatta, mitä data on.
Syötä mikä tahansa syöte tiivistefunktioon ja saat tiivisteen (kutsutaan myös hajautusarvoksi tai tarkistussummaksi) — kiinteäpituisen heksadesimaalimerkkijonon. SHA-256, yksi yleisimmistä algoritmeista, tuottaa aina 64-merkkisen tulosteen syötteen koosta riippumatta.
| Syöte | SHA-256-tiiviste (ensimmäiset 16 merkkiä) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Koko Wikipedian dump | (edelleen 64 merkkiä) |
Neljä olennaista ominaisuutta
Funktio täyttää kryptografisen tiivisteen vaatimukset vain, jos se täyttää nämä ominaisuudet:
- Deterministinen. Sama syöte tuottaa aina saman tulosteen, millä tahansa koneella, milloin tahansa.
- Yksisuuntainen (esikuvaresistenssi). Tiivisteestä on laskennallisesti mahdotonta löytää alkuperäistä syötettä. Dataa ei voi "purkaa tiivisteestä".
- Törmäysresistentti. On käytännössä mahdotonta löytää kahta eri syötettä, jotka tuottavat saman tiivisteen. SHA-256:lla satunnaisen törmäyksen todennäköisyys on noin 1/2^128 — luku, joka on suurempi kuin havaittavan maailmankaikkeuden atomien määrä.
- Vyöryefekti. Yhden bitin muuttaminen syötteessä kääntää noin puolet tulosteen biteistä. Samankaltaisten syötteiden välillä ei ole havaittavaa kaavaa tai yhteyttä.
Tärkeä ero: Tiivistäminen ei ole salausta. Salaus on käännettävissä avaimella; tiivistäminen on tarkoituksellisesti peruuttamatonta. Salaat dataa suojataksesi sitä siirron aikana. Tiivistät dataa varmistaaksesi sen eheyden tai tallentaaksesi todisteen säilyttämättä alkuperäistä.
Yleiset tiivistealgoritmit
MD5 (1991)
- Tuloste: 128 bittiä (32 heksamerkkiä)
- Tila: Kryptografisesti murrettu. Tutkijat voivat generoida törmäyksiä sekunneissa kannettavalla.
- Nähdään edelleen: Ei-tietoturvakriittisissä tarkistussummissa tiedostolatauksia ja vanhoja järjestelmiä varten.
SHA-1 (1995)
- Tuloste: 160 bittiä (40 heksamerkkiä)
- Tila: Vanhentunut tietoturvakäyttöön. Google osoitti käytännön törmäyksen vuonna 2017 ("SHAttered"-hyökkäys).
- Nähdään edelleen: Vanhemmissa Git-repositorioissa, joissakin vanhoissa sertifikaateissa.
SHA-256 (2001)
- Tuloste: 256 bittiä (64 heksamerkkiä)
- Tila: Nykyinen standardi. Ei tunnettuja käytännön hyökkäyksiä.
- Käytetään: TLS-sertifikaateissa, Bitcoinissa, salasanojen tiivistämisessä, digitaalisissa allekirjoituksissa, tiedostojen eheyden varmistuksessa.
SHA-3 (2015)
- Tuloste: Vaihteleva (yleisesti 256 bittiä)
- Tila: Uusin standardi, joka perustuu täysin erilaiseen sisäiseen suunnitteluun (Keccak sponge -rakenne) kuin SHA-2-perhe.
- Käytetään: Tulevaisuuteen suuntautuvissa järjestelmissä, Ethereumissa, tilanteissa jotka vaativat algoritmidiversiteettiä.
| Algoritmi | Tulosteen koko | Turvallinen? | Nopeus |
|---|---|---|---|
| MD5 | 128 bittiä | Ei | Erittäin nopea |
| SHA-1 | 160 bittiä | Ei | Nopea |
| SHA-256 | 256 bittiä | Kyllä | Kohtalainen |
| SHA-3-256 | 256 bittiä | Kyllä | Kohtalainen |
Missä kryptografista tiivistämistä käytetään
Salasanojen tallennus
Kun luot tilin, hyvin suunniteltu järjestelmä ei koskaan tallenna salasanaasi selkokielisenä. Se tallentaa tiivisteen. Kun kirjaudut sisään, järjestelmä tiivistää kirjoittamasi ja vertaa sitä tallennettuun arvoon. Vaikka tietokanta murrettaisiin, hyökkääjät saavat tiivisteitä — eivät salasanoja.
Nykyaikaiset järjestelmät menevät pidemmälle lisäämällä satunnaisen suolan (ylimääräistä dataa, joka lisätään ennen tiivistämistä) ja käyttämällä tarkoituksellisesti hitaita algoritmeja kuten bcrypt, scrypt tai Argon2 tehdäkseen brute-force-arvailusta epäkäytännöllistä.
Tiedostojen eheyden varmistus
Ohjelmistojen jakelijat julkaisevat SHA-256-tarkistussummia latausten yhteydessä. Latauksen jälkeen lasket tiedoston tiivisteen koneellasi ja vertaat. Vastaavuus todistaa, ettei tiedostoa ole vioitettu tai muutettu siirron aikana.
Digitaaliset allekirjoitukset
Kun allekirjoitat dokumentin digitaalisesti, järjestelmä tiivistää ensin dokumentin ja salaa sitten tiivisteen yksityisellä avaimellasi. Vastaanottaja purkaa sen julkisella avaimellasi ja vertaa sitä omaan tiivisteeseensä dokumentista. Tämä on paljon tehokkaampaa kuin koko dokumentin salaaminen ja todistaa sekä tekijyyden että eheyden.
Lohkoketju
Jokainen lohko lohkoketjussa sisältää edellisen lohkon tiivisteen, luoden muuttumattoman ketjun. Minkä tahansa aiemman transaktion muuttaminen muuttaa lohkon tiivisteen, mikä rikkoo ketjun siitä kohdasta eteenpäin ja tekee manipuloinnin välittömästi näkyväksi.
Miksi MD5 ja SHA-1 katsotaan murretuiksi
Tiivistealgoritmi on "murrettu", kun joku voi tarkoituksellisesti luoda kaksi eri syötettä, jotka tuottavat saman tiivisteen (törmäys). Tämä heikentää jokaista käyttötapausta, joka perustuu ainutlaatuisuuteen.
- MD5: Törmäyksiä voidaan generoida sekunneissa. Tutkijat ovat luoneet kaksi erilaista PDF-tiedostoa identtisillä MD5-tiivisteillä.
- SHA-1: SHAttered-hyökkäys vuonna 2017 tuotti kaksi erilaista PDF:ää samalla SHA-1-tiivisteellä, vaatien noin 6 500 vuoden yksittäis-CPU-laskentaa (toteutettavissa pilviresursseilla).
Käytännön sääntö: Älä koskaan käytä MD5:ttä tai SHA-1:tä mihinkään tietoturvaan liittyvään — salasanoihin, sertifikaatteihin, digitaalisiin allekirjoituksiin tai eheystarkistuksiin, joissa vastustaja saattaa olla osallisena. Käytä SHA-256:ta tai SHA-3:a sen sijaan.
Lue lisää
Tiivistäminen on niitä käsitteitä, joista tulee intuitiivisia kokeilemalla. Kokeile tiivistää lause, muuta sitten yksi merkki ja havainnoi vyöryefekti omin silmin.
- Kuinka generoida ja varmistaa tiivisteitä — vaiheittainen opas
- Tiivistegeneraattori — laske SHA-256, MD5, SHA-512 ja muita välittömästi selaimessasi
- Tiivisteen tunnistaja — liitä tuntematon tiiviste ja tunnista sen algoritmi
