ice-breaker
Commodore
- Registriert
- Nov. 2008
- Beiträge
- 4.132
wundert mich, denn ein Salt pro User ist der Best-Practise.Daaron schrieb:Ich hab bisher immer nur Lösungen mit einem einzelnen Salt gesehen, der dafür dann eben wenigstens 10-12 Zeichen lang is.
Hast du nur einen Salt für alle reicht ein Bruteforce-Angriff bei dem du jedes mögliche PW hashst und mit denen aus der Datenbank vergleichst, bingo! Es ist nur ein Bruteforce-Durchlauf für alle Nutzer nötig. Während bei einem Salt pro Nutzer, du für jeden Nutzer einen eigenen Bruteforce-Durchlauf machen musst, das sind himmelweite Unterschiede in der benötigten Rechenleistung.
Und wieoft wird nur die Datenbank kompromitiert? I.R. findet doch ein Einbrauch in den Server statt und somit hat der Angreifer gleich Zugriff auch alles.Daaron schrieb:Übrigens hat deine Variante mit userbasiertem Salt, der in der DB gespeichert wird, einen RIESIGEN Haken!
[...] Man hasht die PWs in der Datenbank doch nur, dass falls mal jemand in die DB eindringen kann, er keine praktikable Möglichkeit hat, an die Klartext-PWs zu kommen. Wenn nicht gehasht ist, stehts gleich in Klartext. Wenn nur gehasht wurde, ohne Salt, kann man den Hash per RT "problemlos" in Klartext umwandeln. Wenn du jetzt für jeden User einen eigenen Salt anlegen willst, dann lagerst du diesen Salt in der DB. Du lagerst also Hash und Salt in einer gemeinsamen, kompromittierten Lagerstätte. Schlecht...
Einfach nur ein globaler Salt der für alle Nutzer gleich ist hat schon das Problem, dass man an den gehashten Passwörtern erkennen kann, dass diese identisch sind. Ein Hash sollte aber keinerlei Zuordnung mehr ermöglichen.
Viel sinniger ist es nach deiner Aufassung [1] Salz und Pfeffer zu verwenden!Daaron schrieb:Viel sinniger ist da EIN Salt, der in einer Config-Datei außerhalb der DB gelagert wird. In der DB sollte keine Möglichkeit stehen, wie man z.B. per FTP auf diese Datei (und andere) zugreifen kann.
- Salz: ein einmaliger Salt für jeden Nutzer
- Pfeffer: ein Salt der für alle gilt
Code:
hash := hmac_sha1(salt_global, hmac_sha1(salt_user, userpw))
[1] Das kann man auch so betreiben, habe ich nichts dagegen, ist aber nur "security through obscurity". denn sobald der Salt bekannt ist, ist das Herausfinden der Klartext-Passwörter wieder effizient möglich. Moderne Grafiken schaffen 2 Milliarden MD5 Hashes pro Sekunde. Umso besser der Hashing-Algorithmus umso geringer die Durchsatzrate, das Problem bleibt aber. Es ist nur ein Bruteforce-Durchlauf für die gesamte Nutzerdatenbank nötig.
Zuletzt bearbeitet: