Ich implementiere ein Dateisystem mit Protokollstruktur und möchte eine Reihe von Blöcken mithilfe des .NET Cryptography-Namespace verschlüsseln. Ich habe die symmetrische Aes-Verschlüsselung gewählt, den Schlüssel und den initialen, zufälligen Initialisierungsvektor erstellt.Wie wird der intermediate Initialization Vector aus einer Sequenz von Verschlüsselungsschritten extrahiert?
So weit so gut, mit der ICryptoTransform
zurückgegeben von SymmetricAlgorithm.CreateEncryptor()
ist es möglich, die einzelnen Blöcke zu verschlüsseln.
Um die "Direktzugriff" -Abtastung zur Entschlüsselungszeit zu ermöglichen, müssen die Zwischeninitialisierungsvektoren zusammen mit den verschlüsselten Blöcken gespeichert werden.
Aber ich kann keinen Weg sehen, die Zwischen IVs zu extrahieren? Sie müssen in der Instanz gespeichert werden, die den Verschlüsselungsalgorithmus implementiert, aber - wie ich sehen kann - auf die aktuelle IV kann nicht zugegriffen werden.
Natürlich kann diese Einschränkung umgangen werden, indem zufällige IVs erzeugt werden oder indem verschlüsselte Daten missbraucht werden, um den nächsten Block in der Kette zu verschlüsseln. Aber das fühlt sich an wie ein Hack aufgrund der Tatsache, dass die Blockverkettung in den meisten symmetrischen Algorithmen unterstützt wird, die - wie ich annehme - nur den resultierenden Vektor aus der Verschlüsselung des vorherigen Blocks wiederverwenden.
+1: Vielen Dank. Ihre Antwort zeigt ein tiefgreifendes Verständnis des Verschlüsselungsvorgangs und macht die Dinge für mich komplett sauber. Erleuchtung !!! :) – Armin