Frage

Ich schreibe ein Programm, das eine Passphrase vom Benutzer nimmt und dann einige verschlüsselte Daten in die Datei schreibt. Die Methode, die ich mir bisher ausgedacht habe, lautet wie folgt:

  • Generieren Sie eine 128-Bit-IV aus dem Hashing des Dateinamens und der Systemzeit und schreiben Sie dies an den Beginn der Datei.
  • Generieren Sie einen 256-Bit-Schlüssel aus der Passphrase mit SHA256.
  • Verschlüsseln Sie die Daten (beginnend mit einer statischen 32-Bit-Signatur) mit diesem Schlüssel im CBC-Modus mit diesem Schlüssel und schreiben Sie sie in Datei.

Beim Entschlüsseln wird die IV gelesen, und dann werden die Passphrase auf die gleiche Weise generiert, und die ersten 32 Bit werden mit der Signatur verglichen, um festzustellen, ob der Schlüssel gültig ist.

Allerdings schaute ich mir das an AES -Beispiel bereitgestellt in Polarsl (Die Bibliothek, mit der ich das Hashing und die Verschlüsselung durchführt.) Und sie verwenden eine viel komplexere Methode:

  • Generieren Sie einen 128-Bit-IV aus dem Hashing des Dateinamens und der Dateigröße und schreiben Sie diese an den Beginn der Datei.
  • Generieren Sie einen 256-Bit-Schlüssel aus Hashing (SHA256) der Passphrase und der IV 8192-mal zusammen.
  • Initialisieren Sie den HMAC mit diesem Schlüssel.
  • Verschlüsseln Sie die Daten mit diesem Schlüssel mit dem AES im CBC -Modus und schreiben Sie sie in Datei, während Sie die HMAC mit jedem verschlüsselten Block aktualisieren.
  • Schreiben Sie die HMAC am Ende der Datei.

Ich habe den Eindruck, dass die zweite Methode sicherer ist, aber ich habe nicht genug Wissen, um das zu sichern, außer dass sie komplizierter aussieht.

  • Wenn es sicherer ist, was sind die Gründe dafür?
  • Ist das Anhängen eines HMAC am Ende der Datei sicherer als eine Signatur zu Beginn der verschlüsselten Daten?
  • Erhöht das 8192 -fache Hashing die Sicherheit?

Notiz: Dies ist ein Open -Source -Projekt, also auch für jede Methode, die ich verwende, es wird für jeden frei verfügbar sein.

War es hilfreich?

Lösung

Die zweite Option ist sicherer.

Ihre Methode bietet keine Nachrichtenintegrität. Dies bedeutet, dass ein Angreifer Teile des Chiffretextes ändern und ändern kann, wofür der einfache Text entschlüsselt wird. Solange sie nichts ändern, das Ihre statische 32-Bit-Signatur verändert, werden Sie ihr vertrauen. Die HMAC in der zweiten Methode bietet Nachrichtenintegrität.

Wenn Sie den Schlüssel 8192 -mal gehabt haben, werden zusätzliche Berechnungsschritte hinzugefügt, die jemand versuchen können, den Schlüssel zu versuchen. Angenommen, ein Benutzer wählt ein wörterbuchbasiertes Passwort aus. Mit Ihrer Methode muss ein Angreifer ausführen SHA256(someguess) Und dann versuche zu entschlüsseln. Mit der Polarssl -Version müssen sie jedoch berechnen SHA256(SHA256(SHA256...(SHA256(someguess))) für 8192 Mal. Dies wird nur einen Angreifer verlangsamen, aber es könnte (vorerst) ausreichen.

Verwenden Sie für das, was es wert ist, bitte eine vorhandene Bibliothek. Die Kryptographie ist schwierig und neigt für subtile Fehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top