/ / Verwenden von Blowfish im CBC-Modus für die Verschlüsselung und Entschlüsselung - Java, Verschlüsselung, Kryptographie

Verwenden von Blowfish im CBC-Modus für die Verschlüsselung und Entschlüsselung, aber wie mit der IV weitermachen? - Java, Verschlüsselung, Kryptographie

Ich habe eine Benutzeroberfläche zum Hinzufügen / Bearbeiten von Passwörtern. Diese Passwörter werden mit Blowfish im CBC-Modus verschlüsselt und es hat gut funktioniert, aber während der Entschlüsselung war ein IV erforderlich (es gab einen Parameter, bei dem eine Ausnahme fehlte.)

Ich habe die Chiffre-Klasse beim Einleiten der Chiffre verwendet, so dass sich die IV während der Verschlüsselung bewahrt hätte.

Mein Zweifel ist also,

  1. sollte die IV für Verschlüsselung undEntschlüsselung? Ich habe auf einigen Seiten gelesen, dass beim Entschlüsseln, wenn wir eine falsche IV verwenden, der erste Block falsch sein wird, die verbleibenden Blöcke jedoch korrekt wären.

  2. WENN die IV (im Falle einer Ver- und Entschlüsselung mit derselben IV) gespeichert werden, sollte sie als einfaches Objekt gespeichert oder zusammen mit dem Kennwort mit einem Trennzeichen verschlüsselt werden.

Danke im Voraus.

Antworten:

2 für die Antwort № 1
  1. Ja, die IV sollte für die Verschlüsselung / Entschlüsselung gleich sein. Wenn ich mich richtig erinnere, werden Fehler in CBC die Blöcke herunterfallen. Die gesamte Nachricht wird also falsch sein, wenn Sie das falsche IV verwenden.
  2. Die IV kann im Klartext gespeichert werden. Wenn Sie versuchen, es verschlüsselt aufzubewahren, müssen Sie schließlich die IV speichern, die zur Verschlüsselung der IV verwendet wird.

Es wird jedoch allgemein als schlechte Praxis angesehen, Kennwörter verschlüsselt zu speichern. Wenn jemand Ihre Datenbank abrufen sollte, muss er nur einen Schlüssel finden, um alle Kennwörter abzurufen.

Die empfohlene Methode zum Speichern von Kennwörtern ist die Verwendung vonmehrmals eine Hash-Funktion, auch als PBKDF (Passwort-basierte Schlüsselableitungsfunktion) bezeichnet, die entweder auf einem einfachen Hash oder auf einer Hmac-Funktion basiert. Siehe die OWASP-Passwortspeicher-Cheatsheet.

In Java gibt es dafür Primitive, siehe Das Beispiel auf dieser Seite. (Suchen Sie nach Use a Password Hashing Algorithm und scrollen Sie zur Java-Implementierung.)