Frage:
Den AES-Verschlüsselungsschlüssel anhand des Klartextes und seines Chiffretextes berechnen?
Null Pointers etc.
2011-03-11 07:17:07 UTC
view on stackexchange narkive permalink

Ich habe die Aufgabe, Datenbanktabellen in Oracle zu erstellen, die verschlüsselte Zeichenfolgen enthalten (d. h. die Spalten sind RAW). Die Zeichenfolgen werden von der Anwendung verschlüsselt (mit AES, 128-Bit-Schlüssel) und in Oracle gespeichert, dann später aus Oraclean abgerufen und entschlüsselt (dh Oracle selbst sieht die unverschlüsselten Zeichenfolgen nie).

Ich bin gekommen Ich mache mir Sorgen, dass jemand die beiden Werte bemerkt und vermutlich herausfindet, um den AES-Schlüssel herauszufinden.

Zum Beispiel, wenn jemand die Spalte sieht ist entweder Chiffretext Nr. 1 oder Nr. 2:

  • Chiffretext Nr. 1:

      BF, 4F, 8B, FE, 60, D8,33, 56, 1B, F2,35,72, 49,20, DE, C6.  
  • Chiffretext Nr. 2:

      BC, E8,54, BD, F4, B3,36,3B, DD, 70,76,45, 29,28,50,07.  

und kennt die entsprechenden Klartexte:

  • Klartext # 1 ("Detroit"):

      44,00,65,00, 74,00 , 72,00, 6F, 00,69,00, 74,00,00,00.  
  • Klartext Nr. 2 ("Chicago"):

      43,00,68,00, 69,00,63,00, 61,00,67,00, 6F, 00,00,00.  

kann er daraus schließen, dass die Verschlüsselung Der Schlüssel ist "Buffalo"?

  42,00,75,00, 66,00,66,00, 61,00,6C, 00, 6F, 00,00,00.  

Ich denke, dass es nur einen 128-Bit-Schlüssel geben sollte, der Klartext Nr. 1 in Chiffretext Nr. 1 konvertieren könnte. Bedeutet dies, dass ich zu einem 192-Bit- oder 256-Bit-Schlüsselinstead gehen sollte oder eine andere Lösung finden?

(Nebenbei bemerkt, hier sind zwei weitere Chiffretexte für denselben Klartext, aber mit einem anderen Schlüssel.)

  • Chiffretext # 1 A ("Detroit"):

      E4,28,29, E3, 6E, C2,64, FA, A1, F4, F4,96, FC, 18,4A, C5.  
  • Chiffretext Nr. 2 A ("Chicago"):

      EA, 87,30, F0, AC, 44, 5D, ED, FD, EB, A8,79, 83,59,53, B7.  

[Verwandte Frage: Bei Verwendung von AES und CBC, kann die IV ein Hash des Klartextes sein?]

Welchen Modus verwenden Sie? Wenn Sie einen Stream-Modus wie CTR verwenden, können Sie in eine Situation geraten, in der der Schlüssel nicht wiederhergestellt werden kann, der Klartext jedoch wiederhergestellt werden kann.
Fünf antworten:
Mike Ounsworth
2016-03-15 20:44:47 UTC
view on stackexchange narkive permalink

Ich füge eine Antwort als Community-Wiki hinzu, weil ich glaube, dass die akzeptierte Antwort gefährlich irreführend ist. Hier ist meine Argumentation:

Die Frage ist, ob die AES-Schlüssel abgeleitet werden können. In dieser Hinsicht ist die akzeptierte Antwort richtig: Dies wird als bekannter Klartextangriff bezeichnet, und AES ist gegen diese Art von Angriff resistent. Ein Angreifer kann dies also nicht nutzen, um den Schlüssel abzuleiten und mit der gesamten Datenbank davonzukommen.

Hier spielt sich jedoch ein weiterer potenziell gefährlicher Angriff ab: a Ciphertext Indistinguishablity Attack. Aus Wikipedia:

Ununterscheidbarkeit von Chiffretext ist eine Eigenschaft vieler Verschlüsselungsschemata. Wenn ein Kryptosystem die Eigenschaft der Ununterscheidbarkeit besitzt, kann ein Gegner intuitiv keine Paare von Chiffretexten anhand der von ihm verschlüsselten Nachricht unterscheiden.

