Kryptografia

Kryptografisten tiivisteiden murtaminen: Kuinka se toimii?

Helppo
15 min

Mitä on kryptografisten tiivisteiden murtaminen?

Kryptografisten tiivisteiden murtaminen tarkoittaa prosessia, jossa yritetään palauttaa alkuperäinen tieto tiivisteen perusteella.

Esimerkiksi hyökkääjä saattaa web-sovelluksen tietokantaan murtauduttuaan saada käsiinsä selkokielisten salasanojen sijasta pelkästään kryptografiset tiivisteet käyttäjien salasanoista. Tämä johtuu siitä, että oikein rakennetun web-sovelluksen ei tarvitse säilyttää selkokielisiä salasanoja missään.

Tällaisessa tilanteessa hyökkääjä tyypillisesti yrittää murtaa tiivisteet ja palauttaa ne takaisin selväkielisiksi salasanoiksi. Yksinkertaisimmillaan tämä tarkoittaa sitä, että hyökkääjä syöttää satunnaisia salasanoja sovelluksen käyttämän tiivistealgoritmin läpi ja vertaa saamaansa tiivistettä listaan tiivisteistä jota hyökkääjä haluaa murtaa.

Murtamisen menetelmät

Brute Force -hyökkäys

Tämä on yksinkertaisin mutta aikaa vievin menetelmä. Hyökkääjä yrittää generoida järjestelmällisesti mahdollisia alkuperäisen datan ehdokkaita, laskee niiden tiivisteet ja vertaa tuloksia haluttuun tiivisteeseen. Tämä prosessi jatkuu, kunnes oikea syöte löytyy. Brute force -hyökkäyksen haasteena on sen vaatima laskentateho ja aika, erityisesti kun käytössä on vahva tiivistefunktio ja pitkä syöte.

Sateenkaaritaulukot (Rainbow tables)

Sateenkaaritaulukot ovat ennalta laskettuja tiivisteiden taulukoita, jotka kattavat laajan joukon mahdollisia syötteitä. Hyökkääjä voi etsiä halutun tiivisteen vastaavuutta taulukosta, löytäen näin alkuperäisen datan nopeammin kuin brute force -menetelmällä. Sateenkaaritaulukoiden heikkous on niiden suuri tallennustilan tarve ja tehottomuus suolausta (salt) käyttäviä tiivisteitä vastaan.

Sanakirjahyökkäykset

Sanakirjahyökkäys on eräänlainen brute force -hyökkäys, mutta sen sijaan, että yritettäisiin jokaista mahdollista yhdistelmää, hyökkääjä käyttää ennalta määriteltyä sanalistaa. Tämä lista sisältää yleisesti käytettyjä salasanoja, yleisiä sanoja tai aiemmin vuotaneita salasanoja. Sanakirjahyökkäyksen tehokkuus perustuu olettamukseen, että käyttäjät valitsevat salasanoiksi sanoja, jotka ovat merkityksellisiä ja helposti muistettavia, kuten lemmikin nimiä, syntymäaikoja tai yksinkertaisia yhdistelmiä kuten "password".

Hyökkääjä käyttää tyypillisesti sanakirjaa perustana ja lisää siihen numeroita, erikoismerkkejä tai muita yleisiä muutoksia, jotka ihmiset saattavat lisätä tehdäkseen salasanastaan monimutkaisemman. Esimerkiksi, jos sanakirja sisältää sanan "salasana", hyökkääjä saattaa kokeilla variaatioita kuten "Salasana1", "salasana!", tai "s4l4s4n4".

Puolustuskeinot tiivisteiden murtamista vastaan

Kryptografisten tiivisteiden murtaminen on jatkuvasti kehittyvien hyökkäystekniikoiden kohteena. Tämän vuoksi on tärkeää ymmärtää ja soveltaa tehokkaita puolustuskeinoja. Käydään seuraavaksi läpi kolme tärkeintä puolustusmekanismia, joita voidaan käyttää kryptografisten tiivisteiden suojaamiseen: Suolaus, iterointi ja vahvan tiivistealgoritmin valitseminen.

Suolaus (Salting)

Suolaus on tekniikka, jossa alkuperäiseen tietoon lisätään satunnainen datanjoukko ennen tiivistefunktion suorittamista. Tämä tekee tiivisteiden murtamisesta merkittävästi vaikeampaa, sillä jokainen tiiviste on uniikki, vaikka alkuperäinen tieto olisi sama.

Otetaan esimerkiksi käyttäjien salasanat tietokannassa. Ilman suolausta samasta salasanasta saadaan aina sama tiiviste. Jos kaksi käyttäjää käyttää samaa salasanaa, heidän tiivistteensä ovat identtiset, mikä altistaa heidät sanakirjahyökkäyksille. Suolaamalla salasanat ennen tiivistämistä jokaiselle salasanalle luodaan uniikki tiiviste, jolloin edes identtiset salasanat eivät tuota samaa tiivistettä.

salt = random_string()
hashed_password = hash_password(password + salt)

Iterointi (Key Stretching)

Iterointi on menetelmä, jossa tiivistefunktiota sovelletaan useita kertoja peräkkäin, mahdollisesti yhdistettynä suolaamiseen. Tämä lisää hyökkäyksen vaatimaa laskentatehoa ja aikaa.

PBKDF2 (Password-Based Key Derivation Function 2) ja bcrypt ovat esimerkkejä iterointiin perustuvista funktioista, joita käytetään salasanojen tallennukseen. Ne suorittavat tiivistefunktion tuhansia tai jopa miljoonia kertoja, mikä tekee brute-force hyökkäyksistä epäkäytännöllisiä.

Vahvat Tiivistefunktiot

Käyttämällä nykyaikaisia, hyväksyttyjä ja tutkittuja tiivistefunktioita, kuten SHA-256 tai SHA-3, voidaan vähentää haavoittuvuuksien riskiä. Vanhemmat tiivistefunktiot, kuten MD5 ja SHA-1, ovat osoittautuneet melko heikoiksi.

Tehtävä

Käytä hyökkäjän konetta hyväksi ja murra tehtävän hash arvo käyttäen sanakirjahyökkäystä.

Voit sitten käyttää john (John the Ripper) -työkalua tiivisteen murtamiseen. Polussa /usr/share/wordlists/rockyou.txt on salasanalista jossa on vino pino erilaisia salasanoja.

Huom. hash.txt tiedosto sisältää kyseisen hash arvon. Voit luoda hash.txt tiedoston seuraavasti:

john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Mikä on hash "3fc0a7acf087f549ac2b266baf94b8b1" arvon selkokielinen teksti?

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.