Ich habe einen ziemlich netten Trick an gesehen commandlinefu : Verwendung /dev/urandom
als Quelle der Zufälligkeit (es ist eine gute Quelle), und dann mit, dass als Passwort zu einer AES - Stromchiffre.
Ich kann Ihnen nicht mit 100% sicher sagen, aber ich glaube, dass, wenn Sie die Parameter ändern (dh verwendet Art und Weise mehr als nur 128 Bytes aus /dev/urandom
), ist es zumindest nahe genug, um einen kryptografisch sicherer PRNG, für alle praktischen Zwecke:
Dieser Befehl generiert einen Pseudozufallsdatenstrom unter Verwendung von aes-256-ctr mit einem von / dev / urandom gesetzten Startwert. Umleitung zu einem Blockgerät zur sicheren Datenverschlüsselung.
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin
Wie funktioniert das?
openssl enc -aes-256-ctr
verwendet openssl
, um Nullen mit AES-256 im CTR-Modus zu verschlüsseln.
Was wird es verschlüsseln?
/dev/zero
Wie lautet das Passwort, mit dem es verschlüsselt wird?
dd if=/dev/urandom bs=128 count=1 | base64
Das ist ein Block von 128 Byte, der
/dev/urandom
in base64 codiert ist (die Weiterleitung nach/dev/null
ist, Fehler zu ignorieren).Ich bin mir nicht sicher, warum
-nosalt
verwendet wird, da die Manpage von OpenSSL Folgendes angibt:-salt use a salt in the key derivation routines. This is the default. -nosalt don't use a salt in the key derivation routines. This option SHOULD NOT be used except for test purposes or compatibility with ancient versions of OpenSSL and SSLeay.
Vielleicht geht es darum, diesen Ablauf so schnell wie möglich zu machen, und die Verwendung von Salzen wäre ungerechtfertigt, aber ich bin nicht sicher, ob dies irgendein Muster im Geheimtext hinterlassen würde. Die Leute an der Cryptography Stack Exchange können uns dazu eine ausführlichere Erklärung geben.
Die Eingabe ist
/dev/zero
. Dies ist darauf zurückzuführen, dass es wirklich egal ist, was verschlüsselt wird - die Ausgabe ähnelt zufälligen Daten. Nullen sind schnell zu bekommen, und Sie können so viel wie Sie wollen (und verschlüsseln), ohne dass ihnen die Nase vorn ist.Die Ausgabe ist
randomfile.bin
. Es könnte auch sein/dev/sdz
und Sie würden ein Vollblock-Gerät randomisieren.
Ich möchte aber eine Datei mit fester Größe erstellen! Wie mache ich das?
Einfach!
dd if=<(openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero) of=filename bs=1M count=100 iflag=fullblock
Nur dd
das Kommando mit einem festen blocksize
(hier 1 MB) und count
. Die Dateigröße beträgt blocksize * count
1M * 100 = 100M.