Vra

Wat is die vinnigste, dog veilige manier om wagwoorde in te enkripteer (PHP verkies), en vir watter metode jy ook al kies, is dit draagbaar?

Met ander woorde, sal my wagwoorde aanhou werk as ek later my webwerf na 'n ander bediener migreer?

Die metode wat ek nou gebruik soos ek vertel is, hang af van die presiese weergawes van die biblioteke wat op die bediener geïnstalleer is.

Was dit nuttig?

Oplossing

As jy 'n enkripsiemetode vir jou aanmeldstelsel kies, dan is spoed nie jou vriend nie, Jeff het 'n heen-en-fraai met Thomas Ptacek oor wagwoorde en die afsluiting was dat jy die stadigste, veiligste enkripsiemetode moet gebruik wat jy kan bekostig.

Van Thomas Ptacek se blog:
Spoed is presies wat jy nie in 'n wagwoord-hash-funksie wil hê nie.

Moderne wagwoordskemas word aangeval met inkrementele wagwoordkrakers.

Inkrementele krakers bereken nie alle moontlike gekraakte wagwoorde vooraf nie.Hulle beskou elke wagwoord-hash individueel, en hulle voer hul woordeboek deur die wagwoord-hash-funksie op dieselfde manier as jou PHP-aanmeldbladsy.Reënboogtafelkrakers soos Ophcrack gebruik spasie om wagwoorde aan te val;inkrementele klappers soos John the Ripper, Crack en LC5 werk met tyd:statistieke en bereken.

Die wagwoordaanvalspeletjie word aangeteken in die tyd wat dit neem om wagwoord X te kraak.Met reënboogtafels hang daardie tyd af van hoe groot jou tafel moet wees en hoe vinnig jy dit kan deursoek.Met inkrementele krakers hang die tyd af van hoe vinnig jy die wagwoord-hash-funksie kan laat loop.

Hoe beter jy jou wagwoord-hash-funksie kan optimaliseer, hoe vinniger word jou wagwoord-hash-funksie, hoe swakker is jou skema.MD5 en SHA1, selfs konvensionele bloksyfers soos DES, is ontwerp om vinnig te wees.MD5, SHA1 en DES is swak wagwoord-hashes.Op moderne SVE's kan rou kripto-boublokke soos DES en MD5 in stukkies gesny, gevektoriseer en parallel gemaak word om wagwoordsoektogte blitsvinnig te maak.Game-over FPGA-implementerings kos slegs honderde dollars.

Ander wenke

Ek is saam met Peter.Dit lyk asof ontwikkelaar nie wagwoorde verstaan ​​nie.Ons kies almal (en ek is ook hieraan skuldig) MD5 of SHA1 omdat hulle vinnig is.Om daaraan te dink (want iemand het dit onlangs aan my uitgewys) maak nie sin nie.Ons behoort 'n hashing-algoritme te kies wat dom is stadig.Ek bedoel, op die skaal van dinge, 'n besige webwerf sal wagwoorde hash wat?elke 1/2 minuut?Wie gee om as dit 0,8 sekondes neem teenoor 0,03 sekondes bedienergewys?Maar daardie ekstra traagheid is groot om alle soorte algemene brute gewelddadige aanvalle te voorkom.

Uit my leeswerk is bcrypt spesifiek ontwerp vir veilige wagwoord-hashing.Dit is gebaseer op blowfish, en daar is baie implementering.

Vir PHP, kyk na PHPPass http://www.openwall.com/phpass/

Vir almal wat .NET doen, kyk na BCrypt.NET http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

Dit moet daarop gewys word dat jy nie wil nie enkripteer die wagwoord, wat jy wil hasj Dit.

Geënkripteerde wagwoorde kan gedekripteer word, sodat iemand die wagwoord kan sien.Hashing is 'n eenrigting-operasie sodat die gebruiker se oorspronklike wagwoord (kriptografies) weg is.


Wat betref watter algoritme jy moet kies - gebruik die tans aanvaarde standaard een:

  • SHA-256

En wanneer jy die gebruiker se wagwoord hash, maak seker dat jy ook 'n ander gemors daarmee inhash.bv.:

  • wagwoord: password1
  • sout: PasswordSaltDesignedForThisQuestion

Voeg die sout by die gebruiker se wagwoord:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");

Wat jy ook al doen, moenie jou eie enkripsie-algoritme skryf nie.Om dit te doen, sal amper waarborg (tensy jy 'n kriptograaf is) dat daar 'n fout in die algoritme sal wees wat dit onbenullig sal maak om te kraak.

Oorweeg om te gebruik bcrypt dit word in baie moderne raamwerke soos laravel gebruik.

Ek soek nie noodwendig die vinnigste nie, maar 'n goeie balans, sommige van die bedieners waarvoor hierdie kode ontwikkel word, is redelik stadig, die skrip wat die wagwoord hashes en stoor neem 5-6 sekondes om te loop, en ek het het dit vernou tot die hashing (as ek kommentaar lewer, loop dit binne 1-2 sekondes).

Dit hoef nie die veiligste te wees nie, ek koddig nie vir 'n bank nie (nou) maar ek SAL NIE stoor die wagwoorde as gewone teks.

password_hash ( string $password , int $algo [, array $options ] ).(PHP 5 >= 5.5.0, PHP 7)

password_hash() skep 'n nuwe wagwoordhash met behulp van 'n sterk eenrigting-hash-algoritme.password_hash() is versoenbaar met crypt().Daarom kan wagwoord-hashes geskep deur crypt() met password_hash() gebruik word.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top