Hogyan kell hash jelszavakat és hogyan ne

Ismét befejező ellenőrzött információbiztonsági web-projekt, az én személyes harag túlcsorduló hordó felháborodással, úgy, hogy túllépték az ezen a poszton.

Megpróbálok nagyon gyorsan és tömören írja le a helyzetet hash-eket.

Beszerzések (rövid)


Hash = Hash funkció - (konvolúciós) függvény egyedileg feltérképezése vonal (bármilyen hosszúságú) a véges halmazát (előre meghatározott hosszúságú karakterlánc).
Letéti száma (string) hash - az eredmény a számítástechnika a hash függvény az adatokat.
Vannak kriptográfiai és nekriptograficheskie (külön kell osztályozni, és ezek közé tartoznak például, ellenőrző összegeket) hash függvény.

Három további feltételeket kriptográfiai hash, ami megkülönbözteti őket a többiektől:

  • Visszafordíthatatlanság: mivel a tördelési érték m kell lennie számítástechnikailag kivitelezhetetlen, hogy megtalálják az adatblokk X, amelyre a H (x) = m.
  • Ellenállás ütközések az első fajta: egy adott üzenet M kell számítástechnikailag megvalósíthatatlan találni egy másik üzenetet N, amelyre a H (N) = H (M).
  • Ellenállás ütközése a második fajta: meg kell számítási megvalósíthatatlan, hogy vegye fel egy pár üzenetek

Ásni a bonyolult kriptográfiai alkalmazás fejlesztők nem feltétlenül elég ahhoz, hogy emlékszik, mi a hash függvény (algoritmus név szerint) már fel lehet használni, és amelyek nem. Az MD5 - már nem lehetséges, a kollégák - használat bcrypt / scrypt.

A webes alkalmazások, többek között a hash függvények használják biztonságos tárolására titkok (jelszavak) az adatbázisban.
Ez hash függvény lesz az utolsó bástya, ha egy támadó tudta, hogy a támadást a helyi támadás egy hitelesítési rendszert. Az internetes támadások (brute force jelszó HTTP kérések), talán valaki más fogja írni később.

Az alábbi követelményeknek kell, hogy a hash az adatbázisban meg kell felelniük:

  • ellenállás brute force támadások (brute force szótár és brute force)
  • képtelen megtalálni az azonos jelszavakat a különböző felhasználók hash

Ahhoz, hogy teljesítjük az első kritériumot kell használni tartós jelenleg (és nem a 90-es!) Hash függvény.
Elvégzésére a második - egy random string (só) adunk egy jelszót előtt hasítás. Így két felhasználó a jelszó: „123456” lesz más só „sol1” és a „SOL2”, és ennek megfelelően a hash függvény a „123456sol1” és a „123456sol2” az adatbázis is eltér.

Most egy kicsit a tárolási rendszer - és a só maga hash az adatbázisban tárolt.
Ezt az adatbázisban való, és a támadó megkapja a hash értékek és a sót.

Használjon helyi lehetőség!


Ahhoz, hogy az élet nehéz a támadást kell mellszobor, hogy sózzuk a jelszót, de nem fordítva (az emberek, akik írni balról jobbra, természetesen).
Mivel a hash függvény általában számítjuk egymást a sorban (threading algoritmus követelmények), a támadó, amikor iterációjával „sózott” hash könnyebb lesz, ha podheshovoe kifejezést kezdődik a sót.
Egyszerűen azért, mert (a támadó) is precalculation előre hash (só) és feltételezik továbbá hash (só) + hash (jelszó) már sokkal gyorsabb (majdnem ugyanolyan sebességgel, mint egy hash (jelszó)). Az összes jelszó, hogy ez rendezni.

Ez lényegében egy „második só” csatolt minden (jelszó + só) szerkezetek, és ez azonos minden hash az adatbázisban. Mi a trükk? Az a tény, hogy a helyi paraméter az adatbázisban nem. Ez egy állandó rendszer, amely tárolja az alkalmazás memória, hová megy a config fájlt (bármilyen eszközzel, csak nem az adatbázisból).

Nagyon egyszerű és hatékony intézkedés, amely lehetővé teszi, hogy gyakorlatilag megszüntesse a brute-force támadás az adatokat csak egy hash tároló (anélkül, hogy a tudás, a helyi paraméter).

