AESEncoder - CBC-Mode
AESEncoder - CBC-Mode
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?
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
Lies dir das mal durch:
https://de.wikipedia.org/wiki/Initialisierungsvektor
https://de.wikipedia.org/wiki/Initialisierungsvektor
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: AESEncoder - CBC-Mode
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?
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?
- NicTheQuick
- Ein Admin
- Beiträge: 8675
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: AESEncoder - CBC-Mode
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().
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().
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: AESEncoder - CBC-Mode
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.
32 Bytes.
Das ist Quatsch und wurde wohl von André übersehen.
Hab das glaub ich auch schon mal gemeldet, wurde wohl übersehen.
Nicht verwechseln mit dem Key! Der ist tatsächlich unterschiedlich.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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: AESEncoder - CBC-Mode
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?
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?
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: AESEncoder - CBC-Mode
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
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: AESEncoder - CBC-Mode
Was meinst du mit "in einem Extra-Code generieren" und was mit "in einer DataSection speichern"?ts-soft hat geschrieben:zu 2:
Den IV in einem Extra-Code generieren und dann am besten in einer DataSection speichern.
Was soll damit bezweckt werden?
- NicTheQuick
- Ein Admin
- Beiträge: 8675
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: AESEncoder - CBC-Mode
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.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: AESEncoder - CBC-Mode
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.
Jetzt den angezeigten Code in DataSection, als Hex oder Byte Werte und dann per ?start übergeben.
Voll funktionierenden Code bitte selber schreiben
Decode) zu nutzen.
Code: Alles auswählen
OpenCryptRandom()
Define *IV = AllocateMemory(16)
CryptRandomData(*IV, 16)
CloseCryptRandom()
ShowMemoryViewer(*IV, 16)
Code: Alles auswählen
DataSection
start:
Data.b $FF, $AB usw.
EndDataSection
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.