- Sol je naključni niz, ki se doda geslu pred zgoščeno vrednostjo (hash), da se dosežejo edinstvene zgoščene vrednosti za vsakega uporabnika.
- Linux Shranjuje zgoščeno vrednost (hash), sol in algoritem v /etc/shadow, kar krepi varnost pred napadi s slovarjem in mavričnimi tabelami.
- Dobre prakse zahtevajo dolge, naključne in edinstvene soli, skupaj z robustnimi algoritmi za zgoščevanje in podatkovnih baz dobro zaščiten.
- Soljenje gesel bi moralo biti vključeno v širše varnostne politike, ki vključujejo močna gesla, večfaktorsko preverjanje gesel in upravitelje gesel.

Če delate s sistemi GNU/Linux ali vas preprosto skrbi varnost vaših računov, ste verjetno že slišali za sol v zgoščeni vrednosti geslaTo je eden tistih konceptov, ki se veliko omenja, a se pogosto razume le napol: sliši se tehnično, a v resnici naredi razliko med sistemom, ki ga je enostavno vdreti, in sistemom, ki je veliko bolj odporen na napade.
Skratka, sol je ključni element za nepredvidljivost zgoščevalnih vrednosti geselDeluje tako, da pred uporabo algoritma zgoščevanja doda naključne podatke, tako da bo rezultat, shranjen v bazi podatkov, drugačen, tudi če imata dva uporabnika isto geslo. Od tam naprej so specifična implementacija v Linuxu, njen odnos do /etc/shadow, orodja, kot je mkpasswd, in sodobne najboljše varnostne prakse cel svet zase, ki ga bomo podrobneje raziskali.
Kaj točno je sol v zgoščeni vrednosti gesla?

V kriptografiji, a sol (sol) je naključni niz znakov ki se doda uporabnikovemu geslu pred uporabo zgoščevalne funkcije. Cilj je, da je nastala zgoščena vrednost edinstvena, tudi če je geslo v navadnem besedilu enako za več uporabnikov.
Ko uporabnik ustvari ali spremeni svoje geslo, sistem ustvari naključna solZdruži ga z geslom (pred, za ali v določeni obliki, odvisno od sheme) in na to kombinacijo uporabi algoritem zgoščevanja, kot je na primer SHA-256 o SHA-512Geslo ni shranjeno v bazi podatkov, temveč zgoščena vrednost (geslo + sol), v večini shem pa se skupaj s hashom shrani tudi sama sol.
Ta tehnika naredi veliko od tehnike napada, ki temeljijo na vnaprej izračunanih zgoščenih vrednostih, kot so mavrične tabele, in močno otežuje napade s slovarjem in napade z grobo silo v velikem obsegu. Napadalec ne more več izkoristiti dejstva, da si več uporabnikov deli geslo, ker bo imel vsak drugačen zgoščevalni pogoj (hash).
Pomembno je razumeti, da sol sama po sebi ni skrivnost: To ni geslo ali zasebni ključNjegova funkcija je v proces zgoščevanja vnesti naključnost in edinstvenost. Varnost je še vedno odvisna od uporabe močna gesla y ustrezni algoritmi za zgoščevanje, po možnosti posebej zasnovan za gesla (kot so bcrypt, scrypt, Argon2), čeprav mnogi klasični sistemi Linux uporabljajo različice SHA-256 ali SHA-512.
Kako deluje soljenje gesel korak za korakom

Postopek soljenja lahko povzamemo v vrsto dokaj preprostih korakov, vendar z velik vpliv na varnost:
Najprej, ko se uporabnik registrira ali spremeni geslo, sistem ustvari edinstvena in naključna sol za to poverilnico. Ta sol je običajno zadostne dolžine (na primer 16 bajtov ali več) in je pridobljena iz kriptografsko varnega generatorja naključnih števil.
Nato se geslo, ki ga izbere uporabnik, združi s to soljo, da se tvori vmesna verigaTa kombinacija je lahko preprosta kot združevanje soli in gesla ali pa ima bolj zapleteno obliko, ki jo določa zgoščevalna shema. Pomembno je, da vsak uporabnik dobi drugačno kombinacijo.
Potem, a enosmerni algoritem zgoščevanjaRezultat je na videz naključen niz, zgoščena vrednost (hash), fiksne dolžine, ki bo shranjen v podatkovni bazi skupaj s soljo (soljo). V sodobnih sistemih se iščejo algoritmi, ki proizvajajo dolgi in zapleteni izhodiTo poveča prostor za iskanje in podraži napade z grobo silo.
Končno, ko se uporabnik prijavi, sistem ponovno pridobi vneseno geslo. povezana sol Iz baze podatkov ponovi popolnoma enak postopek združevanja in zgoščevanja ter rezultat primerja s shranjeno zgoščeno vrednostjo. Če se ujemata, ve, da je geslo pravilno, ne da bi moral poznati odprto besedilo.
Ta mehanizem zagotavlja, da bo napadalec videl le, če pride do razkritja podatkov v bazi podatkov. posamezne zmeščevalne vrednosti z lastnimi solmiNamesto nabora primerljivih zgoščevalnih vrednosti ustavitev napada ni čarovnija, vendar postane računsko bistveno dražja.
Prednosti uporabe soli v zgoščenih vrednostih gesel

