Slaptažodžių "sūdymas" (salting)

hash("hello")                    = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hello" + "QxLUF1bgIAdeQX") = 9e209040c863f84a31e719795b2577523954739fe5ed3b58a75cff2127075ed1
hash("hello" + "bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab
hash("hello" + "YYLmfY6IehjZMQ") = a49670c3c18b9e079b9cfaf51634f563dc8ae3070db2c4a8544305df1b60f007

Informacijos paieškos ir „rainbow“  lentelės veikia tik todėl, kad kiekvienas slaptažodis yra hash‘uojamas tuo pačiu būdu. Jei du vartotojai turi tokius pačius slaptažodžius, jie taip pat turės tokius pačius hash‘us. Mes galime išvengti šių atakų tik atsitiktine tvarka sudarant kiekvieną hash‘ą, tam, kad, kai tas pats slaptažodis bus hash‘uojamas dukart, hash‘as jau nebūtų toks pats.

Atsitiktinius hash‘us galime padaryti papildydami ar pridėdami atsitiktinę eilutę, vadinamą „druska“(salt), prieš hash‘inant slaptažodį. Kaip parodyta pavyzdyje aukščiau, tai to paties slaptažodžio hash‘ą paverčia kiekvieną kartą visiškai kitokiu. Tam, kad patiktintume, ar slaptažodis yra teisingas,  mums reikia šios „druskos“, todėl ji visada saugoma vartotojo paskyros duomenų bazėje kartu su hash‘u arba kaip hash‘o eiltuės dalis.

„Druska“ neturi būti slapta, nes tiesiog atsitiktinai sudarius hash‘ą informacijos paieškos lentelės(lookup tables), atvirkštinės informacijos paieškos lentelės(reverse lookup tables) ir „rainbow“ lentelės tampa neveiksmingos. Įsilaužėliai nežinos kokia „druska“ bus panaudota, todėl jie negali iš anksto sugeneruoti informacijos paieškos ar „rainbow“ lentelių. Jei kiekvieno vartotojo slaptažodis hash‘uotas  su skirtinga „druska“, atvirkštinės informacijos paieškos lentelės taip pat neveiks.

Dažniausiai pasitaikantis klaidingas „druskos“ panaudojimas yra kai ta pati „druska“ naudojama keliuose hash‘uose arba ji yra per trumpa.

Pakartotinas druskos panaudojimas (Salt Reuse)

Dažna klaida yra naudoti tą pačią druską kiekviename hash‘e. Arba įprogramuota „druska“ yra nekintanti, arba atsitiktinai generuojama vieną kartą. Tai yra neefektyvu, nes jei dviejų vartotojų slaptažodžiai sutampa, jie, jų hash‘ai vistiek bus vienodi. Įsilaužėlis vistiek galės panaudoti atvirkštinę informacijos paieškos lentelę, kad paleistų žodyno ataką kiekvienam hash‘ui tuo pačiu metu. Jis tiesiog turės pritaikyti „druską“ kiekvienam slaptažodžio spėjimui prieš hash‘uojant. Jei nekintanti„druska“ įprogramuota į populiarų produktą, informacijos paieškos ir „rainbow“ lentelės gali būti sudarytos tai „druskai“, kad būtų lengviau nulaužti produkto sugeneruotą hash‘ą.

Nauja atsitiktinė „druska“ turi būti generuojama kiekvieną kartą vartotojui sukūrus paskyrą ar pakeitus slaptažodį.

Trumpa „druska“ (Short Salt)

Jei „druska“ yra per trumpa, įsilaužėlis gali sukurti visas galimas informacijos paieškos lenteles kiekvienai įmanomai „druskai“. Pavyzdžiui, jei „druska“ yra tik trijų ASCII simbolių ilgio, yra tik 95x95x95 = 857,375 galimi „druskos“ variantai. Tai gali atrodyti daug, tačiau jei kiekvieną informacijos paieškos lentelę sudaro 1MB dažniausiai pasitaikančių slaptažodžių, kartu jie sudarys tik 837GB, kas yra nedaug, žinant, kad 1000GB kietąjį diską šiai dienai galima nusipirkti už mažiau nei 100$.

Dėl tos pačios priežasties, vartotojo vardas neturėtų būti naudojamas kaip „druska”. Vartotojo vardas gali būti unikalus atskiroms sistemoms, bet jie yra nuspėjami ir dažniausiai dar kartą panaudojami kitų sistemų paskyroms. Įsilaužėlis dažniausiai pasitaikantiems vartotojo vardams gali sukuri informacijos paieškos lenteles ir panaudoti jas nulaužti hash’ams, kurių „druska” yra vatotojo vardas.

Tam, kad įsilaužėliui būtų neįmanoma sukurti informacijos paieškos lenteles kiekvienai galimai „druskai”, ji turi būti ilga. Todėl norma yra naudoti tokio paties dydžio “druską” kaip ir hash’o funkcijos išvestis. Pvz.: SHA256 išvesties rezultatas yra 256 bitai (32 baitai), taigi „druska“ turėtų būti bent jau 32 atsitiktinai parinktų baitų ilgio.

Serveriai.lt - hostingo paslaugų lyderis domenai