Laden...

Kennwortsicherheit - Hashing von Kennwörtern

Erstellt von Xynratron vor 16 Jahren Letzter Beitrag vor 15 Jahren 8.826 Views
Information von herbivore vor 16 Jahren

Dies ist ein Thread, auf den aus der FAQ verwiesen wird. Bitte keine weitere Diskussion, sondern nur wichtige Ergänzungen und diese bitte knapp und präzise. Vielen Dank!

X
Xynratron Themenstarter:in
1.177 Beiträge seit 2006
vor 16 Jahren
Kennwortsicherheit - Hashing von Kennwörtern

Hallo zusammen,

Immer wieder stößt man auf die Frage, „Wie soll ich denn nun Kennwörter speichern“ – und diverse Tipps dazu. Nachdem das Deutsche Support-Forum von phpBB gehackt wurde habe ich mich auch endlich mal intensiver mit diesem Thema beschäftigt und bin hier auf einen sehr schönen Artikel dazu gestoßen, welchen ich etwas zusammenfassen möchte um eine für jeden einfach zu implementierende Lösung vorzustellen.

Im Grunde gibt es zwei große Bedrohungszenarien:

Jemand erhält Zugriff auf die Datenbank in welcher die Benutzer gespeichert sind
Die Lösung sollte jedem klar sein, die Kennwörter müssen verschlüsselt werden, damit unsere Datenbank nicht z.B. hier zu finden ist. Die Art der Verschlüsselung ist da schon kniffliger, hier herrscht die einhellige Meinung, dass ein Hash des Kennwortes reicht, bzw. auch zwingend verwendet werden sollte, da mit einer (umkehrbaren) Verschlüsselung das Klartext-Kennwort wieder zu errechnen wäre.
Gerne wird z.B. der viel zitierte MD5-Algorithmus verwendet, leider gibt es hierfür Tabellen welche die Kennwort-Hashes für Kennwörter bis 12 (!) Zeichen Länge bereits berechnet haben (Rainbow-Tables). Dann wird eben Salting vorgeschlagen (ein verlängern des Kennwortes ohne Benutzereingriff auf mehr Stellen) - hier kommen wir direkt zu

Der Code, welchen wir zum verschlüsseln verwenden ist bekannt.

Wenn jemand die Art des Hashings kennt, kann er im mindesten durch einen Brut-Force-Angriff versuchen die Kennwörter zu erraten. Hier mag man einwenden, dass dies Rechenzeit benötigt und Informationen nur dann wertvoll sind, solange sie aktuell sind. Und genau dass ist die Lösung: Der Angreifer muss soviel Rechenzeit verbrauchen, dass er schlichtweg in der ihm zur Verfügung stehenden Zeit nicht zu einem zufrieden stellenden Ergebnis kommt. Dies ist leider mit den „gebräuchlichen“ Hash-Algorithmen nicht möglich, da diese auf Geschwindigkeit optimiert wurden. Dies bedeutet eben im Umkehrschluss auch MD5/DES/SHA ist ungeeignet für Kennwörter.

Aber genau aus diesem Grund gibt es Algorithmen welche auf benötigte Rechenleistung optimiert wurden z.B. „bcrypt“ von Neils Provos und David Mazieres welcher für OpenBSD 1999(!!) eingeführt wurde. Dieser ist eine Blowfish-Implementation welche angenehm viel Rechenzeit benötigt – und dies auch noch „einstellbar“. Wenn in 4 Jahren ein gebräuchlicher PC bcrypt schnell berechnen kann, so ändert man den eigenen Code einfach auf eine höhere Iterationsrate und ist wieder sicherer.

Eine schöne Implementation für C# ist hier zu finden. Es ist in der Tat sehr wenig Code, welcher einfach einzubinden und unsere Applikationen deutlich sicherer machen kann. Das erstellen eines Kennwort-Hashes der Stärke 12 dauert ca. 1 Sekunde, hochgerechnet auf die maximal verfügbare Stärke 31 sind das ca. 6 Tage pro Hash. Na, dann mal viel Spaß beim Brut-Force.

Um es noch einmal zu betonen, dies hier ist eine Zusammenfassung, damit jemand der etwas sucht auch hier im Forum fündig wird. All meine Informationen sind aus den verlinkten Quellen. Für Kritik und Anregungen bin ich natürlich trotzdem offen.

Quellen:

heise.de
Thomas Ptacek
Derek Slager

🙂

Xynratron

Edit: Dead-Links ersetzt

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Xynratron,

vielen Dank dafür. Damit dein Beitrag nicht so schnell untergeht, habe ich ihn mal aus der FAQ verlinkt.

herbivore

X
Xynratron Themenstarter:in
1.177 Beiträge seit 2006
vor 16 Jahren

Hallo Herbivore,

Hauptsache es spricht sich langsam rum^^

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

888 Beiträge seit 2007
vor 15 Jahren

Danke, sowas hab ich gesucht!

S
401 Beiträge seit 2008
vor 15 Jahren

Hallo Xynratron,

danke für diesen Artikel 👍

... Wenn in 4 Jahren ein gebräuchlicher PC bcrypt schnell berechnen kann, so ändert man ...

Wie immer gibt's einen Haken 😉 Leider 🙁

3.971 Beiträge seit 2006
vor 15 Jahren

Es gibt auf der Welt viele Gruppen von Wissenschaftlern und Mathematikern, die bestehende Verschlüsselungsalgorithmen, Hashing-Verfahren sowie Verfahren zum Key-Austausch knacken. Beispiel Wiki: Geburtstagsangriff. Es werden dabei Algorithmen entwickelt, die den Rechenaufwand von Brute-Force um einen Faktor von 1000 und mehr mindert. So sind beispielsweise nicht nur performanterer Rechner für das knacken schuld, sondern auch hochqualifizierte und vorallem hochbezahlte Mathematiker. Doch mittels einfachen zusätzlichen Möglichkeiten kann man das ganze wieder erschwären (Salted Hash beispielsweise), aber NIE verhindern.

Weiteres Beispiel, Asymetrische Verschlüsselung (2 unterschiedliche Keys) basiert auf der Annahme, das es keinen Algorithmus gibt, der Primzahlen von der Größe von 2 ^ 1024 Bit in wenigen Millisekunden Faktorisieren kann. Kleine Zahlen lernt man bereits in der Grundschule zu Faktorisieren. Wenn morgen allerdings ein neuer Algorithmus entwickelt wird, der die Zeit zum Faktorisieren um den Faktor 5.000 bis 10.000 verringert, gelten die meisten Schlüssel im Netz bereits wieder als unsicher. Möglichkeiten zum Gegenwirken: Die Größe des Keys erhöhen (auf zum Beispiel 2 ^ 8192) oder aber neuer Verschlüsselungsalgorithmus

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...