it-swarm.com.de

Für die Verschlüsselung mit AES 256 benötige ich IV?

Ich beschäftige mich mit der Verschlüsselung mit AES mit einem 256-Bit-Schlüssel und stelle fest, dass eine Reihe von Methoden in verschiedenen Sprachen verfügbar sind, z. B. http://php.net/manual/en/function.openssl-encrypt.php) , und ich stelle fest, dass der IV-Parameter optional ist. Bedeutet dies, dass ich die AES-Verschlüsselung/-Entschlüsselung mit einer einzelnen 256-Bit-Zeichenfolge als Schlüssel vollständig implementieren kann? Welchen Zweck erfüllt die IV, und wird die Sicherheit erheblich verringert, wenn ich sie weglasse?

Entschuldigung für meine Unwissenheit, ich bin mit dem Kopf voran in eine Aufgabe hineingeworfen worden, bei der ich mich ziemlich desorientiert fühle und versuche, alles zusammenzufügen :)

Vielen Dank!

21
DanH

Wenn Sie jeden Schlüssel nur einmal verwenden, ist es in Ordnung, keine IV zu verwenden. Wenn Sie einen Schlüssel mehrmals verwenden, sollten Sie jedes Mal eine andere IV verwenden, damit ein (Schlüssel-, IV-) Paar nicht wiederverwendet wird.

Die genauen Anforderungen für die IV hängen vom gewählten Verkettungsmodus ab, aber ein zufälliger 128-Bit-Wert ist normalerweise in Ordnung. Es sollte für jede Nachricht, die Sie verschlüsseln, unterschiedlich sein. Speichern Sie es neben dem Chiffretext, normalerweise als Präfix.

12
CodesInChaos

Angenommen, Sie verschlüsseln zwei Nachrichten mit demselben Schlüssel und die beiden Nachrichten beginnen mit denselben 16 Byte Klartext. (16 Byte ist die Blockgröße für AES, unabhängig von der Schlüsselgröße.) Wird der erste Chiffretextblock derselbe sein? Wenn dies der Fall ist, geben Sie bereits einige Informationen an den Angreifer weiter. Ob diese Informationen vertraulich sind oder nicht, hängt von Ihrer Anwendung ab, ist aber bereits ein schlechtes Zeichen. Wenn die Verschlüsselung mehr als das Zeichen der Nachrichten verliert, macht sie ihren Job nicht.

Die Grundidee einer IV besteht darin, jeder Nachricht auf prinzipielle Weise ein wenig zufälligen Inhalt voranzustellen. Wie dies genau funktioniert, hängt vom Modus ab. (Die AES-Kernoperation funktioniert nur mit 16-Byte-Blöcken. Ein Modus ist eine Möglichkeit, dies auf längere Nachrichten auszudehnen.) Beispiel: CBC , the Die Verschlüsselung jedes Blocks wird aus dem Schlüssel, dem Klartextblock und dem Chiffretext des vorherigen Blocks berechnet. Für den allerersten Block wird die IV anstelle des Chiffretextes des nicht existierenden vorherigen Blocks verwendet. Die IV wird normalerweise im Klartext neben dem Chiffretext gesendet. Normalerweise werden die ersten 16 Bytes der verschlüsselten Nachricht gesendet.

CTR Modus verwendet technisch einen Zähler und keine IV, aber operativ funktionieren sie sehr ähnlich: Ein 16-Byte-Zufallswert wird vom Absender zufällig generiert und gesendet am Anfang der verschlüsselten Nachricht. Im CTR-Modus ist die Wiederverwendung dieses Werts für eine andere Nachricht katastrophal, da die CTR den Klartext mit einem aus dem Schlüssel und dem Zähler abgeleiteten Pseudozufallsstrom XOR-verknüpft. Wenn Sie zwei verschlüsselte Nachrichten haben, die denselben Zählerwert verwenden, ist deren XOR das XOR der beiden Klartexte).

Es gibt mehr Angriffe gegen falsch ausgewählte IVs als ich hier aufgelistet habe. Generieren Sie für jede Nachricht eine zufällige IV (mit einem Zufallsgenerator in kryptografischer Qualität, mit dem Sie auch einen Schlüssel generieren würden), und alles wird gut.

Es gibt eine Ausnahme: Wenn Sie für jede Nachricht einen neuen Schlüssel generieren, können Sie eine vorhersagbare IV auswählen (alle Bits 0 oder was auch immer). Sie müssen weiterhin einen Modus mit einer IV verwenden (EZB ist nicht in Ordnung, z. B. werden Wiederholungen im Klartext angezeigt, da zwei identische Eingabeblöcke dieselbe Verschlüsselung haben). Dies ist jedoch ein seltener Fall (er entsteht zur Speicherung, nicht zur Kommunikation).

Beachten Sie, dass die Verschlüsselung a priori nur die Vertraulichkeit der Daten gewährleistet, nicht deren Integrität. Je nachdem, was Sie mit den Daten tun, kann dies ein Problem sein. Insbesondere wenn ein Angreifer vorläufige Chiffretexte zur Entschlüsselung einreichen oder zusätzliche zu verschlüsselnde Klartexte bereitstellen kann, kann dies einige Informationen offenlegen. Einige Modi wie EAX und GCM bieten authentifizierte Verschlüsselung =: Ein Chiffretext wird nur entschlüsselt, wenn er echt ist. Verwenden Sie nach Möglichkeit eine davon.

Beachten Sie auch, dass AES-128 ist in der Praxis genauso sicher wie AES-256 .

Wenn Sie mit Ihrer Arbeit nicht vertraut sind, versuchen Sie, eine Bibliothek auf hoher Ebene zu verwenden, anstatt sich direkt mit der Krypto auseinanderzusetzen.