Verschlüsselung kann nicht rückgängig gemacht werden?


9

Ich habe den Eindruck, dass eine verschlüsselte Zeichenfolge nicht entschlüsselt werden kann, sodass der ursprüngliche Wert für immer verloren geht.

Wenn die folgende Zeichenfolge jedoch immer "dominic" (mein Name) ist, kann es keinen logischen Weg geben, sie umzukehren. Da es weder zufällig ist noch auf Datum / Uhrzeit basiert, gibt es eine logische Methode dafür?

0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=

Egal was oder wie oft ich "dominic" (Zeichenfolge) verschlüssele, es ist immer gleich wie oben. Sollte es also keine Möglichkeit geben, eine solche Zeichenfolge zu entschlüsseln?

Beispiel für das, wovon ich spreche:

public string EncryptPassword(string password)
{
    return Convert.ToBase64String(
        System.Security.Cryptography.SHA256.Create()
        .ComputeHash(Encoding.UTF8.GetBytes(password)));
}

3
Sprechen Sie über den kryptografischen Hash eines Namens (häufig in Passwörtern verwendet)? oder die Verschlüsselung (die von einer autorisierten Person entschlüsselt werden soll)?

11
SHA256ist eine kryptografische Hash-Funktion , kein Verschlüsselungsalgorithmus. Es ist eine Einwegfunktion .

1
Obligatorischer Haftungsausschluss: Salt the Hash ( en.wikipedia.org/wiki/Salt_(cryptography) ). Darüber hinaus ist SHA256 in der Regel zu schnell, um keine Probleme mit Brute-Force-Angriffen mit beispielsweise GPUs zu haben. Es wird empfohlen, etwas wie PBKDF2 oder scrypt zu verwenden.
Maciej Piechotka

7
Hashing ist wie ein Fleischwolf. Sie können eine Kuh in Rinderhackfleisch verwandeln, aber nicht umgekehrt.
Neil McGuigan

1
Sind Sie durch die Verschlüsselung mit öffentlichem / privatem Schlüssel verwirrt? Wenn jemand anderes eine Nachricht mit Ihrem öffentlichen Schlüssel verschlüsselt, kann er diese Nachricht nicht selbst entschlüsseln. Nur Sie können dies entschlüsseln - und vielleicht die NSA, der Mossad, der FSB und der Tiroler Geheimdienst.
ott--

Antworten:


39

Die Verschlüsselung kann immer umgekehrt werden. Der Punkt der Verschlüsselung besteht darin, eine Nachricht aufzunehmen und mit einem geheimen Schlüssel zu verschlüsseln, sodass nur eine andere Person, die über den Schlüssel verfügt, die Verschlüsselung umkehren und die Nachricht lesen kann.

Was Sie hier sehen, ist Hashing , was nicht mit Verschlüsselung identisch ist, obwohl bei der Implementierung von Hashes häufig kryptografische Techniken verwendet werden. Die Idee eines Hash ist, dass er komplizierte mathematische Techniken verwendet, um einen neuen Wert zu erstellen, der einem alten Wert zugeordnet wird, der wiederholbar ist. Es gibt keinen Schlüssel und er soll nicht umgekehrt werden. Ein kryptografisch starker Hash wird mit der mathematischen Eigenschaft erstellt, dass es sehr, sehr schwierig ist, absichtlich einen anderen Wert zu erstellen , auf den auch gehasht wird , wenn Sie einen Wert haben, Adessen Hash Wert Bist .CB

Hashes müssen nicht umkehrbar sein, da sie zur Authentifizierung verwendet werden. Wenn Sie mir einen Benutzernamen und ein Passwort geben, möchten Sie wirklich nicht, dass ich dieses Passwort in meiner Datenbank speichere, denn wenn sich jemand einhackt und Zugriff auf meine Datenbank erhält, kann er Ihr Passwort erhalten! Stattdessen würde ich den Hash Ihres Passworts in der Datenbank speichern. Wenn Sie sich dann anmelden, überprüfe ich, ob es einen Benutzernamen gibt, der mit Ihrem übereinstimmt, mit einem Kennworteintrag, der mit dem Hash des von Ihnen gesendeten Kennworts übereinstimmt, und wenn ja, sind Sie authentifiziert, da es sehr schwierig ist, eine Hash-Kollision zu erstellen ( zwei Werte, die auf den gleichen Wert hashen) mit einem guten Hash, daher bin ich mir fast sicher, dass das von Ihnen verwendete Passwort das richtige ist.

