Md5: n vain toistamiseen uudestaan ja uudestaan on neljä ongelmaa, riippumatta siitä kuinka monta kertaa teet sen.
Laskentateho ajan myötä
Ensimmäinen iso ongelma tässä on, että kirjoitettu, se ei laajene ajan mittaan pysyäkseen turvassa, kun tietokoneet nopeutuvat. Se, mikä on tänään turvallista, hajoaa hetkessä huomisen tietokoneissa.
Moderneilla suojatuilla algoritmeilla, kuten bcrypt ja scrypt, on sisäänrakennettu viritys niin, että algoritmi voidaan säätää automaattisesti hitaammaksi hyökkäävien tietokoneiden nopeammin. Koska bcrypt on myös ilmainen ja se on silti vain yksinkertainen toimintokutsu sinulle, ei ole mitään hyvää syytä olla käyttämättä sitä.
Sinulla on nyt skaalausrakenteen alku sisäänrakennettu koodiin. Olisi helppo refraktoida, että md5-hajautusaseman suorittaminen mielivaltaisen määrän kertoja, jotta voit virittää sen hitaammaksi ajan myötä. Mutta se ei ole tarpeeksi hyvä.
Suunniteltu epäonnistumiseen
Toinen ongelma on, että md5 on pohjimmiltaan huono valinta salauksen hashille, koska se on suunniteltu erityisesti nopeaksi . MD5: n tarkoituksena on tarkistaa tai verrata nopeasti suuria tiedostoja. Tämän saavuttamiseksi hash on voitava laskea nopeasti ja tehokkaasti. Tämä tarkoittaa, että algoritmin toteutus ja suunnittelutavoitteet ovat täysin ristiriidassa salasanojen tallentamisen kanssa. Mahdollisuudet jossain vaiheessa selvittää tapa laskea md5-hash, joka on suuruusluokkaa nopeampi kuin mitä voimme tällä hetkellä tehdä, ovat suuruusluokan suurempia kuin pystymme tekemään saman sha1: lle tai bcryptille. p>
Rappeutuminen
Kolmas ongelma on, että hajautusalgoritmeilla on taipumus , kun ne toistetaan. Ota tämä ymmärtämään käyttäjän toimittama alkuperäinen teksti. Tämän tekstin käsitteellinen koko on rajoittamaton . Tässä on ääretön määrä mahdollisia arvoja. Kun olemme hajauttaneet tekstin kerran md5: llä, olemme saavuttaneet 2 128 -määrää mahdollista arvoa ... silti hyvin suuri, mutta ei enää rajaton. Mutta kierretään tämä uudelleen. md5 on hyvä, mutta se ei ole täydellinen . Näillä 340 undecillion: n potentiaalisilla panoksilla on törmäyksiä ja ne tuottavat useita tuloksia, jotka ovat lähellä, mutta silti jonkin verran vähemmän kuin 2 128 . Jatkamalla iterointia löydät lisää törmäyksiä, kunnes lopulta päädyt numeroon, joka on edelleen suuri, mutta on huomattavasti pienempi kuin käsitteellinen tila, jonka luulit työskentelevän.
Syklit
Lopuksi neljäs ongelma on, että jotkut alkuperäisistä potentiaalisista panoksistasi johtavat sykleihin : arvon numero 12345 hajautus 98743: een, joka hajaantuu 67321: een, joka hajaantuu takaisin 12345: een jne . Toisin sanoen jotkut syötteet käyvät läpi saman pienen hajautusarvojen joukon, ja niiden toistaminen edelleen ei auta . Itse asiassa, mitä enemmän kertoja suoritat hajautuksen, sitä todennäköisemmin tietty alkuperäinen tulo päätyy jaksoon.
Tämä palaa md5: n suunnitteluun. Salaus hash voitaisiin suunnitella minimoimaan (ei kokonaan eliminoimaan, mutta ainakin minimoimaan) rappeuma ja syklin ilmiöt, mutta se ei ollut lainkaan huolenaihe md5: lle.
Päätelmä
Jokainen näistä syistä yksin riittää käyttämään md5: tä. Saatavilla on muita täysin hyviä vaihtoehtoja, ja ne käyttävät yleensä samaa käyttöliittymää, joten toisen valitseminen ei ole vaikeaa. Joissakin käyttöympäristöissä se on yhtä helppoa kuin siirtää jollekin "createhash" -toiminnolle välitettävä enum-arvo. Laita kaikki kolme syytä yhteen, ja md5: n käytön jatkaminen on täysin hullua.