Miksi pieni suola voi olla hyvä salasanoillesi (mutta ei pippuria!)

Lyhyt huomautus - tämä artikkeli koskee teoriaa siitä, miten hash salasanat voidaan murtaa. Verkkorikollisten hyökkäysten toteuttamisen ymmärtäminen on erittäin tärkeää, jotta ymmärretään, miten järjestelmät voidaan suojata tämän tyyppisiltä hyökkäyksiltä.

Mutta yritys hakkeroida järjestelmää, jota et omista, on todennäköisesti laitonta lainkäyttöalueellasi (ja omien järjestelmiesi hakkerointi voi [ja usein rikkoo] tuotteen takuita).

Tässä artikkelissa oletetaan olevan jonkin verran tietoa hajautusfunktioista ja salasanan murtamisen perustekniikoista - jos et ymmärrä näitä aiheita, tutustu näihin artikkeleihin.

Joten olet saanut joukon hajautettuja salasanoja. Raa'an hajautuksen pakottaminen kestää hyvin kauan. Kuinka voit nopeuttaa tätä prosessia?

Odota, luulin, että hash-toiminnot olivat yksisuuntaisia! Kuinka murtaa hash-toiminnot?

Valitettavasti hajautustoiminnot, joita käytetään salasanojen hajauttamiseen, eivät ole aina yhtä turvallisia kuin yleisesti hyväksytyt hajautusfunktiot. Esimerkiksi vanhojen Windows-laitteiden hajautusfunktio tunnetaan nimellä LM Hash, joka on niin heikko, että se voidaan murtaa muutamassa sekunnissa.

Sinun ei myöskään tarvitse muuttaa hajautusta. Sen sijaan voit käyttää ennalta laskettua yksiselitteisen salasanan joukkoa ja vastaavaa hash-arvoa (,). Tämä kertoo hakkereille, mikä selvätekstiarvo tuottaa tietyn hashin.

Tämän avulla tiedät, mikä selvätekstiarvo tuottaa etsimäsi hajautuksen. Kun annat salasanan, tietokone hajauttaa tämän arvon ja vertaa sitä tallennettuun arvoon (missä se täsmää), ja voit todentaa. Siksi sinun ei todellakaan tarvitse arvata jonkun salasanaa, vain arvon, joka luo saman hashin.

Tätä kutsutaan törmäykseksi. Pohjimmiltaan, koska hajautus voi viedä mitä tahansa pituutta tai sisältöä, on rajattomat mahdollisuudet hajauttaa tietoja.

Koska hash muuntaa tämän tekstin kiinteän pituiseksi sisällöksi (esimerkiksi 32 merkkiä), hashille on rajallinen määrä yhdistelmiä. Se on hyvin suuri määrä mahdollisuuksia, mutta ei loputon.

Lopulta kaksi erilaista tietojoukkoa tuottaa saman hajautusarvon.

Esilasketut taulukot ovat erittäin hyödyllisiä tämän saavuttamiseksi, koska ne säästävät huomattavasti aikaa ja laskentatehoa. Etukäteen laskettujen hajautusjoukkojen käyttämistä salasanan hajautuksen etsimiseen kutsutaan hakutaulu-hyökkäykseksi. Järjestelmänvalvojat käyttävät näitä taulukoita käyttäjien salasanojen vahvuuden testaamiseen, ja ne ovat usein saatavana verkossa tai ostettavissa. Pahat hakkerit voivat kuitenkin käyttää niitä.

Jos salasana on epävarma (sanotaan, että joku käyttää 5 merkin pituista salasanaa), se voidaan murtaa melko helposti. Esimerkiksi 5 pientä merkkiä sisältävää salasanaa voidaan käyttää vain 11 881 376 erilaisen salasanan luomiseen (26 ^ 5).

Tämän salasanan hashille, vaikka hash on kryptografisesti suojattu (käyttää asianmukaista algoritmia), on silti erittäin helppoa laskea kaikki mahdolliset salasanat ja niitä vastaavat hashit. Hakutaulukot toimivat erittäin hyvin tämän tyyppisille salasanan tiivisteille.