Die andere Eigenschaft eines starken kryptografischen Hash ist, dass es sehr schwierig ist, ihn umzukehren. Sie wissen, dass der Wert 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=der Hash für "dominic" ist, weil Sie es gerade ausgearbeitet haben, aber wenn Sie das nicht wussten und nicht wussten, wo Sie anfangen sollten, und alles, was Sie hatten, war 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=, könnten Sie buchstäblich Milliarden brauchen von Jahren, um herauszufinden, dass das Original "dominant" war, wenn der Hash ein guter ist. Dies ist wiederum nützlich, um Kollateralschäden zu vermeiden, falls eine Passwortliste gestohlen wird.


2
Könnte ich nicht einfach eine Liste bekannter Wörter nehmen und sie durchlaufen, bis ich eine Hash-Übereinstimmung gefunden habe? Schlagen Websites deshalb vor, Ihren Passwörtern Großbuchstaben und Zahlen hinzuzufügen, um sie sicherer zu machen?
user1477388

15
@ user1477388: Ja, genau deshalb schlagen Websites dies vor. Dies ist eine bekannte Methode, um Hash-Passwörter anzugreifen: Sie wird aus offensichtlichen Gründen als "Wörterbuchangriff" bezeichnet. Die Verwendung von Wörtern, die nicht im Wörterbuch enthalten sind, ist ein wichtiger Schritt, um sich vor ihnen zu schützen.
Mason Wheeler

1
Sieht so aus, als hätte dies einen guten Einblick in meine "Unfähigkeit zu glauben, dass diese nicht irgendwie rückgängig gemacht werden können" security.stackexchange.com/questions/11717/… Nicht, dass ich sie rückgängig machen möchte / muss; Ich bin nur Neugierig.
user1477388

3
Ein weiterer Vorschlag ist, jedem Passwort etwas Einzigartiges hinzuzufügen, bevor es gehasht wird. Ein Kennwortunterschied von einem Zeichen führt zu einem völlig anderen Hash. Die Idee ist, dass alle Ihre Hash-Ergebnisse eindeutig sind. Andernfalls würde ein Hacker, wenn er den Hash für das Wort "password123" entdeckt, diesen für ALLE Benutzernamen mit diesem bestimmten Hash verwenden. Es hört sich aber so an, als hättest du einen guten Kopf für so etwas, also viel Glück.
Katana314

1
@MasonWheeler: Die Verwendung von Wörtern, die nicht im Wörterbuch enthalten sind, ist nicht unbedingt erforderlich, insbesondere wenn man bedenkt, dass das bei einem typischen Angriff verwendete "Wörterbuch" nichts mit dem Oxford-Wörterbuch zu tun hat, sondern eine Liste von Zeichenfolgen, von denen bekannt ist, dass sie häufig in Kennwörtern verwendet werden . Anstatt zu versuchen, diese Wörter zu vermeiden, ist es besser, beispielsweise 5 zufällige Wörter aus einer Liste von etwa 2000 Wörtern auszuwählen: Eine solche Passphrase dauert fast 100-mal länger, selbst wenn das Wörterbuch mit 2000 Wörtern bekannt ist. Kraft als 8 zufällige Zeichen von 64.
tdammers

9

Was Sie tun, ist per se keine "Verschlüsselung"; es ist "Hashing". Der wesentliche Unterschied zwischen den beiden ist , dass die Verschlüsselung ist leicht umkehrbar (mit dem richtigen Schlüssel natürlich), während Hashing ausgelegt ist äußerst schwierig, andere unter allen Umständen rückgängig als die ursprüngliche Nachricht an erster Stelle zu kennen.

