Wie Sie den anderen Antworten entnehmen können, ist eine eindeutige IV pro verschlüsselter Datei von entscheidender Bedeutung, aber warum ist das so?
Lassen Sie uns zunächst überprüfen, warum eine eindeutige IV pro verschlüsselter Datei wichtig ist. ( Wikipedia zu IV ). Die IV fügt Ihrem Start Ihres Verschlüsselungsprozesses Zufälligkeit hinzu. Bei Verwendung eines Verschlüsselungsmodus für verkettete Blöcke (bei dem ein Block verschlüsselter Daten den vorherigen Block verschlüsselter Daten enthält) bleibt ein Problem hinsichtlich des ersten Blocks bestehen, bei dem die IV eingeht.
Wenn Sie keine IV hatten und die Verkettung verketteter Blöcke nur mit Ihrem Schlüssel verwendeten, erzeugen zwei Dateien, die mit identischem Text beginnen, identische erste Blöcke. Wenn sich die Eingabedateien auf halbem Weg ändern würden, würden die beiden verschlüsselten Dateien von diesem Punkt an bis zum Ende der verschlüsselten Datei unterschiedlich aussehen. Wenn jemand die Ähnlichkeit am Anfang bemerkte und wusste, womit eine der Dateien begann, konnte er ableiten, womit die andere Datei begann. Wenn Sie wissen, womit die Klartextdatei begann und was der entsprechende Chiffretext ist, kann diese Person den Schlüssel bestimmen und dann die gesamte Datei entschlüsseln.
Fügen Sie nun die IV hinzu. Wenn jede Datei eine zufällige IV verwenden würde, wäre ihr erster Block anders. Das obige Szenario wurde vereitelt.
Was wäre, wenn die IV für jede Datei gleich wäre? Nun, wir haben wieder das Problemszenario. Der erste Block jeder Datei wird mit demselben Ergebnis verschlüsselt. Praktisch unterscheidet sich dies nicht davon, dass die IV überhaupt nicht verwendet wird.
Kommen wir nun zu Ihren vorgeschlagenen Optionen:
Option 1. Betten Sie fest codiertes IV in die Anwendung ein und speichern Sie den Schlüssel in der Schlüsseldatei.
Option 2. Betten Sie den fest codierten Schlüssel in die Anwendung ein und speichern Sie die IV in der Schlüsseldatei.
Diese Optionen sind ziemlich identisch. Wenn zwei Dateien, die mit demselben Text beginnen, verschlüsselte Dateien erzeugen, die mit identischem Chiffretext beginnen, werden Sie abgespritzt. Das würde bei beiden Optionen passieren. (Angenommen, es gibt einen Hauptschlüssel, mit dem alle Dateien verschlüsselt werden).
Option 3. Speichern Sie sowohl den Schlüssel als auch die IV in der Schlüsseldatei.
Wenn Sie für jede Schlüsseldatei eine zufällige IV verwenden, sind Sie gut. Keine zwei Schlüsseldateien sind identisch, und jede verschlüsselte Datei muss eine Schlüsseldatei haben. Eine andere Schlüsseldatei funktioniert nicht.
PS: Wenn Sie sich für Option 3 und zufällige IVs entschieden haben, prüfen Sie, wie Sie feststellen können, ob die Entschlüsselung erfolgreich war. Nehmen Sie eine Schlüsseldatei aus einer Datei und versuchen Sie, damit eine andere Verschlüsselungsdatei zu entschlüsseln. Möglicherweise stellen Sie fest, dass die Entschlüsselung fortschreitet und zu Müllergebnissen führt. Beginnen Sie in diesem Fall mit der Untersuchung der authentifizierten Verschlüsselung .
Das Wichtige an einer IV ist, dass Sie niemals dieselbe IV für zwei Nachrichten verwenden dürfen . Alles andere ist zweitrangig - wenn Sie die Einzigartigkeit sicherstellen können, ist Zufälligkeit weniger wichtig (aber immer noch eine sehr gute Sache!). Die IV muss nicht geheim sein (und kann im CBC-Modus auch nicht sein).
Aus diesem Grund sollten Sie die IV nicht neben dem Schlüssel speichern. Dies würde bedeuten, dass Sie für jede Nachricht dieselbe IV verwenden, was den Punkt einer IV zunichte macht. Normalerweise stellen Sie die IV einfach der verschlüsselten Datei im Klartext voran .
Wenn Sie Ihre eigenen Verschlüsselungsmodi wie diesen verwenden möchten, lesen Sie bitte die entsprechenden Standards. Das NIST hat hier ein gutes Dokument zu Verschlüsselungsmodi: http://dx.doi.org/10.6028/NIST.SP.800-38A Die IV-Generation ist in Anhang C dokumentiert. Kryptographie ist eine subtile Kunst . Versuchen Sie nicht, Variationen der normalen Verschlüsselungsmodi zu erstellen. In 99% der Fälle erstellen Sie etwas, das sicherer aussieht , aber tatsächlich weniger sicher ist.
quelle
Wenn Sie eine IV verwenden, ist das Wichtigste, dass die IV so eindeutig wie möglich ist. In der Praxis sollten Sie daher eine zufällige IV verwenden. Dies bedeutet, dass das Einbetten in Ihre Anwendung keine Option ist. Ich würde die IV in der Datendatei speichern, da dies die Sicherheit nicht beeinträchtigt, solange die IV zufällig / eindeutig ist .
quelle
IV wird verwendet, um die Sicherheit durch Zufälligkeit zu erhöhen. Dies bedeutet jedoch nicht, dass es von allen Algorithmen verwendet wird, d. H.
Der Trick ist, wie lange sollte die IV sein? Normalerweise hat es die gleiche Größe wie die Blockgröße oder die Verschlüsselungsgröße. Zum Beispiel hätte AES 16 Bytes für IV. Außerdem kann auch der IV-Typ ausgewählt werden, dh eseqiv, seqiv, chainiv ...
quelle