2016-05-06 7 views
0

Ich entwickle eine Anwendung, die mit einer DB kommuniziert, die sich auf einem VPS befindet. Ich muss eine Information, verschlüsselt mit AES-256, in meiner DB speichern.AES 256 Verschlüsselung/Entschlüsselung ohne IV

Wenn ich richtig bin, wenn ich verschlüsseln, gibt es einen IV-Parameter, der generiert wird und für jede Verschlüsselung unterschiedlich ist. Aber wenn ich entschlüssele, habe ich diesen Parameter nicht, weil ich nur den Schlüssel und den verschlüsselten Text in der DB habe.

Was kann ich tun, um dieses Problem zu lösen?

+0

Verwenden Sie den gleichen Schlüssel für mehr als eine Verschlüsselungsoperation? –

+0

Ja ich benutze den gleichen Schlüssel für die Verschlüsselung aller Daten auf DB – Giorgio

+0

Die IV ist kein geheimer Wert; Sie können es neben jedem verschlüsselten Wert im Klartext speichern. –

Antwort

2

Sie müssen den Initialisierungsvektor irgendwo speichern. Da im CBC-Modus der IV der "nullte" Block des Chiffretextes ist, speichern manche Leute ihn als Präfix für den Chiffretext. Die meisten Entschlüsselungsbibliotheken auf niedriger Ebene erwarten dies jedoch nicht, daher muss die Anwendung normalerweise einen Wrapper bereitstellen, der das Hinzufügen dieses Präfixes nach der Verschlüsselung und das Entfernen vor der Entschlüsselung übernimmt.

Idealerweise sollten Sie verschlüsselte Werte mit einigen Metadaten speichern, die den verwendeten Verschlüsselungsalgorithmus sowie alle erforderlichen Parameter angeben und angeben, welcher Schlüssel (siehe unten!) Verwendet wird. Dies würde die IV für eine Blockchiffre beinhalten, die CBC verwendet. Ein Standardformat dafür ist die Cryptographic Message Syntax, oder PKCS # 7. Da es sich um einen Standard handelt, verfügen Sie wahrscheinlich über mehrere Optionen für eine Open-Source-Bibliothek, die mit dem Format umgehen kann.

Mithilfe dieser Metadaten können Sie beispielsweise Schlüssel im Zeitverlauf drehen oder Daten in neue Algorithmen migrieren. Sie müssen nicht jeden Wert auf dieselbe Weise mit demselben Schlüssel verschlüsseln.

Hinweis: Wenn ich sage, dass die Metadaten den verwendeten Schlüssel anzeigen, bedeutet dies natürlich nicht, dass der Schlüssel selbst enthalten ist! Bei Pre-Shared Keys ist es nur eine Bezeichnung, die Ihnen sagt, welcher Schlüssel auf Ihrem großen Schlüsselbund die Payload entschlüsseln wird. Für die kennwortbasierte Verschlüsselung gibt es Informationen darüber, wie aus dem implizierten Kennwort ein korrekter Schlüssel abgeleitet werden kann.

1

Sie können die IV mit dem Chiffretext verketten (ihre Länge ist bekannt und konstant), oder Sie können sie nebeneinander in der DB speichern. Die IV ist kein Geheimnis; es stellt lediglich sicher, dass die Blockchiffre für jede Verschlüsselung anders initialisiert wird, so dass die Brute-Forcing-Verschlüsselung einer Datei nicht alle anderen beeinträchtigt.

+0

"so dass Brute-forcing eine Datei Entschlüsselung nicht alle anderen kompromittiert" ist aus offensichtlichen Gründen falsch. Brute Forcing würde das Abrufen des Schlüssels bedeuten (was für AES bei einem gut gewählten Schlüssel sowieso unmöglich ist). Wenn der Schlüssel dem Angreifer bekannt ist, werden auch die anderen Chiffriertexte kompromittiert. Für den CBC-Modus würde das Wiederholen der IV bedeuten, dass Sie (teilweise) identischen Klartext von (teilweise) identischem Chiffretext unterscheiden können. Für z.B. CTR-Modus würden die Auswirkungen viel größer sein, bis die Vertraulichkeit aufgehoben wird. –

+0

Nein. IV ist der "nullte" Block einer Kettenchiffre. Eine IV muss (1) zufällig, (2) nicht vorhersehbar, aber (3) nicht geheim sein. http://stackoverflow.com/questions/5796954/secret-vs-non-secret-initialization-vector –

+0

Das ist alles korrekt. Die Tatsache, dass eine eindeutige IV erforderlich ist, so dass "Brute Forcing einer Dateientschlüsselung nicht alle anderen kompromittiert", ist nicht korrekt. Sie könnten den CTR-Modus durch einfaches XOR-Verfahren kompromittieren, wenn Sie die IV wiederverwenden, aber dieser Angriff wäre kein brutales Forcen. Bei Brute Forcing geht es darum, den richtigen Schlüssel für die Permutation der Blockchiffre zu finden.Die IV schützt nichts, wenn der Angreifer den Schlüssel gefunden hat. Aber OK, es scheint, du hast IV und Salz nicht verwechselt, also werde ich diesen Kommentar entfernen. –