Theoretisch simulieren Hashes ein "zufälliges Orakel", einen hypothetischen Homunkulus mit einem eidetischen Gedächtnis und eine Möglichkeit, vollkommen eindeutige, vollkommen zufällige Zahlen ohne obere Bereichsgrenze zu erzeugen. Sie würden diesem kleinen Mann eine Nachricht geben, und eines von zwei Dingen würde passieren; Entweder hat er die Nachricht noch nie gesehen. In diesem Fall generiert er eine neue Zufallszahl und gibt diese als Digest an, oder er hat diese Nachricht schon einmal gesehen. Er erinnert sich und gibt Ihnen die Nummer, die er generiert hat, als er sie gesehen hat erstes Mal. In diesem theoretischen Modell gibt es keine Beziehung zwischen einer Nachricht und ihrem Digest, und da keine einzelne Zahl jemals zweimal im RNG erscheint, besteht keine Möglichkeit für eine Kollision.

Leider haben wir kein ideales zufälliges Orakel; Die Idee hat praktische Unmöglichkeiten für eine digitale Implementierung, wie die Fähigkeit des Orakels, jede Nachricht, die jemals von irgendjemandem gehasht wurde, effizient zu speichern und effizient abzurufen, und die Fähigkeit der Kunden, eine Zahl zu akzeptieren, die Hunderte oder Tausende von Dezimalstellen umfassen kann in der Länge. Stattdessen haben wir Hash-Funktionen, die irreversible (Einweg-) mathematische Operationen sind, die an der Nachricht selbst arbeiten, um eine deterministische Transformation (dieselbe Nachricht => gleicher Hash) ohne erkennbaren Wert zu erstellenBeziehung zwischen dem Hash und der ursprünglichen Nachricht. Wie in den Kommentaren erwähnt, sollte es auch keine vorhersehbare Änderung des Hash-Werts geben, die durch systematische Änderungen an der Nachricht erzeugt wird. Im Idealfall hätte jedes Bit des Digests eine 50% ige Chance, sich zu ändern, wenn ein einzelnes Bit der Nachricht geändert wird.

Es gibt viele Verwendungsmöglichkeiten für eine Hash-Funktion. Sie werden zur Überprüfung von Herausforderungen verwendet (denken Sie an Anmeldeinformationen wie Kennwörter), ohne dass beide Parteien das Klartextgeheimnis kennen müssen, und sie werden als Prüfsummen verwendet, um zu überprüfen, ob eine Nachricht nicht manipuliert oder beschädigt wurde. Sie werden auch in sogenannten "Proof of Work" -Szenarien verwendet. Rechenaufgaben, die schwer zu erledigen, aber leicht zu überprüfen sind.

Wenn Sie jemals einen Weg finden würden, einen SHA256-Hash-Digest effizient umzukehren, um eine Nachricht (eine beliebige Nachricht) zu erzeugen, die zu diesem Hash führen würde, wäre dies ein Beweis dafür, dass der Hash tatsächlich grundlegend fehlerhaft ist. SHA256 wird in der Tat als sicher angesehen, was bedeutet, dass es keine dokumentierte Methode gibt, egal wie praktisch sie ist, um mit einem Hash-Digest zu beginnen und eine kollidierende Nachricht zu erstellen, die weniger Arbeit erfordert, als einfach jede Möglichkeit auszuprobieren (was für SHA-256 idealerweise 2 ist ^ 256 ~ = 10 ^ 77 Möglichkeiten).


Es könnte auch erwähnenswert sein, dass in einer idealen Hash-Funktion eine Änderung der Eingabe um ein Bit zu einer Änderung von 50% der Ausgabebits führen sollte. Es heißt Lawineneffekt .
Ein

2
@ MichaelKjörling: Genau genommen sollte man erwarten, dass sich jedes Bit mit einer Wahrscheinlichkeit von 50% ändert, was sich von der Erwartung unterscheidet (aber impliziert), dass sich durchschnittlich 50% der Bits ändern.
Dietrich Epp

@DietrichEpp In der Tat und der Wikipedia-Artikel, auf den ich verlinkt habe, machen dies deutlich, aber es ist für den Endbenutzer einfacher, die Anzahl der zwischen zwei Eingaben geänderten Bits zu quantifizieren.
ein CVn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.