Dateiverschlüsselung - Salt separat speichern?

Hi,

ich bin in einem anderen Studiengang [rer. nat.], interessiere mich aber dennoch für Verschlüsselung.
[ja, ich weiß - Privatmann = 0 Kenntnisse, gaanz schlechte Voraussetzungen für Kryptologie - weil Implementierungsfehler usw. - aber momentan kann ich keinen Privat_Info/Matheprofessor anstellen oder für 5-6 Jahre das Studienfach wechseln ... :wink: ]

Nun hab ich ein Programm geschrieben, das mir eine Datei [450 MB] mit blowfish [eingebunden] verschlüsselt. [blowfish, weil das denk ich simpler umzusetzen ist, als AES; also blowfish sollte daher schon sein.]
Momentan geschieht das noch in Pascal.
In c++/c hab ich versucht, das umzusetzen und muß feststellen, daß das alles erstmal viel schwerer ist (IDE/Compiler zusammensuchen, Krypto library suchen, entscheiden, in HalloWelt-Konsole "einbauen") = eigentlich dachte ich, es gäbe da irgendwo nen source code mit nem Projekt, das über 2-3 cpp-Dateien/header-Files geht und das man einfach so compilieren könnte, wenn man den Compiler findet.
oder kennt da jemand so ein Projekt, daß selbst c++ Neulinge [gerade begonnen, das zu lernen - bin bei : If-Bedingungen und deren Tücken]

naja, egal.
So, grundlegende Sache is nu: Das Passwort soll mit einem Salt kombiniert gehasht newPwd = sha1(randomString + Passwort); werden.
Allerdings möchte ich den Salt in eine extra Datei speichern und nicht vorn an die verschlüsselte Datei klatschen.

Verschlechtert das die Sicherheit von der Datei, = erleichtert das den Angriff oder ist das egal?

Aber bei üblichen Programmen [axcrypt usw.] ist der ist Salt-header doch auch von konstanter Länge und man könnte erraten, wo sich die verschlüsslten Daten befinden.

Kann dazu wer was sagen? [naja, und falls wer ne ready2compile Konsolen Datei-Blowfish OpenSource in c++ implementierung weiß ....]
Danke schon mal.
 
Moin gab dazu mal eine Diskussion .
Gruß

Fluffy

P.s.:Meine Meinung in der Diskussion ist für mich mittlerweile nicht mehr aktuell.
 
Danke.

ha!, jau, auf den Thread bin ich auch vor 3 Stunden auf der Suche gestoßen.

Ich wußte nur bis eben nicht mehr, welchen Sinn die Salts genau hatten und wie/wieso man sie speichert. [da sie ja für 1 Passwort keinen Sinn machen, wenn man sie in der Datei mitliefert] [trotz goog/wikipedia/Salt]

Insofern .. nunja, ich wollte Dateien speichern und auf jeden Fall verhindern, daß auch bei versehentlich gleicher Passwortwahl und gleichem DateiInhalt auf jeden Fall die verschlüsselte Datei Hinweise auf das selbe Passwort enthält.

Mhh, somit muß ich wohl doch einen individuellen, frischen Salt in die KDF mit einbauen und speichern, damit ich auf jeden Fall immer andere verschlüsselte Dateien (sind ja keine gespeicherten PW/email/username in einer DB) erhalte.

oder?
oder bin ich schon wieder auf dem Holzweg?
 
Ich weiss nicht was KDF ist.
Aber wenn du nicht willst das 2 gehashte Passwärter gleich aussehen dann brauchst du für beide einen unterschiedlichen Salt.

