Kryptografische Hash -Funktion

Sichern Sie Hash -Algorithmen | |
---|---|
Konzepte | |
Hash Funktionen · Sha · DSA | |
Hauptstandards | |
Sha-0 · SHA-1 · SHA-2 · Sha-3 | |
A Kryptografische Hash -Funktion (CHF) ist eine mathematische Algorithmus das Karten Daten einer willkürlichen Größe (oft als "Nachricht" bezeichnet) zu a Bit -Array einer festen Größe (die "Hashwert"," Hash "oder" Nachrichten Digest "). Es ist a Einweg-Funktiondas heißt, eine Funktion, für die es praktisch nicht realisierbar ist, die Berechnung umzukehren oder umzukehren.[1] Im Idealfall ist der einzige Weg, eine Nachricht zu finden, die einen bestimmten Hash erzeugt Brute-Force-Suche mögliche Eingaben, um festzustellen, ob sie eine Übereinstimmung erzeugen oder a verwenden Regenbogentisch von passenden Hashes. Kryptografische Hash -Funktionen sind ein grundlegendes Werkzeug der modernen Kryptographie.
Eine kryptografische Hash -Funktion muss sein deterministisch, was bedeutet, dass dieselbe Nachricht immer zum gleichen Hash führt. Idealerweise sollte es auch die folgenden Eigenschaften haben:
- Es ist schnell, den Hash -Wert für eine bestimmte Nachricht zu berechnen
- Es ist nicht realisierbar, eine Nachricht zu generieren, die einen bestimmten Hash -Wert ergibt (d. H. Um den Prozess umzukehren, der den angegebenen Hash -Wert generierte)
- Es ist nicht realisierbar, zwei verschiedene Nachrichten mit dem gleichen Hash -Wert zu finden
- Eine kleine Änderung einer Nachricht sollte den Hash -Wert so ausgiebig ändern, dass ein neuer Hash -Wert mit dem alten Hash -Wert nicht korreliert erscheint (WertLawineneffekt)[2]
Kryptografische Hash -Funktionen haben viele Informationssicherheit Anwendungen, insbesondere in digitale Signaturen, Nachrichtenauthentifizierungscodes (MACS) und andere Formen von Authentifizierung. Sie können auch als gewöhnlich verwendet werden Hash Funktionen, um Daten in zu indexieren Hash -Tische, zum Fingerabdruck, um doppelte Daten zu erkennen oder Dateien eindeutig zu identifizieren, und als Überprüfungen Um versehentliche Datenbeschäftigung zu erkennen. In der Tat werden in Informationssicherheitskontexten kryptografische Hash-Werte manchmal genannt ((Digital) Fingerabdrücke, Überprüfungen, oder nur Hash -WerteAuch wenn all diese Begriffe für allgemeinere Funktionen mit ziemlich unterschiedlichen Eigenschaften und Zwecken stehen.[3]
Eigenschaften
Die meisten kryptografischen Hash -Funktionen sind so konzipiert, dass sie a Saite von jeder Länge als Eingang und erzeugen einen Hash-Wert mit fester Länge.
Eine kryptografische Hash -Funktion muss in der Lage sein, allen bekannten standzuhalten Arten von kryptanalytischen Angriffen. In der theoretischen Kryptographie wurde das Sicherheitsniveau einer kryptografischen Hash -Funktion unter Verwendung der folgenden Eigenschaften definiert:
- Widerstand vor dem Immobilien
- Angesichts eines Hash -Wertes hEs sollte schwierig sein, eine Nachricht zu finden m so dass h = Hash (m). Dieses Konzept bezieht sich auf das von a Einweg-Funktion. Funktionen, denen diese Eigenschaft fehlt, sind anfällig für Vorbereitungsangriffe.
- Zweiter Widerstand vor dem Immaterial
- Bei einem Eingang m1Es sollte schwierig sein, eine andere Eingabe zu finden m2 so dass Hash (m1) = Hash (m2). Diese Eigenschaft wird manchmal als als bezeichnet Schwacher Kollisionswiderstand. Funktionen, denen diese Eigenschaft fehlt, sind anfällig für Angriffe aus zweiter Versorgung.
- Kollisionswiderstand
- Es sollte schwierig sein, zwei verschiedene Nachrichten zu finden m1 und m2 so dass Hash (m1) = Hash (m2). Ein solches Paar wird als kryptografisch bezeichnet Hash -Kollision. Diese Eigenschaft wird manchmal als als bezeichnet starker Kollisionsbeständigkeit. Es erfordert einen Hash-Wert mindestens doppelt so lange wie der für den Widerstand vor dem Imfragen erforderlich. Andernfalls können Kollisionen von a gefunden werden Geburtstagsangriff.[4]
Kollisionsresistenz impliziert den zweiten Widerstand vor dem Immateien, bedeutet jedoch keinen Widerstand vor dem Immateriell.[5] Die schwächere Annahme wird in der theoretischen Kryptographie immer bevorzugt, aber in der Praxis wird jedoch eine Hash-Funktion, die nur zweites vorbauliches resistent ist, als unsicher angesehen und daher nicht für reale Anwendungen empfohlen.
Informell bedeuten diese Eigenschaften, dass a böswilliger Gegner Die Eingabedaten können nicht ersetzen oder ändern, ohne ihre Verdauung zu ändern. Wenn also zwei Zeichenfolgen die gleiche Verdauung haben, kann man sehr zuversichtlich sein, dass sie identisch sind. Der zweite Widerstand vor dem Immobilien verhindert, dass ein Angreifer ein Dokument mit demselben Hash wie ein Dokument erstellt, den der Angreifer nicht kontrollieren kann. Der Kollisionswiderstand verhindert, dass ein Angreifer zwei unterschiedliche Dokumente mit demselben Hash erstellt.
Eine Funktion, die diese Kriterien erfüllt, haben möglicherweise immer noch unerwünschte Eigenschaften. Derzeit sind beliebte kryptografische Hash -Funktionen anfällig für Länge-Erweiterung Anschläge: gegeben Hash (m) und len (m) aber nicht m, durch Auswahl eines geeigneten m′ Ein Angreifer kann berechnen Hash (m ∥ m′), wo ∥ bezeichnet Verkettung.[6] Diese Eigenschaft kann verwendet werden, um naive Authentifizierungsschemata basierend auf Hash -Funktionen zu brechen. Das HMAC Die Bauarbeiten arbeiten um diese Probleme.
In der Praxis reicht Kollisionsbeständigkeit für viele praktische Verwendungen nicht aus. Zusätzlich zum Kollisionswiderstand sollte es für einen Gegner unmöglich sein, zwei Nachrichten mit wesentlich ähnlichen Verdauungen zu finden. oder um nützliche Informationen über die Daten zu schließen, nur angesichts ihrer Verdauung. Insbesondere sollte sich eine Hash -Funktion so weit wie möglich verhalten wie a Zufällige Funktion (oft als a genannt zufälliges Orakel in Sicherheitsergebnissen) während dennoch deterministisch und effizient berechnet werden. Dies schließt Funktionen wie die aus Swifft Funktion, die sich als kollisionsresistent erwiesen werden kann, unter der Annahme, dass bestimmte Probleme bei idealen Gitter rechnerisch schwierig sind, aber als lineare Funktion diese zusätzlichen Eigenschaften nicht erfüllt.[7]
Prüfsummenalgorithmen wie z. CRC32 und andere zyklische Redundanzprüfungen, sind so konzipiert, dass sie viel schwächere Anforderungen erfüllen und im Allgemeinen als kryptografische Hash -Funktionen ungeeignet sind. Zum Beispiel wurde ein CRC zur Integrität der Nachrichten in der verwendet Wep Verschlüsselungsstandard, aber ein Angriff wurde leicht entdeckt, was die Linearität der Prüfsumme ausnutzte.
Schwierigkeitsgrad
In der kryptografischen Praxis bedeutet "schwierig" im Allgemeinen "mit ziemlicher Sicherheit über die Reichweite eines Gegners, der verhindert werden muss, das System so lange zu brechen, solange die Sicherheit des Systems als wichtig erachtet wird. Die Bedeutung des Begriffs hängt daher etwas von der Anwendung ab, da der Aufwand, den ein bösartiger Agent in die Aufgabe einfügt, normalerweise proportional zu seinem erwarteten Gewinn ist. Da sich die erforderlichen Anstrengungen jedoch normalerweise mit der Verdauungslänge vervielfachen, kann selbst ein tausendfacher Vorteil bei der Verarbeitungsleistung neutralisiert werden, indem letzteres ein Dutzend Bits hinzugefügt wird.
Für Nachrichten, die beispielsweise aus einem begrenzten Satz von Nachrichten ausgewählt wurden Passwörter oder andere Kurznachrichten kann es möglich sein, einen Hash zu invertieren, indem alle möglichen Nachrichten im Satz ausprobiert werden. Da kryptografische Hash -Funktionen normalerweise so konzipiert sind, dass sie schnell berechnet werden, speziell Schlüsselableitungen Es wurden größere Rechenressourcen entwickelt, die solche machen Brute-Force-Angriffe schwieriger.
In einigen Theoretische Analysen "schwierig" hat eine spezifische mathematische Bedeutung, wie "nicht lösbar in asymptotisch Polynomzeit". Solche Interpretationen von Schwierigkeit sind wichtig für das Studium von nachweislich sichere kryptografische Hash -Funktionen Aber haben normalerweise keine starke Verbindung zur praktischen Sicherheit. Zum Beispiel eine Exponentialzeit Der Algorithmus kann manchmal immer noch schnell genug sein, um einen praktikablen Angriff zu tätigen. Umgekehrt ein Polynom-Zeit-Algorithmus (z. B. einen, der erfordert n20 Schritte für n-Digit -Schlüssel) können zu langsam für jeden praktischen Gebrauch sein.
Illustration
Ein Beispiel für die mögliche Verwendung eines kryptografischen Hashs ist wie folgt: Alice stellt ein hartes Mathematikproblem auf Bob und behauptet, dass sie es gelöst hat. Bob würde es gerne selbst ausprobieren, möchte aber noch sicher sein, dass Alice nicht blufft. Daher schreibt Alice ihre Lösung auf, berechnet seinen Hash und sagt Bob, den Hash -Wert (während die Lösung geheim bleibt). Dann, als Bob einige Tage später selbst die Lösung erfasst, kann Alice beweisen, dass sie die Lösung früher hatte, indem sie sie enthüllte und Bob Hash hat und überprüft, dass sie dem Hash -Wert übereinstimmt, der ihm zuvor gegeben wurde. (Dies ist ein Beispiel für ein einfaches Verpflichtungsschema; In der Praxis werden Alice und Bob oft Computerprogramme sein, und das Geheimnis wäre etwas weniger leicht gefälscht als eine behauptete Puzzle -Lösung.)
Anwendungen
Überprüfen Sie die Integrität von Nachrichten und Dateien
Eine wichtige Anwendung sicherer Hashes ist die Überprüfung von Nachrichtenintegrität. Vergleich von Nachrichtenverdauungen (Hash -Verdauung über die Nachricht), die zuvor berechnet wurde, und nach der Danach kann die Übertragung bestimmen, ob Änderungen an der Nachricht vorgenommen wurden oder Datei.
MD5, SHA-1, oder SHA-2 Hash Digests werden manchmal auf Websites oder Foren veröffentlicht, um die Überprüfung der Integrität für heruntergeladene Dateien zu ermöglichen.[8] einschließlich Dateien, die abgerufen werden Datenaustausch wie zum Beispiel Spiegelung. Diese Praxis legt a fest Vertrauenskette Solange die Hashes auf einer vertrauenswürdigen Site veröffentlicht werden - normalerweise auf der ursprünglichen Website - authentifiziert von Https. Die Verwendung eines kryptografischen Hashs und einer Vertrauenskette erkennt böswillige Änderungen an der Datei. Nicht kryptografisch Fehlerdetektierende Codes wie zum Beispiel zyklische Redundanzprüfungen nur verhindern gegen Nicht-malerisch Änderungen der Datei seit einer Absicht Parodie kann leicht hergestellt werden, um das zu haben Colliding -Code Wert.
Erzeugung und Überprüfung der Signatur
Fast alles Digitale Unterschrift Schemata erfordern, dass ein kryptografischer Hash über die Nachricht berechnet wird. Auf diese Weise kann die Signaturberechnung an der relativ kleinen, statisch großen Hash -Verdauung durchgeführt werden. Die Nachricht wird als authentisch angesehen, wenn die Signaturüberprüfung angesichts der Signatur und der neu berechnten Hash -Verdauung über die Nachricht erfolgreich ist. Daher wird die Eigenschaft der Nachrichtenintegrität des kryptografischen Hashs verwendet, um sichere und effiziente digitale Signaturschemata zu erstellen.
Kennwortprüfung
Die Passwortüberprüfung hängt üblicherweise auf kryptografischen Hashes ab. Speichern aller Benutzerkennwörter als Klartext Kann zu einer massiven Sicherheitsverletzung führen, wenn die Kennwortdatei beeinträchtigt wird. Eine Möglichkeit, diese Gefahr zu verringern, besteht darin, nur die Hash -Verdauung jedes Passworts zu speichern. Um einen Benutzer zu authentifizieren, ist das vom Benutzer präsentierte Kennwort gehasht und mit dem gespeicherten Hash verglichen. Eine Methode zur Wiedereinstellung von Kennwortreset ist erforderlich, wenn das Kennworthashing durchgeführt wird. Originalkennwörter können nicht aus dem gespeicherten Hash -Wert neu berechnet werden.
Standard -kryptografische Hash -Funktionen sind so konzipiert, dass sie schnell berechnet werden, und es ist daher möglich, gepflegte Passwörter mit hohen Raten zu versuchen. Verbreitet Grafikverarbeitungseinheiten Kann Milliarden möglicher Passwörter pro Sekunde ausprobieren. Passwort -Hash -Funktionen, die ausgeführt werden Schlüsselstrecke - wie zum Beispiel Pbkdf2, Scrypt oder Argon2 - Verwenden Sie üblich Brute-Force-Angriffe auf gespeichertem Passwort Hash Digests. Ein Passwort-Hash erfordert die Verwendung eines großen zufälligen, nicht geheimen geheimen Gehalts Salz Wert, der mit dem Passwort -Hash gespeichert werden kann. Das Salz hat die Ausgabe des Kennworthashs randomisiert, was es einem Gegner unmöglich macht, Tabellen mit Passwörtern zu speichern und vorberechnet Hash -Werte, mit denen der Passwort -Hash -Digest verglichen werden kann.
Die Ausgabe einer Kennwort -Hash -Funktion kann auch als kryptografischer Schlüssel verwendet werden. Passwort-Hashes werden daher auch als passwortbasiertes bezeichnet Schlüsselableitungen (Pbkdfs).
Arbeitsproode
Ein Arbeitsproof-System (oder Protokoll oder Funktion) ist eine wirtschaftliche Maßnahme, die sich abschrecken kann Denial-of-Service-Angriffe und andere Dienstmissbrauchs wie Spam in einem Netzwerk, indem sie einige Arbeiten aus dem Serviceantragsteller verlangen, was normalerweise die Verarbeitungszeit durch einen Computer bedeutet. Ein wichtiges Merkmal dieser Schemata ist ihre Asymmetrie: Die Arbeit muss auf der Antragstellerseite mäßig hart (aber machbar) sein, aber leicht nach dem Dienstanbieter zu überprüfen. Ein beliebtes System - verwendet in Bitcoin -Bergbau und Hashcash -verwendet partielle Hash-Inversionen, um zu beweisen, dass die Arbeit durchgeführt wurde, um eine Bergbaubelohnung in Bitcoin freizuschalten, und als Token für einen guten Willen, um eine E-Mail in Hashcash zu senden. Der Absender muss eine Nachricht finden, deren Hash -Wert mit einer Anzahl von Nullbits beginnt. Die durchschnittliche Arbeit, die der Absender ausführen muss, um eine gültige Nachricht zu finden, ist exponentiell in der Anzahl der im Hash -Wert erforderlichen Nullbits, während der Empfänger die Gültigkeit der Nachricht durch Ausführen einer einzelnen Hash -Funktion überprüfen kann. Zum Beispiel wird in Hashcash ein Absender gebeten, einen Kopfball zu generieren, dessen 160-Bit-SHA-1-Hash-Wert die ersten 20 Bit als Nullen hat. Der Absender muss im Durchschnitt versuchen 219 Zeiten, um einen gültigen Kopfball zu finden.
Datei- oder Datenkennung
Ein Nachrichtendigest kann auch als Mittel dienen, um eine Datei zuverlässig zu identifizieren. mehrere Quellcodeverwaltung Systeme, einschließlich Git, Quecksilber und Monotonbenutze die Sha1sum von verschiedenen Arten von Inhalten (Dateiinhalt, Verzeichnisbäume, Ankunftsinformationen usw.), um sie einzigartig zu identifizieren. Hashes werden verwendet, um Dateien auf zu identifizieren Peer-To-Peer Datenaustausch Netzwerke. Zum Beispiel in einem ed2k link, ein MD4-Variante Hash wird mit der Dateigröße kombiniert, die ausreichende Informationen zum Auffinden von Dateiquellen, zum Herunterladen der Datei und zur Überprüfung ihrer Inhalte bereitstellt. Magnetverbindungen sind ein anderes Beispiel. Solche Datei -Hashes sind oft der oberste Hash von a Hash -Liste oder ein Hashbaum Dies ermöglicht zusätzliche Vorteile.
Eine der Hauptanwendungen von a Hash-Funktion ist, die schnelle Anschauung von Daten in a zu ermöglichen Hash-tabelle. Kryptografische Hash -Funktionen sind auch für diese Anwendung gut, um Hash -Funktionen einer bestimmten Art zu sein.
Im Vergleich zu Standard -Hash -Funktionen sind kryptografische Hash -Funktionen jedoch tendenziell viel teurer. Aus diesem Grund werden sie tendenziell in Kontexten verwendet, in denen Benutzer sich vor der Möglichkeit einer Fälschung (der Erstellung von Daten mit der gleichen Verdauung wie die erwarteten Daten) durch potenziell böswillige Teilnehmer schützen müssen.
Hash -Funktionen basieren auf Blockchiffern
Es gibt verschiedene Methoden zur Verwendung a Cipher Block eine kryptografische Hash -Funktion aufzubauen, insbesondere a Einweg-Komprimierungsfunktion.
Die Methoden ähneln dem Block -Verschlüsselungsmodi des Blocks normalerweise zur Verschlüsselung verwendet. Viele bekannte Hash-Funktionen, einschließlich MD4, MD5, SHA-1 und SHA-2, werden aus blockkippherähnlichen Komponenten erstellt, die für den Zweck ausgelegt sind, mit Feedback, um sicherzustellen, dass die resultierende Funktion nicht invertierbar ist. Sha-3 Die Finalisten umfassten Funktionen mit blockkippherähnlichen Komponenten (z. B.,,, Strang, Blake) Obwohl die Funktion schließlich ausgewählt wurde, Keccakwurde auf einem gebaut Kryptografischer Schwamm stattdessen.
Eine Standard -Block -Chiffre, wie z. AES kann anstelle dieser benutzerdefinierten Blockveränderungen verwendet werden; Das könnte nützlich sein, wenn eine Eingebettetes System muss sowohl Verschlüsselung als auch Hashing mit minimaler Codegröße oder Hardwarebereich implementieren. Dieser Ansatz kann jedoch Kosten für Effizienz und Sicherheit haben. Die Chiffren in Hash -Funktionen sind für Hashing gebaut: Sie verwenden große Schlüssel und Blöcke, können den Schlüssel effizient jeden Block ändern und für Widerstand gegen Widerstand entworfen und überprüft wurden Angriffe verwandte Tasten. Allgemeine Chiffren haben in der Regel unterschiedliche Designziele. Insbesondere hat AES Schlüssel- und Blockgrößen, die es nicht trivial machen, lange Hash -Werte zu generieren. Die AES -Verschlüsselung wird weniger effizient, wenn der Schlüssel jeden Block ändert. Angriffe mit verwandter Taste machen es möglicherweise weniger sicher für die Verwendung in einer Hash-Funktion als für die Verschlüsselung.
Hash -Funktionsdesign
Merkle -Damgård -Konstruktion

Eine Hash-Funktion muss in der Lage sein, eine Meldung einer beliebigen Länge in eine Ausgabe mit fester Länge zu verarbeiten. Dies kann erreicht werden, indem die Eingabe in eine Reihe von Blöcken gleich großer Größe aufgeteilt und mit a nacheinander gearbeitet wird Einweg-Komprimierungsfunktion. Die Komprimierungsfunktion kann entweder speziell für Hashing ausgelegt oder aus einer Blockverkleidung gebaut werden. Eine mit der Merkle -Damgård -Konstruktion erstellte Hash -Funktion ist ebenso resistent gegen Kollisionen wie seine Komprimierungsfunktion; Jede Kollision für die vollständige Hash -Funktion kann auf eine Kollision in der Komprimierungsfunktion zurückgeführt werden.
Der letzte verarbeitete Block sollte auch eindeutig sein Länge gepolstert; Dies ist entscheidend für die Sicherheit dieser Konstruktion. Diese Konstruktion heißt die Merkle -Damgård -Konstruktion. Die häufigsten klassischen Hash -Funktionen, einschließlich SHA-1 und MD5, nehmen Sie diese Form an.
Breites Rohr gegen schmales Rohr
Eine einfache Anwendung der Merkle -Damgård -Konstruktion, wobei die Größe des Hash -Ausgangs der internen Zustandsgröße (zwischen jedem Komprimierungsschritt) entspricht, führt zu a Schmalpipe Hash -Design. Dieses Design verursacht viele inhärente Mängel, einschließlich Länge-Erweiterung, Multicollisionen,[9] Lange Nachrichtenangriffe,[10] Angriffe erzeugen und pastieren und können auch nicht parallelisiert werden. Infolgedessen werden moderne Hash -Funktionen aufgebaut Breitrohr Konstruktionen mit einer größeren internen Zustandsgröße - die sich von Optimierungen der Merkle -Damgård -Konstruktion reichen[9] zu Neukonstruktionen wie die Schwammkonstruktion und Haifa -Konstruktion.[11] Keiner der Teilnehmer in der NIST Hash -Funktionswettbewerb Verwenden Sie eine klassische Merkle -Damgård -Konstruktion.[12]
In der Zwischenzeit besiegt das Abschneiden der Ausgabe eines längeren Hashs, wie in SHA-512/256, auch viele dieser Angriffe.[13]
Verwendung beim Aufbau anderer kryptografischer Primitive
Hash -Funktionen können verwendet werden, um andere zu bauen Kryptografische Primitive. Damit diese anderen Primitiven kryptografisch sicher sind, muss darauf geachtet werden, sie richtig zu bauen.
Nachrichtenauthentifizierungscodes (MACS) (auch Keyed -Hash -Funktionen genannt) werden häufig aus Hash -Funktionen erstellt. HMAC ist so ein Mac.
Genauso wie Block Chiffren Kann verwendet werden, um Hash -Funktionen zu erstellen. Hash -Funktionen können zum Erstellen von Blockchiffren verwendet werden. Luby-Rackoff Konstruktionen mit Hash -Funktionen können nachweislich sicher sein, wenn die zugrunde liegende Hash -Funktion sicher ist. Auch viele Hash -Funktionen (einschließlich SHA-1 und SHA-2) werden unter Verwendung einer Spezial-Block-Chiffre in a gebaut Davies - Meyer oder andere Bauarbeiten. Diese Chiffre kann auch in einem herkömmlichen Betriebsart ohne die gleichen Sicherheitsgarantien verwendet werden. zum Beispiel, Shacal, BÄR und LÖWE.
Pseudorandom -Zahlengeneratoren (PRNGs) kann mit Hash -Funktionen erstellt werden. Dies geschieht durch Kombinieren eines (geheimen) zufälligen Samens mit einem Zähler und Hashing es.
Einige Hash -Funktionen, wie z. Strang, Keccak, und Radiogatúneinen willkürlich langen Strom ausgeben und als verwendet werden kann Stream Chiffreund Stream-Chiffren können auch aus Digest-Hash-Funktionen mit fester Länge erstellt werden. Oft geschieht dies durch den ersten Bau a Kryptographisch sichere Pseudorandom -Zahlengenerator und dann den Strom von zufälligen Bytes als verwenden Schlüsselstream. SIEGEL ist eine Stream -Chiffre, die verwendet SHA-1 Um interne Tabellen zu erzeugen, die dann in einem Tastenamgenerator mehr oder weniger nicht mit dem Hash -Algorithmus zu tun haben. Es ist nicht garantiert so stark (oder schwach) wie SHA-1. In ähnlicher Weise die Schlüsselausdehnung der HC-128 und HC-256 Stream -Chiffren nutzen das starke SHA-256 Hash-Funktion.
Verkettung
Verkettung Ausgänge aus mehreren Hash -Funktionen bieten einen Kollisionswiderstand, der so gut wie die stärksten der im verketteten Ergebnis enthaltenen Algorithmen ist. Zum Beispiel ältere Versionen von Transportschichtsicherheit (TLS) und sichere Sockets Layer (SSL) gebrauchte verkettete MD5 und SHA-1 Summen.[14][15] Dies stellt sicher, dass eine Methode zum Finden von Kollisionen in einer der Hash -Funktionen keine durch beide Hash -Funktionen geschützten Daten besiegt.
Zum Merkle -Damgård -Konstruktion Hash-Funktionen, die verkettete Funktion ist ebenso kollisionsresistent wie ihre stärkste Komponente, aber nicht kollisionsresistenter. Antoine Joux beobachtete, dass 2-Kollisionen dazu führen n-Collisionen: Wenn es für einen Angreifer möglich ist, zwei Nachrichten mit demselben MD5 -Hash zu finden, können sie so viele zusätzliche Nachrichten mit demselben MD5 -Hash wie wünschen, ohne größere Schwierigkeiten.[16] Unter diesen n Nachrichten mit dem gleichen MD5-Hash, es gibt wahrscheinlich eine Kollision in SHA-1. Die zusätzliche Arbeit, die erforderlich ist, um die SHA-1-Kollision zu finden (über die exponentielle Geburtstagsuche) hinaus erforderlich Polynomzeit.[17][18]
Kryptografische Hash -Algorithmen
Es gibt viele kryptografische Hash -Algorithmen; In diesem Abschnitt werden einige Algorithmen aufgeführt, auf die relativ oft verwiesen wird. Eine umfangreichere Liste finden Sie auf der Seite mit a Vergleich der kryptografischen Hash -Funktionen.
MD5
MD5 wurde von entworfen von Ronald Rivest 1991, um eine frühere Hash -Funktion, MD4, zu ersetzen, wurde 1992 als RFC 1321 angegeben. Kollisionen gegen MD5 können innerhalb von Sekunden berechnet werden, was den Algorithmus für die meisten Anwendungsfälle, in denen ein kryptografischer Hash erforderlich ist, ungeeignet macht. MD5 erzeugt eine Verdauung von 128 Bit (16 Bytes).
SHA-1
SHA-1 wurde im Rahmen der US-Regierung entwickelt Masse Projekt. Die ursprüngliche Spezifikation, die heute allgemein SHA-0 des Algorithmus genannt wird, wurde 1993 unter dem Titel Secure Hash Standard, FIPS Pub 180, von der US-Regierungsstandards Agency NIST (National Institute of Standards and Technology) veröffentlicht. Es wurde kurz nach der Veröffentlichung von der NSA zurückgezogen und von der überarbeiteten Version ersetzt, die 1995 in FIPS PUB 180-1 veröffentlicht und häufig als SHA-1 bezeichnet wurde. Kollisionen gegen den vollständigen SHA-1-Algorithmus können mit dem hergestellt werden zerschmetterter Angriff und die Hash -Funktion sollte als kaputt betrachtet werden. SHA-1 produziert eine Hash-Digest von 160 Bit (20 Bytes).
Dokumente können SHA-1 als "SHA" bezeichnen, obwohl dies mit den anderen sicheren Hash-Algorithmen wie SHA-0, SHA-2 und SHA-3 in Konflikt steht.
RIPEMD-160
RIPEMD (Race Integrity Primitive Evaluation Message Digest) ist eine Familie von kryptografischen Hash -Funktionen, die von Hans Dobbertin, Antoon Bosselaers und Bart Preeel an der Cosic Research Group der Kathholieke Universiteit Leuven, und erstmals 1996 veröffentlicht wurden, eine Familie von Hans Dobbertin, BART -Preenel ist. basierte auf den in MD4 verwendeten Designprinzipien und ist in der Leistung des beliebteren SHA-1 ähnlich. Ripemd-160 wurde jedoch nicht gebrochen. Wie der Name schon sagt, erzeugt RIPEMD-160 einen Hash-Verdau von 160 Bit (20 Bytes).
Whirlpool
Whirlpool ist eine kryptografische Hash -Funktion, die von Vincent Rijmen und Paulo S. L. M. Barreto entworfen wurde, die sie 2000 erstmals beschrieben haben. Whirlpool basiert auf einer wesentlich modifizierten Version des Advanced Encryption Standard (AES). Whirlpool produziert eine Hash -Digest von 512 Bit (64 Bytes).
SHA-2
SHA-2 (Secure Hash-Algorithmus 2) ist eine Reihe kryptografischer Hash-Funktionen, die von der United States National Security Agency (NSA), die erstmals 2001 veröffentlicht wurden selbst baut mit der Davies -Mayer -Struktur einer (klassifizierten) speziellen Blockchiffre.
SHA-2 besteht im Grunde aus zwei Hash-Algorithmen: SHA-256 und SHA-512. SHA-224 ist eine Variante von SHA-256 mit unterschiedlichen Startwerten und verkürzten Ausgaben. SHA-384 und die weniger bekannten SHA-512/224 und SHA-512/256 sind alle Varianten von SHA-512. SHA-512 ist sicherer als SHA-256 und häufig schneller als SHA-256 bei 64-Bit-Maschinen wie z. AMD64.
Die Ausgangsgröße in Bits wird durch die Erweiterung des Namens "SHA" angegeben, sodass SHA-224 eine Ausgangsgröße von 224 Bits (28 Bytes) hat. SHA-256, 32 Bytes; SHA-384, 48 Bytes; und Sha-512, 64 Bytes.
Sha-3
SHA-3 (Secure Hash-Algorithmus 3) wurde am 5. August 2015 von NIST veröffentlicht. SHA-3 ist eine Untergruppe der breiteren kryptografischen primitiven Familie Keccak. Der Keccak -Algorithmus ist die Arbeit von Guido Bertoni, Joan Daemen, Michael Peeters und Gilles Van Assche. Keccak basiert auf einer Schwammkonstruktion, mit der auch andere kryptografische Primitive wie eine Flussausfall -Chiffre aufgebaut werden können. SHA-3 liefert die gleichen Ausgangsgrößen wie SHA-2: 224, 256, 384 und 512 Bit.
Konfigurierbare Ausgangsgrößen können auch mit den Funktionen Shake-128 und Shake-256 erhalten werden. Hier implizieren die Verlängerungen -128 und -256 zum Namen eher die Sicherheitsstärke der Funktion als die Ausgangsgröße in Bits.
Blake2
Blake2, eine verbesserte Version von Blake, wurde am 21. Dezember 2012 angekündigt. Sie wurde von Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'hearn und Christian Gewinnerin mit dem Ziel, den weit verbreiteten, aber gebrochenen MD5 und gebrochenen MD5 und gebrochenen MD5 und gebrochenem MD5 und zu ersetzen, bekannt gegeben. SHA-1-Algorithmen. BLAKE2B ist beim Laufen mit 64-Bit-X64- und Armarchitekturen schneller als SHA-3, SHA-2, SHA-1 und MD5. Obwohl Blake und Blake2 nicht als SHA-3 standardisiert wurden, wurde Blake2 in vielen Protokollen einschließlich der verwendet Argon2 Passwort Hash, für die hohe Effizienz, die es für moderne CPUs bietet. Da Blake ein Kandidat für SHA-3 war, bieten Blake und Blake2 beide die gleichen Ausgangsgrößen wie SHA-3-einschließlich einer konfigurierbaren Ausgangsgröße.
Blake3
Blake3, eine verbesserte Version von Blake2, wurde am 9. Januar 2020 angekündigt. Sie wurde von Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves und Zooko Wilcox-o'hearn erstellt. Blake3 ist im Gegensatz zu Blake und Blake2 ein einzelner Algorithmus, der Algorithmusfamilien mit mehreren Varianten sind. Die Blake3 -Komprimierungsfunktion basiert eng auf der von Blake2s, wobei der größte Unterschied darin besteht, dass die Anzahl der Runden von 10 auf 7 reduziert wird. Intern ist Blake3 a Merkle Treeund es unterstützt höhere Parallelität als Blake2.
Angriffe auf kryptografische Hash -Algorithmen
Es gibt eine lange Liste kryptografischer Hash -Funktionen, aber viele haben sich als verletzlich erwiesen und sollten nicht verwendet werden. Zum Beispiel wählte NIST 51 Hash -Funktionen aus[19] als Kandidaten für Runde 1 des SHA-3-Hash-Wettbewerbs, von denen 10 als gebrochen angesehen wurden, zeigten signifikante Schwächen und schafften es daher nicht in die nächste Runde; Weitere Informationen finden Sie im Hauptartikel über die NIST Hash -Funktionswettbewerbe.
Auch wenn eine Hash -Funktion noch nie gebrochen wurde, a Erfolgreicher Angriff Gegen eine geschwächte Variante kann das Vertrauen der Experten untergraben. Zum Beispiel wurden im August 2004 Kollisionen in mehreren damals beliebten Hash-Funktionen gefunden, einschließlich MD5.[20] Diese Schwächen stellten die Sicherheit stärkerer Algorithmen in Frage, die aus den schwachen Hash-Funktionen stammen-insbesondere SHA-1 (eine gestärkte Version von SHA-0), RIPEMD-128 und RIPEMD-160 (beide gestärkte Versionen von Ripemd).[21]
Am 12. August 2004 kündigten Joux, Carribault, Lemuel und Jalby eine Kollision für den vollen SHA-0-Algorithmus an.[16] Joux et al. Erfüllte dies mit einer Verallgemeinerung des Chabaud- und Joux -Angriffs. Sie fanden heraus, dass die Kollision Komplexität hatte 251 und dauerte ungefähr 80.000 CPU -Stunden auf einem Supercomputer mit 256 Itanium 2 Prozessoren-äquivalent zu 13 Tagen Vollzeitnutzung des Supercomputers.
Im Februar 2005 wurde ein Angriff auf SHA-1 gemeldet, der in etwa 2 Kollisionen finden würde69 Hashing -Operationen und nicht die 280 erwartet für eine 160-Bit-Hash-Funktion. Im August 2005 wurde ein weiterer Angriff auf SHA-1 gemeldet, der Kollisionen in 2 finden würde63 Operationen. Andere theoretische Schwächen von SHA-1 wurden bekannt:[22][23] Und im Februar 2017 kündigte Google eine Kollision in SHA-1 an.[24] Sicherheitsforscher empfehlen, dass neue Anwendungen diese Probleme vermeiden können, indem sie spätere Mitglieder der SHA -Familie verwenden, wie z. SHA-2oder Verwendung von Techniken wie randomisiertem Hashing[1] Das erfordert keinen Kollisionsbeständigkeit.
Ein erfolgreicher, praktischer Angriff brach MD5, der in Zertifikaten für Zertifikate verwendet wurde Transportschichtsicherheit in 2008.[25]
Viele kryptografische Hashes basieren auf dem Merkle -Damgård -Konstruktion. Alle kryptografischen Hashes, die die vollständige Ausgabe einer Merkle -Damgård -Konstruktion direkt verwenden, sind anfällig für Länge Verlängerungsangriffe. Dies macht den MD5, SHA-1, RIPEMD-160, Whirlpool und die SHA-256 / SHA-512-Hash-Algorithmen für diesen spezifischen Angriff anfällig. SHA-3, Blake2, Blake3 und die verkürzten SHA-2-Varianten sind für diese Art von Angriff nicht anfällig.
Angriffe auf Hashed -Passwörter
Eine häufige Verwendung von Hashes besteht darin, Daten zur Kennwortauthentifizierung zu speichern. Anstatt den Klartext von Benutzerkennwörtern zu speichern, speichert ein kontrolliertes Zugriffssystem den Hash des Kennworts jedes Benutzers in einer Datei oder Datenbank. Wenn jemand Zugriff fordert, ist das von ihm eingereichte Passwort gehasht und mit dem gespeicherten Wert verglichen. Wenn die Datenbank gestohlen wird (ein allzu häufiges Auftreten[26]), der Dieb hat nur die Hash -Werte, nicht die Passwörter.
Die meisten Leute wählen jedoch auf vorhersehbare Weise Passwörter. Listen der gängigen Passwörter sind weit verbreitet und viele Passwörter sind kurz genug, damit alle möglichen Kombinationen getestet werden können, wenn schnelle Hashes verwendet werden.[27] Die Verwendung von kryptografisches Salz verhindert einige Angriffe, z. B. das Erstellen von Dateien mit Vorkomputieren von Hash -Werten, z. Regenbogentische. Die Suche nach 100 Milliarden Tests pro Sekunde sind jedoch mit High-End möglich Grafikprozessorendirekte Angriffe auch mit Salz ermöglichen.[28] [29] Die Vereinigten Staaten Nationales Institut für Standards und Technologie empfiehlt das Speichern von Passwörtern mit speziellen Hashes, die aufgerufen werden Schlüsselableitungen (KDFS), die geschaffen wurden, um die Suche nach Brute -Kraft zu verlangsamen.[30]: 5.1.1.2 Langsame Hashes umfassen pbkdf2, Bcrypt, Scrypt, Argon2, Ballon und einige jüngste Modi von Unix Crypt. Für KSFs, die mehrere Hashes für die langsame Ausführung durchführen, empfiehlt NIST eine Iterationsanzahl von 10.000 oder mehr.[30]: 5.1.1.2
Siehe auch
- Lawineneffekt
- Vergleich der kryptografischen Hash -Funktionen
- Kryptografische Beweglichkeit
- Cryptrec
- Dateifixität
- HMAC
- Hash -Kette
- Länge Verlängerung
- Md5crk
- Nachrichtenauthentifizierungscode
- Nessie
- PGP -Wortliste
- Zufälliges Orakel
- Sicherheit der kryptografischen Hash -Funktionen
- Sha-3
- Universelle Einweg-Hash-Funktion
Verweise
Zitate
- ^ a b Shai Halevi und Hugo Krawczyk, Randomisierte Hashing- und digitale Signaturen
- ^ Al-kuwari, saif; Davenport, James H.; Bradford, Russell J. (2011). "Kryptografische Hash -Funktionen: Aktuelle Designtrends und Sicherheitsvorstellungen". Cryptology Eprint Archiv. Bericht 2011/565.
- ^ Schneier, Bruce. "Kryptanalyse von MD5 und SHA: Zeit für einen neuen Standard". Computerwelt. Archiviert von das Original Am 2016-03-16. Abgerufen 2016-04-20.
Viel mehr als Verschlüsselungsalgorithmen sind Einweg-Hash-Funktionen die Arbeitspferde der modernen Kryptographie.
- ^ Katz & Lindell 2014, S. 155–157, 190, 232.
- ^ Rogaway & Shrimpton 2004in Sec. 5. Implikationen.
- ^ Duong, Thai; Rizzo, Juliano. "Flickrs API Signaturen Fälschung Anfälligkeit".
- ^ Lyubashevsky et al. 2008, S. 54–72.
- ^ Perrin, Chad (5. Dezember 2007). "Verwenden Sie MD5 -Hashes, um Software -Downloads zu überprüfen.". TechRepublic. Abgerufen 2. März, 2013.
- ^ a b Lucks, Stefan (2004). "Designprinzipien für iterierte Hash -Funktionen". Cryptology Eprint Archiv. Bericht 2004/253.
- ^ Kelsey & Schneier 2005, S. 474–490.
- ^ Biham, Eli; Dunkelman, Orr (24. August 2006). Ein Rahmen für iterative Hash -Funktionen - Haifa. Zweiter nist kryptografischer Hash -Workshop. Cryptology Eprint Archiv. Bericht 2007/278.
- ^ Nandi & Paul 2010.
- ^ Dobraunig, Christoph; Eichlseder, Maria; Mendel, Florian (Februar 2015). Sicherheitsbewertung von SHA-224, SHA-512/224 und SHA-512/256 (PDF) (Bericht).
- ^ Mendel et al., p. 145: Verkettung ... wird oft von Implementierern verwendet, um "Hedge -Wetten" bei Hash -Funktionen zu erhalten. Ein Kombinierer der Form MD5
- ^ Harnik et al. 2005, p. 99: Die Verkettung von Hash -Funktionen, wie im TLS vorgeschlagen ... ist garantiert so sicher wie der Kandidat, der sicher bleibt.
- ^ a b Joux 2004.
- ^ Finney, Hal (20. August 2004). "Mehr Probleme mit Hash -Funktionen". Die Kryptographie -Mailingliste. Archiviert von das Original am 9. April 2016. Abgerufen 25. Mai, 2016.
- ^ Hoch & Shamir 2008, S. 616–630.
- ^ Andrew Regenschmeid, Ray Perlner, Shu-Jen Chang, John Kelsey, Mridul Nandi, Souradyuti Paul, Statusbericht über die erste Runde des SHA-3-Kryptografie-Hash-Algorithmus-Wettbewerbs
- ^ Xiaoyunwang, Dengguo Feng, Xuejia Lai, Hongbo Yu, Kollisionen für Hash-Funktionen MD4, MD5, Haval-128 und Ripemd
- ^ Alshaikhli, Imad Fakhri; Alahmad, Mohammad Abdulatef (2015), "Cryptographic Hash Function", Handbuch zur Forschung zur Erkennung von Bedrohungen und Gegenmaßnahmen in der Netzwerksicherheit, Igi Global, S. 80–94, doi:10.4018/978-1-4666-6583-5.Ch006, ISBN 978-1-4666-6583-5
- ^ Xiaoyun Wang, Yiqun Lisa Yinund Hongbo Yu, Kollisionen in der vollen SHA-1 finden
- ^ Bruce Schneier, Kryptanalyse von SHA-1 (Fasst Wang et al. Ergebnisse und ihre Auswirkungen zusammen)
- ^ Fox-Brewster, Thomas. "Google hat nur einen alten Krypto -Algorithmus" zerschmettert " - hier ist der Grund, warum das für Websicherheit groß ist.". Forbes. Abgerufen 2017-02-24.
- ^ Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik, Benne de Webger, MD5 wurde heute als schädlich angesehen: Erstellen eines Schurken -CA -Zertifikats, abgerufen am 29. März 2009.
- ^ Swinhoe, Dan (17. April 2020). "Die 15 größten Datenverletzungen des 21. Jahrhunderts". CSO Magazine.
- ^ Goodin, Dan (2012-12-10). "25-GPU-Cluster rissen jedes Standard-Windows-Passwort in <6 Stunden". ARS Technica. Abgerufen 2020-11-23.
- ^ Claburn, Thomas (14. Februar 2019). "Verwenden Sie ein 8-CH-Windows-NTLM-Passwort? Nicht. Jeder einzelne kann in unter 2,5 Stunden geknackt werden.". www.theregister.co.uk. Abgerufen 2020-11-26.
- ^ "Umwerfende GPU-Leistung". Unvoreingenommen. 3. Januar 2020.
- ^ a b Grassi Paul A. (Juni 2017). SP 800-63B-3-Richtlinien für digitale Identität, Authentifizierung und Lebenszyklusmanagement. NIST. doi:10.6028/nist.sp.800-63b.
Quellen
- Harnik, Danny; Kilian, Joe; Naor, Moni; Reingold, Omer; Rosen, Alon (2005). "Über robuste Kombinationen für unvergessliche Übertragung und andere Primitive". Fortschritte in der Kryptologie - Eurocrypt 2005. Vorlesungsnotizen in Informatik. Vol. 3494. S. 96–113. doi:10.1007/11426639_6. ISBN 978-3-540-25910-7. ISSN 0302-9743.
- Hoch, Jonathan J.; Shamir, Adi (2008). "Auf der Stärke des verketteten Hash -Kombinierers, wenn alle Hash -Funktionen schwach sind". Automaten, Sprachen und Programmierung. Vorlesungsnotizen in Informatik. Vol. 5126. S. 616–630. doi:10.1007/978-3-540-70583-3_50. ISBN 978-3-540-70582-6. ISSN 0302-9743.
- Joux, Antoine (2004). "Multicollisionen in iterierten Hash -Funktionen. Anwendung auf kaskadierte Konstruktionen". Fortschritte in der Kryptologie - Crypto 2004. Vorlesungsnotizen in Informatik. Vol. 3152. Berlin, Heidelberg: Springer Berlin Heidelberg. S. 306–316. doi:10.1007/978-3-540-28628-8_19. ISBN 978-3-540-22668-0. ISSN 0302-9743.
- Kelsey, John; Schneier, Bruce (2005). "Zweite Vorbereitungen bei N-Bit-Hash-Funktionen für viel weniger als 2 n Arbeit". Fortschritte in der Kryptologie - Eurocrypt 2005. Vorlesungsnotizen in Informatik. Vol. 3494. S. 474–490. doi:10.1007/11426639_28. ISBN 978-3-540-25910-7. ISSN 0302-9743.
- Katz, Jonathan; Lindell, Yehuda (2014). Einführung in die moderne Kryptographie (2. Aufl.). CRC Press. ISBN 978-1-4665-7026-9.
- Lyubashevsky, Vadim; Micciancio, Daniele; Peikert, Chris; Rosen, Alon (2008). "Swifft: Ein bescheidener Vorschlag für FFT Hashing". Schnelle Softwareverschlüsselung. Vorlesungsnotizen in Informatik. Vol. 5086. S. 54–72. doi:10.1007/978-3-540-71039-4_4. ISBN 978-3-540-71038-7. ISSN 0302-9743.
- Mendel, Florian;Wiederbelebung, Christus;Schläffer, Martin (2009)."MD5 ist schwächer als schwach: Angriffe auf verkettete Kombinationen". Fortschritte in der Kryptologie - Asiacrypt 2009.Vorlesungsnotizen in Informatik.Vol.5912. S. 144–161. doi:10.1007/978-3-642-10366-7_9. ISBN 978-3-642-10365-0. ISSN 0302-9743.
- Nandi, Mridul;Paul, Souradyuti (2010). "Beschleunigen des Breitrohrs: sicheres und schnelles Hashing". Fortschritte in der Kryptologie - Indocrypt 2010.Vorlesungsnotizen in Informatik.Vol.6498. S. 144–162. doi:10.1007/978-3-642-17401-8_12. ISBN 978-3-642-17400-1. ISSN 0302-9743.
- Rogaway, P.;Shrimpton, T. (2004)."Kryptografische Hash-Funktions-Grundlagen: Definitionen, Auswirkungen und Trennungen für den Widerstand vor dem Vorbild, die Beständigkeit des Zweitwestens und die Kollisionsbeständigkeit". Citeseerx 10.1.1.3.6200.
Externe Links
- Paar, Christof; Pelzl, Jan (2009). "11: Hash Funktionen". Kryptographie verstehen, ein Lehrbuch für Schüler und Praktiker. Springer. Archiviert von das Original Am 2012-12-08. (Die Website der Begleitwebsite enthält Online -Kryptographiekurse, der Hash -Funktionen abdeckt.)
- "Die Website von Ecrypt Hash Function" ".
- Buldas, A. (2011). "Reihe von Mini-Lectures über kryptografische Hash-Funktionen". Archiviert von das Original Am 2012-12-06.
- Open Source Python -basierte Anwendung mit GUI verwendet, um Downloads zu überprüfen.