it-swarm-eu.dev

Den AES-Verschlüsselungsschlüssel anhand des Klartextes und seines Chiffretextes berechnen?

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 (unter Verwendung von AES, 128-Bit-Schlüssel) und in Oracle gespeichert, dann später von Oracle abgerufen und entschlüsselt (d. H. Oracle selbst sieht die unverschlüsselten Zeichenfolgen nie).

Ich bin auf diese eine Spalte gestoßen, die eine von zwei Zeichenfolgen sein wird. Ich mache mir Sorgen, dass jemand diese beiden Werte bemerkt und vermutlich herausfindet, um den AES-Schlüssel herauszufinden.

Wenn zum Beispiel jemand sieht, dass die Spalte entweder Chiffretext Nr. 1 oder Nr. 2 ist:

  • Chiffretext # 1:

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

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

und kennt die entsprechenden Klartexte:

  • Klartext Nr. 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 der Verschlüsselungsschlüssel "Buffalo" ist?

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 kann. Bedeutet dies, dass ich stattdessen zu einem 192-Bit- oder 256-Bit-Schlüssel wechseln oder eine andere Lösung finden sollte?

(Nebenbei bemerkt, hier sind zwei weitere Chiffretexte für dieselben Klartexte, jedoch 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 # 2 A ("Chicago"):

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

[Verwandte Frage: Kann die IV bei Verwendung von AES und CBC ein Hash des Klartextes sein? ]

31

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: Das heißt Known-Klartext-Angriff , 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.

Aber es gibt hier noch einen anderen, potenziell gefährlichen Angriff: a Ciphertext Indistinguishablity Attack . Aus Wikipedia:

Die 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 einen von zwei möglichen Werten enthält. 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 überhaupt verschlüsselt haben.

Schadensbegrenzung: Um sich dagegen zu schützen, machen Sie Ihre Verschlüsselung nicht deterministisch (oder erscheinen dem Angreifer zumindest nicht deterministisch), so dass wiederholte Verschlüsselungen derselben erfolgen Klartext liefert verschiedene Chiffretexte. 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 sicherer Zufallszahlengenerator , um eine neue IV für jede Zeile 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.

45
Mike Ounsworth

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

Ein paar Dinge können jedoch noch gesagt werden:

  • Mit einem Klartext und dem entsprechenden Chiffretext kann ein Angreifer verifizieren einen potenziellen Schlüsselwert angeben.
  • Die 2n-1 Wert 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 hatn. 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 einfügen. 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 ein Verkettungsmodus wie CBC und einen Initialisierungsvektor (dies hängt vom Modus ab; für CBC ein 16-Byte-Zufallswert - - eine neue IV für jeweils verschlüsselter Wert) (dies kann auch den Informationsverlust vom vorherigen Punkt beheben).
15
Thomas Pornin

Die Antwort: Nein, der AES-Schlüssel kann in diesem Szenario nicht wiederhergestellt werden. AES ist gegen bekannte Klartextangriffe 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.

P.S. 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 Infusion verwenden. (Sie sollten wahrscheinlich auch einen Nachrichtenauthentifizierungscode (MAC) verwenden, um den Chiffretext zu authentifizieren und Änderungen daran zu verhindern.)

5
D.W.

Salz deine 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

3
Morons

AES ist nicht so einfach wie das Bauen eines Rainbow-Tisches. 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 Rainbow-Tisches (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, was dies bedeutet, um das Ergebnis brutal zu erzwingen.

Die realistische Sorge ist, dass jemand mit Zugriff auf die Datenbank eine Zeichenfolge aus einem anderen Feld einfügen kann (vermutlich, weil Sie keinen zufälligen Füllwert in der Spalte pro Element verwenden. Oder Seeding.)

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

2
Ori