Was ist eigentlich ein Hash?
Ein Hash oder ein Hashwert ist ein Datensatz aus einer festen Länge (16 Bit, 32 Bit, 64 Bit, etc.) und dient zur Verifizierung von Daten oder von Datenübertragungen. Damit ein Hashwert entstehen kann, benötigt man eine Hash-Funktion. Die Funktion wandelt Texte, Musik oder ganze Programme in einen Hashwert um. Egal wie groß ein Programm ist, der Hash bleibt exakt gleich lang! Sie werden meist in hexadezimaler Schreibweise angegeben, es werden die Zahlen 1, 2, 3, 4, 5, 6, 7, 8, 9 und die Buchstaben A, B, C, D, E und F verwendet. Im Laufe der Zeit gab es schon viele verschiedene Hash-Funktionen, das ist ein Katz-und-Maus Spiel. Die Black Hats (Vereinigungen mit kriminellen Zielen – Hacker) versuchen ständig die Funktionen zu knacken, um an die Daten dahinter zu gelangen, Entwickler oder die NSA entwerfen ständig neue Funktionen mit noch besseren Verschlüsselungen, um die Sicherheit der Daten zu gewährleisten. Eine ehemals gängige Art der Verschlüsselung war der Algorithmus Md5, doch dazu später mehr.
Hier ein Hash Generator für Dich zum Experimentieren!
Wie sieht ein Hash aus?
Hier ein Beispiel Hash, für diese Verschlüsselung haben wir den Algorithmus SHA-2 verwendet:
Hallo Welt
c1b90aac7b1721dd13fbb25db4c30fa3ea646198858eab650934eead
Ein weiteres Beispiel:
Hallo Welt!
a2e00c535b81de9560da38c256f0ff501d22e58ca4c996207b3be4ae
Vergleiche einmal die beiden verschlüsselten Texte. Obwohl nur ein „!“ hinzugekommen ist, sieht der komplette Hashwert anders aus. Jede Position jedes Zeichens hat sich verändert und es scheint, als sei es vollkommener Nonsens. Doch das Besondere ist: Diese Ergebnisse bleiben immer dieselben, egal wie oft ich „Hallo Welt“ verschlüsseln lasse, es wird jedes Mal die gleiche Zeichenfolge ausgegeben. Gleiche Daten führen also zum gleichen Hash.
Der Secure Hash Algorithmus (SHA)
Der SHA-Algorithmus wurde in seiner ersten Version im Jahre 1993 entwickelt. An der Entwicklung waren damals die National Security Agency (NSA) und das National Institute of Standards and Technology (NIST) beteiligt. Die erste Version, SHA-0, musste nach entdeckten Schwächen schnellstens verändert werden. Sodass im Jahr 1995 dann SHA-1 entstand. Dieser Algorithmus arbeitet mit einer Kompressionsfunktion und erzeugt 160 Bit lange Hash-Werte. Der SHA wurde im Laufe der Zeit stetig weiterentwickelt und an die stärkere Leistung handelsüblicher Computer angepasst. Im Jahr 2005 wurde der SHA-1 das erste Mal erfolgreich gebrochen, es konnten gefälschte Nachrichten mit identischen Hashwerten erzeugt werden. Als Reaktion darauf wurden SHA-2 und SHA-3 entwickelt. Diese beiden Algorithmen sind noch bis heute ein sicherer Standard in der Datenverschlüsselung.
Eigenschaften eines Hashs
Die erzeugten Hashwerte sind kollisionsresistent, bedeutet denselben Hash kann es nicht zweimal geben. Daher eignen sich Hashwerte so gut, um Daten zu verifizieren.
Eine Hash-Funktion ist eine Einweg-Funktion! Komplexe Daten können nicht aus dem Hash zurückgebildet werden (angenommen man erzeugt einen Hash aus einem ganzen Word-Dokument, dann kann man das Dokument nicht aus dem Hash erzeugen).
Ein guter Hash Algorithmus darf nicht zu schnell sein, denn dann ist er leicht zu entschlüsseln. Bei großen Datenmengen sind 1-2 Sekunden Verarbeitungsdauer gut.
Wie funktioniert die Verschlüsselung des Hashwertes?
Bestimmt hast Du Dich gefragt, wie es möglich ist solch lange Zeichenketten zu erzeugen. Auf den ersten Blick wirken die langen Hashwerte sehr kompliziert, doch wenn man einmal das Kernprinzip verstanden hat, wird alles viel einfacher. In jeder Hash-Funktion liegt eine Chiffrierung, diese wandelt die Eingabe in einen Hashwert um. Hier einmal an einem simplen Beispiel erklärt:
Zahlenfolge: 135879 = 1+3+5+8+7+9 = 33
Buchstabenfolge: Hallo Welt = 81121215 2351220 = 21 15
Hier handelt es sich um eine simple Chiffrierung mit der Bildung einer Quersumme! Bei “Hallo Welt” bekommt jeder Buchstabe seinen Platz im Alphabet als Nummer zugewiesen. Aus h wird 8, aus a wird 1, usw. Das ergibt die obigen beiden Strings (Zeichenketten). Auch von diesen bilden wir die Quersumme und summa summarum wurde aus “Hallo Welt” “21 15”. Im Grunde machen komplexe Hash-Funktionen genau das! Doch diese sind in der Lage ganze Dokumente und ganze Filme in einen Hashwert umzuwandeln. Hierfür spalten diese den Inhalt der Dateien in kleine Pakete aus Bits auf. Diese Pakete werden dann stapelweise verarbeitet, so lange bis alle Bits der Datei vollständig verarbeitet wurden. Nehmen wir mal an ein Paket besteht aus 512 Bits und das Dokument ist 5000 Bits groß. Die Funktion arbeitet nun so lange, bis alle 5000 Bits in Paketen verarbeitet wurden! Wie Dir auffällt bleiben zum Schluss Bits übrig. Das ist kein Problem, da der Algorithmus in der Lage ist, diese übrigen Leerstellen zu füllen. Dadurch bleibt der Hashwert ständig gleich lang. Während dieser Paket-Verarbeitung werden noch weitere Verschlüsselungsmechanismen angewandt, aber das wird an dieser Stelle zu komplex. Falls Du Dich dafür interessiert, können wir Dir den Youtube Kanal Computerphile empfehlen.
Drei Beispiele aus der Praxis
Identifizierung von Duplikaten: In einer Bulk-Verarbeitung von Assets lassen sich mit einem Hash Duplikate identifizieren. Dafür lässt Du Dir alle Hashwerte Deiner Assets ausgeben und kontrollierst im Nachgang, ob doppelte Hashs auftauchen. Die Dopplung steht für doppelte Dateien!
Verifizierung von Passworteingaben: Server speichern den Hashwert eines Passworts und vergleichen bei der erneuten Eingabe des Passworts die Hashwerte miteinander. Stimmen diese Werte überein, stimmt auch zwangsläufig die Passwörter überein, und schon erhältst Du Zugang.
Kontrolle von Datenübertragungen: Der Versand interner Dokumente kann mit Hashwerten kontrolliert werden. Sender und Empfänger erzeugen Hashwerte und schicken sich diese als Kontrolle zu. Dadurch kann im Nachgang kontrolliert werden, ob das interne Dokument während des Versandes manipuliert wurde.
Was ist Salting?
Der Begriff Salting kommt aus dem Kochen, genau wie ein Essen gesalzen wird, werden Passwörtern „gesalzen“. Ihnen wird also etwas hinzugefügt, um sie noch sicherer zu machen! Das vorhandene Passwort wird um eine zufällige Anzahl an Zeichen (Salt) ergänzt.
Aus dem Passwort „hallo123“ wird dann entweder „D2+sc#aPhallo123“ oder „hallo123D2+sc#aP“. Das Salt kann an beiden Enden des Passwortes ergänzt werden. Server vergeben jedem Nutzer einen individuellen Salt Wert und dieses neu entstandene Passwort wird dann in einen Hashwert umgewandelt. Damit hat man sich auf doppelte Weise abgesichert!
Das Risiko von (alten) Hash-Funktionen!
Schlechte Hash-Funktionen sind manipulierbar und sogar dechiffrierbar. Es lassen sich keine ganzen Textdokumente wiederherstellen, aber Passwörter wie „Hallo123“ sind in Sekunden decodiert. Du kannst das ganze gerne einmal selber ausprobieren.
Passwort: Hallo123
Hash: c10fedc1a97741855818849f936d2463
Verschlüsselt mit MD5 (Message-Digest Algorithm 5).
Gib in Google Md5 Hash entschlüsseln ein und aus dieser willkürlichen Zeichenfolge wird wieder der Anfangs Text. Der Algorithmus Md5 war jahrelang eine Standardverschlüsselung im Internet, mittlerweile wurde er von sichereren Algorithmen abgelöst und ersetzt. Das ist auch gut so! Wie Du siehst, ist dieser Algorithmus nicht mehr sicher, er wurde geknackt. Neuere Varianten der Verschlüsselung wie SHA-2 und SHA-3 gelten als sicher und werden auch in der Praxis eingesetzt.
Was kann denn schon passieren?!
Ein größeres Risiko von schlechten Hashs ist das manuelle Fälschen eines Hashs. Hat man einmal verstanden, wie die Funktion arbeitet, kann man alle beliebigen Hashwerte manuell erzeugen und das wird dann richtig gefährlich.
Du verschickst ein wichtiges Dokument (Geburtsurkunde) für einen Eintrag bei einem Amt. Die Geburtsurkunde hat einen gewissen Hash-Wert. Bei alten Hash-Algorithmen (MD-5 Algorithmus) ist es recht einfach möglich, die Datei zu verändern (neuen Namen, falsches Geburtsjahr, etc. einzutragen) und DANN MANUELL den vorherigen Hash Wert zu rekonstruieren. Dadurch denkt der Empfänger, das gefälschte Dokument ist das echte und von nun an lebst Du unter einem falschen Namen oder bist 10 Jahre jünger. Beängstigend oder doch eher verlockend?