Diesen kannst du aber getrost an/vor das Passwort hängen.
Du trennst Salt und Hash einfach durch ein in beiden Alphabeten nicht vorkommendes Zeichen und führst einfach eine Tokeniz Funktion auf dem String aus.
Oder wenn du nur einen Hashtypen verwendest, kannst du auch sagen die ersten oder letzten x Zeichen gehören zum Hash und alles andere ist der Salt.
Wobei letzer Ansatz bei Erweiterungen und anderen Programmen, welche darauf zugreifen wollen fehleranfälliger ist.
Ich würde an deiner Stelle aber noch einmal schauen, es gibt mit sicherheit eine Lib die das Hashen übernimmt.
Da hast du dann eine gute Dokumentation und kompatibilität zu anderen Sachen.
Gruß

Fluffy

P.s.: Guckst du hier, hier oder hier.
Einfach mal durchschauen.
 
Zuletzt bearbeitet von einem Moderator:
Entschuldige bitte.
Ich hatte das als bekannt vorausgesetzt (nein, war keine Angeberei, sondern Verwirrung, weil ich mich da in was verrant hatte - und hab dabei nicht mehr an alles gedacht.
KDF
Key derivation function - Wikipedia, the free encyclopedia

Aber ich hab mittlerweile eine Lösung durch t*** in einem Chat erhalten:
ein Array zufälliger Zeichen erzeugen, mit dem Passwort verschlüsseln und [mit-] speichern.
Dieses Array mit dem Passwort konkatenieren [Key = Hash(Passw+zufWerte);] und Hashen. den Hash als "Session key" zum Verschlüsseln verwenden.

Boar, ... kann sooo einfach sein. Und man sieht den Baum vor lauter Wäldern nicht.
Ich hab die Lösung total ingoriert, weil ich immer dachte, die gespeicherten Zufallswerte würden Rückschlüsse auf die verschlüsselten Daten zulassen. Aber das ist nich der Fall, denn die bleiben auch nach der Verschlüsselung zufällig.

Dank Euch allen.
 
Zuletzt bearbeitet:
Es gibt da noch einiges was du bedenken musst.
Der Hash ist ggf. nicht sehr lang, d.h. würde ich mir überlegen ob ich den Hash zum Verschlüsseln verwenden würde, da man dann einfach den Schlüssel direkt angreifen könnte.

Darüber hinaus würde ich mir noch Block Cipher Chain anschauen, denn sonst verrät der Inhalt u.U. den Schlüssel, bzw. es lässt sich der Inhalt erraten, sieht man sehr schön an verschlüsselten Bildern, wo die Blöcke nicht verlinkt sind.
Gruß

Fluffy

P.s.: Was soll eigentlich das verschlüsseln des Passwortes bringen, wenn man es anschließend sowiso hasht?
 
Insofern .. nunja, ich wollte Dateien speichern und auf jeden Fall verhindern, daß auch bei versehentlich gleicher Passwortwahl und gleichem DateiInhalt auf jeden Fall die verschlüsselte Datei Hinweise auf das selbe Passwort enthält.

Mhh, somit muß ich wohl doch einen individuellen, frischen Salt in die KDF mit einbauen und speichern, damit ich auf jeden Fall immer andere verschlüsselte Dateien (sind ja keine gespeicherten PW/email/username in einer DB) erhalte.

oder?
oder bin ich schon wieder auf dem Holzweg?

Nichtdeterminismus erreicht man normalerweise auch durch einen zufällig gewählten Initialisierungsvektor in Kombination mit einem Betriebsmodus, zum Beispiel CBC. Macht man das nicht kann man auch aus verschlüsselten Daten noch Informationen ziehen (schau dir das Beispiel mit dem verschlüsselten Tux-Bild aus dem Wikipedia Eintrag an).

Die wichtigste Funktion einer KDF ist es die Komplexität für einen Brute Force Angriff auf die verschlüsselten Daten zu erhöhen, indem die KDF beispielsweise 1000 Iterationen durchläuft. Für jedes Passwort welches der Angreifer testen möchte muss zunächst die KDF ausgeführt werden, was wesentlich aufwendiger ist als die eigentliche Entschlüsselung. Durch den Salt ist es auch nicht praktikabel Rainbow Tables anzulegen.
 
Zurück
Oben