Verschlüsselung: Verwendung von Initialisierungs-Vektor-vs-Schlüssel?
Bin ich mit Hilfe von PHP - mcrypt
Bibliothek und die AES-256
(rijndael) - Algorithmus, die beide benötigt, ein Schlüssel + Initialisierungsvektor zu laufen.
Meine logische brainside ist nicht wirklich zu gehen zusammen mit dies. Ist nicht nur ein Schlüssel genug?
Theoretisches Szenario:
Wenn ich sensible Daten verschlüsselt in einer Datenbank gespeichert, die nur der Besitzer sollte in der Lage sein zu entschlüsseln, wäre es angemessen, den Nutzer gehashte Passwort entweder der Schlüssel oder der Initialisierungsvektor, um seine oder Ihre Daten?
Sollte der Schlüssel berücksichtigt werden, dass mehr private als der Initialisierungsvektor oder ist es die andere Weise herum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, in der Tat eine IV-ist von entscheidender Bedeutung in den meisten Implementierungen. Die IV ist auch als sicher für die öffentliche Nutzung, zum Beispiel die IV wird im Klartext übermittelt, die für die WEP-und WPA1/WPA2. Das problem entsteht, wenn die gleiche Taste+iv wird für das verschlüsseln der gleiche text. Die Chiffre wird, werden die Texte identisch sein, es sei denn, Sie verwenden einen IV. Wenn ein Angreifer verschlüsseln beliebige Klartext mit diesem Schlüssel, und dann den verschlüsselten text. Dies ist eine viel schnellere Möglichkeit von brute zwingen andere cipher text, dass der Angreifer erhalten hat.
Nicht nur, dass die IV muss zufällig sein, oder Sie würde eine Verletzung der CWE-329. Der Grund, warum dies ein problem ist etwas subtiler und Ich habe nicht bekommen es zuerst. Sie hat nicht erwähnt, aber ich hoffe, dass Sie entweder die CBC oder CMAC-Modi
Die Verwendung einer hash-Funktion auf ein Passwort ist fast identisch mit einem String2Key Funktion. Dies ist eine solide Konstruktion so lange, wie der Angreifer nicht verwenden können, SQL-Injektion, um den Schlüssel zu erhalten.
CFC
mit einer nicht-zufälligen IV?CBC
- Modus, und die IV muss zufällig sein. In einer Datenbank können Sie eine Spalte für die iv und generieren Sie diese Zahl mitmt_rand()
.Verwenden Sie keine gehashte Passwort als einzige Quelle für Schlüssel und IV. Als Faustregel gilt, sollten Sie generate random IV JEDES MAL, wenn Sie aktualisieren die verschlüsselten Daten und speichern IV mit diesen Daten. Schlüssel wiederverwendet werden kann mehrere Male, aber verwenden salted hashing und speichern Sie das Salz mit Daten zu.
Wenn Sie nur hash-Passwörter der Benutzer und verwenden Sie es als Schlüssel, Benutzer mit gleichen Passwörtern haben den gleichen Schlüssel. Je nach Struktur der Datenbank und Eindringling Zugriffsrechte könnte es einige unglückliche Fälle, wenn Benutzer mit gleichen Passwörtern erkannt werden können. Fügen Sie mindestens eindeutigen Benutzernamen, um diesen hash.
Wenn Sie sich nicht ändern, IV, für jede Aktualisierung der Daten, Informationen über änderungen der Daten können zugespielt werden. Mit den CBC-oder CFB-Modus identisch ersten Klartext-Blöcke werden verschlüsselt auf einen identischen Chiffretext bis die ersten Klartext zu ändern, also die position dieser ändern, können bestimmt werden.
Initialisierungsvektor (IV) ist nicht auf allen, und ist nicht geheim. In der Tat ist es oft ausgesetzt sind (z.B. vorangestellt, um die verschlüsselten Daten). Es dient als zusätzliche random-input zu den Verschlüsselungsalgorithmus, so dass das Ergebnis der Verschlüsselung derselben Daten übersichtlich ist anders, jedes mal, wenn Sie einen anderen IV. Auf diese Weise, Statistiken können nicht erfasst werden, auf die verschlüsselten Daten. Es nicht "verbessern" die Stärke der Verschlüsselung selbst.
Können Sie sehen hier für schöne Diagramme zeigen, wie und warum die IV verwendet wird.
Ist, wenn Sie über das EBP-Modus der Blockchiffre, oder die meisten stromchiffren, identisch Schlüssel+IV-Kombinationen auf verschiedenen plaintexts bieten den Angreifern einen direkten Blick auf das XOR-Ergebnis von der-Taste. Diese Erweiterung zeigt den Schlüssel an sich, und zum Teil auch das Passwort.
Aber ich meine IVs sind auf jeden Fall notwendig? Nein. Solange Sie Ihr Passwort ändern zu jeder Zeit auf Ihre nächste Klartext-block(sogar der gleiche block zweiten mal), du bist völlig in Ordnung, ohne IVs. In der Tat, alles, was ein IV tut, ist die Automatisierung des oben beschriebenen Prozesses.