Frage:
Warum muss IV bei der AES-CBC-Verschlüsselung nicht geheim sein?
Martin Vegter
2016-05-04 15:21:22 UTC
view on stackexchange narkive permalink

Laut Wikipedia muss der Initialisierungsvektor (IV) bei Verwendung des CBC-Betriebsmodus nicht geheim sein. Hier ist das Schema der CBC-Verschlüsselung (auch aus Wikipedia):

Enter image description here

Was ist, wenn ich eine Klartextdatei verschlüssele, in der sich der erste Block befindet? Eine bekannte, standardisierte Struktur wie ein Header?

Stellen wir uns das folgende Szenario vor:

Ich verschlüssele file.pnm mit AES-CBC . Die pnm -Datei hat eine bekannte Header-Struktur, wie z. B.:

  P61200 800255  

Darüber hinaus sind die Abmessungen (1200 x 800) ) und Farbmodus (P6) können anhand der Größe der verschlüsselten Datei erraten werden.

Wenn sowohl IV als auch der erste Klartextblock bekannt sind, beeinträchtigt dies nicht das Ganze CBC-Kette?

Es ist ein Problem, wenn der Gegner die IV kennt, bevor Sie die Daten verschlüsseln.Sobald die Daten verschlüsselt wurden, muss die IV nicht mehr geheim gehalten werden.
Diese Frage scheint sich ausschließlich auf die kryptografische Theorie zu beziehen (im Gegensatz zur * Verwendung * der Kryptografie zur Implementierung eines Sicherheitssystems, das hier zum Thema wäre).Obwohl es hier bereits einige gute Antworten erhalten hat (teilweise aufgrund der erheblichen Community-Überschneidungen zwischen Krypto und Sicherheit), sollte es möglicherweise besser auf [crypto.se] migriert werden.
Der einfachste Weg zu erkennen, warum die IV nicht geheim sein muss, besteht darin, den ersten Block mit dem zweiten Block zu vergleichen.Der Chiffretext muss eindeutig nicht geheim sein.Und die IV dient als Chiffretexteingabe für den ersten Block.Wenn der erste Block mit einer bekannten IV nicht sicher wäre, wäre der zweite Block mit einem bekannten Chiffretext nicht sicher, und der Chiffretext ist bekannt.Wenn also der zweite Block sicher ist, muss die IV nicht geheim gehalten werden.
@David Schwartz - Wie kann AES-CBC bei der Festplattenverschlüsselung (LUKS) verwendet werden, wenn der Chiffretext (dh die Festplattensektoren) nicht statisch ist?Die IV ändert sich jedes Mal, wenn Daten auf die Festplatte geschrieben werden.
@David Schwartz - Mir ist klar, dass dies möglicherweise nicht zum Thema gehört. Deshalb habe ich eine neue [Frage] erstellt (http://security.stackexchange.com/questions/122377/how-can-aes-cbc-be-used-for-luks)-verschlüsselung-wenn-der-chiffretext-nicht-statisch ist)
Sechs antworten:
Polynomial
2016-05-04 17:48:43 UTC
view on stackexchange narkive permalink

Ich denke, es ist einfacher, dies in seine Bestandteile aufzuteilen und sie als separate Einheiten zu betrachten: AES und CBC.

AES selbst besteht nicht "im Grunde aus dem XOR-Zusammenfügen von Blöcken des Blocks" - es ist eine viel kompliziertere Angelegenheit. AES ignoriert die Interna für einen Moment und gilt als sicher, da es ohne Kenntnis des Schlüssels praktisch unmöglich ist, den Klartext oder Informationen über den Klartext wiederherzustellen, wenn nur ein verschlüsselter Block vorhanden ist, oder sogar in Situationen, in denen Sie Teile davon erhalten den Klartext und Sie müssen den Rest finden. Ohne den Schlüssel könnte AES genauso gut eine Einwegfunktion sein (und es gibt MAC-Schemata, die darauf angewiesen sind!). Die technischen Details rund um die Sicherheit von AES und ähnlichen Blockchiffren zu diskutieren, ist äußerst aufwändig und kann in einer Antwort nicht behandelt werden. Es genügt jedoch zu sagen, dass Tausende von Kryptographen sich seit fast zwei Jahrzehnten damit befasst haben und niemand etwas entfernt Praktisches gefunden hat Bedingungen eines Angriffs.

Das oben veröffentlichte Diagramm beschreibt CBC. Blockchiffren wie AES sollen sicher sein, um einen Block mit einem geheimen Schlüssel zu verschlüsseln. Das Problem ist, dass wir selten nur einen Block verschlüsseln wollen, sondern einen Datenstrom unbestimmter Länge. Hier kommen Blockmodi wie CBC ins Spiel.

Blockmodi zielen darauf ab, Chiffren für die Verschlüsselung mehrerer Blöcke mit demselben Schlüssel sicher zu machen. Der einfachste Blockmodus ist die EZB, die diesbezüglich keine Sicherheit bietet. Bei der EZB wird jeder Block unabhängig mit demselben Schlüssel verschlüsselt, ohne dass zwischen den Blöcken Daten eingespeist werden. Dadurch werden Informationen auf zwei Arten verloren: Erstens, wenn Sie zwei identische Klartextblöcke haben, erhalten Sie zwei identische Chiffretextblöcke, wenn Sie denselben Schlüssel verwenden. Zweitens erhalten Sie zwei identische Chiffretext-Streams für zwei Verschlüsselungen derselben Nachricht mit demselben Schlüssel. Dies ist ein Problem, da hier Informationen zum Klartext verloren gehen.

CBC löst dieses Problem durch Einführung eines "Kaskaden" -Effekts. Jeder Klartextblock wird mit dem vorherigen Chiffretextblock xoriert, was dazu führt, dass ursprünglich gleiche Klartextblöcke im Verschlüsselungsschritt nicht mehr gleich sind, wodurch keine gleichen Chiffretextblöcke mehr erzeugt werden. Für den ersten Klartextblock gibt es keinen vorherigen Chiffretextblock (Sie haben noch nichts verschlüsselt), und hier kommt die IV ins Spiel. Überlegen Sie sich für einen Moment, was passieren würde, wenn wir anstelle einer IV nur Nullen verwenden würden der -1-te Block (d. h. der imaginäre Chiffretextblock "vor" dem ersten Klartextblock). Während der Kaskadeneffekt dazu führen würde, dass gleiche Klartextblöcke unterschiedliche Chiffretextblöcke erzeugen, würde dieselbe gesamte Nachricht jedes Mal auf dieselbe Weise kaskadieren, was zu einem identischen Chiffretext führt, wenn dieselbe vollständige Nachricht mehrmals mit demselben Schlüssel verschlüsselt wird. Die IV löst dies. Wenn Sie eine eindeutige IV auswählen, sind keine zwei Chiffretexte gleich, unabhängig davon, ob die zu verschlüsselnde Klartextnachricht jedes Mal gleich oder unterschiedlich ist.

Dies sollte Ihnen hoffentlich helfen, zu verstehen, warum die IV nicht funktioniert. Ich muss nicht geheim sein. Das Wissen um die IV bringt nirgendwo einen Angreifer, da die IV nur dazu dient, die Ungleichheit der Chiffretexte sicherzustellen. Der geheime Schlüssel schützt die tatsächlichen Daten.

Um dies noch weiter zu betonen, benötigen Sie nicht einmal die IV, um alle bis auf den ersten Block zu entschlüsseln. Der Entschlüsselungsprozess für CBC funktioniert umgekehrt: Entschlüsseln Sie einen Block mit dem geheimen Schlüssel und xor das Ergebnis mit dem vorherigen Chiffretextblock. Mit Ausnahme des allerersten Blocks kennen Sie den vorherigen Chiffretextblock (Sie haben den Chiffretext), sodass bei der Entschlüsselung nur der Schlüssel bekannt ist. Der einzige Fall, in dem Sie die IV zur Entschlüsselung benötigen, ist der allererste verschlüsselte Block, bei dem der vorherige Chiffretextblock imaginär ist und durch die IV ersetzt wird.

Eine Schwäche bei CBC besteht darin, dass, wenn die beiden Nachrichten zufällig denselben ersten Chiffretextblock ergeben haben, das xor der entsprechenden Blöcke in den beiden Nachrichten das xor der Initialisierungsvektoren ist.Wenn andererseits zwei Nachrichten zufällig den gleichen Chiffretextblock an einer anderen Stelle haben, ist das xor der entsprechenden Blöcke in den beiden Nachrichten das xor der vorhergehenden Blöcke im Chiffretext (zu dem ein Gegner vermutlich auch würdeZugang haben).
@supercat Das ist wahr.Ich fand es ein bisschen viel, mich mit den Schwächen von CBC, Polsterung usw. zu befassen, und konzentrierte mich stattdessen auf die Kernthemen und Absichten rund um die Frage von OP.Wenn ich auf alles eingehen würde, wäre das eine unglaublich lange Antwort.
@supercat Hmm, während ich Ihren Standpunkt sehe, sehe ich das Problem nicht.Der Angreifer, der die Konversation abhört, hat auch mit normalem CBC Zugriff auf die IVs, da diese im Klartext gesendet werden.Es gibt also keinen wirklichen Unterschied zwischen den beiden Situationen.Außerdem erhalten Sie am Ende die gleichen Chiffretextblöcke, wobei sehr selten davon ausgegangen wird, dass IVs zufällig ausgewählt werden (P_1 \ xor IV_1 = P_2 \ xor IV_2 sollte bis bday p. SEHR selten sein) und da jede anständige Chiffre sein sollteVerhalten sich meistens wie eine zufällige Permutation, also wieder sqrt {2 ^ n} von bday p.zum Verfolgen von Chiffretextblöcken.
@supercat Ahh, ich sehe Ihren Standpunkt tatsächlich, obwohl ich ihn nicht in dem sehe, was Sie geschrieben haben.Angenommen, Sie erhalten zu Beginn denselben Chiffretextblock, können Sie das xor der Klartextblöcke abrufen.Dies geschieht jedoch auch, wenn Sie denselben Chiffretextblock irgendwo in der Mitte erhalten (C_1 \ xorP_1 = C_2 \ xorP_2 ergibt C_1 \ xor C_2 = P_1 \ xor P_2) und Sie C_1 und C_2 kennen.Das Argument über die Seltenheit eines solchen Ergebnisses gilt jedoch weiterhin.
@DRF: Ein gutes Kryptosystem soll vermeiden, etwas über die relative Zusammensetzung zweier Chiffretexte preiszugeben.Darüber hinaus ist es nicht unplausibel, dass die Wahrscheinlichkeit, dass Dateien mit identischen Chiffretexten beginnen, viel größer sein kann als der Zufall, wenn ein System nicht darauf achtet, dass IVs in Bezug auf den zu verschlüsselnden Text niemals systematisch variieren.
@DRF: Ich habe manchmal gedacht, dass es sinnvoll wäre, ein Kryptosystem zu haben, das die Möglichkeit beinhaltet, nach etwa einem Drittel der Runden eine xor-Stufe hinzuzufügen.Das Hinzufügen eines vollständigen AES-Block-Krypta-Zyklus zu jedem horizontalen Pfeil im obigen Diagramm würde die oben genannten Schwachstellen beseitigen, aber die Verarbeitungszeit verdoppeln.Das Ausführen des xor mitten in einem AES-Zyklus scheint die zusätzliche Zeit zu minimieren, und ich kann nicht sehen, wie es neue Schwachstellen hinzufügen würde, aber da ich kein Experte bin, könnte mir etwas fehlen.
@supercat Das Problem dabei ist, dass jede Statuswiederherstellung in diesem Modus es Ihnen ermöglichen würde, eine reduzierte Version von AES anzugreifen, was viel praktischer ist.
@Polynomial: Fairer Punkt.Auf der anderen Seite scheint es immer noch übertrieben zu sein, zwei volle Runden AES zu laufen.Vielleicht wäre es am besten, eine nicht verschlüsselte Permutationsfunktion hinzuzufügen?Selbst wenn es relativ mies wäre, würde ich denken, dass dies die Nützlichkeit von Informationen, die gewonnen werden könnten, wenn man bemerkt, dass entsprechende Teile von zwei Dateien denselben Chiffretext enthalten, erheblich verringern würde.
@supercat Eine bessere Option ist die Verwendung eines Modus wie GCM oder EAX, der nicht unter diesem Problem und vielen anderen häufigen Problemen mit CBC leidet.
Sjoerd
2016-05-04 15:34:24 UTC
view on stackexchange narkive permalink

Nein, da der Schlüssel geheim ist.

Der Block "Blockverschlüsselung" im Diagramm verschlüsselt die Daten abhängig vom Schlüssel. Das XOR im Diagramm bietet nicht die Sicherheit, die Verschlüsselung jedoch. Das XOR und das IV sollen nur sicherstellen, dass für jeden Block derselbe Klartext als unterschiedlicher Chiffretext verschlüsselt wird.

Wenn Sie den Klartext, iv und den verwendeten Verschlüsselungsalgorithmus kennen, können Sie den Schlüssel nicht wiederherstellen?Ich meine, was in der Box "Block Cipher Encryption" passiert, ist eine perfekt umkehrbare Operation, keine Einweg-Hash-Funktion.
@MartinVegter: Sie benötigen den Schlüssel, um ihn umkehrbar zu machen.Es ist nicht so einfach wie "Chiffretext = Klartext * Schlüssel + IV", wo Sie leicht einen der Parameter abrufen können, wenn Sie die anderen kennen.
@Yuriko - wissen Sie das tatsächlich oder spekulieren Sie nur?Haben Sie einen Link, um Ihre Ansprüche zu begründen?Nach allem, was ich durch einen (kurzen) Blick auf die Wikipedia-Beschreibung verstehen konnte, besteht "AES" im Wesentlichen darin, Teile des Blocks wiederholt zusammenzufügen.Die XOR-Operation ist kommutativ und assoziativ, was sie (wieder nach meinem Grundverständnis) reversibel macht.AES-Verschlüsselung ist keine Einweg-Hash-Funktion.
@MartinVegter [AES ist einseitig] (http://stackoverflow.com/questions/810533/is-it-possible-to-reverse-engineer-aes256), wenn Sie den Schlüssel nicht haben.
@MartinVegter: es ist eine Tatsache: Sie können AES-CBC nicht * einfach * ohne den Schlüssel umkehren.(In Bezug auf Berechnungen) Sie sollten unter [Crypto.SE] (https://crypto.stackexchange.com) nachfragen, ob Sie weitere Informationen wünschen.Es * nicht * nur XOR, es * verschlüsselt / ersetzt * auch die Bytes.
@Sjoerd One-Way würde bedeuten, dass Sie es in eine Richtung berechnen können.Ohne den Schlüssel können Sie jedoch weder verschlüsseln noch entschlüsseln.
DRF
2016-05-04 19:07:26 UTC
view on stackexchange narkive permalink

Alle modernen Verschlüsselungsmethoden (AES, Blowfish usw.) sind wesentlich sicherer als erwartet. Lassen Sie uns kurz einige Angriffe betrachten, gegen die solche Chiffren resistent sind.

Bekannter Klartextangriff - In diesem Fall gehen wir davon aus, dass der Angreifer Zugriff auf viele Klartextblöcke sowie entsprechende verschlüsselte Chiffretextblöcke hat unter einem bestimmten Schlüssel K. Sein Ziel ist es, K zu finden.

Ausgewählter Klartextangriff - In diesem Fall nehmen wir an, dass der Angreifer viele Klartextblöcke auswählen und die entsprechenden Chiffretextblöcke unter einem bestimmten Schlüssel verschlüsseln kann K. Sein Ziel ist es, K zu finden.

Ausgewählter Chiffretext-Angriff - In diesem Fall nehmen wir an, dass der Angreifer viele Chiffretextblöcke auswählen kann, für die er die entsprechenden Klartextblöcke unter einem bestimmten Schlüssel K entschlüsselt bekommt Sein Ziel ist es, K zu finden.

Ausgewählter adaptiver Chiffretextangriff - In diesem Fall nehmen wir an, dass der Angreifer viele Chiffretextblöcke auswählen kann, für die er die entsprechenden Klartextblöcke unter einem bestimmten Schlüssel K entschlüsselt und dann kann er diesen Prozess mit seinem neuen Wissen wiederholen. Sein Ziel ist es, K zu finden.

Wenn in einem dieser Szenarien ein Angriff gefunden wird, der es schafft, K für eine moderne Chiffre zu erhalten, wird eine solche Chiffre für defekt erklärt und nicht weiter verwendet. Eigentlich sind die Anforderungen viel strenger. Wenn ein Angriff gefunden wird, der zeigen kann, dass Sie auch nur teilweise Informationen über K erhalten können, sagen wir, dass die Parität bereits eine große Sache ist. Oder wenn Sie zeigen können, dass Sie den Schlüssel K nicht wirklich finden können, aber deutlich besser als Brute Force (sogar 2 ^ 110 vs 2 ^ 126 werden normalerweise als publikationswürdig angesehen werden), um danach zu suchen, wird die Chiffre normalerweise für gebrochen erklärt

Fazit: Nein, Sie können den Schlüssel einer Chiffre nicht erhalten, nur weil Sie einen Klartextblock und den entsprechenden Chiffretext kennen.

Trisped
2016-05-05 00:30:57 UTC
view on stackexchange narkive permalink

Für die IV gelten dieselben Sicherheitsanforderungen wie für die verschlüsselten Blöcke.

Damit CBC funktioniert, müssen Sie die unverschlüsselten Daten im aktuellen Block mit den verschlüsselten Daten des vorherigen Blocks XOR-verknüpfen. Da es vor dem ersten Block keinen Block gibt (so dass kein verschlüsselter Block erhalten werden kann), wird stattdessen eine IV verwendet.

Luis Casillas
2017-02-17 09:00:33 UTC
view on stackexchange narkive permalink

Erzählen wir ein Gleichnis! Hier sind die Teilnehmer:

  1. Alice, der Absender
  2. Bob, der Empfänger
  3. Eve, der Lauscher
  4. Jake, Eves hoffnungslos wenig hilfreiche Assistentin
  5. ol>

    Alice sendet eine verschlüsselte Nachricht an Bob. Eva fängt den Chiffretext ab und versucht ihn zu entschlüsseln. Um ihr zu "helfen", wirft Jake 128 Mal eine faire Münze, schreibt seine Ergebnisse auf, codiert sie als Hexadezimalzahl und gibt sie an Eve weiter: 1eff4bb16388e2ee263eb5a8a2bf56b1 . Eve ist verwirrt darüber, aber Jake besteht darauf, dass die Ergebnisse dieser zufälligen Münzwürfe ihr helfen, Alices Botschaft zu entschlüsseln.

    Würden Sie nicht denken, dass Jake völlig verrückt ist? Die Ergebnisse von Jakes 128 Münzwürfen haben nichts mit dem Klartext der Nachricht zu tun, die Alice Bob gesendet hat, oder mit dem Schlüssel, mit dem sie sie verschlüsselt hat. Eve kann also unmöglich etwas über den Klartext der Nachricht aus Jakes Münzwürfen lernen!


    Und deshalb muss der IV für CBC-Modus nicht geheim sein. CBC erfordert für jede Verschlüsselung eine zufällige IV. Die IVs sind daher völlig unkorreliert mit den Klartexten oder den Schlüsseln; Die Kenntnis der IV enthüllt also keine Informationen über den Klartext.

Kishore
2016-05-04 15:50:00 UTC
view on stackexchange narkive permalink

Der verwendete Initialisierungsvektor ist eine Zufallszahl, die auch als Nonce bezeichnet wird und in Kombination mit einem geheimen Schlüssel die Originaldaten vollständig unlesbar macht. Die Daten werden beim ersten XOR mit Klartextdaten randomisiert. Zusätzliche Verschlüsselung mit geheimen Schlüsseln erschwert das Lesen noch mehr. Daher muss IV im Wesentlichen nicht geheim sein, da die Verschlüsselung mit einem geheimen Schlüssel die erforderliche Geheimhaltung bietet. Auch die Daten in der verschlüsselten Datei können in AES-CBC nicht erraten werden, da sie in viele Verschlüsselungsrunden gehen.

Eine IV und eine Nonce unterscheiden sich semantisch.Eine IV impliziert einen eindeutigen, * unvorhersehbaren * Wert.Ein Nonce impliziert lediglich einen eindeutigen Wert.Dies ist eine wichtige Unterscheidung, da die Vorhersagbarkeit der IV die Sicherheit des CBC-Modus zerstört.


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 3.0-Lizenz, unter der er vertrieben wird.
Loading...