Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Kennwortsicherheit - Hashing von Kennwörtern

Moderationshinweis von herbivore (30.03.2008 - 16:36:39):

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!

Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1184

Themenstarter:

Kennwortsicherheit - Hashing von Kennwörtern

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Xynratron am .
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Xynratron,

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

herbivore
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1184

Themenstarter:

beantworten | zitieren | melden

Hallo Herbivore,

Hauptsache es spricht sich langsam rum^^

:-)

Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
Joetempes
myCSharp.de - Member

Avatar #avatar-3309.jpg


Dabei seit:
Beiträge: 914
Herkunft: Germany

beantworten | zitieren | melden

Danke, sowas hab ich gesucht!
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

beantworten | zitieren | melden

Hallo Xynratron,

danke für diesen Artikel

Zitat
... Wenn in 4 Jahren ein gebräuchlicher PC bcrypt schnell berechnen kann, so ändert man ...
Wie immer gibt's einen Haken Leider
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 4055
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers