Thema: Delphi Frage zum DEC

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Frage zum DEC

  Alt 20. Jun 2008, 20:23
So ist das schon richtig, du hast alle wichtigen Punkte beachtet. (wahrscheinlich um einiges sicherer als so manches professionelle Produkt )

Zu deiner Frage mit dem Zurückrechnen:

Ja, man kann es zurückrechnen sogar mit fast 100% Sicherheit. Aber das ist die Betrachtungsweise eine Mathematikers, infinitimal. Wenn es unendlich viele Passwörter gibt mit unendlicher Größe in Bits und wir diese Passwörter mit einem 128 Bit Salt und 128 Bit Hashfunktion mappen dann gibt es zu jedem der 2^128 möglichen Hashoutput exakt 2^unendlich viele Kollisionen, die Wahrscheinlichkeit das man das zurückrechnen kann beträgt also 2^128 und das man ein gültiges Passwort findet beträgt Unendlich/2^128 = Unendlich = 1.

Nun kommt der Ingenieur und fügt neue Randbedingungen hinzu, nämlich Zeit, Rechenaufwand und Technologie. Alles davon ist aus unserer Sicht im Vergleich zu Unendlich enorm begrenzt. Und das ändert alles. Denn nun wird das System praktisch unknackbar, bzw. es sollte so konstruiert sein das mit heutiger (und noch in 20 Jahren) Technologie und Wissenstand es nicht zurückrechenbar ist.

Drittes stellt sich die Frage was man unter Zurückrechnen versteht. Wenn man 2^256 verschiedene und gleichverteilte Passwörter betrachtet die mit einer 128 Bit Hashfunktion gemappt werden dann muß es 2^256 / 2^128 kollidierende Passwörter geben. Um nun den Schlüssel im Schloß umdrehen zu können benötigen wir also garnicht das korrekte Passwort sondern nur eines der 2^256 / 2^128 möglichen die den gleichen Hash erzeugen. Eine Aussage darüber zu treffen das man nun das exakte Passwort aus den sich 2^128 überschneidenden Passwörtern zu einem Hashdigest gefunden hat ist aber nur rein statistisch möglich. Man findet also zu einen Hashdigest mit 128 Bit Größe aus einem Set von 2^256 Passwörtern mit Sicherheit 2^128 korrekte Paswörter kann aber auf Grund des Mappings der Hashfunktion niemals exakt sagen welches tatsächlich als Input diente. Und das ist der Sinn wenn man mit einer randomisierten KDF ein Passwort umwandelt in einen Sessionkey. Denn so garantiert man das defakto es garnicht möglich ist nur alleine mit Hilfe der Hashfunktion und Zufallssalt das exakt benutzte Passwort zurückberechnen zu können. Man schützt also das Passwort des Benutzers selbst wenn man die Verschlüsselung und somit den Sessionkey irgendwie geknackt hat.

Es ist also eher eine Frage wie man "Zurückrechnen" definiert. Möchte man nur eines der möglichen und funktioniernden Passwörter berechnen dann ist dies aus Sicht eines Mathematriker zu 100% möglich, er denkt infinitimal, er hat Computer die alles in 0-Zeit berechnen können. Für einen Ingenieur sind diese Resourcen stark begrenzt und somit ist selbst das Zurückrechnen praktisch undurchführbar, einfach weil 2^128 eben eine enorm große Anzahl ist.
Möchte man das real benutzte Passwort finden und es gehört in die Menge der zb. 256Bit großen zufälligen Passwörter, dann ist es beweisbar unmöglich aus einem 128 Bit Hashdigest exakt dieses Passwort zurückzuberechnen, einfach weil ein 128 Bit Hashdigest um 128 Bit zu kurz geraten ist um ein 256 Bit langes Passwort exakt zu beschreiben, es fehlen also nötige Informationen.

Einfaches Beispiel ist modulare Arithmetik. Nehmen wir mal unsere Analoguhren. Sie gehen von 0 Uhr bis 12 Uhr und beginnen nun von vorne. Wenn wir nun 3 Uhr haben dann können wir keine Aussage darüber treffen wieviele Tage seit dem letzten 3 Uhr das wir beobachtet haben vergangen sind. Klar ? Ein Hashdigest mit 128 Bit ist also unser Ziffernblatt mit 2^128 Unterteilungen. Unser Passwort ist 2^128 Tage * 2^128 Uhrenuntereilungen. Da der Hashdigest nur die unterseten 2^128 Zeiteiheiten angibt fehlen uns die 2^128 oberen (Tagesanzahlen) um das 256 Bit Passwort exakt beziffern zu können. Ergo: man kann aus einem 128 Bit Hash nicht das exakt benutze 256 Bit Passwort zurückberechnen, dazu fehlen einfach 128 Bit anwichtigen Informationen.

Ohne Salt braucht man aber auch garnicht das exakte 256Bit Passwort zurückrechnen, eines der 2^128 möglichen Passwörter die den gleichen Hash erzeugen reicht uns schon aus. (was aber mit heutigem Wissensstand und Resourcen auch nicht praktisch geht). Man hätte also ein funktionierendes vergleichbares Passwort zum Original. Wenn der Benutzer nun sein Originalpasswort mit dem gleichen Verfahren für verschiedene Sachen mehrfach benutzt hat dann können wir das alles sofort knacken obwohl wir nicht das Originalpasswort haben. Nun benutzen wir aber noch einen 128 Bit Zufallssalt. Auch wenn dieser für alle Beteiligten lesbar ist so wird dieser Salt in der KDF dafür sorgen das jedesmal wenn wir die KDF mit dem Originalpasswort und einen anderen Salt benutzen der Aufwand des Knackens dramatisch inkrementiert wird. Denn nun haben wir quasi einen Modularen Ring innerhalb eines Modularen Ringes. Zu jedem der 2^128 unterschieldichen Salts erzeugen wir eine modulare Menge von 2^128 verschiedenen Hashs für nur eine Originalpasswort! Das bedeutet das wenn wir eine der vielen unterschieldichen Verschlüsselungen geknackt haben, also ein funktionierendes aber nicht das originale Passwort gefunden haben, das dieses Pseudopasswort nur mit dem einen benutzten Salt korrekt funktioneren wird. Mit einer Wahrscheinlichkeit von 1/2^128 haben wir das originale Passwor gefunden das mit jedem anderen der 2^128 möglichen Salts immer korrekt funktionieren wird. Das bedeutet das wenn der Angreifer nun eine weitere Nachricht von uns knacken möchte der wieder von vorne beginnen muß da sein Pseudopasswort eben mit diesem zweiten Zufallssalt nicht mehr funktioniert, mit einer Wahrscheinlichkeit von 2^128/(2^128-1) ca. 1 ist dies der Fall. Der Zufallssalt stellt also nun sicher das ein Angreifer mit enorm hoher Wahrscheinlichkeit seinen Ersten Erfolg nicht dazu benutzen kann um weitere Nachrichten von uns direkt entschlüsseln zu können.

Gruß Hagen
  Mit Zitat antworten Zitat