/ / Zabezpečenie heslom - bezpečnosť, heslá, sha

Zabezpečenie heslom - bezpečnosť, heslá, heslá

V súčasnosti používam konkrétnu schému zabezpečenia hesiel a myslím si, že mám nejaké body na zlepšenie. Implementácia je v jazyku Java, preto uprednostňujem použitie šifrovania SHA-2 512.

V súčasnosti mám model klient-server, takže sa môžu vyskytnúť tieto veci:

  • Klient sa chce prihlásiť, pošle svoje heslo s jednorazovým normálnym šifrovaním SHA-2 512 cez sieť.
  • Server má heslá uložené v systéme Windowsdatabáza, ako napríklad SHA-2_512 (SHA-2_512 (heslo) + soľ), pričom vnútorná SHA-2_512 (heslo) je „zašifrované“ heslo, ktoré prijíma v sieti.
  • Kontrola hesiel sa vykonáva na strane servera a neexistuje spôsob, ako by zo servera mohla uniknúť čokoľvek. Jedinou možnou zraniteľnosťou by bolo, keby si niekto mohol prečítať RAM, myslím.

Mám tieto otázky:

  • Útočník zvyčajne vytvára kolízne útokykeď chcete hacknúť heslo. Ako však postačujú útoky na zrážky? Ak je potrebné heslo použiť pre iné aplikácie, ako sú Outlook.com, Facebook alebo čokoľvek (ktoré pravdepodobne používajú inú soľ, pretože nemajú nič spoločné s mojimi aplikáciami), aký je potom dostatočný útok na zrážky? Nepotrebujete skutočné heslo?

  • Používa SHA-2 512 iteráciu? A ak áno, mal by som zmeniť svoje šifrovacie metódy tak, aby sa automaticky použilo niekoľko iterácií plus koľko je preferovaných iterácií? Čítal som tiež o použití náhodného počtu iterácií (v rozsahu), ako môžem náhodne uložiť náhodný faktor?

  • Mám ukladať systémové tajomstvá pre každú iteráciu v serverovom kóde? vidieť http://blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/ , Mohol by som uložiť pole, ktoré by držalostatické tajomstvo pre každú iteráciu, s tým, že deviate tajomstvo je pre 11. iteráciu. Nikto nemôže poznať tajomstvá, sú vypočítané raz (myslím, že šifruje nejaký náhodný reťazec) a potom sa v podstate ukladajú do pamäte RAM servera.

  • V súčasnej dobe som poslal zadané heslo zklienta ako servera SHA-2_512 (heslo), mal by sa tento proces vylepšiť, a ak áno, ako? Nemôžem použiť soli, pretože klient nemá soľ k dispozícii.

S pozdravom.

odpovede:

5 pre odpoveď č. 1

TLDR: Musíte poslať heslo pomocou šifrovaného kanála, napríklad TLS. Zvážte použitie bcrypt pre hashovanie heslom.

SHA-2 512 nie je šifrovací algortihm, je aalgoritmus prehľadu správ. Šifrovací algoritmus vyžaduje šifrovanie kľúča a správy. Vytvára ciphertext. Dôležité je, že šifrovací algoritmus má dešifrovací algoritmus.

ciphertext = E(key, plaintext);
plaintext = D(key, ciphertext);

Prehľad správ má kus obyčajného textu avytvára prehľad správ. Neexistuje žiadny zodpovedajúci spätný mechanizmus na prevzatie prehľadu a získanie pôvodnej správy. Neexistuje tiež žiadny tajný kľúč.

digest = hash(plaintext);

Ak je útočník schopný pristupovať k databáze s hashmi, môže útočník získať pôvodné heslo hrubou silou a vyskúšať veľa odhadov pomocou algoritmu hash.

digest1 = hash(guess1);
digest2 = hash(guess2);    //repeat with lots of guesses

Po prvé, odoslanie hashu cez sieť je nie zabezpečiť. Musí sa zaslať prostredníctvom nejakého zabezpečeného komunikačného mechanizmu, napríklad SSL. Ak útočník môže zachytiť hash nad komunikáciou, môže byť schopný zistiť základné heslo.

A hash kolízia nie je to isté ako hrubé vynútenie hesla. Hašovacia kolízia je spôsobená dvoma rozdielny správy produkujú rovnaký prehľad správ.

digest1 = hash(plaintext1);
digest2 = hash(plaintext2);
if ( ( plaintext1 != plaintext2 ) && ( digest1 == digest2 ) )
// hash collision

SHA-512 nemá iterácie navrhnutézabrániť násiliu. Súbor algoritmov SHA je navrhnutý tak, aby bol efektívny. Dôvodom pridania iterácií pri hashovacích heslách je predĺženie času potrebného na vynútenie hesla. Myšlienka, že náklady na vykonanie legitímneho pokusu o prihlásenie a vykonanie 100 iterácií je malá v porovnaní s útočníkom, ktorý má milióny hesiel, z ktorých každá vyžaduje 100 iterácií. Pridanie ďalších iterácií pomáha znížiť vplyv zvýšenej rýchlosti procesora (čo by útočníkovi pomohlo rýchlejšie vyskúšať viac iterácií).

Mali by ste urobiť počet iterácií akonfigurovateľný limit, ktorý je uložený proti každému používateľovi. Takže uložíte heslo hash, počet solí a iterácií pre každého používateľa. To znamená, že v budúcnosti môžete zvýšiť počet iterácií, aby ste vzali do úvahy zvýšený hardvérový výkon.

Posielanie SHA-2 512 vo formáte obyčajného textu nie je bezpečné. Mali by ste ho odoslať v šifrovanom kanáli, napríklad SSL.

SHA-2 však nie je navrhnutý tak, aby bolalgoritmus hashovania hesla. Je určený na overenie správ a má byť efektívny. Zvážte použitie účelového algoritmu hashovania heslom. Jedným z príkladov je bcrypt, Je navrhnutý tak, aby bol výpočtovo zložitý a má zabudovanú soľ a iterácie.