Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Digitale Signatur
Kryptographische Hashfunktion
Eine Kryptographische Hashfunktion ist ein Algorithmus, mit dem der man eine Menge länger Schlüssel in eine Menge kurzer Hashwerte umwandeln kann, so dass letztere möglichst eindeutig sind. Die kryptographische Hashfunktion muss dabei so beschaffen sein, dass sich aus den Hashwerten möglichst keine Rückschlüsse auf die Schlüssel ziehen lassen.
Die derzeit am häufigsten verwendet Hashfunktion ist SHA. Eine weitere sehr bekannte - aber veraltete und als unsicher eingestufte - Hashfunktion ist md5. Hier eine schöne Seite zum Ausprobieren verschiedener Hashfunktionen.
Anwendung: Speichern von Passwörtern als salted hash
Immer wieder kommt es zu erfolgreichen Hackerangriffen gegen Server großer Firmen, wie beispielsweise 2011, als Hacker Vollzugriff auf die Datenbank von Sony Pictures erlangten. Neben dem wirtschaftlichen Schaden durch Zugriff auf interne Firmendaten entsteht oft ein massiver Schaden für Millionen von Kunden, wenn es den Hackern gelingt, Zugriff auf deren Benuternamen, Mailadressen und Passwörter zu erlangen. Oft verwenden Nutzer für verschiedene Accounts nämlich dasselbe Passwort, so dass es Hackern gelingt, auf deren Daten bei ganz anderen Servern Zugriff zu erlangen.
Damit Hacker auch bei Vollzugriff auf einen Server keinen Zugriff auf Passwörter erlangen können, speichert man diese nicht im Klartext, sondern als salted hash. Das funktioniert folgendermaßen:
Aus den salted hash-Werten, die in der Datenbank gespeichert sind, lassen sich nur mit unverhältnismäßig hohem Aufwand wieder Klartextpasswörter errechnen. Daher sind die Passwörter der User selbst dann nicht gefährdet, wenn Hacker auf die Datenbank mit den salted hashes Zugriff erlangen.
Warum ist das salt nötig? Es würde doch reichen, die Hashes der Passwörter zu speichern?
Tipp: Recherchieren Sie zur Beantwortung dieser Frage, was "rainbow tables" sind.
Digitale Signatur
Zweck der Signatur ist es, nachzuweisen, dass ein Text sicher von einer bestimmten Person erstellt wurde. Der RSA-Algorithmus kann so abgewandelt werden, dass mit dem privaten Schlüssel verschlüsselt und mit dem öffentlichen Schlüssel entschlüsselt wird. Ein Absender generiert daher ein RSA-Schlüsselpaar und veröffentlicht den öffentlichen Schlüssel.
Einfache (nicht praktizierte) Variante zum Signieren einer Nachricht:
Der Absender könnte die Nachricht digital signieren, indem er sie mit seinem privaten Schlüssel verschlüsselt und den verschlüsselten Text mit zum Empfänger sendet. Der Empfänger entschlüsselt mithilfe des öffentlichen Schlüssels den verschlüsselten Text und vergleicht ihn mit der Nachricht. Falls beide gleich sind, weiß er, dass die Nachricht vom Sender stammt und unverfälscht ist.
Zweck der Signatur ist es, nachzuweisen, dass ein Text sicher von einer bestimmten Person erstellt wurde.
Der RSA-Algorithmus kann so abgewandelt werden, dass mit dem privaten Schlüssel verschlüsselt und mit dem öffentlichen Schlüssel entschlüsselt wird. Ein Absender könnte einen Text also digital signieren, indem er ihn mit seinem privaten Schlüssel verschlüsselt. Falls es dem Empfänger gelingt, den verschlüsselten Text mit dem öffentlichen Schlüssel des Senders zu entschlüsseln, hätte er einen Nachweis dafür, dass er vom Sender stammt. Dies wird in der Praxis nicht so gehandhabt, da
- man den Text als Klartext versenden möchte, der auch ohne Schlüssel lesbar ist und
- die Entschlüsselung mit dem RSA-Algorithmus sehr rechenintensiv ist.
Man geht daher wie folgt vor:
- a) Der Sender erzeugt mithilfe einer kryptographischen Hashfunktion ein hash des Textes.
- b) Der Sender verschlüsselt das hash mit seinem privaten Schlüssel und hängt es an den Text an.
- c) Der Empfänger entschlüsselt das übermittelte hash ( = hash1)
- d) Der Empfänger berechnet das hash des übermittelten Textes ( = hash2)
- e) Der Empfänger vergleicht hash1 und hash2. Stimmen sie überein, so weiß er, dass der Text vom Sender stammt.