Nach dem Lesen dieses Artikels scheinen einige zufällige Bytes wirklich generiert worden zu sein, jedoch nur mit dem Ziel, den vollständigen 256-Bit-Schlüssel zu vervollständigen:
Um den 256-Bit-Schlüssel für die Blockchiffren zu generieren, wird der Secure-Hash-Algorithmus SHA-256 verwendet. Dieser Algorithmus komprimiert den vom Benutzer bereitgestellten Benutzerschlüssel (bestehend aus Kennwort und / oder Schlüsseldatei) auf einen Schlüssel mit fester Größe von 256 Bit. Diese Transformation ist einseitig, dh es ist rechnerisch nicht möglich, die Hash-Funktion zu invertieren oder eine zweite Nachricht zu finden, die zu demselben Hash komprimiert wird.
Der kürzlich entdeckte Angriff auf SHA-1 [2] hat keinen Einfluss auf die Sicherheit von SHA-256. SHA-256 gilt nach wie vor als sehr sicher [3].
Schlüsselableitung:
Wenn nur ein Kennwort verwendet wird (dh keine Schlüsseldatei), werden das Kennwort und ein zufälliges Salt von 128 Bit mit SHA-256 zum endgültigen Schlüssel gehasht (beachten Sie jedoch, dass einige Vorverarbeitungen vorgenommen werden: Schutz vor Wörterbuchangriffen). Das zufällige Salt verhindert Angriffe, die auf vorberechneten Hashwerten basieren.
Wenn Sie sowohl das Kennwort als auch die Schlüsseldatei verwenden, wird der endgültige Schlüssel wie folgt abgeleitet: SHA-256 (SHA-256 (Kennwort), Inhalt der Schlüsseldatei), dh der Hash des Hauptkennworts wird mit den Schlüsseldateibytes und dem resultierenden Byte verkettet String wird erneut mit SHA-256 gehasht. Wenn die Schlüsseldatei nicht genau 32 Byte (256 Bit) enthält, werden sie ebenfalls mit SHA-256 zu einem 256-Bit-Schlüssel gehasht. Die obige Formel ändert sich dann zu: SHA-256 (SHA-256 (Kennwort), SHA-256 (Schlüsseldatei)).
Ich komme daher zu dem Schluss, dass es keinen inneren Hauptschlüssel gibt. Wenn das Benutzerkennwort (und die Schlüsseldatei) geändert wird, wird die Kennwortbasis mit einem neuen Schlüssel erneut verschlüsselt.