A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Was ist Hashing?

Hashing transformiert Daten jeder Größe in eine alphanumerische Zeichenkette fester und vorbestimmter Länge. Eine Hash-Funktion ist irreversibel: Es ist nicht möglich, die ursprünglichen Eingangsdaten anhand des Ergebnisses der Hash-Funktion zu bestimmen. Dies macht Hashing ideal für die sichere Datenspeicherung. Hashing kann jede Art oder Menge von Daten umwandeln, wie den Titel eines Buches, den gesamten Text eines Buches oder die Illustrationsdatei für das Cover-Artwork. Jedes dieser Datenobjekte kann in Zeichenketten derselben festen Länge gehasht werden. Eine Hash-Funktion kann darauf abzielen, die Wahrscheinlichkeit der Einzigartigkeit der transformierten Daten zu maximieren.

Eingangsdaten werden oft als „Schlüssel“ bezeichnet, während eine Hash-Funktion die Schritte (der Algorithmus) bezeichnet, die auf den Schlüssel angewendet werden. Die Ergebnisse der Hash-Funktion werden verschieden bezeichnet: Hash-Werte, Hash-Codes oder einfach Hashes. Für die Zwecke dieses Artikels verwenden wir die Begriffe Eingangsdaten, Hash-Funktion und Hash-Wert. Hash-Werte werden für verschiedene Zwecke verwendet, einschließlich effizienter Datenbankverwaltung, Datenintegrität und Sicherheit.

Wofür wird Hashing verwendet?

Datenspeicherung und -abruf

Eine der ersten Anwendungen des Hashing war für effiziente Datenspeicherungs- und Abrufsysteme. Ein großer Datensatz kann zeitaufwendig zu durchsuchen sein. Die Durchführung einer Suche auf dem Hash-Wert eines Suchbegriffs anstatt des Eingangsbegriffs verkürzt die Suchantwortzeiten und verbessert somit die Benutzererfahrung. Nehmen wir das Beispiel einer Bibliothek Datenbank von Büchern, die alle Einträge in kleinere Gruppen anhand des Hash-Werts der Titel aufteilt. Wenn ein Benutzer nach einem Buchtitel sucht, wird der Hash-Wert des angeforderten Titels schnell auf die richtige Gruppe hinweisen. Dann wird eine schnelle Suche nach dem ursprünglichen exakten Titel innerhalb der kleineren Gruppe durchgeführt. Mit anderen Worten, die Zeit, die benötigt wird, um die Hash-Funktion auszuführen und die richtige Datenmenge zu identifizieren, zuzüglich der Zeit, die benötigt wird, um den Titel in der richtigen Untergruppe zu finden, ist immer noch geringer als die Zeit, die benötigt wird, um den Buchtitel im gesamten Datensatz zu finden.

Passwortsicherheit

Das Speichern des Hash-Wertes eines Passworts ist sicherer als das Speichern des tatsächlichen Passworts. Da kein tatsächliches Passwort gespeichert wird (verschlüsselt oder unverschlüsselt), ist das Konto der Person im Falle einer Datenpanne viel sicherer.

Datenintegrität

Der Vergleich zweier Dateien anhand ihrer Hash-Werte kann feststellen, ob die Dateien identisch sind. Das Ausführen einer Hash-Funktion auf zwei Dokumenten ist schneller als der Vergleich jedes einzelnen Zeichens in den Dokumenten. Wenn zwei Dateien gleich sein sollen, aber unterschiedlich sind, werden unterschiedliche Hash-Werte anzeigen, dass eine der Dateien geändert wurde. Dieser Test kann Änderungen und Aktualisierungen von Dateien anzeigen oder aufdecken, ob eine Datei durch Malware beschädigt wurde.

Der Abgleich von Hash-Werten von Dokumenten erfolgt beispielsweise bei der Nachrichtenauthentifizierung und Blockchain. Nachrichten-Authentifizierung, manchmal zusammen mit digitalen Signaturen, verwendet sowohl Hashing als auch Verschlüsselung. In dieser Situation wird Verschlüsselung verwendet, um den Nachrichteninhalt während der Übertragung zu schützen, und Hashing wird verwendet, um zu verifizieren, dass der Inhalt unterwegs nicht manipuliert wurde.

Blockchain verwendet Hashing, um unabhängig zu überprüfen, dass die Daten in der Blockchain nicht verändert wurden. Eine Blockchain basiert auf der Schichtung von Transaktionsdaten und zugehörigen Hash-Werten, wobei die Hash-Werte als Bestätigung dienen, dass die vorhergehenden Daten in der Kette nicht manipuliert wurden.

Wie funktioniert Hashing?

