Ich sehe viel Verwirrung zwischen Hashes und Verschlüsselungsalgorithmen und würde gerne weitere Expertenratschläge zu folgenden Themen erhalten:
Wann werden Hashes oder Verschlüsselungen verwendet?
Was unterscheidet einen Hash- oder Verschlüsselungsalgorithmus (von einer theoretischen / mathematischen Ebene), dh was macht Hashes irreversibel (ohne Hilfe eines Regenbogenbaums)?
Hier sind einige ähnliche SO-Fragen, die nicht so detailliert waren, wie ich gesucht habe:
Was ist der Unterschied zwischen Verschleierung, Hashing und Verschlüsselung?
Unterschied zwischen Verschlüsselung und Hashing
security
encryption
hash
cryptography
Kenny Cason
quelle
quelle
Antworten:
Nun, Sie könnten es in Wikipedia nachschlagen ... Aber da Sie eine Erklärung wünschen, werde ich hier mein Bestes geben:
Hash-Funktionen
Sie bieten eine Zuordnung zwischen einer Eingabe beliebiger Länge und einer Ausgabe (normalerweise) fester Länge (oder kleinerer Länge). Dies kann alles sein, von einem einfachen crc32 bis zu einer vollständigen kryptografischen Hash-Funktion wie MD5 oder SHA1 / 2/256/512. Der Punkt ist, dass es eine Einweg-Zuordnung gibt. Es ist immer eine Zuordnung von vielen: 1 (was bedeutet, dass es immer Kollisionen gibt), da jede Funktion eine kleinere Ausgabe erzeugt, als sie eingeben kann (Wenn Sie jede mögliche 1-MB-Datei in MD5 einspeisen, erhalten Sie eine Menge Kollisionen).
Der Grund, warum sie schwer (oder praktisch unmöglich) umzukehren sind, liegt darin, wie sie intern arbeiten. Die meisten kryptografischen Hash-Funktionen durchlaufen den Eingabesatz viele Male, um die Ausgabe zu erzeugen. Wenn wir uns also jeden Teil der Eingabe mit fester Länge ansehen (der vom Algorithmus abhängig ist), ruft die Hash-Funktion diesen aktuellen Status auf. Es wird dann den Status durchlaufen und in einen neuen ändern und diesen als Rückmeldung in sich selbst verwenden (MD5 führt dies 64 Mal für jeden 512-Bit-Datenblock durch). Es kombiniert dann irgendwie die resultierenden Zustände aus all diesen Iterationen wieder zusammen, um den resultierenden Hash zu bilden.
Wenn Sie nun den Hash dekodieren möchten, müssen Sie zunächst herausfinden, wie der angegebene Hash in seine iterierten Zustände aufgeteilt werden kann (1 Möglichkeit für Eingaben, die kleiner als die Größe eines Datenblocks sind, viele für größere Eingaben). Dann müssten Sie die Iteration für jeden Zustand umkehren. Nun, zu erklären , warum dies ist sehr schwer, sich vorstellen , versuchen abzuleiten
a
undb
aus der folgenden Formel:10 = a + b
. Es gibt 10 positive Kombinationen vona
undb
das kann funktionieren. Führen Sie dies nun einige Male durch:tmp = a + b; a = b; b = tmp
. Für 64 Iterationen hätten Sie über 10 ^ 64 Möglichkeiten, es zu versuchen. Und das ist nur eine einfache Ergänzung, bei der ein Zustand von Iteration zu Iteration erhalten bleibt. Echte Hash-Funktionen führen viel mehr als eine Operation aus (MD5 führt ungefähr 15 Operationen mit 4 Zustandsvariablen aus). Und da die nächste Iteration vom Status der vorherigen abhängt und die vorherige beim Erstellen des aktuellen Status zerstört wird, ist es so gut wie unmöglich, den Eingabestatus zu bestimmen, der zu einem bestimmten Ausgabezustand geführt hat (für jede Iteration nicht weniger). Kombinieren Sie dies mit der großen Anzahl von Möglichkeiten, und das Decodieren selbst eines MD5 wird eine nahezu unendliche (aber nicht unendliche) Menge an Ressourcen erfordern. So viele Ressourcen, dass es 'Verschlüsselungsfunktionen
Sie bieten eine 1: 1-Zuordnung zwischen einer Eingabe und Ausgabe beliebiger Länge. Und sie sind immer reversibel. Das Wichtigste ist, dass es mit einer Methode reversibel ist. Und für einen bestimmten Schlüssel ist es immer 1: 1. Jetzt gibt es mehrere Eingabe: Schlüsselpaare, die möglicherweise dieselbe Ausgabe erzeugen (tatsächlich gibt es diese normalerweise, abhängig von der Verschlüsselungsfunktion). Gute verschlüsselte Daten sind nicht von zufälligem Rauschen zu unterscheiden. Dies unterscheidet sich von einer guten Hash-Ausgabe, die immer ein konsistentes Format hat.
Anwendungsfälle
Verwenden Sie eine Hash-Funktion, wenn Sie einen Wert vergleichen möchten, die einfache Darstellung jedoch nicht speichern können (aus einer Reihe von Gründen). Passwörter sollten sehr gut zu diesem Anwendungsfall passen, da Sie sie aus Sicherheitsgründen nicht im Klartext speichern möchten (und sollten). Aber was ist, wenn Sie ein Dateisystem auf Raubkopien von Musikdateien überprüfen möchten? Es wäre unpraktisch, 3 MB pro Musikdatei zu speichern. Nehmen Sie stattdessen den Hash der Datei und speichern Sie diesen (md5 würde 16 Bytes anstelle von 3 MB speichern). Auf diese Weise müssen Sie nur jede Datei hashen und mit der gespeicherten Datenbank mit Hashes vergleichen (dies funktioniert in der Praxis aufgrund von Neucodierung, Ändern von Dateikopfzeilen usw. nicht so gut, ist jedoch ein Beispiel für einen Anwendungsfall).
Verwenden Sie eine Hash-Funktion, wenn Sie die Gültigkeit der Eingabedaten überprüfen. Dafür sind sie konzipiert. Wenn Sie zwei Eingabeteile haben und überprüfen möchten, ob diese identisch sind, führen Sie beide über eine Hash-Funktion aus. Die Wahrscheinlichkeit einer Kollision ist für kleine Eingabegrößen astronomisch gering (unter der Annahme einer guten Hash-Funktion). Deshalb wird es für Passwörter empfohlen. Für Passwörter mit bis zu 32 Zeichen hat md5 das 4-fache des Ausgaberaums. SHA1 hat das 6-fache des Ausgaberaums (ungefähr). SHA512 hat ungefähr das 16-fache des Ausgaberaums. Es ist dir egal, wie das Passwort lautete , es ist dir egal, ob es das gleiche ist wie das, das gespeichert wurde. Deshalb sollten Sie Hashes für Passwörter verwenden.
Verwenden Sie die Verschlüsselung immer dann, wenn Sie die Eingabedaten wieder herausholen möchten. Beachten Sie das Wort brauchen . Wenn Sie Kreditkartennummern speichern, müssen Sie diese irgendwann wieder herausholen, möchten sie aber nicht im Klartext speichern. Speichern Sie stattdessen die verschlüsselte Version und bewahren Sie den Schlüssel so sicher wie möglich auf.
Hash-Funktionen eignen sich auch hervorragend zum Signieren von Daten. Wenn Sie beispielsweise HMAC verwenden, signieren Sie ein Datenelement, indem Sie einen Hash der Daten verwenden, die mit einem bekannten, aber nicht übertragenen Wert (einem geheimen Wert) verknüpft sind. Sie senden also den Klartext und den HMAC-Hash. Dann hasht der Empfänger einfach die gesendeten Daten mit dem bekannten Wert und prüft, ob sie mit dem übertragenen HMAC übereinstimmen. Wenn es dasselbe ist, wissen Sie, dass es nicht von einer Partei ohne den geheimen Wert manipuliert wurde. Dies wird häufig in sicheren Cookie-Systemen von HTTP-Frameworks sowie bei der Nachrichtenübertragung von Daten über HTTP verwendet, wenn Sie die Integrität der Daten sicherstellen möchten.
Ein Hinweis zu Hashes für Passwörter:
Ein wesentliches Merkmal kryptografischer Hash-Funktionen ist, dass sie sehr schnell zu erstellen und sehr schwer / langsam umzukehren sind (so sehr, dass dies praktisch unmöglich ist). Dies wirft ein Problem mit Passwörtern auf. Wenn Sie speichern
sha512(password)
, tun Sie nichts, um sich vor Regenbogentischen oder Brute-Force-Angriffen zu schützen. Denken Sie daran, dass die Hash-Funktion auf Geschwindigkeit ausgelegt ist. Daher ist es für einen Angreifer trivial, einfach ein Wörterbuch über die Hash-Funktion auszuführen und jedes Ergebnis zu testen.Das Hinzufügen eines Salzes hilft, da es dem Hash ein paar unbekannte Daten hinzufügt. Anstatt also etwas zu finden, das passt
md5(foo)
, müssen sie etwas finden, das, wenn es dem bekannten Salz zugesetzt wird, produziertmd5(foo.salt)
(was sehr viel schwieriger ist). Aber es löst das Geschwindigkeitsproblem immer noch nicht, denn wenn sie das Salz kennen, ist es nur eine Frage des Durchlaufens des Wörterbuchs.Es gibt also Möglichkeiten, damit umzugehen. Eine beliebte Methode ist die Schlüsselverstärkung (oder Schlüsseldehnung). Grundsätzlich iterieren Sie viele Male über einen Hash (normalerweise Tausende). Dies macht zwei Dinge. Erstens verlangsamt es die Laufzeit des Hashing-Algorithmus erheblich. Zweitens erhöht eine korrekte Implementierung (Weitergabe der Eingabe und des Salzes bei jeder Iteration) tatsächlich die Entropie (verfügbarer Speicherplatz) für die Ausgabe, wodurch die Wahrscheinlichkeit von Kollisionen verringert wird. Eine triviale Implementierung ist:
Es gibt andere Standardimplementierungen wie PBKDF2 , BCrypt . Diese Technik wird jedoch von einigen sicherheitsrelevanten Systemen (wie PGP, WPA, Apache und OpenSSL) verwendet.
Das Endergebnis
hash(password)
ist nicht gut genug.hash(password + salt)
ist besser, aber immer noch nicht gut genug ... Verwenden Sie einen gestreckten Hash-Mechanismus, um Ihre Passwort-Hashes zu erstellen ...Ein weiterer Hinweis zum trivialen Dehnen
Führen Sie die Ausgabe eines Hashs unter keinen Umständen direkt in die Hash-Funktion zurück :
Der Grund dafür liegt in Kollisionen. Denken Sie daran, dass alle Hash-Funktionen Kollisionen aufweisen, da der mögliche Ausgaberaum (die Anzahl der möglichen Ausgaben) kleiner als der Eingaberaum ist. Um zu sehen warum, schauen wir uns an, was passiert. Nehmen wir vorab an, dass die Wahrscheinlichkeit einer Kollision bei 0,001% liegt
sha1()
( in der Realität ist sie viel geringer, aber zu Demonstrationszwecken).Hat jetzt
hash1
eine Kollisionswahrscheinlichkeit von 0,001%. Aber wenn wir das nächste Mal machenhash2 = sha1(hash1);
, werden alle Kollisionen vonhash1
automatisch zu Kollisionen vonhash2
. Jetzt haben wir eine Hash1-Rate von 0,001%, und der zweitesha1()
Aufruf trägt dazu bei. Hat jetzthash2
also eine Kollisionswahrscheinlichkeit von 0,002%. Das sind doppelt so viele Chancen! Jede Iteration fügt0.001%
dem Ergebnis eine weitere Kollisionswahrscheinlichkeit hinzu. Bei 1000 Iterationen stieg die Kollisionswahrscheinlichkeit von trivialen 0,001% auf 1%. Jetzt ist die Verschlechterung linear und die realen Wahrscheinlichkeiten sind weitaus geringer, aber der Effekt ist der gleiche (eine Schätzung der Wahrscheinlichkeit einer einzelnen Kollision mitmd5
beträgt ungefähr 1 / (2 128 ) oder 1 / (3x10 38)). Das scheint zwar klein zu sein, aber dank des Geburtstagsangriffs ist es nicht wirklich so klein, wie es scheint.Stattdessen führen Sie durch erneutes Anhängen von Salt und Kennwort jedes Mal Daten wieder in die Hash-Funktion ein. Kollisionen einer bestimmten Runde sind also keine Kollisionen der nächsten Runde mehr. Damit:
Hat die gleiche Kollisionswahrscheinlichkeit wie die native
sha512
Funktion. Welches ist was du willst. Verwenden Sie das stattdessen.quelle
Eine Hash-Funktion kann als das gleiche wie das Backen eines Brotlaibs angesehen werden. Sie beginnen mit Eingaben (Mehl, Wasser, Hefe usw.) und nach Anwendung der Hash-Funktion (Mischen + Backen) erhalten Sie eine Ausgabe: einen Laib Brot.
Der andere Weg ist außerordentlich schwierig - man kann das Brot nicht wirklich wieder in Mehl, Wasser, Hefe trennen - ein Teil davon ging während des Backvorgangs verloren, und man kann nie genau sagen, für wie viel Wasser, Mehl oder Hefe verwendet wurde ein besonderes Brot, weil diese Informationen durch die Hashing-Funktion (auch bekannt als der Ofen) zerstört wurden.
Viele verschiedene Varianten von Inputs produzieren theoretisch identische Brote (z. B. produzieren 2 Tassen Wasser und 1 EL Hefe genau das gleiche Brot wie 2,1 Tassen Wasser und 0,9 EL Hefe), aber bei einem dieser Brote kann man es nicht sagen genau welche Kombination von Eingaben es produzierte.
Die Verschlüsselung kann dagegen als Safe angesehen werden. Was auch immer Sie dort hineinstecken, kommt wieder heraus, solange Sie den Schlüssel besitzen, mit dem es überhaupt verschlossen wurde. Es ist eine symmetrische Operation. Mit einem Schlüssel und einer Eingabe erhalten Sie eine bestimmte Ausgabe. Bei dieser Ausgabe und derselben Taste erhalten Sie die ursprüngliche Eingabe zurück. Es ist eine 1: 1-Zuordnung.
quelle
Verwenden Sie Hashes, wenn Sie nicht in der Lage sein möchten, die ursprüngliche Eingabe wiederherzustellen, und verwenden Sie dann die Verschlüsselung.
Hashes nehmen einige Eingaben und wandeln sie in einige Bits um (normalerweise als Zahl gedacht, wie eine 32-Bit-Ganzzahl, eine 64-Bit-Ganzzahl usw.). Dieselbe Eingabe erzeugt immer denselben Hash, aber Sie verlieren dabei PRINZIPAL Informationen, sodass Sie die ursprüngliche Eingabe nicht zuverlässig reproduzieren können (dies weist jedoch einige Einschränkungen auf).
Bei der Verschlüsselung bleiben im Wesentlichen alle Informationen erhalten, die Sie in die Verschlüsselungsfunktion eingegeben haben. Sie erschweren es nur (im Idealfall unmöglich), zur ursprünglichen Eingabe zurückzukehren, ohne einen bestimmten Schlüssel zu besitzen.
Einfaches Beispiel für Hashing
Hier ist ein einfaches Beispiel, um Ihnen zu helfen, zu verstehen, warum Hashing (im allgemeinen Fall) die ursprüngliche Eingabe nicht zurückerhalten kann. Angenommen, ich erstelle einen 1-Bit-Hash. Meine Hash-Funktion verwendet eine Bitfolge als Eingabe und setzt den Hash auf 1, wenn in der Eingabezeichenfolge eine gerade Anzahl von Bits gesetzt ist, andernfalls auf 0, wenn eine ungerade Zahl vorhanden ist.
Beispiel:
Beachten Sie, dass es viele Eingabewerte gibt, die zu einem Hash von 0 führen, und viele, die zu einem Hash von 1 führen. Wenn Sie wissen, dass der Hash 0 ist, können Sie nicht sicher wissen, was die ursprüngliche Eingabe war.
Übrigens ist dieser 1-Bit-Hash nicht genau erfunden ... sehen Sie sich das Paritätsbit an .
Einfaches Beispiel für die Verschlüsselung
Sie können Text mit einer einfachen Buchstabensubstitution verschlüsseln. Wenn die Eingabe A ist, schreiben Sie B. Wenn die Eingabe B ist, schreiben Sie C. Bis zum Ende des Alphabets. Wenn die Eingabe Z ist, sind Sie schreibe noch einmal A.
Genau wie das einfache Hash-Beispiel wurde diese Art der Verschlüsselung in der Vergangenheit verwendet .
quelle
Grundlegende Übersicht über Hashing- und Verschlüsselungs- / Entschlüsselungstechniken sind.
UPDATE: Um die in der bearbeiteten Frage genannten Punkte anzusprechen.
quelle
Mein Einzeiler ... im Allgemeinen wollte der Interviewer die folgende Antwort.
Hashing ist eine Möglichkeit. Sie können Ihre Daten / Zeichenfolge nicht aus einem Hash-Code konvertieren.
Die Verschlüsselung erfolgt in zwei Richtungen: Sie können die verschlüsselte Zeichenfolge erneut entschlüsseln, wenn Sie den Schlüssel bei sich haben.
quelle
Eine Hash-Funktion wandelt eine Textmenge variabler Größe in einen Text fester Größe um.
Quelle: https://en.wikipedia.org/wiki/Hash_function
Hash-Funktionen in PHP
Ein Hash verwandelt eine Zeichenfolge in eine Hash-Zeichenfolge. Siehe unten.
HASH:
Passwörter werden normalerweise in ihrer Hash-Darstellung als lesbarer Text gespeichert. Wenn ein Endbenutzer Zugriff auf eine mit einem Kennwort geschützte Anwendung erhalten möchte, muss während der Authentifizierung ein Kennwort angegeben werden. Wenn der Benutzer sein Passwort übermittelt, erhält das gültige Authentifizierungssystem das Passwort und hasht dieses angegebene Passwort. Dieser Passwort-Hash wird mit dem dem System bekannten Hash verglichen. Der Zugang wird bei Gleichstellung gewährt.
DEHASH:
SHA1 ist ein One-Way-Hash. Was bedeutet, dass Sie den Hash nicht enthaupten können.
Sie können den Hash jedoch brutal erzwingen. Bitte sehen Sie: https://hashkiller.co.uk/sha1-decrypter.aspx .
MD5 ist ein weiterer Hash. Ein MD5-Dehasher finden Sie auf dieser Website: https://www.md5online.org/ .
Um Brute-Force-Angriffe auf Hashes zu verhindern, kann ein Salz gegeben werden. In PHP können Sie
password_hash()
einen Passwort-Hash erstellen. Die Funktionpassword_hash()
erzeugt automatisch ein Salz. Verwenden Sie zum Überprüfen eines Kennworts für einen Kennwort-Hash (mit einem Salt)password_verify()
.Ein Passwort kann durch mehr als einen Hash dargestellt werden. Wenn Sie das Kennwort mit verschiedenen Kennwort-Hashes überprüfen
password_verify()
, wird das Kennwort als gültiges Kennwort akzeptiert.Eine Verschlüsselungsfunktion wandelt einen Text mithilfe eines Verschlüsselungsschlüssels in einen unsinnigen Chiffretext um und umgekehrt.
Quelle: https://en.wikipedia.org/wiki/Encryption
Verschlüsselung in PHP
Lassen Sie uns in einen PHP-Code eintauchen, der die Verschlüsselung handhabt.
--- Die Mcrypt-Erweiterung ---
VERSCHLÜSSELN:
DECRYPT:
--- Die OpenSSL-Erweiterung ---
Die Mcrypt-Erweiterung wurde in 7.1 nicht mehr unterstützt. und entfernt in php 7.2. Die OpenSSL-Erweiterung sollte in PHP 7 verwendet werden. Siehe die folgenden Codefragmente:
quelle
A_KEY
ist kein AES / Rijndael-128-Schlüssel; Es ist ein Passwort, kein Schlüssel.Symmetrische Verschlüsselung:
Symmetrische Verschlüsselung kann auch als gemeinsam genutzter Schlüssel oder gemeinsam genutzte geheime Verschlüsselung bezeichnet werden. Bei der symmetrischen Verschlüsselung wird ein einzelner Schlüssel sowohl zum Ver- als auch zum Entschlüsseln des Datenverkehrs verwendet.
Asymmetrische Verschlüsselung:
Asymmetrische Verschlüsselung wird auch als Kryptographie mit öffentlichem Schlüssel bezeichnet. Die asymmetrische Verschlüsselung unterscheidet sich von der symmetrischen Verschlüsselung hauptsächlich dadurch, dass zwei Schlüssel verwendet werden: einer für die Verschlüsselung und einer für die Entschlüsselung. Der gebräuchlichste asymmetrische Verschlüsselungsalgorithmus ist
RSA
.Im Vergleich zur symmetrischen Verschlüsselung ist die asymmetrische Verschlüsselung mit einem hohen Rechenaufwand verbunden und tendenziell viel langsamer. Daher wird es normalerweise nicht zum Schutz von Nutzdaten verwendet. Stattdessen ist seine Hauptstärke die Fähigkeit, einen sicheren Kanal über ein nicht sicheres Medium (z. B. das Internet) einzurichten. Dies wird durch den Austausch öffentlicher Schlüssel erreicht, mit denen nur Daten verschlüsselt werden können. Der komplementäre private Schlüssel, der niemals geteilt wird, wird zum Entschlüsseln verwendet.
Hashing:
Schließlich ist Hashing eine Form der kryptografischen Sicherheit, die sich von der Verschlüsselung unterscheidet. Während die Verschlüsselung ein zweistufiger Prozess ist, mit dem eine Nachricht zuerst verschlüsselt und dann entschlüsselt wird, komprimiert das Hashing eine Nachricht zu einem irreversiblen Wert fester Länge oder Hash. Zwei der häufigsten Hashing-Algorithmen im Netzwerk sind
MD5
undSHA-1
.Lesen Sie hier mehr: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/
quelle
Verwenden Sie Hashes, wenn Sie nur einen Weg gehen müssen. Beispielsweise verwenden Sie für Kennwörter in einem System Hashing, da Sie immer nur überprüfen, ob der von einem Benutzer nach dem Hashing eingegebene Wert mit dem Wert in Ihrem Repository übereinstimmt. Mit der Verschlüsselung können Sie zwei Wege gehen.
Hashing-Algorithmen und Verschlüsselungsalgorithmen sind nur mathematische Algorithmen. Insofern unterscheiden sie sich nicht - es sind alles nur mathematische Formeln. In Bezug auf die Semantik gibt es jedoch einen sehr großen Unterschied zwischen Hashing (Einweg) und Verschlüsselung (Zweiweg). Warum sind Hashes irreversibel? Weil sie so konzipiert sind, weil Sie manchmal eine Einwegoperation wünschen.
quelle
Verschlüsselungs- und Hash-Algorithmen funktionieren auf ähnliche Weise. In jedem Fall besteht die Notwendigkeit, Verwirrung und Diffusion zwischen den Bits zu erzeugen . Kocht, Verwirrung ist eine komplexe Beziehung zwischen dem Schlüssel und dem verschlüsselten Text zu schaffen, und die Diffusion breitet sich die Informationen von jedem Bit herum.
Viele Hash-Funktionen verwenden tatsächlich Verschlüsselungsalgorithmen (oder Grundelemente von Verschlüsselungsalgorithmen). Beispielsweise verwendet der SHA-3-Kandidat Skein Threefish als zugrunde liegende Methode zur Verarbeitung jedes Blocks. Der Unterschied besteht darin, dass sie nicht jeden Chiffretextblock behalten, sondern destruktiv sind. deterministisch zu einer festen Länge zusammengeführt
quelle
Wenn es um die Sicherheit bei der Datenübertragung geht, dh für die bidirektionale Kommunikation, verwenden Sie die Verschlüsselung. Für jede Verschlüsselung ist ein Schlüssel erforderlich
Wenn es um die Autorisierung geht, verwenden Sie Hashing. Es gibt keinen Schlüssel für das Hashing
Hashing verwendet eine beliebige Datenmenge (Binär oder Text) und erstellt einen Hash konstanter Länge, der eine Prüfsumme für die Daten darstellt. Beispielsweise kann der Hash 16 Bytes betragen. Unterschiedliche Hashing-Algorithmen erzeugen Hashes unterschiedlicher Größe. Sie können die Originaldaten natürlich nicht aus dem Hash neu erstellen, aber Sie können die Daten erneut hashen, um festzustellen, ob der gleiche Hashwert generiert wird. Einweg-Unix-basierte Passwörter funktionieren auf diese Weise. Das Kennwort wird als Hashwert gespeichert. Um sich bei einem System anzumelden, wird das von Ihnen eingegebene Kennwort gehasht und der Hashwert mit dem Hash des tatsächlichen Kennworts verglichen. Wenn sie übereinstimmen, müssen Sie das richtige Passwort eingegeben haben
Warum ist Hashing irreversibel?
Hashing ist nicht umkehrbar, da die Eingabe-zu-Hash-Zuordnung nicht 1 zu 1 ist. Wenn zwei Eingaben demselben Hashwert zugeordnet sind, wird dies normalerweise als "Hash-Kollision" bezeichnet. Aus Sicherheitsgründen ist eine der Eigenschaften einer "guten" Hash-Funktion, dass Kollisionen im praktischen Gebrauch selten sind.
quelle
Die Kryptographie befasst sich mit Zahlen und Zeichenfolgen. Grundsätzlich sind alle digitalen Dinge im gesamten Universum Zahlen. Wenn ich Zahlen sage, ist es 0 & 1. Sie wissen, was sie sind, binär. Die Bilder, die Sie auf dem Bildschirm sehen, die Musik, die Sie über Ihren Kopfhörer hören, alles sind Binärdateien. Aber unsere Ohren und Augen werden Binärdateien nicht verstehen, oder? Nur das Gehirn kann das verstehen, und selbst wenn es Binärdateien verstehen kann, kann es keine Binärdateien genießen. Also konvertieren wir die Binärdateien in verständliche Formate wie MP3, JPG usw. Nennen wir den Prozess Codierung . Es ist ein Zwei-Wege-Prozess und kann leicht in seine ursprüngliche Form zurück dekodiert werden.
Hashing
Hashing ist eine andere Kryptografietechnik, bei der Daten, die einmal in eine andere Form konvertiert wurden, niemals wiederhergestellt werden können. In Laymans Begriff gibt es keinen Prozess, der als De-Hashing bezeichnet wird . Es gibt viele Hash-Funktionen , um die Arbeit zu erledigen, wie z. B. sha-512, md5 und so weiter.
Wenn der ursprüngliche Wert nicht wiederhergestellt werden kann, wo verwenden wir ihn dann? Passwörter! Wenn Sie ein Passwort für Ihr Handy oder Ihren PC einrichten, wird ein Hash Ihres Passworts erstellt und an einem sicheren Ort gespeichert. Wenn Sie das nächste Mal einen Anmeldeversuch durchführen, wird die eingegebene Zeichenfolge erneut mit demselben Algorithmus (Hash-Funktion) gehasht und die Ausgabe wird mit dem gespeicherten Wert abgeglichen. Wenn es dasselbe ist, werden Sie angemeldet. Andernfalls werden Sie rausgeworfen.
Credits: wikimedia Durch Anwenden von Hash auf das Passwort können wir sicherstellen, dass ein Angreifer unser Passwort niemals erhält, selbst wenn er die gespeicherte Passwortdatei stiehlt. Der Angreifer hat den Hash des Passworts. Er kann wahrscheinlich eine Liste der am häufigsten verwendeten Passwörter finden und sha-512 auf jedes dieser Passwörter anwenden und sie mit dem Wert in seiner Hand vergleichen. Es wird der Wörterbuchangriff genannt . Aber wie lange würde er das tun? Glauben Sie, dass diese Methode zum Knacken funktionieren würde, wenn Ihr Passwort zufällig genug ist? Alle Passwörter in den Datenbanken von Facebook, Google und Amazon sind gehasht oder sollen zumindest gehasht werden.
Dann gibt es Verschlüsselung
Die Verschlüsselung liegt zwischen Hashing und Codierung. Die Codierung ist ein bidirektionaler Prozess und sollte nicht zur Gewährleistung der Sicherheit verwendet werden. Die Verschlüsselung ist ebenfalls ein bidirektionaler Prozess. Originaldaten können jedoch nur dann abgerufen werden, wenn der Verschlüsselungsschlüssel bekannt ist. Wenn Sie nicht wissen, wie Verschlüsselung funktioniert, machen Sie sich keine Sorgen, wir werden die Grundlagen hier besprechen. Das würde ausreichen, um die Grundlagen von SSL zu verstehen. Es gibt also zwei Arten der Verschlüsselung, nämlich die symmetrische und die asymmetrische Verschlüsselung.
Symmetrische Schlüsselverschlüsselung
Ich versuche die Dinge so einfach wie möglich zu halten. Lassen Sie uns also die symmetrische Verschlüsselung mittels eines Verschiebungsalgorithmus verstehen. Dieser Algorithmus wird zum Verschlüsseln von Alphabeten verwendet, indem die Buchstaben nach links oder rechts verschoben werden. Nehmen wir einen String CRYPTO und betrachten eine Zahl +3. Dann ist das verschlüsselte Format von CRYPTO FUBSWR. Das heißt, jeder Buchstabe wird um 3 Stellen nach rechts verschoben. Hier wird das Wort CRYPTO genannt Klartext , der Ausgang FUBSWR wird der angerufene Ciphertext , wird der Wert der angerufene +3 ist Verschlüsselungsschlüssel (symmetrische Schlüssel) und der gesamte Prozess ist eine Chiffre . Dies ist einer der ältesten und grundlegendsten Verschlüsselungsalgorithmen für symmetrische Schlüssel, und seine erste Verwendung wurde während der Zeit von Julius Caesar gemeldet. Es wurde also nach ihm benannt und ist die berühmte Caesar-Chiffre . Jeder, der den Verschlüsselungsschlüssel kennt und die Umkehrung des Caesar-Algorithmus anwenden und den ursprünglichen Klartext abrufen kann. Daher wird es als symmetrische Verschlüsselung bezeichnet .
Asymmetrische Schlüsselverschlüsselung
Wir wissen, dass bei der symmetrischen Verschlüsselung derselbe Schlüssel sowohl für die Verschlüsselung als auch für die Entschlüsselung verwendet wird. Sobald dieser Schlüssel gestohlen wurde, sind alle Daten verschwunden. Das ist ein großes Risiko und wir brauchen komplexere Techniken. 1976 veröffentlichten Whitfield Diffie und Martin Hellman erstmals das Konzept der asymmetrischen Verschlüsselung, und der Algorithmus wurde als Diffie-Hellman-Schlüsselaustausch bezeichnet . 1978 veröffentlichten Ron Rivest, Adi Shamir und Leonard Adleman vom MIT den RSA- Algorithmus. Diese können als Grundlage der asymmetrischen Kryptographie angesehen werden.
Im Vergleich zur symmetrischen Verschlüsselung gibt es bei der asymmetrischen Verschlüsselung zwei Schlüssel anstelle von einem. Einer wird als öffentlicher Schlüssel bezeichnet , der andere als privater Schlüssel . Theoretisch können wir während der Initiierung das Public-Private generierenSchlüsselpaar zu unserer Maschine. Der private Schlüssel sollte an einem sicheren Ort aufbewahrt und niemals an Dritte weitergegeben werden. Der öffentliche Schlüssel kann, wie der Name schon sagt, mit jedem geteilt werden, der Ihnen verschlüsselten Text senden möchte. Jetzt können diejenigen, die über Ihren öffentlichen Schlüssel verfügen, die geheimen Daten damit verschlüsseln. Wenn das Schlüsselpaar mithilfe des RSA-Algorithmus generiert wurde, sollten sie beim Verschlüsseln der Daten denselben Algorithmus verwenden. Normalerweise wird der Algorithmus im öffentlichen Schlüssel angegeben. Die verschlüsselten Daten können nur mit dem privaten Schlüssel entschlüsselt werden, der Ihnen gehört.
Quelle: SSL / TLS für Dummies Teil 1: Ciphersuite, Hashing, Verschlüsselung | WST ( https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/ )
quelle
quelle