Das OP hat uns gezeigt, dass diese Spalte eine enthält zwei mögliche Werte, und da die Verschlüsselung deterministisch ist (dh keine zufällige IV verwendet), kann der Angreifer sehen, welche Zeilen denselben Wert haben. Der Angreifer muss lediglich den Klartext für diese Spalte für eine einzelne Zeile ermitteln und die Verschlüsselung für die gesamte Spalte geknackt haben. Schlechte Nachrichten, wenn Sie möchten, dass diese Daten privat bleiben - ich gehe davon aus, dass Sie sie zuerst verschlüsselt haben.

Schadensbegrenzung: Um sich davor zu schützen, führen Sie Ihre Verschlüsselung durch nicht deterministisch (oder dem Angreifer zumindest nicht deterministisch erscheinen), so dass wiederholte Verschlüsselungen desselben Klartextes unterschiedliche Chiffretexte ergeben. Sie können dies beispielsweise tun, indem Sie AES im CBC-Modus (Cipher Block Chaining) mit einem zufälligen Initialisierungsvektor (IV) verwenden. Verwenden Sie einen sicheren Zufallszahlengenerator, um für jede Zeile eine neue IV zu generieren und die IV in der Tabelle zu speichern. Auf diese Weise kann der Angreifer ohne den Schlüssel nicht erkennen, welche Zeilen übereinstimmenden Klartext haben.

Meine eigene Antwort, die derzeit akzeptiert wird, ist ein bisschen alt und ich war mir zu diesem Zeitpunkt des Angriffs auf die Ununterscheidbarkeit von Chiffretext nicht bewusst.Ich würde meine eigene löschen, aber es sieht so aus, als ob ich eine akzeptierte Antwort nicht löschen kann.
@VitorPy Wow.Ich respektiere dich dafür.
@VitorPy Sie können es wahrscheinlich markieren, damit der Moderator darauf aufmerksam wird, dass es nicht akzeptiert wird (in diesem Fall lassen Sie es aus historischen Gründen offen).
@VitorPy Moderatoren haben tatsächlich keine Möglichkeit, eine Antwort zu akzeptieren (und wir wünschen uns nicht oft, dass wir dies tun!). Sie können die Frage an das OP kommentieren und ihn dazu bringen, sie auszutauschen.Das heißt, ich glaube nicht, dass Ihre Antwort * per * falsch * ist (der Schlüssel ist immer noch nicht abrufbar, was gefragt wurde), es ist einfach inkompetenten Wrt, was Mike hier aufwirft.
Thomas Pornin
2011-07-17 04:28:09 UTC
view on stackexchange narkive permalink

Wenn für eine Blockverschlüsselung mit einem n -Bit-Schlüssel bei einem Klartextblock und dem entsprechenden Chiffretext der Schlüssel in weniger als 2 n-1 erraten werden kann sup> Schritt im Durchschnitt, dann wird diese Blockverschlüsselung als "kaputt" bezeichnet und Kryptographen legen Wert darauf, sie nicht zu verwenden. Das AES ist (noch) nicht kaputt. Keine Sorge.

Es können jedoch noch einige Dinge gesagt werden:

  • Mit einem Klartext und dem entsprechenden Chiffretext kann ein Angreifer überprüfen ein potenzieller Schlüsselwert.
  • Der Wert 2 n-1 sup> ist tatsächlich halb so groß wie der Schlüsselraum. Die Idee ist, dass der Angreifer alle möglichen Schlüssel ausprobieren kann, bis einer übereinstimmt. Im Durchschnitt muss er die Hälfte der Tasten ausprobieren, bevor er die richtige trifft. Dies setzt voraus, dass der Schlüsselraum die Größe 2 n sup> hat. Sie haben immer noch die Möglichkeit, den Schlüsselraum zu verkleinern: Wenn Sie beispielsweise entscheiden, dass Ihr Schlüssel der Name einer US-Stadt ist, ist die Anzahl der möglichen Schlüssel sehr viel geringer (es dürfen nicht mehr als 100000 Städte in den USA sein). . Daher erhalten Sie die versprochene 128-Bit-Sicherheit nur dann, wenn Ihr Schlüsselgenerierungsprozess tatsächlich einen 128-Bit-Schlüssel erzeugt.
  • Sie verschlüsseln anscheinend jeden Wert, indem Sie ihn direkt in einen AES-Kern stecken. Da AES deterministisch ist, bedeutet dies, dass zwei Zellen mit demselben Wert denselben verschlüsselten Block ergeben, und jeder Angreifer kann dies bemerken. Mit anderen Worten, Sie verlieren Informationen darüber, welche Zellen einander gleich sind. Abhängig von Ihrer Situation kann dies ein Problem sein oder auch nicht. Sie sollten sich dessen bewusst sein.
  • Sie sagen nicht, wie Sie mit Werten umgehen, die länger als 16 Byte sind. Dies ist kein einfaches Problem. Im Allgemeinen erfordert dies einen Verkettungsmodus wie CBC und einen Initialisierungsvektor (dies hängt vom Modus ab; für CBC einen 16-Byte-Zufallswert - a neue IV für jeden verschlüsselten Wert) (dies kann auch den Informationsverlust vom vorherigen Punkt beheben).