Salasanojen pituuden kasvaessa tarvitset tallennustilan (ja siten myös varastointikustannukset) jokaiselle mahdolliselle salasanalle ja vastaavalle hashille.

Esimerkiksi jos salasanasi, jota yrität murtaa, on 8 merkkiä pitkä, mutta käyttää numeroita (10 numeroa), pieniä kirjaimia (26), isoja kirjaimia (26) ja joitain erikoismerkkejä (10), mahdollisten salasanojen määrä hyppää 722,204,136,308,736 - mikä on PALJON tallennustilaa, kun huomaat, että jokainen niistä on hajautettu hajautusfunktiolla, kuten SHA-256.

Rainbow-taulukot käsittelevät tätä ongelmaa tarjoamalla pienempiä tallennustarpeita, mutta mahdollisten salasanojen laskeminen vie enemmän aikaa. Perustasolla nämä ovat pohjimmiltaan ennalta laskettuja hakutaulukoita, joiden avulla voit nopeasti löytää selvän tekstin, joka vastaa hashisi. Jos hash ja selkeä teksti sisältyvät taulukkoon - samanlainen kuin sanakirjahyökkäykset - etsit vain, onko salasana sisältämässäsi taulukossa. Jos se ei ole, et voi murtaa salasanaa. Löydät nämä verkossa ilmaiseksi tai ostettavissa.

Tästä artikkelista saat ohjeet omien sateenkaaripöytien luomiseen.

Olen edelleen kiinnostunut. Kuinka sateenkaaripöydät toimivat?

Jos haluat ohittaa yksityiskohtaisen selityksen siitä, miten nämä toimivat, selaa alas kohtaan "Kuinka suojautua hyökkäyksiltä".

Voit säästää itsesi hajauttamasta ja tallentamasta jokaista mahdollista tekstintekstiä, kunnes löydät tarvitsemasi hashin (kuten hakutaulukon), hash jokaisen selkokielisen tekstin ja tallennat tuloksen taulukkoon etsiäksesi sitä myöhemmin tarvitsematta niitä uudistaa. Tämä vie kauemmin, mutta säästää muistia.

Taulukon luomiseksi luodaan hashien ja selkokielisten tekstien ketjut hajautusfunktion ja vähennysfunktion avulla. Pienennystoiminto luo vain selvätekstit hashista (se ei muuta hajautusasetusta, vaan luo pikemminkin erilaista tekstiä kuin hash). Se on myös yksisuuntainen toiminto.

Siten taulukon laskemiseksi käytät yhtä hajautustasi, h1, pelkistystoiminnossa R () selkeän tekstin p1 luomiseksi.

R (h1) = p1.

Sitten käytät hash-toimintoa H () p1: n kanssa uuden hashin luomiseen.

H (pl) = h2.

Aiemman esimerkkimme avulla:

Jos selkokielinen joukko on [abcdefghijklmnopqrstuvwxyz] {5} (etsimme sateenkaaritaulukkoa kaikista salasanoista, jotka koostuvat pienistä 5 kirjaimista) ja käytämme MD5: tä (hajautusalgoritmi):

Hajautusarvo voi olla ab56b4d92b40713acc5af89985d4b786 (h1). Nyt sovellamme pelkistystoimintoa, joka voi olla yhtä yksinkertaista viemällä viimeiset 5 kirjainta hashiin.

R (ab56b4d92b40713acc5af89985d4b786) = kahvila

H (cafdb) = 81a516edabf924cd0f727d329e855b1f

Miksi niitä kutsutaan sateenkaaripöydiksi?

Kukin sarake käyttää eri pelkistystoimintoa. Joten jos jokainen sarake olisi värillinen, se olisi hyvin pitkä, laiha sateenkaari.  

Erilaisten pelkistystoimintojen käyttö vähentää ketjusulautumisten (törmäysten) määrää, joita tapahtui usein hash-ketjujen kanssa, jotka ovat sateenkaaripöytien edeltäjä. Tämä tarkoittaa pohjimmiltaan, että jos jatkat saman pelkistystoiminnon käyttöä, on mahdollista, että päädyt kahteen eri ketjuun, jotka yhdistyvät samaan tekstikokoiseen. Erilaisten pelkistystoimintojen käyttäminen vähentää tämän mahdollisuutta, vaikka se ei ole mahdotonta.