Glavni razlog za uporabo soljenja je, da krepi varnost shranjenih gesel pred najrazličnejšimi napadi. Vendar je vredno podrobneje omeniti specifične prednosti.
Prvič, soljenje zagotavlja odpornost na napade s slovarjiBrez soli lahko napadalec pripravi ogromen seznam pogostih gesel in njihovih zgoščevalnih vrednosti ter jih preprosto primerja z ukradeno bazo podatkov. Z edinstveno soljo na uporabnika postanejo te vnaprej izračunane zgoščene vrednosti neuporabne, ker vsaka kombinacija gesla in soli ustvari drugačno vrednost.
Drugič, uporaba soli zmanjšuje učinkovitost mavrične mizeTo so preprosto vnaprej izračunane baze podatkov zgoščevalnih vrednosti za priljubljena gesla za pospešitev obnovitve. Ker je rezultat odvisen od specifične soli, postanejo te tabele, zasnovane za neslane zgoščene vrednosti, neuporabne ali vsaj zelo neučinkovite.
Druga očitna prednost je, da izboljša zasebnost v primeru uhajanjaTudi če vsiljivec dobi dostop do uporabniške tabele z njeno zgoščeno vrednostjo in soljo, ne bo mogel hitro ugotoviti, kdo ima isto geslo kot drugi, ali zlahka sprožiti množičnih napadov. Vsak račun zahteva individualno pozornost, kar je v velikem obsegu običajno nepraktično.
Poleg tega soljenje dodaja kompleksnost napadi z grobo siloNamesto da bi lahko kandidatno geslo preizkusil z vsemi zgoščenimi vrednostmi hkrati, je napadalec prisiljen upoštevati »salt« vsakega uporabnika, kar pomnoži skupno delovno obremenitev. Če je to kombinirano s počasnim in parametriziranim algoritmom za zgoščevanje (kot sta bcrypt ali Argon2), se stroški napada še povečajo.
Končno je soljenje tehnika, ki se dobro prilagaja tehnološkemu razvoju. Tudi ko se računalniška oprema izboljšuje in se pojavljajo novi napadi, kombinacija robustnega hašiša in edinstvene soli Ohranja visoko in prilagodljivo raven težavnosti: lahko povečate dolžino soli, okrepite algoritem, povečate računske stroške itd.
Kako Linux izvaja soljenje gesel (/etc/shadow)
V sistemih Linux in drugih različicah *NIX uporabniška gesla niso shranjena v /etc/passwd, temveč v datoteki / etc / sencaTa datoteka, do katere ima dostop le superuporabnik, shranjuje zgoščene vrednosti gesel skupaj z dodatnimi informacijami in je tam, kjer je uporaba funkcije Salt in algoritma zgoščevanja jasno vidna.
Vrstice v /etc/shadow imajo podobno strukturo kot:
uporabnik:$id$sal$hash:dodatna_polja…
Simbol $ Ločite različne dele. Prvi del za uporabniškim imenom označuje vrsto algoritma uporablja se. Na primer, 1 $ običajno predstavlja MD5, 5 $ SHA-256 in 6 $ SHA-512, ki je najpogostejši algoritem v sodobnih distribucijah, ker ponuja večjo varnost kot starejše sheme, ki temeljijo na DES ali MD5.
Ko se prikaže identifikator algoritma, salin nato nastali zgoščeni znesekVse to je znotraj istega polja. Ko je geslo potrjeno, sistem prebere ta identifikator, sol, uporabi algoritem, ki ustreza vnesenemu geslu, in primerja izračunano zgoščeno vrednost s shranjeno.
Če želite hitro preveriti, kateri uporabniki imajo šifrirana gesla in kateri algoritem se uporablja, lahko uporabite ukaz, kot je grep '\$' /etc/shadowV tem kontekstu se znak dolarja ($) uporablja za iskanje vrstic z zgoščenimi črkami v sodobni obliki zapisa. Simbolu je treba dodati poševno črko nazaj, ker v regularnih izrazih pomeni "konec vrstice".
Računi brez gesla ali zaklenjeni računi običajno v tem polju prikažejo takšno vrednost. ! o * namesto zgoščene vrednosti z dolarji, kar pomeni, da overitve ni mogoče izvesti s standardnim geslom. Ta struktura pojasnjuje eno stvar: Linux integrira soljenje v svoj format shranjevanje gesla domače.
Razlika med zgoščevanjem gesel in soljenjem
Pomembno je jasno razlikovati med dvema konceptoma, ki se včasih zamenjujeta: mešanje y soljenjeZgoščevanje gesel je postopek, pri katerem se geslo z uporabo enosmernega algoritma pretvori v neprepoznavno vrednost. Strežnik nikoli ne potrebuje izvirnega gesla, ampak le preveri, ali uporabnik pozna pravilno geslo, ker ustvari enako zgoščevalno vrednost.
Težava je v tem, da če sta dve gesli enaki, Nesoljen hašiš bo prav tako enakTo napadalcu omogoča primerjavo in združevanje uporabnikov po geslu ali uporabo vnaprej izračunanih tabel. Poleg tega, če je algoritem zgoščevanja hiter in zasnovan za integriteto podatkov (kot je preprost SHA-256), postane bolj ranljiv za obsežne napade z grobo silo.
Soljenje pride prav zato, da odpravi to slabost: gre za dodajte naključne podatke geslu pred zgoščevanjem. Posledica tega je, da bodo zgoščene vrednosti v bazi podatkov popolnoma drugačne, tudi če dva uporabnika izbereta geslo »casa«, saj bo eden imel na primer »casa+7Ko#«, drugi pa »casa8p?M« kot niz pred zgoščevanjem.
Torej, zgoščevanje in soljenje ne tekmujeta, temveč se dopolnjujeta. Zgoščevanje zagotavlja lastnost enosmernosti in enostavnost preverjanja; sol zagotavlja edinstvenost in odpornost proti množičnim napadomVarna izvedba shranjevanja gesel združuje obe tehniki, idealno z uporabo algoritma, zasnovanega za ta namen, z nastavljivimi stroški.
Uporaba soli v Linuxu z mkpasswd
V okoljih GNU/Linux in drugih sistemih UnixZelo praktičen način za eksperimentiranje s soljenjem je orodje mkpasswdTa ukaz se uporablja za generiranje šifrirana gesla varno in je pogosto integriran v procese ustvarjanja uporabnikov, skrbniške skripte itd.
Osnovna sintaksa ukaza mkpasswd vam omogoča, da določite geslo, ki ga želite šifrirati, in vrsto možnosti, kot je vrsta algoritma (na primer des, md5, sha-256, sha-512), z uporabo možnosti -mV sodobnih sistemih je smiselno izbrati SHA-512 vsaj ali s še bolj robustnimi shemami, če jih distribucija podpira.
Posebej zanimiva možnost v kontekstu soljenja je -S, ki omogoča dodajte sol geslu pred šifriranjem. Če ni določeno ročno, lahko mkpasswd ustvari naključna sol v vsaki izvedbitako da je tudi pri uporabi istega prijavnega gesla nastali zgoščeni znesek vsakič drugačen.
To je mogoče enostavno preveriti: če z ukazom mkpasswd večkrat šifrirate »password123« z uporabo SHA-512 in naključne soli, boste dobili popolnoma različne zgoščene vrednosti (hash). Če pa posredujete isto vrednost soli z uporabo -S, bo zgoščena vrednost vedno enaka, ker se kombinacija gesla in soli ne spremeni.
Zahvaljujoč temu orodju je zelo enostavno Pripravite gesla, šifrirana s soljo dodajati v konfiguracijske datoteke, ročno upravljati uporabnike ali preizkušati vedenje soljenja, ne da bi morali karkoli programirati.
Strasten pisec o svetu bajtov in tehnologije nasploh. Rad delim svoje znanje s pisanjem in to je tisto, kar bom počel v tem blogu, saj vam bom pokazal vse najbolj zanimive stvari o pripomočkih, programski opremi, strojni opremi, tehnoloških trendih in še več. Moj cilj je, da vam pomagam krmariti po digitalnem svetu na preprost in zabaven način.