Az egyetlen alkalom, (ONsec) megtörte hash egy helyi paraméter, miután kifejlesztett során ez a támadás taktika helyi paraméter is (mi van bejegyezve a kérelmet, akkor nézz a hash-alapú, só (a jelszava már tudjuk), majd finomhangolni LP). És hiába. Abban hossz 16+ byte modern tördelési funkció - nagyon drága a vas. A végén kiderült, hogy könnyebb legyen, hogy veszélyezteti a hitelesítési rendszer (elhelyezi magát role = admin az adatbázisban keresztül UPDATE;))

Védje raktár megbízhatóan és szakszerűen!

következtetés


Leszek reális - persze, senki sem tudja átírni a projektek kedvéért „néhány” hash-eket. Mindazonáltal, az új projektek írhatóak scrypt / bcrypt. És azt is -, hogy vezessenek be egy helyi paraméter, még az MD5 gyenge - ez tényleg segít, ellenőrizni :)

Ha megváltoztatja egy másik típusú hash, továbbá a munkaerő-költségek, gyakran van egy kérdés a teljesítmény. Sőt, egy erős algoritmusok fogyasztanak több erőforrást. Tesztelt bevezetésük előtt kell betölteni a felhasználói hitelesítést másodpercenként (a legtöbb nagy projektek átmenet scrypt bizonyult fájdalommentes). Kiválasztása egy adott ideális típusú hash egy adott helyzetben igen eltérőek lehetnek. Például, a RB egyre vásárolt vasoldat generálására hash egy előre meghatározott sebességgel.

Összefoglalva, idézek sebesség válogató hash (unit - megaheshi másodpercenként, vagyis a szám), megkapta a kártya AMD Radeon 7990 költsége kevesebb, mint $ 1000 (még a régi árfolyam):

Hogyan kell hash jelszavakat és hogyan ne

Hashelés jelszavak PHP 5.5 új API
Használata BCrypt elfogadták, és a legjobb módja annak, hogy a hash jelszavakat, de sok fejlesztő még mindig a régi és gyenge algoritmusokat, mint például az MD5 és SHA1. Vannak, akik nem is használja só hasítás. Az új API a PHP 5.5 Hash célja, hogy felhívja a figyelmet az BCrypt, így könnyebb dolgozni

Hogyan kell hash jelszavakat és hogyan ne

Nekriptograficheskie hash és DoS támadás őket
Nekriptograficheskie hash függvény használják, ahol fontos a sebesség, és nem olyan fontos, hogy képes támadni funkció jellemzőit. A közelmúltban aktívan tárgyalunk a támadás az algoritmikus bonyolultságát hash tábla létrehozásával hash több ütközés, ami oda vezethet, hogy DoS. Nézzük meg a modern nekriptograficheskie hash

Hogyan kell hash jelszavakat és hogyan ne

Hogyan lehet a legjobban tárolni jelszó hash
Mint azt mindannyian tudjuk, a jelszavak mindig tördeljük, lassú algoritmus sót. Leggyakrabban használt scrypt, bcrypt vagy PBKDF2, de ez a poszt nem arról szól, hogy milyen algoritmust használja. Ehelyett, beszélünk arról, hogy mi a teendő a hash-eket. 20 (vagy 32) byte hash és a sót kell tárolni nem illékony,

Hogyan kell hash jelszavakat és hogyan ne

Egy kicsit a hash és biztonságos tárolására jelszavakat
Hi, Habr! Ma, a folyamat kialakulásának hitelesítési rendszer, a projektjük előttem volt a választás - a forma, amelyben tárolja a felhasználói jelszavakat az adatbázisban? a különböző lehetőségek jönnek szóba. A legnyilvánvalóbb: Tartsuk be a jelszót az adatbázis az egyértelmű. Használja rendes hash crc32, az MD5, SHA1.

Hogyan kell hash jelszavakat és hogyan ne

Mintegy dogma kriptográfia
Tegnap végre megjelent az első nyilvános változata a Lamer News, mind egy igazi példa az Redis mint napobodie Hacker News honlapján, és a projekt teljesen független helyszínen a hírek a világ a programozás. A projekt jól fogadta a közösség, és már a HN felső egy ideig. Köszönjük a visszajelzést.