Verschlüsselung in Webapplikationen (MD5)

Pass­wör­ter gehö­ren nicht in die Hän­de von Drit­ten, auch nicht in die von Admi­nis­tra­to­ren. Daher wur­den für die Spei­che­rung von Pass­wör­tern soge­nann­te Fall­tür­me­cha­nis­men (trap­door mecha­nisms) ent­wi­ckelt:

Es ist zwar mög­lich, ein Pass­wort zu ver­schlüs­seln, nicht jedoch es wie­der zu ent­schlüs­seln.

Der Ver­schlüs­se­lungs­al­go­rith­mus funk­tio­niert also genau wie eine Fall­tür nur in eine Rich­tung. Das mag auf den ers­ten Blick sinn­los erschei­nen, ist aber eigent­lich sehr pfif­fig. Neh­men wir als Bei­spiel den weit ver­brei­te­ten MD5-Algo­rith­mus. Mit die­sem sichert fast jede Web­an­wen­dung in PHP ihre Pass­wör­ter ab. Dabei wird aus

123456=> MD5-Ver­schlüs­se­ler => e10adc3949ba59abbe56e057f20f883e

Die­se lan­ge Zei­chen­ket­te sieht der Admin. Er weiß aber des­we­gen das Pass­wort im Klar­text noch nicht, da der Weg

e10adc3949ba59abbe56e057f20f883e => MD5-Ent­schlüs­se­ler (Gibt es nicht) => Pass­wort

prin­zip­be­dingt ver­sperrt ist. Die dabei ent­ste­hen­de, lan­ge Zei­chen­ket­te wird „Hash” genannt.

Wenn man sich nun an einer Web­an­wen­dung (Mood­le, Joom­la, egroup­ware …) anmel­det, macht die Web­an­wen­dung fol­gen­des:

Benut­zer gibt Pass­wort im Klar­text ein => MD5-Ver­schlüss­ler => Hash1

Die­ser Hash1 wird nun mit dem Hash — nen­nen wir ihn Hash2 — ver­gli­chen, der in der Daten­bank für den User gespei­chert ist (er könn­te etwa bei der Regis­trie­rung erzeugt wor­den sein).

Stim­men bei­den Hash­es über­ein, hat der User das kor­rek­te Pass­wort ein­ge­ge­ben, weil der Ver­schlüs­se­lungs­me­cha­nis­mus ja immer gleich ist. Stim­men die Hash­es nicht über­ein, muss der Benut­zer ein fal­sches Pass­wort ein­ge­ge­ben haben.

Soweit so gut. Das ist auch die Erklä­rung dafür, dass einen — so man sein Pass­wort ver­ges­sen hat — stets ein neu­es Pass­wort zuge­wie­sen wird, denn der Admin kann das alte Pass­wort ja nicht wis­sen, son­dern ledig­lich ein neu­es set­zen.

Eigent­lich hört sich das Gan­ze recht sicher an — ist es bloß nicht, denn es gibt Angrif­fe gegen die­ses Ver­fah­ren, die aber alle­samt vor­aus­set­zen, dass der Angrei­fer an den Hash kommt.

Es gibt im Inter­net soge­nann­te Regen­bo­gen­ta­bel­len. Eine Regen­bo­gen zeigt eine gro­ßes Spek­trum des sicht­ba­ren Lichts — eine Regen­bo­gen­ta­bel­le ent­hält eine Viel­zahl an Pass­wor­ten mit den zuge­hö­ri­gen Hash­es. Man füt­tert die Tabel­le nun mit einem Hash und schaut nach, ob es einen pas­sen­den Pass­wort­ein­trag dazu gibt. Die Wahr­schein­lich­keit dafür ist umso grö­ßer, je kür­zer und ein­fa­cher mein Pass­wort ist, da z.B. Betrei­ber sol­cher Tabel­len ein­fach kom­plet­te Wör­ter­bü­cher MD5-ver­schlüs­seln oder aber auch Zah­len- und Zif­fern­fol­gen. Die exis­tie­ren­den Regen­bo­gen­ta­bel­len sind beein­dru­ckend groß. Unser Hash für „123456” wird z.B. immer gefun­den.

Es gibt eine wei­te­re Gefahr: Die Kol­li­sio­nen. Es ist näm­lich mög­lich, dass zwei oder mehr ver­schie­de­ne Pass­wör­ter zum glei­chen Hash füh­ren, dadurch kann durch Zufall auch ein eigent­lich siche­res Pass­wort mit Hil­fe einer Regen­bo­gen­ta­bel­le auf­ge­deckt wer­den. Die­se Gefahr ist rela­tiv gerimg, da jeder Ver­schlüs­se­lungs­al­go­rith­mus dar­auf­hin opti­miert ist, mög­lichst wenig Kol­li­sio­nen zu erzeu­gen, aber denk­bar bleibt die­se Mög­lich­keit den­noch. Vie­le erfolg­rei­che Knack­ver­fah­ren beru­hen auf der Aus­nut­zung sol­cher Kol­li­sio­nen.

Aber es gibt auch eine Abhil­fe: Den Salt („das Salz”). Ein Salt ist eine zufäl­li­ge Zei­chen­ket­te, die neben dem eigent­li­chen Ver­schlüs­se­lungs­ver­fah­ren benutzt wird, um einen mög­lichst zufäl­li­gen Hash zu erzeu­gen. Der Salt ist an den Hash gehef­tet, damit das vom Nut­zer ein­ge­ge­be­ne Pass­wort auch auf glei­che Wei­se ver­schlüs­selt und mit dem Daten­bank­hash ver­gli­chen wer­den kann — das ist sicher­heits­tech­nisch kein Pro­blem. Mit einem zufäl­li­gen Salt kann der Hash für ein belie­bi­ges Pass­wort ganz unter­sched­lich aus­se­hen, sodass die heu­ti­gen Regen­bo­gen­ta­bel­len dage­gen rela­tiv macht­los sind.

Sal­ted MD5 (SMD5) wird noch nicht so häu­fig ein­ge­setzt. Das hat sowohl mit ihrer Ver­brei­tung als auch mit der oft unbe­frie­di­gen­den Platt­form­un­ab­hän­gig­keit zu tun.

Sicher” sind MD5-ver­schlüs­sel­te Pass­wör­ter ohne Salt nur so lan­ge, wie kein Drit­ter an die Daten­bank gelangt…

 

Facebook Like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.