Vraag Hoe bewaar ik * goed *?


Een artikel dat ik hier in SO tegenkwam voorzien van links naar andere artikelen die op hun beurt links naar bevatten zelfs  meer  artikelen enz.

En uiteindelijk bleef ik volledig stumped - dus wat is het beste manier om wachtwoorden op te slaan in de database? Van wat ik samen kan maken moet je:

  • Gebruik een lang (ten minste 128 volledig willekeurige bits) zout, dat is opgeslagen in platte tekst naast het wachtwoord;
  • Gebruik verschillende iteraties van SHA-256 (of zelfs een hoger SHA-niveau) op het gezouten wachtwoord.

Maar ... hoe meer ik lees over cryptografie, hoe meer ik begrijp dat ik niet echt iets begrijp, en dat dingen waarvan ik dacht dat het jarenlang waar was, eigenlijk helemaal verkeerd zijn. Zijn er experts op dit gebied?

Toegevoegd: Het lijkt erop dat sommige mensen het punt missen. Ik herhaal de laatste link hierboven gegeven. Dat zou mijn zorgen moeten verhelderen.

https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2007/july/enough-with-the-rainbow-tables-what-you-need-to-know-about- beveiligd met een wachtwoord-regelingen /


18
2018-05-06 14:20


oorsprong


antwoorden:


Je hebt het goed. Slechts twee suggesties:

  1. Als SHA1 op een dag te zwak wordt en u iets anders wilt gebruiken, is het onmogelijk om de oude wachtwoorden ongedaan te maken en ze opnieuw te activeren met het nieuwe schema. Om deze reden raad ik aan bij elk wachtwoord een "versienummer" te voegen dat aangeeft welk schema u hebt gebruikt (zoutlengte, welke hash, hoe vaak). Als u op een dag van SHA moet overschakelen naar iets sterkers, kunt u wachtwoorden in nieuwe stijl maken terwijl u nog steeds oude stijlwachtwoorden in de database hebt en ze nog steeds uit elkaar houden. Het migreren van gebruikers naar het nieuwe schema zal eenvoudiger zijn.

  2. Wachtwoorden gaan nog steeds van gebruiker naar systeem zonder versleuteling. Kijk naar SRP als dat een probleem is. SRP is zo nieuw dat je een beetje paranoïde moet zijn over het implementeren ervan, maar tot nu toe ziet het er veelbelovend uit.

Bewerken: blijkt dat bcrypt mij heeft geslagen op idee nummer 1. De opgeslagen informatie is (kosten, zout, hash), waarbij de kosten zijn hoe vaak hashing is gedaan. Lijkt erop dat bcrypt iets goed heeft gedaan. Het aantal keren dat u hash verhoogt, kan zonder tussenkomst van de gebruiker worden uitgevoerd.


12
2018-05-06 15:10



In werkelijkheid hangt het af van waar de wachtwoorden voor zijn. Je moet het wachtwoord zorgvuldig bewaren, maar soms is er veel meer zorg nodig dan andere. Over het algemeen moeten alle wachtwoorden worden gehasht en moet elk wachtwoord een uniek zout bevatten.

Echt, zouten hoeven niet zo ingewikkeld te zijn, zelfs kleine zouten kunnen een echte nachtmerrie veroorzaken voor crackers die toegang proberen te krijgen tot het systeem. Ze zijn toegevoegd aan een wachtwoord om te voorkomen dat Rainbow-tabellen worden gebruikt om de wachtwoorden van meerdere accounts te hacken. Ik zou geen enkele letter van het alfabet aan een wachtwoord toevoegen en het een zout noemen, maar je hoeft het geen unieke gids te maken die ook ergens anders in de database is versleuteld.

Een ander ding met betrekking tot zouten. De sleutel tot het maken van een wachtwoord + zout werk bij hashen is de complexiteit van de combinatie van beide. Als je een wachtwoord van 12 tekens hebt en er een zout van 1 teken aan toevoegt, doet het zout niet veel, maar het kraken van het wachtwoord is nog steeds een monumentale prestatie. Het omgekeerde is ook waar.


2
2018-05-06 14:23



Gebruik:

  1. Gehaaste wachtwoordopslag
  2. Een 128+ bit zout op gebruikersniveau, willekeurig, geregenereerd (u maakt nieuwe zouten wanneer u nieuwe wachtwoordhashes maakt, u houdt niet constant hetzelfde zout voor een bepaalde gebruiker)
  3. Een sterke, computationeel dure hashing-methode
  4. Methodologie die enigszins afwijkt (hash-algoritme, hoeveel hashing-iteraties die u gebruikt, in welke volgorde de zouten worden samengevoegd, iets) van beide 'standaardimplementatiegidsen' zoals deze en van elke andere implementatie van wachtwoordopslag die u hebt geschreven

1
2018-05-06 14:32



Ik denk dat er geen extra iteratie op het wachtwoord nodig is, zorg er gewoon voor dat er een zout is en een complexe;) Persoonlijk gebruik ik SHA-1 gecombineerd met 2 zout-sleutelzinnen.


0
2018-05-06 14:23



De lengte van het zout maakt niet echt uit, zolang het maar uniek is voor een gebruiker. De reden voor een zout is dat een bepaalde gegenereerde poging om een ​​hash-match te maken alleen nuttig is voor een enkele rij van uw gebruikers-tabel in de database.


0
2018-05-06 14:23



Eenvoudig gezegd, gebruik een cryptografisch beveiligd hash-algoritme en wat zout voor de wachtwoorden, dat moet goed genoeg zijn voor 99,99% van alle use-cases. De zwakke link is de code die zowel het wachtwoord als de wachtwoordinvoer controleert.


0
2018-05-06 14:23