Eine Hash-Funktion verwendet verschiedene Operationen. Diese können arithmetisch sein, Umwandlungen oder Transformationen umfassen oder Verfahren sein, die die tatsächlichen Bits (Grundlagen der Computerdaten) der Eingabedatei manipulieren. Während die Eingangsdaten beliebiger Größe sein können, gibt eine bestimmte Hash-Funktion immer einen Hash-Wert derselben Größe zurück, oft zwischen 32 und 64 Zeichen, abhängig von der verwendeten Zeichenauswahl. Idealerweise läuft die Hash-Funktion schnell und führt zu einer gleichmäßigen Verteilung aller möglichen Hash-Werte.

Bei großen Eingabedaten (wie unser Beispiel des Hashings eines vollständigen Dokuments) kann es mehrere Durchläufe durch die Hash-Funktion benötigen, um zu einem endgültigen Hash-Wert zu gelangen, der die gesamten Eingabedaten repräsentiert. Die Hash-Funktion wird zuerst auf einem kleinen Block der Eingabedaten ausgeführt. Dieser resultierende vorläufige Hash-Wert wird dann mit einem weiteren kleinen Block der ursprünglichen Eingabedaten kombiniert und das Ergebnis wird durch die Hash-Funktion ausgeführt. Das Kombinieren und Ausführen wird fortgesetzt, bis alle ursprünglichen Eingabedaten verarbeitet sind.

Eine Hash-Funktion muss reproduzierbar und wiederholbar sein. Wenn sie die gleichen Eingabedaten erhält, muss eine Hash-Funktion jedes Mal denselben Hash-Wert zurückgeben. Dieses Kriterium betrifft nicht nur die durchgeführten Operationen im Rahmen der Hash-Funktion, sondern auch die Reihenfolge, in der die Daten verarbeitet werden. Wenn große Eingabedaten vor dem Hashing unterschiedlich in kleine Blöcke aufgeteilt würden, wären die resultierenden Hash-Werte unterschiedlich. Auf diese Weise könnten sehr ähnliche Eingabedaten sehr unterschiedliche Hash-Werte erzeugen—etwas, das als Avalanche-Effekt bekannt ist.

Eine Hash-Funktion ist irreversibel—man kann den ursprünglichen Eingabewert nicht direkt aus dem Hash-Wert ableiten. Dies macht das Speichern eines Hash-Werts eines Passworts weitaus sicherer als eine verschlüsselte Version, die von einem Hacker entschlüsselt werden kann. Obwohl das ursprüngliche Passwort nicht aus dem gespeicherten Hash-Wert bestimmt werden kann (weil eine Hash-Funktion irreversibel ist), kann das System die Anmeldung der Person bestätigen, indem es das eingereichte Passwort hasht und das Ergebnis mit dem gespeicherten Hash-Wert vergleicht. Eine Übereinstimmung zeigt an, dass das eingereichte Passwort dasselbe ist wie das Passwort, das den gespeicherten Hash-Wert erstellt hat.

Was sind Kollisionen beim Hashing?

Eine Regel von Hash-Funktionen ist, dass alle Hash-Werte dieselbe feste Länge haben müssen. Dies bedeutet, dass es eine maximale Anzahl von Hash-Werten gibt, die von einer bestimmten Hash-Funktion generiert werden können. Das Verwenden kürzerer fester Längen für Hash-Werte führt zu weniger möglichen Hash-Ergebnissen. Wenn die Anzahl der möglichen Hash-Wert-Ergebnisse groß genug ist, können Sie mit vernünftiger mathematischer Sicherheit (aber vielleicht nicht ganz garantiert) erwarten, dass jeder Eingabedaten in einen eindeutigen Hash-Wert umgewandelt wird.

Eine „Kollision“ tritt auf, wenn zwei verschiedene Eingaben durch eine Hash-Funktion laufen und denselben Hash-Wert zurückgeben. Einige Anwendungen von Hashing sind mit Kollisionen in Ordnung, wie zum Beispiel im Bibliotheksdatenbank-Beispiel—in diesem Fall wird Hashing verwendet, um eine Datenbank in kleinere Gruppen zu unterteilen und die Suchantwortzeiten zu verbessern. Das Hashing der Datenbank gruppiert die Daten nach Kollisionen.

