Warum sollte ich nicht ' die EZB-Verschlüsselung verwenden?
On Februar 18, 2021 by adminIch verwende Java, um verschlüsselte Zeichenfolgen zu generieren, und erhalte diese Warnung zur Erstellungszeit:
Der EZB-Verschlüsselungsmodus sollte nicht verwendet werden.
Ich frage mich also, warum ich die EZB nicht verwenden sollte und was ich stattdessen verwenden kann ?
Kommentare
- Kommentare sind nicht für eine ausführliche Diskussion gedacht. Diese Konversation wurde in den Chat verschoben .
- Arbeiten Sie beim Zoomen ?;)
Antwort
Warum sollte ich keine EZB-Verschlüsselung verwenden?
Der Hauptgrund, die Verschlüsselung im EZB-Modus nicht zu verwenden, ist, dass es sich nicht um semantisch sicher — Das heißt, das bloße Beobachten von EZB-verschlüsseltem Chiffretext kann Informationen über den Klartext (auch über seine Länge hinaus) verlieren Alle Verschlüsselungsschemata, die beliebig lange Klartexte akzeptieren, lecken bis zu einem gewissen Grad.
Spezifisch Das Problem im EZB-Modus besteht jedoch darin, dass die Verschlüsselung des gleichen Blocks (von 8 oder 16 Byte oder wie groß die Blockgröße der zugrunde liegenden Chiffre auch sein mag) des Klartextes im EZB-Modus immer den gleichen Chiffretextblock ergibt. Auf diese Weise kann ein Angreifer:
- erkennen, ob zwei EZB-verschlüsselte Nachrichten identisch sind;
- erkennen, ob zwei EZB-verschlüsselte Nachrichten ein gemeinsames Präfix haben;
- erkennen, ob zwei EZB-verschlüsselte Nachrichten andere gemeinsame Teilzeichenfolgen gemeinsam haben, solange diese Teilzeichenfolgen an Blockgrenzen ausgerichtet sind; oder
- erkennen, ob (und wo) eine einzelne EZB-verschlüsselte Nachricht sich wiederholende Daten enthält (z. B. lange Leerlauf- oder Nullbyte-Durchläufe, wiederholte Headerfelder oder zufällig wiederholte Phrasen im Text).
/ ul>
Es gibt eine schöne grafische Demonstration dieser Schwachstelle in Wikipedia, bei der dasselbe (rohe, unkomprimierte) Bild sowohl im EZB-Modus als auch im EZB-Modus verschlüsselt wird ein semantisch sicherer Verschlüsselungsmodus (wie CBC, CTR, CFB oder OFB):
Dieses Szenario ist zwar etwas künstlich (normalerweise würde man solche Rohbilder nicht verschlüsseln), aber es demonstriert das Problem mit dem EZB-Modus sehr gut: Wiederholte Bereiche im Eingabebild führen zu sich wiederholenden Mustern in der verschlüsselten Ausgabe, so dass viele großräumige Merkmale des Bildes trotz der Verschlüsselung erkennbar bleiben. In der realen Welt greift ein Kryptoanalytiker eine EZB an. basierte Verschlüsselung Es ist wahrscheinlicher, dass das Schema in einem Hex-Dump des Chiffretextes nach solchen Mustern sucht, aber das Prinzip ist dasselbe.
Ein tatsächlicher Fall dieser Schwäche der EZB-Verschlüsselung, die zu einem realen Datenkompromiss beiträgt, ist angegeben durch das Adobe-Kennwortdatenbankleck 2013 , wie in dieser Antwort beschrieben. Ein Element, das zur Schwere des Lecks beitrug, war, dass Adobe die Passwörter im EZB-Modus verschlüsselt hatte, anstatt sie ordnungsgemäß zu haschen . Auf diese Weise konnten die Angreifer schnell Passwörter finden, die von mehreren Konten gemeinsam genutzt wurden, oder ein gemeinsames Präfix mit anderen Passwörtern (wie Passwort1 und Passwort2 ) teilen und die ungefähre Länge der einzelnen Passwörter ermitteln Passwort.
Der EZB-Verschlüsselungsmodus weist auch andere Schwachstellen auf, z. B. die Tatsache, dass er in hohem Maße formbar ist Klartextblöcke werden separat verschlüsselt. Ein Angreifer kann leicht neue gültige Chiffretexte generieren, indem er Blöcke aus zuvor beobachteten Chiffretexten zusammensetzt.
Die Formbarkeit ist jedoch nur dann ein Problem, wenn die EZB-Verschlüsselung ohne Nachrichtenauthentifizierungscode und wird in dieser Situation (bis zu einem gewissen Grad) von allen anderen nicht authentifizierten Verschlüsselungsmodi
Was soll ich stattdessen verwenden?
Sie sollten eine authentifizierte Verschlüsselung Modus, z. B. GCM , EAX oder OCB .
Persönlich mag ich für Kurznachrichten den SIV-Modus ( RFC 5279 ), wodurch eine zusätzliche Schicht an Missbrauchsresistenz bereitgestellt wird. (Viele andere Verschlüsselungsmodi brechen ziemlich stark ab, wenn dieselbe IV / Nonce versehentlich zum Verschlüsseln mehrerer Nachrichten verwendet wird. Der SIV-Modus behält in dieser Situation alle Sicherheitseigenschaften bei, außer dass bekannt wird, ob die verschlüsselten Nachrichten identisch sind.)
Sie können auch jeden herkömmlichen semantisch sicheren Verschlüsselungsmodus verwenden (z. B. CBC oder CTR ), kombiniert mit einem Nachrichtenauthentifizierungscode (z. B. HMAC ) unter Verwendung der -Verschlüsselung -then-MAC Konstruktion. (Das heißt, Sie sollten zuerst die Nachricht verschlüsseln, dann einen MAC des Chiffretextes berechnen und an den Chiffretext anhängen.) Solange Sie sicherstellen, dass Sie den MAC überprüfen, bevor Sie versuchen, die Nachricht zu entschlüsseln, schützt Sie diese Konstruktion vor die verschiedenen Schwachstellen dieser Modi für aktive Angriffe (ausgewählter Chiffretext).
Für Festplattenverschlüsselung oder ähnliche Anwendungen, bei denen Teile geändert werden müssen Für den Chiffretext, ohne alle Daten neu zu verschlüsseln, sollten Sie einen für diesen Zweck entwickelten Chiffriermodus verwenden, z. B. XTS . Beachten Sie, dass solche Modi im Allgemeinen keinen Widerstand gegen aktive Angriffe bieten und möglicherweise andere Schwächen aufweisen, die vor der Verwendung verstanden werden sollten. Wenn möglich, sollten sie mit einer Form des Integritätsschutzes kombiniert werden, z. B. einem MAC in einem Hash-Baum .
Kommentare
- Was würden Sie in Fällen vorschlagen, in denen Sie Blöcke eines Datenspeichers in beliebiger Reihenfolge lesen / schreiben möchten, vorzugsweise während Sie eine All-One-Blockzuordnung zu einem All-One erstellen? diejenigen blockieren? Meine Neigung wäre, zu verschlüsseln, indem ich die Blockdaten mit einem sehr einfachen Hash der Blocknummer xore, die xor-Operation rückgängig mache / wiederhole, wenn sie einen All-One-Block ergibt, die EZB für das Ergebnis verwendet und mit dem Komplement des Ergebnisses xoring zum Verschlüsseln eines All-One-Blocks [dieses Komplement muss nur einmal für jeden Schlüssel berechnet werden]. Wäre das ein guter Ansatz?
- @supercat: Das ' ist im Grunde Festplattenverschlüsselung , damit Sie die dafür entwickelten Modi verwenden können. Ich glaube, XTS wird als gute Wahl angesehen, obwohl es wie alle Festplattenverschlüsselungsmodi seine Grenzen hat (die Sie verstehen sollten, bevor Sie es verwenden). Wenn möglich, sollte es mit einem MAC kombiniert werden, um sich gegen aktive Angriffe zu verteidigen.
- @IlmariKaronen: Ich denke, " don ' EZB nicht verwenden " ist ein bisschen übertrieben. Ich verstehe die Risiken, aber oft (es sei denn, Ihr Dokument – was Sie verschlüsseln – ist ' nicht sehr geheim, und der Gegner ' Wenn Sie nicht über zu viele Funktionen usw. verfügen, sollten Sie in Ordnung sein.
- @giorgim: ' gibt es wirklich keinen guten Grund EZB zu verwenden (außer als Baustein für andere Modi). So ziemlich jede Kryptobibliothek bietet mindestens den CBC- oder CTR-Modus, und wenn nicht, ist es ' trivial, sich selbst zu implementieren. Wenn Sie einen HMAC (oder CMAC) darauf legen, können Sie ' loslegen.
- @giorgim: Auch wenn Sie nicht ' Es steht kein MAC- oder AE-Modus zur Verfügung. Die Verwendung von CBC ist immer noch strikt besser als die der EZB. Wenn Sie eine MAC-Funktion haben, ist CBC-then-MAC ein perfekter AE-Modus.
Antwort
Sie sollten den EZB-Modus nicht verwenden, da er identische Nachrichtenblöcke (dh die Datenmenge, die bei jedem Aufruf der Blockverschlüsselung verschlüsselt wird) mit identischen Chiffretextblöcken verschlüsselt. Dies ist ein Problem, da sich herausstellt, ob dieselben Nachrichtenblöcke mehrfach verschlüsselt sind. Wikipedia hat eine sehr schöne Illustration dieses -Problems .
Kommentare
- Kommentare sind nicht für eine ausführliche Diskussion; Diese Konversation wurde in den Chat verschoben .
Antwort
Wie @Guut Boy es erwähnte, ist die EZB nicht semantisch sicher, in dem Sinne, dass ein Angreifer, wenn eine Nachricht mit identischen Blöcken verschlüsselt wird, einen gewissen Vorteil darin hat, Informationen über Klartext zu erhalten, indem er nur CipherText beobachtet.
Verwenden Sie vorzugsweise den CBC-Modus, um lange Nachrichten zu verschlüsseln. In diesem Modus wird ein zusätzlicher Parameter namens IV (Anfangswert) eingeführt, den Sie mit der Sitzungsnummer initialisieren, um Angriffe zu verhindern, wenn dieselbe Nachricht zweimal verschlüsselt wird.
Kommentare
- IV steht für Initialisierungsvektor, nicht für Anfangswert.
- 1. Dies ist kein guter Rat. Verwenden der Verschlüsselung ohne Bei der Authentifizierung werden etwa ein Jahrzehnt der Ratschläge von Kryptographen ignoriert. Besser wäre es, authentifizierte Verschlüsselung zu verwenden, wie Ilmari Karonen empfiehlt. 2. Diese Antwort scheint von Ilmari Karonen ' s abgelöst zu werden Antwort.
- Außerdem ist die Tatsache, dass die IV für einen Angreifer unvorhersehbar sein muss (d. h. nicht von zufällig zu unterscheiden), und diese Antwort besagt, dass Sie die Sitzungsnummer verwenden sollten, die normalerweise überhaupt nicht zufällig ist.
Schreibe einen Kommentar