Seite 1 von 2

AESEncoder - CBC-Mode

Verfasst: 07.02.2017 22:49
von purebas
Ich habe eine Frage zu AESEncoder() im CBC-Mode.
Dort muss ein IV angegeben werden.
Wie muss ich mit diesem IV umgehen?
Wird der IV fest vorgegeben oder muss bei jeder Verschlüsselung immer ein neuer IV gebildet werden.
Ich verstehe nicht, was der IV soll. Eine Art zweites Passwort? Wie wird der IV ausgetauscht? Muss dieser geheim bleiben?

Re: AESEncoder - CBC-Mode

Verfasst: 07.02.2017 23:04
von Sicro

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 17:56
von purebas
Was ich noch nicht verstehe ist, ob bei jedem Aufruf der IV neu gesetzt werden muss. So wie ich das verstehe muss man den IV nur einmal am Beginn der Verschlüsselung setzen. Wenn ich eine große Datei verschlüsseln möchte, dann generiere ich einen IV, rufe AEScoder einmal mit IV auf. Bei den nächsten Aufrufen gebe ich dann nicht mehr den IV mit. Sehe ich das richtig?

2) Wenn die zu verschlüsselnde Datei wirklich sehr groß wird und der Vorgang einige Zeit in Anspruch nimmt, sollte eine Fortschrittsanzeige angezeigt werden. In diesem Fall - so meine bisherige Idee - rufe ich AEScoder mit sagen wir mal 65k großen Stücken mehrfach auf, solange bis die gesamte Dateien durch ist. Zwischendurch rechne ich die erledigten Prozente aus und aktualisiere die Fortschrittsanzeige.

Wie benutze ich in diesem Fall AESencoder() kryptografisch korrekt? Wie benutze ich AESencoder() in einer entsprechenden Schleife?

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 18:10
von NicTheQuick
Das ist nicht korrekt. Um häppchenweise zu verschlüsseln musst du StartAESCipher(), AddCipherBuffer() und FinishCipher() benutzen.
Der IV ist der Startwert für die Verschlüsselung. Aus jedem verschlüsselten Paket (z.B. 256 Bit) wird ein neuer IV für das nächste Paket errechnet. Zum Entschlüsseln brauchst du diesen IV natürlich auch. Um den IV zu erstellen, nutzt man am besten CryptRandomData().

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 18:21
von ts-soft
Noch ein Hinweis zur dt. Hilfe: Der IV ist immer 16 Bytes lang und nicht wie bei AESDecoder() in deutsch 16, 24 oder
32 Bytes.
Das ist Quatsch und wurde wohl von André übersehen.

Hab das glaub ich auch schon mal gemeldet, wurde wohl übersehen.
AESDecoder: *InitializationVector hat geschrieben:The InitializationVector is a random data block, used to initialize the ciphering to avoid breach in decoding (only needed when using the #PB_Cipher_CBC mode). Its size is always 16 bytes long. The contents of this data block must match the one which was used when encoding the data.
Nicht verwechseln mit dem Key! Der ist tatsächlich unterschiedlich.

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 19:02
von purebas
Also:

1. Ich öffne die Datei
2. Mit CryptRandomData() den IV generieren
2. Einmal StartAESCipher(#Cipher, *Schlüssel, Bits, *IV, #PB_Cipher_CBC) aufrufen
3. Schleife mit AddCipherBuffer() bis Datei verarbeitet ist
4. FinishCipher()

Wäre dies das korrekte Schema zur Implementierung?

-

Laufen die genannten Funktionen auf allen Windows- und Linux-Systemen gleich?

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 19:22
von ts-soft
zu 2:
Den IV in einem Extra-Code generieren und dann am besten in einer DataSection speichern.
OpenCryptRandom() und CloseCryptRandom() am Anfang und Ende nicht vergessen.

ansonsten haste es verstanden und Linux und MacOS verstehen das auch :wink:

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 19:36
von purebas
ts-soft hat geschrieben:zu 2:
Den IV in einem Extra-Code generieren und dann am besten in einer DataSection speichern.
Was meinst du mit "in einem Extra-Code generieren" und was mit "in einer DataSection speichern"?
Was soll damit bezweckt werden?

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 20:05
von NicTheQuick
Den IV schreibt man einfach an den Anfang der verschlüsselten Datei. Der muss nicht geheim gehalten werden. Und am besten erstellt man für jedes Verschlüsseln einen neuen IV. Vor dem Entschlüsseln muss man den IV natürlich händisch auslesen und dann normal die restlichen Daten entschlüsseln.

Re: AESEncoder - CBC-Mode

Verfasst: 10.02.2017 20:06
von ts-soft
Ein Extra Programm nutzen, um den IV zu generieren und den dann in Deinem Haupcode (sind hoffentlich 2, für Encode und
Decode) zu nutzen.

Code: Alles auswählen

OpenCryptRandom()
Define *IV = AllocateMemory(16)
CryptRandomData(*IV, 16)
CloseCryptRandom()
ShowMemoryViewer(*IV, 16)
Jetzt den angezeigten Code in DataSection, als Hex oder Byte Werte und dann per ?start übergeben.

Code: Alles auswählen

DataSection
  start:
  Data.b $FF, $AB usw.
EndDataSection
Voll funktionierenden Code bitte selber schreiben :lol: