Hash und Verschlüsselung? Was ist Hash, was ist Hash-Verschlüsselung, was ist Hash-Decryption?

Hashing und Verschlüsselung

Es gibt ein häufiges Missverständnis, dass Hashing und Verschlüsselung dasselbe sind. Das sind sie nicht. Hash ist irreversibel. Nehmen Sie das folgende Beispiel als Beispiel:

$ echo-n Password123 | md5sum
42f749ade7f9e195bf475f37a44cafcb-

Wir geben die Zeichenfolge "Password123" an den MD5-Algorithmus (algo), der mathematische Operationen ausführt und den erzeugten hexadezimal codierten Hash zurückgibt. Die einzige Möglichkeit, den gleichen Hash-Ausgabewert zu erhalten, besteht darin, das algo original einzugeben. Es gibt Konflikte, aber wir können später darüber reden.

Die Ausgabe der meisten Hash-Algorithmen ist eine hexadezimal codierte binäre Zeichenfolge fester Länge. Andere, wie dieses Beispiel, verwenden eine base64-codierte Zeichenfolge als Ausgabe. Bitte beachten Sie, dass die Länge immer gleich ist:

{SHA} uNF8eZRJ8jmr8WTjyocRJPVpe7w =
{SHA} lqdu/Zr6o2dgIER8Up1/7lcUtgw =
{SHA} qYUOwLMlDEuukA5HCT4LR1kQzco =
{SHA} MXZBCpyWJ7TTs1w2kgGJslwNwTg =
{SHA} 2sAPLaUh9Mz0bI + XxKEg7qyABe8=

TL; Dr.

Verschlüsselung ist reversibel, Hash ist nicht


Ich möchte nicht zu viel über Verschlüsselung reden (weil diese Dinge für Bücher sind), aber es ist wichtig, Hash-Strings von verschlüsselten Strings unterscheiden zu können. Die Verschlüsselung füllt in der Regel die Zeichenfolge, die eine bestimmte Länge erfüllt, bevor die Verschlüsselung stattfindet. Es benötigt auch einen Schlüssel (oder ein Passwort), um es zu entschlüsseln. Wenn ein verschlüsseltes Passwort verwendet wird, ändert sich die Zeichenfolge je nach eingegebener Länge. Wenn Sie eine Reihe von Ciphertext-Passwörtern mit unterschiedlicher Länge sehen, haben Sie möglicherweise mit Verschlüsselung statt mit Hashing zu tun. AES-256-CBC Beispiel Verschlüsselung von Zeichenfolgen und zugehörigen Klartexten (mit dem Schlüssel "ASDF"):

 foobar                           |   U2FsdGVkX19G + KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
foobarfoobar               |   U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
foobarfoobarfoobar   |   U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX + ldatuqv2xexeaeoww0xg/EXJUe9aSUz 

$   cat   encrypted_passwords 
U2FsdGVkX19G + KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX + lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$   für   i   in   `cat   encrypted_passwords`;   do   echo   $i   |   openssl   enc   -base64   -d   -aes-256-cbc   -pass   pass:asdf;   echo;   fertig 
foobar 
foobarfoobar 
foobarfoobarfoobar 

Jetzt denken Sie vielleicht: Sie haben wahrscheinlich recht. Dass das Schlüsselmaterial für das System zugänglich sein muss, bedeutet jedoch, dass sich im Wesentlichen ein Klartext-Master-Passwort irgendwo befindet – sei es als RSA-Schlüssel oder Passwort oder Passwort in einer Datei, in einer Datenbank eingebettet, in einer Anwendung festcodiert oder irgendwo im Speicher. pfft, niemand ' wird asdf als Schlüssel verwenden, um die Passwörter ihrer Benutzer '

zu verschlüsseln Verwenden Sie die gleiche Zeichenfolge für MD5:

 foobar                           |   3858f62230ac3c915f300c664312c63f 
foobarfoobar               |   59faa421729e846dd800dce59943bfc0 
foobarfoobarfoobar   |   1352aadab322d1a033c27964be0965db 

Das Hash-Passwort ist bei weitem nicht perfekt, es ist tatsächlich ein bisschen schlecht, aber es ist schlechter als die Verschlüsselung wegen dessen, was es versucht zu erreichen. Benutzer wählen die absolute Mindestanforderung häufiger als not und können sie auch auf mehreren Seiten verwenden. Viele "hacks" sind eigentlich nichts anderes als Angriffe auf die Wiederverwendung von Anmeldeinformationen. Wenn der ursprüngliche Kompromiss darin besteht, Verschlüsselung zu verwenden, dann ist der einzige Anstrengung, den der Angreifer unternehmen muss, darin, den Schlüssel zu finden, der alle Passwörter entschlüsselt. Bei Hashes müssen sie zumindest Anstrengungen unternehmen, um sie zu knacken. Bei Verwendung mit modernen Algorithmen wie sha512crypt, bcrypt, scrypt oder argon2 können Hash-Werte mit großem Aufwand geknackt werden.



Pickle

Das Hinzufügen von Salz ist das Hinzufügen einer Zeichenfolge zum Passwort vor dem Hash. Das Salz für jeden Hash sollte eindeutig sein und in der Regel zufällig ausgewählt werden, da es darum geht, den gleichen Klartext-"Passwort"-Hash-Wert jedes Mal einen anderen Wert zu haben. Das macht das Leben für Passwortknacker schwierig, denn um das Wort "Passwort" für jeden von 1.000 Benutzern zu überprüfen, jeder Benutzer hat ein einzigartiges SALT, müssen sie das Werk 1.000 Mal-einmal pro Benutzer/SALT-tun. Dies bedeutet auch, dass sie vorkompilierte Wörterbücher oder Regenbogentabellen (normalerweise...) nicht effizient verwenden können, da sie ein benutzerdefiniertes Pro-Salt benötigen.

Websites vermasseln das manchmal und verwenden universelle Salze für alle Benutzer; Das widerspricht dem Zweck.

Hier ist der SHA1-Hash mit Salz:


 b353977827f67a4ae0318f3a9447fae1c13d9d90:b8d18ca 
|___________________________________________| 
                                    hash                                     |     Salz 
                                        | 
                                                                        separator 

Der Klartext dieses Hashes ist "Passwort". Es hat einen Salzwert von "b8d18ca" und verwendet SHA1 ($salt.$pass) in der API. Das bedeutet, dass der Algorithmus den Klartext von Passwort erhält, Salz generiert und vor dem Klartext hinzugefügt. Wenn eine Website oder App versucht, Ihr Passwort in Zukunft zu überprüfen, nimmt sie Ihr Klartext-Passwort als Eingabe, liest den SALT-Wert im gespeicherten Hash, fügt ihn vor dem von Ihnen gewählten Passwort hinzu und vergleicht den generierten Hash-Wert mit dem gespeicherten Hash-Wert. Cracking Wenn Sie nicht wissen, dass ein Teil davon Salz ist, erzeugt der Hash den folgenden Klartext:

b8d18capassword

Da der Algorithmus Klartext-Eingabe vornimmt, können Salz und der generierte Hash-Wert für den Benutzer transparent bleiben. Wenn der Algorithmus beim Cracking Salz ist, müssen wir Salz kennen, damit wir ihn bereitstellen können, wenn wir den Kandidaten-Klartext generieren.

Wenn es richtig durchgeführt wird, kann das Salzen das Rissen zeitaufwändiger machen. Mit Random salt zwingst du Cracker, Zeit zu verschwenden, wenn du versuchst, Hash-Werte zu knacken, die nicht mit salt übereinstimmen. Dies erfüllt ungefähr den erforderlichen Aufwand für device_speed/number_of_salts, da wir für jedes Salz einen Kandidaten generieren müssen. Wenn das Salz statisch ist, dann ist die mathematische Operation die gleiche... speed_of_device/1. Eine andere Möglichkeit, dies zu sehen:

 Unsere   GTX   980   cracks   SHA1 ($salt.$pass)   bei   3576,8   MH/s   oder   3,5   Milliarden   Kandidaten   pro   Sekunde 
Unsere   Hashliste   enthält   1000   einzigartige   Salze 

3.500.000.000   /   1000   =   3.500.000   Kandidaten   pro   Sekunde 

Das ist drei Größenordnungen langsamer, mit einem Verlust von 99,9 %. Bei statischem Salz sieht es so aus:

 Unsere   GTX   980   cracks   SHA1 ($salt.$pass)   bei   3576,8   MH/s   oder   3,5   Milliarden   Kandidaten   pro   Sekunde 
Unsere   Hashliste   enthält   1   einzigartige   Salz 
               
3.500.000.000   /   1   =   3.500.000.000   Kandidaten   pro   Sekunde 

Wenn das keinen Sinn macht, lesen Sie weiter, wir werden später ein schönes Diagramm haben...


Iteration

Eine weitere häufige Verbesserung im Vergleich zum einfachen „hash this plaintext "besteht darin, dass „hash this plaintext, then hash this result, then hash this result" Tausende von Mal wiederholt wird. Dies ermöglicht es, ein einzelnes Kandidatenpasswort zu versuchen, das Passwort-Cracker-Programm muss Tausende von Operationen durchführen. Dies wird als Iteration, Schleife oder variable Kosten bezeichnet. Einige Passwort-Hash-Algorithmen verwenden hartcodierte Iterationsrunden; Andere Git. Machen Sie es in einem Teil des Hash selbst konfigurierbar. Zum Beispiel verwendet md5crypt () MD5, einschließlich Salz, und läuft genau 1000 Mal. sha512crypt () verwendet sha512, enthält ein Salz und führt eine konfigurierbare Anzahl von Schleifen durch (standardmäßig 5.000).

