Het versleutelen van wachtwoorden

stemmen
27

Wat is de snelste, maar toch veilige manier om wachtwoorden (PHP voorkeur) te versleutelen, en waarvoor ooit methode je ook kiest is het ook draagbaar?

Met andere woorden, als ik later migreren mijn website naar een andere server zal mijn wachtwoorden blijven werken?

De methode die ik gebruik nu zoals ik werd verteld is afhankelijk van de exacte versies van de bibliotheken op de server geïnstalleerd.

De vraag is gesteld op 03/08/2008 om 12:50
bron van user
In andere talen...                            


8 antwoorden

stemmen
29

Als u het kiezen van een encryptie methode voor uw login-systeem dan de snelheid is niet je vriend, Jeff had een heen-en-frow met Thomas Ptacek over wachtwoorden en de conclusie was dat je de langzaamste, meest veilige encryptie methode die u kunt veroorloven om te moeten gebruiken .

Van Thomas Ptacek's blog:
Snelheid is precies wat je niet wilt in een wachtwoord hash-functie.

Modern vergeten schema's worden aangevallen met incrementele wachtwoord crackers.

Incrementeel crackers niet precalculate alle mogelijke gekraakte wachtwoorden. Zij beschouwen elk wachtwoord hash afzonderlijk, en ze voeden hun woordenboek door het wachtwoord hash-functie op dezelfde manier waarop je PHP login pagina zou doen. Rainbow tafel crackers zoals Ophcrack gebruiken ruimte om wachtwoorden aan te vallen; incrementele crackers zoals John the Ripper, Crack en LC5 werk met de tijd: statistieken en berekenen.

Het wachtwoord aanval spel wordt gescoord in de tijd genomen om het wachtwoord X. scheur met rainbow tables, dat is afhankelijk van hoe groot uw tafel moet worden en hoe snel je kunt zoeken. Met incrementele crackers, de tijd is afhankelijk van hoe snel je het wachtwoord hash-functie run kan maken.

Hoe beter kunt u uw wachtwoord hash-functie te optimaliseren, hoe sneller je wachtwoord hash-functie krijgt, des te zwakker uw regeling. MD5 en SHA1, zelfs conventionele blokcijfers zoals DES, zijn ontworpen om snel te zijn. MD5, SHA1 en DES zijn zwak wachtwoord hashes. Op moderne CPU's, kan rauw crypto bouwstenen zoals DES en MD5 worden bitsliced, vectorized en geparallelliseerde wachtwoord zoekopdrachten razendsnel te maken. Game-over FPGA implementaties kost slechts honderden dollars.

antwoordde op 03/08/2008 om 13:48
bron van user

stemmen
14

Ik ben met Peter. Developer lijken niet om wachtwoorden te begrijpen. We hebben allemaal halen (en ik ben schuldig aan dit ook) MD5 of SHA1 omdat ze snel. Denken over het ( 'cuz iemand onlangs op gewezen naar mij) dat geen enkele zin heeft. We moeten kiezen van een hash-algoritme dat is stom traag. Ik bedoel, op de schaal van de dingen, zal een drukke plaats hash wachtwoorden wat? elke 1/2 minuut? Who cares als het duren 0,8 seconden vs 0,03 seconden server verstandig? Maar dat extra traagheid is enorm om alle soorten gemeenschappelijke brute-forcish aanvallen te voorkomen.

Vanuit mijn lezing, is bcrypt speciaal ontworpen voor veilig wachtwoord hashing. Het is gebaseerd op blowfish, en er zijn veel implementatie.

Voor PHP, check out PHPPass http://www.openwall.com/phpass/

Voor iedereen die het doen van .NET, check out BCrypt.NET http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

antwoordde op 03/08/2008 om 14:48
bron van user

stemmen
2

Ik ben niet per se op zoek naar de snelste, maar een mooi evenwicht, een aantal van de server die deze code wordt ontwikkeld voor zijn vrij traag, het script dat hash en het wachtwoord is het nemen van 5-6 seconden te lopen slaat, en ik heb deze beperkt tot de hashing (als ik comment de hash niet loopt, binnen 1-2 seconden).

Het hoeft niet tot de meest veilige zijn, ben ik niet codding voor een bank (op dit moment), maar ik zeker NIET de wachtwoorden als platte tekst op te slaan.

antwoordde op 05/08/2008 om 00:07
bron van user

stemmen
8

Hierbij moet worden opgemerkt dat u niet wilt versleutelen het wachtwoord dat u wilt hash het.

Gecodeerde wachtwoorden kunnen worden gedecodeerd, laten zien dat iemand het wachtwoord. Hashing is een one-way operatie zo origineel wachtwoord van de gebruiker is (cryptografisch) verdwenen.


Zoals voor welk algoritme u moet kiezen - gebruik maken van de huidige standaardprocedure één:

  • SHA-256

En als je het wachtwoord van de gebruiker hashen, moet u ook hash in sommige andere rommel mee. bijvoorbeeld:

  • wachtwoord: password1
  • zout: PasswordSaltDesignedForThisQuestion

Voeg de zout om het wachtwoord van de gebruiker:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
antwoordde op 17/09/2008 om 19:06
bron van user

stemmen
7

Wat je ook doet, niet schrijf uw eigen encryptie-algoritme. Door dit te doen zal bijna garanderen (tenzij je een cryptograaf bent) dat er een fout in het algoritme dat het triviale te kraken zal maken zal zijn.

antwoordde op 17/09/2008 om 19:16
bron van user

stemmen
2

Overweeg om te gebruiken bcrypthet wordt gebruikt in veel moderne frameworks zoals laravel.

antwoordde op 16/07/2016 om 07:47
bron van user

stemmen
0

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

password_hash () maakt een nieuw wachtwoord hash behulp van een sterke one-way hashing algoritme. password_hash () is compatibel met crypt (). Daarom, wachtwoord-hashes aangemaakt door crypt () kan worden gebruikt met password_hash ().

antwoordde op 18/05/2018 om 18:27
bron van user

stemmen
0

Gebruik deze functie bij het invoegen in de database Password_harsh ($ password, PASSWORD_DEFAULT); En bij het selecteren van de database die u het wachtwoord dat u invoegt met die in de database met de functie als vergelijken (password_verify ($ password, $ databasePassword)) {

}else{
echo "password not correct";
}

Dit zal hard het wachtwoord in een beveiligd formaat

antwoordde op 09/11/2019 om 13:05
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more