Frage Verschlüsseln einer Datei mit einem schwachen Passwort, bcrypt oder SHA-256 + AES-256?


Ich beginne mit einem schwachen Passwort (8 Kleinbuchstaben für ex) und einer Datei. Ich muss diese Datei mit diesem Passwort verschlüsseln. Das Ergebnis muss sicher gegen bekannte Angriffe sein.

Ansatz 1: Ich könnte das Passwort mit SHA-256 Hash-und dann den resultierenden Hash und Datei als Eingaben für AES-256, geben mir eine verschlüsselte Datei. Ich verstehe, dass sowohl SHA-256 als auch AES-256 sehr schnell sind. Würde das die Datei nicht anfällig für einen Brute-Force-Angriff machen?

Zum Beispiel könnte man eine Rainbow-Tabelle mit vorberechneten SHA-256-Hashes greifen und, angenommen es ist eine wirklich kleine Datei und ein wirklich schwaches Passwort, versuchen, AES-256 mit jedem Hash aus dieser Tabelle in einer vernünftigen Zeit (einige wenige) zu entschlüsseln Monate mit spezieller Hardware).

Ansatz 2: Verwenden Sie bcrypt. Wenn ich das richtig verstehe, eignet sich bcrypt besser zum Verschlüsseln von Dateien als SHA-256 + AES-256, da das Schlüsselgenerierungsschema einen Arbeitsfaktor hat, der zu einem stärkeren Schlüssel führt. Oder liege ich falsch?

Die Ruby- und Python-Implementierungen (Wrapper?), Die ich gesehen habe, konzentrieren sich auf die Verwendung von bcrypt als Hashing-Schema für Passwörter, nicht als Chiffre. Kann ich bcrypt auch verwenden, um einen schwachen Pass zu hacken UND die Datei in "einem Schritt" zu verschlüsseln?

Ansatz 3: Verwenden Sie bcrypt, um den Pass zu hashen, verwenden Sie diesen Hash und die Datei als Eingaben in AES-256 und geben Sie mir die verschlüsselte Datei. Dies kümmert sich um das Problem "Schlüssel ist zu schnell, um zu generieren". (Angenommen, es ist ein Problem.) Allerdings sind bcrypt-Hashes 448 Bit lang und AES-256 will einen 256-Bit-Schlüssel. Naive Lösung besteht darin, einfach die nachfolgenden Bits des Hashs zu löschen und diese als Schlüssel für AES-256 zu verwenden. Ich würde diesen Weg NICHT gehen, weil ich nicht genug über Kryptographie weiß, um zu wissen, was die Konsequenzen sind.

BEARBEITEN: Ich kann den Pass nicht saldieren, da dies für eine Offline-Anwendung ist. dh. Es gibt keinen vernünftigen Ort, um das Salz zu lagern. Ich kann den Pass salzen und das Salz unverschlüsselt zusammen mit der verschlüsselten Datei speichern. Salze sind fast inhärent öffentlich / sichtbar, wenn eine Datenbank kompromittiert wird. Zweck eines Salzes ist es, einen Regenbogen Tischangriff zu verhindern. Danke an Nemo, brüllt.


6
2018-06-03 15:28


Ursprung


Antworten:


Ansatz 4: Verwenden PKCS # 5 (PBKDF2 zum Ableiten eines Schlüssels aus einem Pass + eine Chiffre Ihrer Wahl für die Verschlüsselung mit diesem Schlüssel), vorzugsweise die Implementierung eines anderen.

Und vergiss das Salz nicht. (Sie speichern es zusammen mit den verschlüsselten Daten. Es muss nur 8 Bytes oder so sein.)


11
2018-06-03 15:32