Vrsta gesla, ki bi ga morali ustvariti, je v veliki meri odvisna od tega, kako je geslo shranjeno.
Pred leti je bilo naključno osemmestno geslo, sestavljeno iz velikih in malih črk, simbolov in številk, res težko razbiti. V nekaterih primerih je takšno geslo razbilo leta.
Zaradi današnje spreminjajoče se tehnologije in najemnih strojev se je ta čas skrajšal na ure. Toda kako so ta gesla sploh shranjena?
Kako so gesla shranjena na spletu
Sistemi ne shranjujejo uporabniških gesel neposredno v datoteke ali baze podatkov, saj lahko napadalci prevzamejo bazo podatkov, kjer sistemi hranijo gesla. Namesto tega sistemi šifrirajo uporabniška gesla in napadalci naletijo na šifrirano različico vsakega gesla.
Obstaja nekaj algoritmov, ki jih sistemi uporabljajo za šifriranje gesel. Eden od teh algoritmov je simetrični algoritem. Simetrični algoritem je vrsta šifriranja kjer lahko uporabite isti ključ za šifriranje in dešifriranje. Ključ, ki ga boste uporabili za šifriranje podatkov, je enak za šifriranje in dešifriranje. Varnost simetričnih algoritmov nosi nekaj tveganj, saj obstaja samo en ključ za dešifriranje. Iz tega razloga sistemi na splošno ne uporabljajo simetričnih algoritmov za šifriranje gesel.
Na splošno je metoda, ki jo sistemi uporabljajo za šifriranje, algoritmi zgoščevanja. Algoritmi zgoščevanja so namenjeni preverjanju in predstavljanju celovitosti podatkov, ne pa šifriranju podatkov. Algoritmi zgoščevanja pretvorijo podatke v zgoščeno vrednost fiksne velikosti. Te zgoščene vrednosti običajno predstavljajo edinstveno zgoščeno vrednost podatkov.
Zahvaljujoč algoritmu zgoščevanja, če je napadalec prevzel zbirko gesel, napadalec ne more dostopati do gesla za nazaj od tu. Tukaj je zelo pomemben odtenek, na katerega morate biti pozorni. Teoretično lahko napadalec, ki ogrozi sistem, ki uporablja isti algoritem zgoščevanja za vse kombinacije gesel, primerja dobljene rezultate. Če napadalec kot rezultat teh primerjav ustvari isto vrednost, je napadalec ugotovil, katera je odprta različica gesla. Ta metoda temelji na poskusih in napakah, ta oblika napada pa je splošno imenovan napad s surovo silo.
Na začetku 2000-ih je lahko trajalo več sto let, da bi preizkusili vse kombinacije za 8-mestna gesla, šifrirana s priljubljenimi algoritmi zgoščevanja. Seveda ta di ne vključuje zelo preprostih kombinacij, kot sta "123456" ali "mypassword" v tem naboru. Z razvojem današnjih tehnologij programske in strojne opreme se je zelo spremenil tudi način vdiranja gesel.
Vpliv nastajajočih grafičnih procesorjev
Zmožnosti vzporedne obdelave podatkov grafičnih procesorjev (GPE) so se sčasoma izboljšale. GPU-ji ne morejo izvajati vsestranskih operacij kot CPE-ji za splošne namene. Torej, čeprav obstajajo toliko jeder in vzporedne procesorske moči, jih nima smisla uporabljati za skoraj vsako težavo, npr procesor.
Kljub temu je mogoče na GPE precej učinkovito izvesti nekatere algoritme zgoščevanja, ki se uporabljajo za gesla. Izračunljive zgoščene vrednosti na sekundo, ki jih lahko dosežete s tradicionalnimi procesorji, so z novimi platformami grafičnih procesorjev izjemno narasle.
Če želite dobiti idejo, preglejte število zgoščevanja na sekundo algoritmov zgoščevanja, kot so NTLM, MD5 in SHA1, v spodnji tabeli. Za zdaj je dovolj, da vemo, da so ti algoritmi le zgoščevalni algoritem. Za ustvarjanje te tabele sem uporabil sistem gruče, sestavljen iz 25 grafičnih procesorjev AMD Radeon.
Algoritem |
Zgoščevanje na sekundo |
NTLM |
350.000.000.000 |
MD5 |
180.000.000.000 |
SHA1 |
63.000.000.000 |
SHA512Crypt |
364.000 |
Bcrypt |
71.000 |
Scrypt |
33.000 |
Kot lahko vidite, lahko s takim sistemom ustvarite zgoščene vrednosti NTLM 350 milijard krat na sekundo. To pomeni, da lahko preizkusite vse kombinacije 8-mestnega gesla v manj kot 6 urah. Poleg tega je strojna oprema v tem primeru izpred let. Predstavljajte si današnjo moč razbijanja gesel.
Kaj naj storijo razvijalci programske opreme?
Pot, po kateri bi morali iti programerji, je precej preprosta: raje bi morali imeti algoritme, ki pri šifriranju gesel potrebujejo več časa za izračun zgoščenih vrednosti. Razvijalci se morajo naučiti ne le o zmogljivosti algoritma, ki ga uporabljajo na CPE, ampak tudi o tem, kako odporen je proti svetu GPE.
Če razvijalci delajo s programskim okvirom, ki obravnava tudi procese šifriranja gesel, kot sta Django, Ruby on Rails, in Spring Security, naj preverijo, ali so bile v okviru sprejete prave odločitve glede varnost.
na primer Načrtovati, ena najpogosteje uporabljenih knjižnic za uporabniške operacije v Ruby on Rails, uporablja Bcrypt kot privzeti algoritem zgoščevanja. Omogoča tudi uporabo druge metode kot algoritma zgoščevanja. Algoritem Bcrypt je zanesljiv, saj še vedno traja zelo dolgo, da se GPE zlomi.
Če povzamemo, dlje ko traja izračun zgoščene vrednosti, bolj ste varni.
Koliko znakov naj ima vaše geslo?
Vsak dodaten znak, ki ga uporabite, bo geometrično povečal število poskusov in napak, potrebnih za razbijanje vašega gesla, in njegovo varnost.
Oglejmo si to situacijo skozi dva različna scenarija. Upoštevajte vrednosti v zgornji tabeli za zgoščevalni algoritem NTLM in si predstavljajte, da boste poskušali razbiti geslo. Predstavljajte si, da ciljate na gesla z osmimi znaki ali več.
Število znakov |
Velike/male črke in številke |
Velike/male črke, številke in posebni simboli |
8 |
manj kot 1 minuto |
2 minuti |
9 |
2 minuti |
2 uri |
10 |
2 uri |
1 teden |
11 |
6 dni |
2 leti |
12 |
1 leto |
200 let |
13 |
več kot 100 let |
več kot 1000 let |
Ko pregledate tabelo, lahko vidite, da je uporaba najmanj 12-mestnega gesla varna, če uporabljate vse kombinacije velikih/malih črk, številk in posebnih simbolov. Če ne uporabljate posebnih simbolov, se izkaže, da morate kot varno dolžino gesla uporabiti 13 znakov. Če bi v tem sistemu uporabili metodo zgoščevanja Bcrypt namesto zgoščevanja NTLM, bi bilo dovolj 8 znakov. Vendar pa nimate možnosti vedeti, s katero metodo zgoščevanja sistem, v katerega vstopite prek spleta, hrani vaše geslo. Zato morate razmisliti o vseh možnostih.
Glavna težava razvijalcev programske opreme je, da je uporabnike skoraj nemogoče prepričati, da imajo vsaj 12-mestno geslo. Danes je mogoče reči, da je stopnja uporabe gesel te dolžine nizka. Zato bo glede na scenarij uporabe razvitega sistema treba najti srednjo pot, ki jo bodo uporabniki sprejeli. da izboljšajo varnost svojih gesel.
Zadnji predlog za razvijalce je, da preverijo ne samo najmanjšo dolžino, temveč tudi največjo dolžino vnosov, ki prihajajo skozi obrazce, ki ste jih predstavili uporabniku. Še posebej, če zaradi varnosti omogočite uporabo algoritma zgoščevanja, ki se počasi izračunava, kot je Bcrypt lahko naletite na določena tveganja, če ne nadzirate največje dolžine gesla, ki ga vnesete uporabnik. Napadalci lahko na primer izvedejo napade tako, da poskusijo na desetine gesel s 100 tisoč znaki hkrati z nekaterimi posebej pripravljenimi zahtevami. V takem primeru je zelo verjetno, da se vaš sistem ne bo več odzival na druge uporabnike.
Nasveti končnim uporabnikom
Geslo naj bo dolgo vsaj 12 znakov in poskrbite, da bo vključevalo kombinacije velikih in malih črk, številk in simbolov. Nikoli ne pozabite, da lahko sisteme, ki shranjujejo vaše geslo, vdrejo in vaše podatke zlorabijo. Ne morete vedeti, katere algoritme sistem uporablja za šifriranje vašega gesla, zato je v celoti odvisno od vas, ali boste upoštevali previdnostne ukrepe in ustvarili močna gesla.