Hienoa, miten luot ketjun?

Ketjun luomiseksi käytät pelkistystoimintoa ja hajautusfunktiota (molemmat yhdellä tavalla) hajautettujen ja selkokielisten "ketjujen" luomiseksi. Kukin näistä 'ketjuista' jatkuisi k vaiheissa, ja kun ketju päättyy, se tallentaa vain ketjun ensimmäisen selkokielisen tekstin ja viimeisen hashin.

Joten näyteketju näyttää tältä:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

Kukin pelkistystoiminto on erilainen (edustaa R1, R2, R3 jne.) Ketjutenäytetaulukko (jokainen rivi on ketju, jonka pituus on 5) näyttää seuraavalta. Huomaa, että tämä on täynnä väärennettyjä tietoja vain esimerkin antamiseksi - hajautusfunktio ei ole hajautusfunktio, jonka löytäisit tottuneen hash-salasanoihin.

Pienennystoiminnot R1 ja R2 määritellään seuraavasti - R1 ottaa hashin 3 ensimmäistä numeroa ja R2 ottaa hashin kaksi viimeistä kirjainta:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

2 -—> abdu2934 -—> 293 -—> 83kdnif8 -—> if -—> ike83jd3

15 -—> dks2ne94 -—> 294 -—> ld932nd9 -—> ld -—> ldie938d

20 -—> ld93md8d -—> 938 -—> lxked93k -—> lx -—> 93mdkg8d

Sateenkaaritaulukossa vain ensimmäinen lähtöpiste ja päätepiste tallennetaan tallennustilaan säästämiseksi, kuten tämä:

lähtökohdan (selkokielinen) päätepiste, kun k astuu ketjun läpi (tiiviste)

p1 -—> h1k

p2 -—> h2k

p3 -—> h3k

Sitten, kun sinulla on hash (h), jossa et tiedä selkeää tekstiä (?), Verrataan sitä ketjuihin.

  1. Ensin tarkistat, onko hash lopullisten hashien luettelossa (h1k, h2k jne.). Jos näin on, voit siirtyä vaiheeseen 3.
  2. Jos ei, voit pienentää hajautuskoodin eri selkketekstiin (R1) ja sitten hajauttaa tämän selkokielisen tekstin (käyttämällä yllä olevaa tiivistefunktiota ja seuraavaa pelkistysfunktiota) ja verrata sitä lopullisten hashien luetteloon (h1k, h2k, h3k jne.). Kun se vastaa yhtä viimeisistä hajautuksista, kyseinen ketju todennäköisesti sisältää alkuperäisen hajautuksen.
  3. Löydätksesi alkuperäisen tiivisteen ketjusta, ota ketjun alkuteksti (joten jos se vastaa h1k, aloita p1: llä) ja käytä hajautus- ja vähennystoimintoja liikkua ketjua pitkin, kunnes saavutat tunnetun tiivisteen ja sitä vastaavan selvän tekstin. Näin voit liikkua ketjun hashien läpi ilman, että ne vievät tallennustilaa koneellasi.

Vaikka et voi olla varma, että ketjut sisältävät tarvitsemasi hashin, mitä enemmän ketjuja olet luonut (tai viittaat), sitä varmemmat voit olla. Valitettavasti jokainen ketju tuottaa aikaa vievää, ja ketjujen määrän lisääminen pidentää tarvitsemasi ajan.

Kuinka puolustat tällaisia ​​hyökkäyksiä vastaan?

Ensinnäkin kaikkien järjestelmien kerroksellinen puolustaminen. Jos pystyt estämään järjestelmiesi vaarantumisen muilla tavoilla (jotta hyökkääjä ei voi saada kopiota hash-salasanoistasi), hyökkääjä ei voi murtaa niitä.

Voit myös käyttää suolaa, joka lisää satunnaisen arvon salasanalle ennen sen salaamista. Tämä tarkoittaa, että löytämäsi ennakkolaskettu arvo (joka vastaa hashia) ei toimi. Salattu teksti ei perustu yksinomaan salaamattomaan tekstiin. Koska suola on erilainen kullekin salasanalle, jokainen täytyy murtaa erikseen.