Andere Anwendungen—wie das Speichern sicherer Versionen sensibler Informationen wie Passwörter—benötigen Hash-Funktionen, die so konzipiert sind, Kollisionen zu minimieren oder sogar zu eliminieren. Diese Hash-Funktionen haben längere feste Längen der Ergebnisse, wodurch mehr mögliche Hash-Wert-Ergebnisse erzeugt werden und die Chance auf Kollisionen verringert wird. Wenn die Hash-Funktion, die zum Hashen von Passwortwerten verwendet wird, nur eine kleine Anzahl möglicher Ergebnisse hätte, wären Kollisionen wahrscheinlicher. Dies bedeutet, dass die Wahrscheinlichkeit größer wäre, dass ein falsches Passwort einen Hash-Wert erzeugt, der mit dem gespeicherten Hash-Wert übereinstimmt.

Was ist das Salzen eines Hashs?

Das Salzen eines Hashs bezieht sich auf das Hinzufügen zusätzlicher Daten (sogenanntes „Salt“) zu den eigentlichen Eingabedaten, bevor die Hash-Funktion ausgeführt wird. Es gibt viele Möglichkeiten, Eingabedaten zu salzen—ein Beispiel besteht darin, eine Zeichenfolge zufälliger Zeichen an den Anfang der eigentlichen Eingabedaten zu setzen. Das Salzen reduziert Kollisionen, die aus identischen Daten resultieren, die aus verschiedenen Quellen stammen. Jede Datenquelle wird mit einem eigenen einzigartigen Salt versehen, das jederzeit verwendet werden kann, wenn ihre Eingabedaten durch die Hash-Funktion laufen.

Jede Art von Daten kann gesalzen werden, aber die häufigste Verwendung besteht darin, ein Passwort zu salzen, um eine zusätzliche Schicht von Komplexität und Sicherheit hinzuzufügen. Wenn zwei Personen zufällig dasselbe Passwort haben (zum Beispiel JSmith123), haben sie ohne Salzen denselben Hash-Wert. Wenn ein Hacker eines dieser Konten knackt, weiß er automatisch, dass jeder andere in der Datenbank mit demselben Hash-Wert auch ein Passwort von JSmith123 hat. Aber das Salzen jedes JSmith123 mit einem einzigartigen Salt garantiert, dass jeder Hash-Wert einzigartig ist, und ein geknacktes Passwort führt nicht zu mehreren geknackten Passwörtern.

Ist Hashing dasselbe wie Verschlüsselung?

Hashing und Verschlüsselung können ähnlich erscheinen—beide konvertieren Daten in einen unlesbaren Zustand und schützen Daten davor, auf eine Weise verwendet zu werden, die sie nicht verwendet werden sollten. Allerdings sind es unterschiedliche Prozesse, die für unterschiedliche Situationen verwendet werden. Der Hauptunterschied zwischen Hashing und Verschlüsselung besteht darin, dass Hashing irreversibel ist, während Verschlüsselung reversibel sein muss.

Verschlüsselung wird oft verwendet, um Daten sicher zu übertragen und zu speichern, die letztendlich wieder gelesen und verwendet werden. Dies wird oft als Wahrung der “Vertraulichkeit” der Daten bezeichnet. Häufige Orte, an denen verschlüsselte Daten zu finden sind, umfassen die Übertragung von E-Mails und sensible Daten, die in Datenbanken gespeichert sind.

Beim Hashing gibt es keine Absicht, die gehashten Daten jemals wieder zu lesen. Der Zweck eines gespeicherten Hash-Wertes besteht darin, als Testdaten zu fungieren, die mit anderen Hash-Werten abgeglichen werden. Wenn dieser Abgleich durchgeführt wird, um sicherzustellen, dass die Daten nicht manipuliert wurden, spricht man von der Wahrung der “Integrität” der Daten. Ein Hash-Wert hat wenig Wert an sich - sein Wert liegt in seiner Fähigkeit, bei der sicheren oder effizienten Handhabung und Überprüfung von Daten zu helfen.

Nachrichtenauthentifizierung und digitale Signaturen verwenden sowohl Hashing als auch Verschlüsselung. Die ursprüngliche Nachricht wird gehasht. Der Hash-Wert und die ursprüngliche Nachricht werden beide verschlüsselt und separat gesendet. Am Zielort wird der verschlüsselte Hash-Wert entschlüsselt und die empfangene Nachricht entschlüsselt und gehasht. Diese beiden Hash-Werte werden dann verglichen. Wenn sie übereinstimmen, gilt die Nachricht als unverändert. Eine digitale Signatur kann auch die Identität des Absenders verifizieren, indem sie erfordert und bestätigt, dass der Absender einen spezifischen Verschlüsselungsschlüssel verwendet hat.

Bereit für Brave, dem neuen Internet?

Brave wurde von einem Team aus datenschutz- und leistungsorientierten Vorreitern des Webs entwickelt. Helfen Sie uns dabei, gemeinsam das Internet zu reparieren.