Iterationen beeinflussen hauptsächlich die Berechnungszykluskosten des Hash-Algorithmus, nicht die Speicherauslastung oder andere Faktoren. Diese sind auch wichtige Angriffe, wenn die Gestaltung optimiert ist, um bestimmte Arten von Hash-Typen zu widerstehen, aber das ist zu unkraut, um hier zu diskutieren.


Der Einfluss des Hash-Typs auf die Crack-Geschwindigkeit

Schauen wir uns einige Beispiele an, um den Einfluss der Wahl des Hash-Algorithmus zu demonstrieren, sei es gesalzt, die Verwendung mehrerer Iterationen usw. Angenommen, ein Angreifer sammelt 1.000 Hash-Werte von Benutzern von einer infizierten Website, und sie wollen nur einen einfachen Angriff durchführen, um jeden Passwort-Hash-Wert zu testen-143 Millionen Passwort-Kandidaten.

Der Hash-Typ, der von einer infizierten Website verwendet wird, wird einen enormen Einfluss auf die Zeit haben, die der Angreifer durch den Angriff benötigt. Hier ist ein (relativ, ungefähr) Diagramm, wie viele Sekunden es braucht, um den Angriff abzuschließen, je nach verwendeter Hash-Art, wo die Standard-Grafikkarte:

Na, das nützt nichts! Die stärksten Hash-Typen sind viel langsamer, aber die schnelleren Typen werden einfach auf nichts zerquetscht. Versuchen wir es nochmals mit der gleichen Datengröße, indem wir die logarithmische x-Achsenzeit verwenden. Wenn die Balken von links nach rechts verschoben werden, werden sie um die Potenz von 10 erhöht:

Also einige wichtige Punkte sind: Einzelrunden sind einfacher als mehrere Runden und ohne Salz als mit Salz, wenn Sie einige Passwort-Hashes knacken möchten. Umgekehrt, wenn bestimmte Unternehmen oder Websites eine Datenverletzung mit Benutzerdaten ankündigen, a) ist es am besten, dass das Passwort gehascht wurde und nicht nur Klartext ist; b) Sie sind am besten gesalzt und nicht nur gehascht; c) Es ist besser, dass sie die ganze Zeit starke Multi-Runden Salzhash verwenden, nicht nur eine einzelne Runde.



Identifizierung des Hash-Typs

Bevor er versucht, einen gegebenen Passwort-Hash zu knacken, ist es dem Cracker überlassen, herauszufinden, welcher Hash-Algorithmus verwendet wird, um ihn zu implementieren. Die Identifizierung von Hash-Typen ist oft einfach, aber nicht immer. Crackers treffen häufig fundierte Vermutungen basierend auf Hinweisen wie Hash-Länge und Format. Letztendlich ist der einzige Weg, sicher zu sein, dass die Hash-Typ-Ratung richtig ist, ob der Hash geknackt wurde.

Hier und hier gibt es einige ausgezeichnete Ressourcen für diese Aufgabe, die alle zeigen, wie übliche Hash-Werte aussehen.

Das Paket "hash-identifier" (hier erhältlich) ist in Kali Linux verfügbar, das hilft, unbekannte Hash-Typen zu identifizieren.



Kollision

Ein Kollision tritt auf, wenn zwei unterschiedliche Eingänge zur gleichen Hash-Ausgabe führen. Das ist schlimm (offensichtlich). Für Passwörter bedeutet dies wahrscheinlich, dass ich Ihr eigentliches Passwort möglicherweise nicht geknackt habe, aber da ich eine Eingabe gefunden habe, die den gleichen Hash-Wert erzeugt, kann ich den einfachen Textwert verwenden, um das System zu täuschen, dass das Passwort legitim ist.

Microsoft Office verwendet in seinem Dokumentenschutz einen Algorithmus, der seit Jahren zu Konflikten anfällig ist. Es ist nicht ungewöhnlich, mehrere Konflikte für einen einzelnen Hash zu finden, die alle das Dokument freischalten.

Sobald ein Konflikt gefunden wird, wird der Algorithmus tatsächlich zerstört. Wenn es einmal passiert, ist es statistisch gesehen sehr wahrscheinlich, dass es wieder passiert. Das einzige, was uns im Wege steht, ist Zeit und Verarbeitungsfähigkeit. Da Algorithmen robuster werden, erfordert das Generieren von Kandidaten-Algorithmen und das Vergleichen von Hash-Ausgaben, um nach ihnen zu suchen, mehr Kapazität und Zeit. Infolgedessen werden Designer immer besser darin, Algorithmen zu erstellen, die weniger anfällig für Konflikte sind.


Vorheriger Artikel:Hashcat-Passwort - Hardware-Knacken
Nächster Artikel:Was ist HashCat? Der erste Schritt zur Entschlüsselung des Passworts (Eingang)
  • Word/Excel/Pdf/PPT/RAR/zip/7z在线密码破解
  • offfice、PDF、压缩文件、WPS、在线密码恢复
  • hashcatonline.com在线密码破解版权所有2010-2025