Suolaus sisältyy nyt useimpiin tärkeimpiin hajautustyyppeihin. Vaikka Windows ei tällä hetkellä käytä suolaa, ne voivat salata tallennetut hajautukset, jos käytät SYSKEY-työkalua.

Voit myös käyttää kierroksia tai hajauttaa salasanaa useita kertoja. Kierrosten käyttö (varsinkin jos kierrosten määrä valitaan satunnaisesti jokaiselle käyttäjälle), tekee hakkerin työstä vaikeampaa. Tämä on tehokkainta yhdistettynä suolaamiseen.

Valitettavasti hakkereilla, joilla on tiivistetyt salasanat, on myös pääsy käytettyjen kierrosten määrään ja käytettyyn suolaan (koska luettelon saamiseksi he ovat todennäköisesti vaarantaneet. Käytetty suola ja kierrosten määrä tallennetaan salasanalla) hash, mikä tarkoittaa, että jos hyökkääjällä on yksi, heillä on myös toinen, mutta he eivät kuitenkaan voi käyttää verkossa saatavilla olevia ennalta laskettuja sateenkaaripöytiä, ja heidän on laskettava omat taulukonsa (mikä on erittäin aikaa vievää).

Yksi muu menetelmä, jonka tarkoituksena on lisätä salasanan murtamisen vaikeuksia, on pippurin käyttö. Pippuri on samanlainen kuin suola, mutta vaikka suola ei ole salainen (se tallennetaan hash-salasanalla), pippuria tallennetaan erikseen (esimerkiksi kokoonpanotiedostossa) estääkseen hakkereita pääsemästä siihen. Tämä tarkoittaa, että pippuri on salaa, ja sen tehokkuus riippuu tästä.

Pippurin on oltava erilainen jokaisessa käyttökohteessa, ja sen on oltava riittävän pitkä, jotta se olisi turvallinen. National Institute of Standards and Technology suosittelee vähintään 112 bittiä.

Vaikka pippurin käyttö voi olla tehokasta joissakin tapauksissa, on joitain haittapuolia. Ensinnäkään mikään nykyinen algoritmi ei tue paprikaa, mikä tarkoittaa käytännössä sitä, että tätä on mahdotonta toteuttaa mittakaavassa. Toisin sanoen, ellet luo omia algoritmejasi. Kuuntele Bruce Schneier. Älä tee niin.

Katso pidempi artikkeli paprikoiden ongelmista tästä langasta.

Käytä lopuksi vahvoja (vähintään 12 merkkiä), monimutkaisia ​​salasanoja ja ota käyttöön vahvat salasanakäytännöt kaikissa järjestelmissä. Tähän voi sisältyä käyttäjien pakottaminen luomaan vahvoja salasanoja, testaamaan heidän vahvuuksiaan säännöllisesti, käyttämään salasanojen hallintaohjelmia yritystasolla, pakottamaan 2FA: n käyttö ja niin edelleen.

Hämmentynyt siitä, mikä tekee vahvasta salasanasta?

Vaikuttaa siltä, ​​että hakkerointi on todella helppoa. Pitäisikö minun olla huolissani?

Tärkeintä hakkeroinnista on se, että kukaan ei halua tehdä enemmän työtä kuin heidän on tehtävä. Esimerkiksi sateenkaaripöytien laskeminen on paljon työtä. Jos salasanan saaminen on helpompaa tapaa, varmaan näyttelijä yrittää todennäköisesti ensin (kuten tietojenkalastelua!).

Tämä tarkoittaa, että kyberturvallisuuden parhaiden käytäntöjen käyttöönotto on luultavasti helpoin tapa estää hakkerointi. Itse asiassa Microsoft ilmoitti äskettäin, että vain 2FA: n käyttöönotto estää 99,9% automaattisista hyökkäyksistä.

Hyvää hakkerointia!

Lisälukemista:

Lisätietoja hash-ketjuista

Toinen sateenkaaripöytien selitys

Luettelo sateenkaaripöydistä verkossa