![]() |
Frage zu Password-Hashes (SHA512)
Hallo!
Bezieht sich eigentlich auf PHP, ist aber von allgemeiner Bedeutung, darum frag ich mal hier. Da man ja MD5 nicht mehr verwenden soll, hashe ich Passwörter jetzt mit SHA512. Der String 'foo' plus Salt ergibt dann bei 5000 Runden z.B. folgenden Hash:
Code:
Der Modus 6 (SHA512) und die 5000 Runden sind hardcoded.
$6$rounds=5000$7IfaSuwiHawucad7$CiVrIv5dy15xaeiInz/IN2jRx82pqYU4yKy.lUtBeExzwsSRGPy8fjQiSN8lsjUjcIm08GzxSjJ.mj2z4qrN7/
Die Frage die ich mir stelle ist: Wenn der Modus 6 und die 5000 Runden ohnehin bekannt sind, sollte ich dann nicht lieber nur den eigentlichen Hash, also alles nach dem dritten "$" in der Datenbank speichern und später wieder hinzufügen beim Auswerten? Sonst gibt man doch im Fall eines Datenklaus unnötig Hinweise auf die Verschlüsselungsmethode. Oder mach ich jetzt einen Denkfehler? Grüße Cody |
AW: Frage zu Password-Hashes (SHA512)
Irgendwo muss es ja bekannt sein und wenn es nicht in der Datenbank steht (was wurde benutzt) dann hast du ein Problem, wenn du das (was wird benutzt) änderst. Welches habe ich benutzt um diesen Hash zu erzeugen.
Das aktuelle (was wird benutzt) ist auch hinterlegt (im Skript, einer Config, ...) ... und damit auch potenziell gefährdet. Ob du es nun in der Datenbank speicherst und damit auch wechseln kannst oder nicht bleibt vom Risiko also gleich. |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
|
AW: Frage zu Password-Hashes (SHA512)
Zitat:
![]() |
AW: Frage zu Password-Hashes (SHA512)
Was ist rounds=5000 ?
Heißt es, daß das Passwort 5000 Mal hintereinander eingerechnet wurde? Bei 512 Bit, reichen knapp 80 Buchstaben (mit effektiven 6 Bit pro Buchstabe) doch schon aus, um einen sicheren eindeutigen Wert zu bekommen, denn mehr Informationen passen eh nicht rein. :gruebel: |
AW: Frage zu Password-Hashes (SHA512)
Erst einmal: Das Salt sollte für jeden Hash unterschiedlich sein. Damit vermeidet man, dass ein Angreifer bei einer Wörterbuch-Attacke jedes Wort nur einmal Hashen muss und dann gegen die Datenbank vergleichen kann.
@himi: Die Runden erhöhen den Zeitaufwand des Angreifers. Außerdem solltest du keine normale Hashfunktion verwenden, sondern eine Key-Derivation-Funktion wie bcrypt oder scrypt. Gründe findest du durch googeln genug :wink: Wenn du dann mit einem zusätzlichem geheimen Salt oder einer zusätzlichen Verschlüsselung besser schlafen kannst, dann will ich dich nicht abhalten. |
AW: Frage zu Password-Hashes (SHA512)
Ich denke, es ist in Ordnung, diese Informationen dort im Klartext stehen zu haben. In der Kryptographie geht man ja eigentlich immer davon aus, dass der Angreifer den Algorithmus kennt.
Was ich allerdings dennoch nicht schlecht finde, ist zwei verschiedene Salts zu kombinieren: Einen individuellen per Datensatz, der in der Datenbank gespeichert wird, und einen globalen, der irgendwo im Quelltext steht. Dann muss der Angreifer beide Systeme kompromittieren (oder mehr rechnen). |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Zitat:
Zitat:
|
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Delphi-Quellcode:
machst du einfach
hash(salt+password)
Delphi-Quellcode:
.
hash(salt1+salt2+password)
|
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Code:
Bei deiner Methode stünden wieder beide Salts im Klartext in der SQL-Datenbank, was du ja grade nicht wolltest. Denn der Hash muss den (Zufalls-)Salt enthalten, sonst wüsste das System beim späteren Vergleich ja nicht, welcher das war. Wenn einer der beiden Salts geheim sein soll, müsste man ihn vorher schon mal zum Hashen verwenden und das Ergebnis nochmal mit dem "öffentlichen" Salt.
//Verschlüsseln bzw. Hashen
$hash = crypt($plaintext_to_hash, $config_str_with_salt); /Gegenprüfung if ($hash == crypt($plaintext_to_check, $hash) {...} |
AW: Frage zu Password-Hashes (SHA512)
PHP-Quellcode:
//Verschlüsseln bzw. Hashen
$salt = random_irgendwas; $hash = crypt($globalsalt . $plaintext_to_hash, concatsalt($config_str, $salt)); /Gegenprüfung if ($hash == crypt($globalsalt . $plaintext_to_check, $hash) {...} |
AW: Frage zu Password-Hashes (SHA512)
Sag ich doch... Nacheinander :-D
|
AW: Frage zu Password-Hashes (SHA512)
Wenn man sich eingehender mit der Materie befasst merkt man erstmal, wie leicht es ist da wirklich dumme Fehler einzubauen. Ich habe aber auch den Eindruck, es gibt wenig verständliche Anleitungen oder Tutorials dazu. Nicht konkret was PHP betrifft sondern ganz allgemein.
|
AW: Frage zu Password-Hashes (SHA512)
Ich finde die Artikel von Troy Hunt zu dem Thema Passwort/Authentifizierung ganz informativ:
|
AW: Frage zu Password-Hashes (SHA512)
Zitat:
|
AW: Frage zu Password-Hashes (SHA512)
In diesem aktuelle Thread wird das auch aufgeführt:
![]() |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
![]() Abgesehen von Passwort-Hashing gibt es mittlerweile praktisch erfolgreiche Kollisionsattacken auf md5. Da das in Zukunft nicht besser wird, sollte man gleich einen heutigen Standard benutzen (SHA-2 oder SHA-3). |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Einfach allgemeinen Aussagen Glauben zu schenken halte ich für dumm. |
AW: Frage zu Password-Hashes (SHA512)
Erster Pre-Image-Angriff 2004:
![]() Erster Kollisionsangriff 2008: ![]() Aber das ist ja erst 7 Jahre her ;) |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Zitat:
|
AW: Frage zu Password-Hashes (SHA512)
MD5 selbst ist ja nicht bröckelig. Bröckelig wird's erst, wenn du die Haustür und zugleich die Badezimmertür offenlässt und so jedermann deiner Frau beim Duschen zuschauen kann. ;-)
Was ich damit sagen möchte: Wenn du jemandem den Zugang zu deinen Passwort-Hashes erlaubst, bist du selbst schuld, wenn sie geknackt werden. Die Sollbruchstelle ist in diesem Fall ja wohl eher die offene Haustür in Kombination mit der offenen Badezimmertür ... Übersetzt bedeutet das in diesem Fall, dass du deiner Frau nicht mehr erlaubst, sich zu duschen, nur weil du unfähig bist, die Türen richtig abzuschließen. |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Zitat:
Im Ernst, das sichere Verwalten von Passwörtern ist die einzige Sicherheit, die du garantieren kannst. Die große Mehrheit aller (und damit auch deiner) Benutzer verwenden Passwörter mehrfach und das Mindeste was du tun kannst, ist dieses Sicherheits-Netz aufzuspannen. |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Erst heisst es "Das passiert doch nicht" oder "Ist doch nur für Oma" und nach dem GAU hört man dann "Ich dachte ..." oder auch sehr beliebt "Aber das haben wir immer so gemacht" :roll: Standard-Reaktion meinerseits ist dann nur noch "Ja, Ja" - damit ist alles gesagt, jedes weitere Wort ist überflüssig |
AW: Frage zu Password-Hashes (SHA512)
Nun, gut. Aber abgesehen von Passwort-Hashes: Um die Integrität einer Datei zu testen, kann ich wohl noch MD5File verwenden, oder? Oder ist das auch zu unsicher?
|
AW: Frage zu Password-Hashes (SHA512)
Zitat:
![]() |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
Gehts nur schnell mal um ein inkrementelles Backup Programm oder sowas, sehe ich absolut kein Problem bei der Verwendung von MD5 oder sogar CRC32. Wobei selbst bei der Integrität kann man nochmal unterscheiden. Ist es fatal (für eine Serverseite, 3. Clienten, etc), wenn die Datei fehlerhaft/manipuliert ist, oder geht es nur um einen lokalen Check als Komfortfunktion für den User. Achso: PHP >= 5.5.0 unterstüzt ![]() ![]() |
AW: Frage zu Password-Hashes (SHA512)
Zitat:
![]() Zitat:
|
AW: Frage zu Password-Hashes (SHA512)
Vielen Dank für euren wertvollen Input!
Welche optimale Alternative würdet ihr für ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz