web-dev-qa-db-de.com

Grundlegender Unterschied zwischen Hashing- und Verschlüsselungsalgorithmen

Ich sehe eine Menge Verwirrung zwischen Hashes und Verschlüsselungsalgorithmen und würde gerne weitere Ratschläge von Experten erhalten zu:

  1. Wann werden Hashes und Verschlüsselungen verwendet?

  2. Was unterscheidet einen Hash- oder Verschlüsselungsalgorithmus (von einer theoretischen/mathematischen Ebene), d. H. 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?
nterschied zwischen Verschlüsselung und Hashing

487
Kenny Cason

Nun, Sie könnten es nachschlagen in Wikipedia ... Aber da Sie eine Erklärung wünschen, werde ich hier mein Bestes geben:

Hash-Funktionen

Sie bieten eine Zuordnung zwischen einer Eingabe mit beliebiger Länge und einer Ausgabe mit (normalerweise) fester Länge (oder geringerer 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 Einbahnstraße gibt. Es ist immer eine 1: 1-Zuordnung (was bedeutet, dass es immer Kollisionen geben wird), da jede Funktion eine kleinere Ausgabe erzeugt, als sie eingeben kann.

Der Grund, warum sie schwer (oder praktisch unmöglich) rückgängig zu machen sind, liegt in ihrer internen Arbeitsweise. Die meisten kryptografischen Hash-Funktionen durchlaufen den Eingabesatz viele Male, um die Ausgabe zu erzeugen. Wenn wir uns also jeden Eingabeabschnitt mit fester Länge ansehen (der vom Algorithmus abhängig ist), nennt die Hash-Funktion diesen den aktuellen Status. Es iteriert dann über den Zustand und ändert ihn in einen neuen und verwendet diesen als Rückmeldung an sich selbst (MD5 führt dies 64 Mal für jeden 512-Bit-Datenblock aus). 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 ein Datenblock sind, viele für größere Eingaben). Dann müssten Sie die Iteration für jeden Zustand umkehren. Um zu erklären, warum dies SEHR schwierig ist, stellen Sie sich vor, Sie wollen a und b aus der folgenden Formel ableiten: 10 = a + b. Es gibt 10 positive Kombinationen von a und b, die funktionieren können. Nun überfliege das ein paar Mal: ​​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 Hinzufügung, bei der ein bestimmter Zustand von Iteration zu Iteration beibehalten wird. Echte Hash-Funktionen erledigen viel mehr als eine Operation (MD5 erledigt ungefähr 15 Operationen mit 4 Zustandsvariablen). Und da die nächste Iteration vom Zustand der vorherigen abhängt und die vorherige beim Erstellen des aktuellen Zustands zerstört wird, ist es nahezu unmöglich, den Eingabezustand zu bestimmen, der zu einem bestimmten Ausgabezustand geführt hat (für jede Iteration nicht weniger). Kombinieren Sie dies mit der Vielzahl der damit verbundenen Möglichkeiten, und das Dekodieren eines MD5 beansprucht nahezu unendlich (aber nicht unendlich) viele Ressourcen. So viele Ressourcen, dass es tatsächlich erheblich billiger ist, den Hash zu erzwingen, wenn Sie eine Vorstellung von der Größe der Eingabe haben (für kleinere Eingaben), als wenn Sie sogar versuchen, den Hash zu dekodieren.

Verschlüsselungsfunktionen

Sie bieten eine 1: 1-Zuordnung zwischen Ein- und Ausgängen beliebiger Länge. Und sie sind immer umkehrbar. Das Wichtige ist, dass es mit einer Methode umkehrbar ist. Und es ist immer 1: 1 für einen bestimmten Schlüssel. Nun gibt es mehrere Eingabe: Schlüsselpaare, die möglicherweise dieselbe Ausgabe generieren (in der Regel, 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 aufweist.

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 in diesen Anwendungsfall sehr gut 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 prü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 statt 3 MB speichern). Auf diese Weise wird einfach jede Datei gehasht und mit der gespeicherten Datenbank der Hashes verglichen (Dies funktioniert in der Praxis nicht so gut, da die Kodierung neu erfolgt, die Dateiköpfe geändert werden, aber es handelt sich um einen beispielhaften Anwendungsfall).

Verwenden Sie eine Hash-Funktion, wenn Sie die Gültigkeit der Eingabedaten überprüfen. Dafür sind sie konzipiert. Wenn Sie zwei Eingaben haben und prüfen möchten, ob sie identisch sind, führen Sie beide durch eine Hash-Funktion. Die Wahrscheinlichkeit einer Kollision ist bei kleinen Eingabegrößen (unter der Annahme einer guten Hash-Funktion) astronomisch gering. Deshalb wird es für Passwörter empfohlen. Bei Passwörtern mit bis zu 32 Zeichen hat md5 den vierfachen Ausgabebereich. SHA1 hat (ungefähr) das 6-fache des Ausgaberaums. SHA512 hat ungefähr das 16-fache des Ausgangsraums. Es ist dir egal, wie das Passwort lautete , es ist dir egal, ob es dasselbe 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 wiederherstellen möchten. Beachten Sie, dass das Wort benötigt. Wenn Sie Kreditkartennummern speichern, müssen Sie sie 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. Anschließend werden die übermittelten Daten vom Empfänger einfach mit dem bekannten Wert verschlüsselt und geprüft, ob sie mit der übermittelten 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, bei denen die Integrität der Daten sichergestellt werden soll.

Ein Hinweis zu Hashes für Passwörter:

Ein Schlüsselmerkmal von kryptografischen Hash-Funktionen ist, dass sie sehr schnell zu erstellen und sehr schwierig/langsam rückgängig zu machen sind (so sehr, dass es praktisch unmöglich ist ). Dies wirft ein Problem mit Kennwörtern auf. Wenn Sie sha512(password) speichern, tun Sie nichts, um sich vor Rainbow-Tischen 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 durch die Hash-Funktion zu führen und jedes Ergebnis zu testen.

Das Hinzufügen eines Salzes hilft, da es dem Hash ein wenig unbekannte Daten hinzufügt. Anstatt also etwas zu finden, das zu md5(foo) passt, müssen sie etwas finden, das, wenn es dem bekannten Salz hinzugefügt wird, md5(foo.salt) ergibt (was sehr viel schwieriger zu tun ist). Aber das Geschwindigkeitsproblem ist damit immer noch nicht gelöst, da es nur darum geht, das Wörterbuch durchzublättern, wenn sie das Salz kennen.

Es gibt also Möglichkeiten, damit umzugehen. Eine beliebte Methode heißt Tastenverstärkung (oder Tastenstreckung). Grundsätzlich durchlaufen Sie einen Hash mehrmals (normalerweise Tausende). Das macht zwei Dinge. Erstens wird die Laufzeit des Hashing-Algorithmus erheblich verlangsamt. Zweitens erhöht sich bei richtiger Implementierung (bei jeder Iteration werden Eingabe und Salt zurückgegeben) die Entropie (der verfügbare Platz) für die Ausgabe, wodurch die Wahrscheinlichkeit von Kollisionen verringert wird. Eine einfache Implementierung ist:

var hash = password + salt;
for (var i = 0; i < 5000; i++) {
    hash = sha512(hash + password + salt);
}

Es gibt andere Standardimplementierungen wie PBKDF2 , BCrypt . Diese Technik wird jedoch von etlichen sicherheitsrelevanten Systemen (wie PGP, WPA, Apache und OpenSSL) verwendet.

Das Fazit 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 ...

Noch ein Hinweis zum Trivial Stretching

Unter keinen Umständen die Ausgabe eines Hashes direkt in die Hash-Funktion zurückspeisen :

hash = sha512(password + salt); 
for (i = 0; i < 1000; i++) {
    hash = sha512(hash); // <-- Do NOT do this!
}

Der Grund dafür liegt in Kollisionen. Denken Sie daran, dass alle Hash-Funktionen Kollisionen aufweisen, da der mögliche Ausgabebereich (die Anzahl der möglichen Ausgaben) kleiner ist als der Eingabebereich. Um zu sehen, warum, schauen wir uns an, was passiert. Um dies vorwegzunehmen, nehmen wir an, dass es eine Kollisionswahrscheinlichkeit von 0,001% von sha1() gibt (es ist viel niedriger in der Realität, aber zu Demonstrationszwecken Zwecke).

hash1 = sha1(password + salt);

Jetzt hat hash1 eine Kollisionswahrscheinlichkeit von 0,001%. Aber wenn wir das nächste hash2 = sha1(hash1); ausführen, werden alle Kollisionen von hash1 automatisch zu Kollisionen von hash2. Wir haben also jetzt die Rate von Hash1 bei 0,001%, und der zweite Aufruf von sha1() fügt dem hinzu. Somit hat hash2 eine Kollisionswahrscheinlichkeit von 0,002%. Das sind doppelt so viele Chancen! Jede Iteration fügt dem Ergebnis eine weitere 0.001% Kollisionswahrscheinlichkeit hinzu. Bei 1000 Iterationen stieg die Kollisionswahrscheinlichkeit von unbedeutenden 0,001% auf 1%. Nun ist die Verschlechterung linear und die realen Wahrscheinlichkeiten sind weit kleiner, aber der Effekt ist der gleiche (eine Schätzung der Wahrscheinlichkeit einer einzelnen Kollision mit md5 ist ungefähr 1/(2128) oder 1/(3x1038). Obwohl das klein erscheint, dank dem Geburtstagsangriff ist es nicht wirklich so klein, wie es scheint).

Indem Sie Salt und Passwort jedes Mal neu anhängen, fügen Sie die Daten wieder in die Hash-Funktion ein. Kollisionen einer bestimmten Runde sind also keine Kollisionen der nächsten Runde mehr. Damit:

hash = sha512(password + salt);
for (i = 0; i < 1000; i++) {
    hash = sha512(hash + password + salt);
}

Hat die gleiche Kollisionswahrscheinlichkeit wie die native Funktion sha512. Welches ist was Sie wollen. Verwenden Sie das stattdessen.

712
ircmaxell

Eine Hash-Funktion kann genauso angesehen werden wie das Backen eines Brotlaibs. Sie beginnen mit Inputs (Mehl, Wasser, Hefe usw.) und nach Anwendung der Hash-Funktion (Mischen + Backen) erhalten Sie einen Output: einen Laib Brot.

Der umgekehrte Weg ist außerordentlich schwierig - man kann das Brot nicht wirklich in Mehl, Wasser und Hefe aufteilen - ein Teil davon ging während des Backvorgangs verloren, und man kann nie genau sagen, wie viel Wasser, Mehl oder Hefe verwendet wurde ein bestimmtes Brot, weil diese Informationen durch die Hashing-Funktion (auch bekannt als der Ofen) zerstört wurden.

Viele verschiedene Varianten von Eingaben erzeugen theoretisch identische Laibe (z. B. 2 Tassen Wasser und 1 EL Hefe produzieren genau das gleiche Laib wie 2,1 Tassen Wasser und 0,9 EL Hefe), aber wenn man eines dieser Laibe voraussetzt, kann man es nicht sagen genau welche kombination von eingängen hat es erzeugt.

Verschlüsselung hingegen könnte als Schließfach angesehen werden. Was immer Sie dort hineinstecken, wird wieder herausgenommen, solange Sie den Schlüssel besitzen, mit dem es zuerst verschlossen wurde. Es ist eine symmetrische Operation. Bei einem Schlüssel und einigen Eingaben erhalten Sie eine bestimmte Ausgabe. Bei dieser Ausgabe und demselben Schlüssel erhalten Sie die ursprüngliche Eingabe zurück. Es ist ein 1: 1-Mapping.

156
Marc B

Verwenden Sie Hashes, wenn Sie die ursprüngliche Eingabe nicht wiederherstellen möchten, und verwenden Sie dabei 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.). Die gleiche Eingabe erzeugt immer den gleichen Hash, aber Sie verlieren dabei PRINZIPIELLE Informationen, sodass Sie die ursprüngliche Eingabe nicht zuverlässig reproduzieren können (es gibt jedoch einige Einschränkungen).

Die Verschlüsselung bewahrt grundsätzlich alle Informationen, die Sie in die Verschlüsselungsfunktion eingegeben haben, und erschwert es (im Idealfall) jedem, zur ursprünglichen Eingabe zurückzukehren, ohne einen bestimmten Schlüssel zu besitzen.

Einfaches Beispiel für das Hashing

Hier ist ein einfaches Beispiel, um zu verstehen, warum Hashing (im Allgemeinen) die ursprüngliche Eingabe nicht zurückerhalten kann. Angenommen, ich erstelle einen 1-Bit-Hash. Meine Hash-Funktion nimmt eine Bitfolge als Eingabe und setzt den Hash auf 1, wenn die Eingabe eine gerade Anzahl von Bits enthält, andernfalls 0, wenn eine ungerade Anzahl vorliegt.

Beispiel:

Input    Hash
0010     0
0011     1
0110     1
1000     0

Beachten Sie, dass es viele Eingabewerte gibt, die einen Hash von 0 ergeben, und viele, die einen Hash von 1 ergeben. Wenn Sie wissen, dass der Hash 0 ist, können Sie nicht sicher sein, was die ursprüngliche Eingabe war.

Übrigens, dieser 1-Bit-Hash ist nicht genau erfunden ... werfen Sie einen Blick auf Paritätsbit .

Einfaches Beispiel für die Verschlüsselung

Sie können Text mit einer einfachen Buchstabenersetzung verschlüsseln, z. B. 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, schreiben Sie schreibe nochmal A.

Input   Encrypted
CAT     DBU
Zoo     APP

Genau wie im einfachen Hash-Beispiel wurde diese Art der Verschlüsselung historisch verwendet .

42
Eric J.

Grundlegender Überblick über Hashing- und Verschlüsselungs-/Entschlüsselungstechniken.

Hashing:

Wenn SiehashanyNur-Textwieder können Sienicht denselben Nur-Text aus dem Hash-Text erhalten. Einfach gesagt, es ist ein einseitiger Prozess.

hashing


Verschlüsselung und Entschlüsselung:

Wenn SieverschlüsselnbeliebigeKlartexterneut mit einem Schlüssel, können Siedenselben Klartexterhalten, indem Sieentschlüsselnbei verschlüsseltem Text mit demselben (symmetrischen)/verschiedenen (asymmetrischen) Schlüssel.

encryption and decryption


UPDATE:Um die in der bearbeiteten Frage genannten Punkte anzusprechen.

1. Wann verwende ich Hashes vs. Verschlüsselungen?

Hashingist nützlich, wenn Sie jemandem eine Datei senden möchten. Sie haben jedoch Angst, dass jemand anderes die Datei abfängt und ändert. Wenn Sie also den Hash-Wert öffentlich veröffentlichen, kann der Empfänger sicherstellen, dass es sich um die richtige Datei handelt. Auf diese Weise kann der Empfänger den Hash-Wert der empfangenen Datei berechnen und prüfen, ob er mit dem Hash-Wert übereinstimmt.

Verschlüsselungist gut, wenn Sie sagen, Sie möchten jemandem eine Nachricht senden. Sie verschlüsseln die Nachricht mit einem Schlüssel und der Empfänger entschlüsselt sie mit demselben (oder sogar einem anderen) Schlüssel, um die ursprüngliche Nachricht wiederherzustellen. Credits


2. Was unterscheidet einen Hash- oder Verschlüsselungsalgorithmus (von einer theoretischen/mathematischen Ebene), d. H. Was macht Hashes irreversibel (ohne Hilfe eines Regenbogenbaums)?

Grundsätzlich istHashing eine Operation, die Informationen verliert, aber keine Verschlüsselung. Schauen wir uns den Unterschied auf einfache mathematische Weise an, um uns das Verständnis zu erleichtern . Beide haben natürlich eine viel kompliziertere mathematische Operation mit Wiederholungen

Verschlüsselung/Entschlüsselung (umkehrbar):

Zusatz:

4 + 3 = 7  

Dies kann umgekehrt werden, indem die Summe genommen und einer der Summanden abgezogen wird

7 - 3 = 4     

Multiplikation:

4 * 5 = 20  

Dies kann umgekehrt werden, indem das Produkt genommen und durch einen der Faktoren dividiert wird

20 / 4 = 5    

Hier können wir also annehmen, dass einer der Addends/Faktoren ein Entschlüsselungsschlüssel ist und das Ergebnis (7,20) ein verschlüsselter Text ist.


Hashing (nicht umkehrbar):

Modulo Division:

22 % 7 = 1   

Dies kann nicht rückgängig gemacht werden, da Sie den Quotienten und die Dividende nicht bearbeiten können, um den Divisor wiederherzustellen (oder umgekehrt).

Können Sie eine Operation finden, in der das "?" ist?

1  ?  7 = 22  
1  ?  22 = 7

Hash-Funktionen haben also die gleiche mathematische Qualität wie die Modulo-Division und verlieren die Information.

Credits

37
mrsrinivas

Mein Einzeiler ... im Allgemeinen wollte der Interviewer die unten stehende Antwort.

Hashing ist eine Möglichkeit. Sie können Ihre Daten/Zeichenkette nicht von einem Hash-Code konvertieren lassen.

Die Verschlüsselung erfolgt auf zwei Arten - Sie können die verschlüsselte Zeichenfolge erneut entschlüsseln, wenn Sie den Schlüssel bei sich haben.

25
Shiv Mohan

Eine Hash-Funktion wandelt eine Textmenge mit variabler Größe in einen Text mit fester Größe um.

Hash

Quelle: https://en.wikipedia.org/wiki/Hash_function

Sehen wir es in Aktion. Ich benutze PHP dafür.

HASH:

$str = 'My age is 29';
$hash = hash('sha1', $str);
echo $hash; // OUTPUT: 4d675d9fbefc74a38c89e005f9d776c75d92623e

DEHASH:

SHA1 ist ein One-Way-Hash. Das bedeutet, dass Sie den Hash nicht enthaaren können. Sie können den Hash jedoch brachial erzwingen. Bitte beachten Sie: https://hashkiller.co.uk/sha1-decrypter.aspx .

MD5 ist ein weiterer Hash. Ein MD5-Enthaarer ist auf dieser Website zu finden: https://www.md5online.org/ .


Eine Verschlüsselungsfunktion wandelt einen Text mithilfe eines Verschlüsselungsschlüssels in einen unsinnigen Chiffretext um und umgekehrt. enter image description here

Quelle: https://en.wikipedia.org/wiki/Encryption

Lassen Sie uns in einen PHP Code eintauchen, der die Verschlüsselung handhabt.

--- Die Mcrypt-Erweiterung ---

VERSCHLÜSSELN:

$cipher = MCRYPT_RIJNDAEL_128;
$key = 'A_KEY';
$data = 'My age is 29';
$mode = MCRYPT_MODE_ECB;

$encryptedData = mcrypt_encrypt($cipher, $key , $data , $mode);
var_dump($encryptedData);

//OUTPUT:
string '„Ùòyªq³¿ì¼üÀpå' (length=16)

DECRYPT:

$decryptedData = mcrypt_decrypt($cipher, $key , $encryptedData, $mode);
$decryptedData = rtrim($decryptedData, "\0\4"); // Remove the nulls and EOTs at the END
var_dump($decryptedData);

//OUTPUT:
string 'My age is 29' (length=12)

--- Die OpenSSL-Erweiterung ---

Die Mcrypt-Erweiterung wurde in 7.1 als veraltet eingestuft. und in PHP 7.2 entfernt. Die OpenSSL-Erweiterung sollte in PHP 7 verwendet werden. Siehe die folgenden Codefragmente:

$key = 'A_KEY';
$data = 'My age is 29';

// ENCRYPT
$encryptedData = openssl_encrypt($data , 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($encryptedData);

// DECRYPT    
$decryptedData = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($decryptedData);

//OUTPUT
string '4RJ8+18YkEd7Xk+tAMLz5Q==' (length=24)
string 'My age is 29' (length=12)
16
Julian

Symmetrische Verschlüsselung:

Symmetrische Verschlüsselung kann auch als gemeinsame Schlüssel- oder gemeinsame geheime Verschlüsselung bezeichnet werden. Bei der symmetrischen Verschlüsselung wird ein einzelner Schlüssel zum Ver- und Entschlüsseln des Datenverkehrs verwendet.

enter image description here

Asymmetrische Verschlüsselung:

Asymmetrische Verschlüsselung wird auch als Public-Key-Kryptographie bezeichnet. Die asymmetrische Verschlüsselung unterscheidet sich von der symmetrischen Verschlüsselung hauptsächlich dadurch, dass zwei Schlüssel verwendet werden: einer zur Verschlüsselung und einer zur 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 (zum Beispiel das Internet) einzurichten. Dies wird durch den Austausch öffentlicher Schlüssel erreicht, mit denen nur Daten verschlüsselt werden können. Der ergänzende private Schlüssel, der niemals gemeinsam genutzt wird, wird zum Entschlüsseln verwendet.

enter image description here

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, verdichtet das Hashing eine Nachricht in einen irreversiblen Wert fester Länge oder Hash. Zwei der häufigsten Hashing-Algorithmen im Netzwerk sind MD5 und SHA-1.

enter image description here

Lesen Sie hier mehr: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/

10

Verschlüsselungs- und Hash-Algorithmen funktionieren auf ähnliche Weise. In jedem Fall muss Verwirrung und Diffusion zwischen den Bits erzeugt werden. Eingekocht, Verwirrung schafft eine komplexe Beziehung zwischen dem Schlüssel und dem Chiffretext und Diffusion verbreitet die Information 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, um jeden Block zu verarbeiten. Der Unterschied besteht darin, dass nicht jeder Block beibehalten wird von chiffretext werden sie destruktiv, deterministisch zu einer festen länge zusammengeführt

4
Justin Morgan
  1. 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 Wert, den ein Benutzer nach dem Hashing eingegeben hat, mit dem Wert in Ihrem Repository übereinstimmt. Mit der Verschlüsselung können Sie zwei Wege gehen.

  2. 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 Einbahnstraße wollen.

4
hvgotcodes

wenn es um Sicherheit bei der Datenübertragung geht, verwenden Sie Verschlüsselung. Für jede Verschlüsselung ist ein Schlüssel erforderlich

wenn es um Autorisierung geht, verwenden Sie Hashing. Es gibt keinen Schlüssel für Hashing

Beim Hashing wird eine beliebige Datenmenge (binär oder Text) verwendet und ein Hash mit konstanter Länge erstellt, 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 ursprünglichen Daten natürlich nicht aus dem Hash neu erstellen, aber Sie können die Daten erneut hashen, um zu sehen, ob derselbe Hashwert generiert wird. Einweg-Unix-basierte Passwörter funktionieren auf diese Weise. Das Passwort wird als Hash-Wert gespeichert. Um sich bei einem System anzumelden, wird das eingegebene Passwort gehasht und der Hash-Wert mit dem Hash des realen Passworts 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 auf denselben Hash-Wert abgebildet werden, spricht man normalerweise von einer "Hash-Kollision". Aus Sicherheitsgründen ist eine der Eigenschaften einer "guten" Hash-Funktion, dass Kollisionen im praktischen Gebrauch selten sind.

4
ayush