Henryk Plötz: SSL im Eigenbau ?

Beitrag lesen

Moin,

Ich kann die PAsswörter nur mit JavaScript verschlüsseln, da sie vor Form-Übergabe verschlüsselt werden sollen.

Dann nimm' HTTP Digest Authentication.

Wenn ich sie erst a,m Ziel verschlüssle, wurden sie unverschlöüsselt übergeben, was genau ich ja nich will.

Zum einen ist MD5 keine Verschlüsselung sondern eine Hashfunktion. Zum anderen trägt sie bei dieser Verwendung genau _nichts_ zur Sicherheit bei. Ein Angreifer der ein Klartextpasswort mitlauschen könnte, kann auch den Hash mitlauschen und anschließend wie das Kennwort benutzen. Du verlangst ja nirgendwo die Kenntnis des Kennworts, nur des Hashs.

Wenn du soetwas unbedingt machen musst, solltest du wenigstens(!) mit PHP eine zufällige Zahl (ein Timestamp tut es eventuell auch) als Challenge in das JavaScript reinschreiben und diese mit dem Kennwort mithashen. An den Server werden dann der Hash als Response und eine Kopie der Challenge übermittelt. Der überprüft dann, ob die Challenge neu genug ist[1] und verweigert gegebenenfalls den Zugang. Falls ein Angreifer die Response mitschneiden sollte, kann er sie nur solange benutzen wie die Challenge gültig ist. Der Gültigkeitszeitraum sollte also nicht zu lang sein. (5 Minuten müssten dicke ausreichen!) Man-in-the-middle-Angriffe lassen sich aber so immer noch nicht verhindern.

So ähnlich funktioniert auch HTTP Digest Authentication. Das hat allerdings noch Vorteile: Wenn eine Challenge ungültig wird sagt der Server das dem Browser und der wiederholt die Anfrage mit einer aktuellen Challenge ohne dass der Benutzer eingreifen müsste. Ausserdem werden noch mehr Infos mitgehasht, so dass Replay-Attacken sofort unmöglich werden können (ohne auf den Ablauf der Challenge zu warten) und Man-in-the-middle-Attacken weitgehend sinnlos werden, da eine Response nur genau eine Aktion authentifiziert. Und: Es ist im Browser eingebaut, ein offener Standard und daher in seinen Sicherheitsproblemen sicherlich besser untersucht.

[1] Bei Zufallszahlen müsstest du also alle ausgegebenen Zahlen - oder zumindest die von der letzten Zeit - und den Ausgabezeitpunkt auf dem Server zwischenspeichern.

--
Henryk Plötz
Grüße aus Berlin
~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~