Gemäß Ihrer Definition ist AES fehlerhaft, da die Rechenkomplexität um ~ 3 Bit reduziert wurde: https://www.schneier.com/blog/archives/2011/08/new_attack_on_a_1.html
D.W.
2011-07-18 07:00:29 UTC
view on stackexchange narkive permalink

Die Antwort: Nein, der AES-Schlüssel kann in diesem Szenario nicht wiederhergestellt werden. AES ist gegen Angriffe im bekannten Klartext geschützt. Dies bedeutet, dass der Angreifer den AES-Schlüssel nicht wiederherstellen kann, selbst wenn er den Klartext und den entsprechenden Chiffretext kennt (seine Verschlüsselung unter einem unbekannten AES-Schlüssel). Insbesondere kann der Angreifer den AES-Schlüssel nicht schneller wiederherstellen, als einfach mögliche Schlüssel nacheinander auszuprobieren. Dies ist ein Prozess, der länger dauert als die Lebensdauer unserer Zivilisation, vorausgesetzt, der AES-Schlüssel wird zufällig ausgewählt.

PS Mir ist aufgefallen, dass alles, was Sie für die Verschlüsselung verwenden, keine IV zu verwenden scheint. Dies ist ein Sicherheitsrisiko. Ich weiß nicht, welchen Betriebsmodus Sie verwenden, aber Sie sollten einen angesehenen Verschlüsselungsmodus (z. B. CBC-Modusverschlüsselung, CTR-Modusverschlüsselung) mit einer zufälligen IV verwenden. Die Tatsache, dass Sie durch mehrmaliges Verschlüsseln derselben Nachricht jedes Mal denselben Chiffretext erhalten, ist ein Sicherheitsleck, das besser vermieden werden sollte. Sie können dieses Leck vermeiden, indem Sie eine Standardbetriebsart mit einer geeigneten IV verwenden. (Sie sollten wahrscheinlich auch einen Nachrichtenauthentifizierungscode (MAC) verwenden, um den Chiffretext zu authentifizieren und Änderungen daran zu verhindern.)

Morons
2011-03-11 08:55:25 UTC
view on stackexchange narkive permalink

Salzen Sie Ihre Verschlüsselung.

Auf diese Weise enthält Ihre Verschlüsselung keine Muster. (Es gibt auch andere Vorteile!)

https://stackoverflow.com/questions/5051007/what-is-the-purpose-of-salt

Für die Verschlüsselung lautet der übliche Begriff nicht Salt, sondern Initialization Vector oder IV. http://en.wikipedia.org/wiki/Initialization_vector http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
Ori
2011-07-17 04:50:00 UTC
view on stackexchange narkive permalink

AES ist nicht so einfach wie nur einen Regenbogentisch zu bauen. Das erste, was Sie erkennen müssen, ist, dass die Tabelle einen Initialisierungsvektor benötigt. Solange Sie dies regelmäßig ändern, würde das Erstellen eines Regenbogentisches (was nicht wirklich realistisch ist) sehr, sehr lange dauern. Größenordnungen lang. Da eine typische Regenbogentabelle im Wesentlichen zweidimensional ist, benötigen Sie im Wesentlichen einen Würfel mit Ergebnismengen, um sowohl die IV als auch den Schlüssel zu ermitteln.

Wenn Sie den Beitrag von Thomas Pornin lesen, geht er ziemlich detailliert darauf ein Dies bedeutet, dass das Ergebnis brutal erzwungen wird.

Die realistische Sorge ist, dass jemand mit Zugriff auf die Datenbank einen String aus einem anderen Feld einfügen kann (vermutlich, weil Sie keinen Zufall verwenden Auffüllen des Werts in der Spalte pro Element. Oder Seeding.)

Wenn Sie den Wert setzen, tritt dieses Problem nicht auf, und der einzige (realistische) Angriff auf den Chiffretext selbst wird erheblich erschwert .



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...