Schnelle Möglichkeit, HD zufällig anzuordnen?

Schnelle Möglichkeit, HD zufällig anzuordnen?

Ich habe gelesen, wie man Festplatten für die Verschlüsselung sicher macht, und einer der Schritte besteht darin, zufällige Bits auf die Festplatte zu schreiben, um die verschlüsselten Daten vom Rest der Daten auf der Festplatte nicht mehr zu unterscheiden.

Als ich es jedoch dd if=/dev/urandom of=/dev/sdain der Vergangenheit mit versucht habe, lag die voraussichtliche Ankunftszeit im Bereich von Tagen. Ich habe etwas über die Verwendung badblocksanstelle von urandom gelesen, aber das schien nicht viel zu helfen. Ich würde nur gerne wissen, ob es Möglichkeiten gibt, dies zu beschleunigen, z. B. Optionen für ddoder etwas anderes, das ich möglicherweise übersehe, oder ob die Geschwindigkeit nur eine Einschränkung der Festplatte ist.

Antwort1

dd if=/dev/urandom of=/dev/sda, odereinfach cat /dev/urandom >/dev/sdaist nicht die schnellste Möglichkeit, eine Festplatte mit zufälligen Daten zu füllen. Linux /dev/urandomist nicht der schnellste kryptografische RNG auf dem Markt.Gibt es eine Alternative zu /dev/urandom?hat einige Vorschläge. Insbesondere enthält OpenSSL einen schnelleren kryptografischen PRNG:

openssl rand $(</proc/partitions awk '$4=="sda" {print $3*1024}') >/dev/sda

Beachten Sie, dass es letztendlich davon abhängt, wo der Engpass liegt: bei der CPU oder bei der Festplatte, ob eine Verbesserung eintritt oder nicht.

Die gute Nachricht ist, dass das Füllen der Festplatte mit zufälligen Daten meist nutzlos ist. Um zunächst einen weit verbreiteten Mythos zu zerstreuen:Das Löschen mit Nullen ist auf der heutigen Hardware genauso gut. Bei der Festplattentechnologie der 1980er Jahre hinterließ das Überschreiben einer Festplatte mit Nullen eine kleine Restladung, die mit relativ teurer Hardware wiederhergestellt werden konnte; mehrere Überschreibdurchgänge mit zufälligen Daten (das „Gutmann-Löschen“) waren erforderlich. Heute hinterlässt sogar ein einziger Überschreibdurchgang mit Nullen Daten, die selbst unter Laborbedingungen nicht realistisch wiederhergestellt werden können.

Wenn Sie eine Partition verschlüsseln, ist es für die Vertraulichkeit der verschlüsselten Daten nicht notwendig, die Festplatte mit zufälligen Daten zu füllen. Es ist nur dann sinnvoll, wenn Sie den von verschlüsselten Daten verwendeten Speicherplatz von ungenutztem Speicherplatz unterscheiden müssen. Das Erstellen eines verschlüsselten Volumes auf einem nicht zufälligen Container zeigt, welche Festplattenblöcke jemals vom verschlüsselten Volume verwendet wurden. Dies gibt einen guten Hinweis auf die maximale Größe des Dateisystems (obwohl es mit der Zeit eine immer schlechtere Annäherung wird) und kaum mehr.

Antwort2

Sie können OpenSSL dazu bringen, /dev/zeromit einem zufällig generierten Passwort zu verschlüsseln, wodurch sehr schnell anständige pseudozufällige Daten bereitgestellt werden (sofern Ihre CPU die Beschleunigung unterstützt).

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | dd of=/dev/sda

Sie können dies weiterleiten, pvum den Fortschritt/die voraussichtliche Ankunftszeit abzurufen. Die Befehle, die ich gerade ausführe (in einer Root-Shell), sind:

DISK="sda"
DISKSIZE=$(</proc/partitions awk '$4=="'"$DISK"'" {print sprintf("%.0f",$3*1024)}')
apt-get install pv
openssl enc -aes-256-ctr -nosalt \
  -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" \
  < /dev/zero |
  pv --progress --eta --rate --bytes --size "$DISKSIZE" |
  dd of=/dev/"$DISK" bs=2M

Diese Idee habe ich vondiese Antwort, nachdem ich das gleiche Problem hatte wieirrationaler John, WHOkommentiertzu Gilles' Antwort oben. Dadurch wurde die Löschgeschwindigkeit meines neuen RAID-Arrays von 11 MB/s auf etwa 300 MB/s erhöht, sodass die Löschzeit, die sonst eine Woche gedauert hätte, auf 10 Stunden verkürzt wurde.

Ich möchte hinzufügen, dass Sie anstelle der komplizierteren Anweisung oben verwenden können sollten , es gibt jedoch einen Fehler, der nur eine Ausgabe von 16 MB zulässt. (Dieser Fehler wurde im Januar 2016 gemeldet.)openssl rand #of_bytesopenssl enc ...ssl

Und gemäß der Antwort aufdiese Frageund wenn wir weiterhin davon ausgehen, dass die CPU der Engpass ist, kann die Geschwindigkeit möglicherweise weiter erhöht werden, indem mehrere opensslProzesse parallel auf separaten Kernen ausgeführt und mithilfe eines FIFO kombiniert werden.

Antwort3

OpenSSL schien bei mir nicht zu funktionieren. Ich bekam „unbekannte Optionen“ und andere Probleme mit den bereitgestellten Lösungen. Also habe ich mich schließlich für das Programm Fio entschieden.

fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0

Das dauert anscheinend 3 Stunden, um 19 TB auf 24 Festplatten zu übertragen. Also ungefähr 1.800 MB/s

smp-016:~ # fdisk -l /dev/md0
Disk /dev/md0: 18890.1 GB, 18890060464128 bytes

smp-016:~ # fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0
fill: (g=0): rw=write, bs=512M-512M/512M-512M/512M-512M, ioengine=libaio, iodepth=4
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [W(1)] [2.7% done] [0KB/1536MB/0KB /s] [0/3/0 iops] [eta 03h:01m:11s]

Ich hoffe, das sind tatsächlich Zufallsdaten. Auf der Manpage steht fio „Standard: Puffer mit Zufallsdaten füllen.“http://linux.die.net/man/1/fio

Ich mache das nicht aus Sicherheits-/Verschlüsselungsgründen, sondern versuche nur, sicherzustellen, dass meine späteren Lesetests tatsächliche Daten und nicht nur Nullen sind. Derselbe Fio-Befehl könnte zur Vorkonditionierung von SSD/NVMe verwendet werden. Denn die bloße Verwendung von /dev/zero kann dazu führen, dass die Komprimierung auf Festplattenebene „schummelt“, wie viel tatsächlich geschrieben wird. Ich würde allerdings ein -loops=2Flag hinzufügen, wenn es sich um eine neue SSD zum Benchmarking handelt.

Wenn Sie Sicherheit wünschen, können Sie möglicherweise die -randrepeat=bool Option verwenden, da dadurch „Den Zufallszahlengenerator auf vorhersehbare Weise initialisieren, sodass die Ergebnisse über mehrere Durchläufe hinweg wiederholbar sind. Standard: Wahr.“ umgeschaltet wird, aber ich bin mir immer noch nicht sicher, wie sicher das wäre.

Darüber hinaus handelt es sich bei einigen Festplatten der Enterprise-Klasse um SEDs (Self Encrypting Drives), mit denen Sie den Verschlüsselungsschlüssel drehen können, um alle geschriebenen Daten sofort und sicher zu löschen.

Zuletzt habe ich in der Vergangenheit DBAN (auch bekannt als Darik's Boot and Nuke) verwendet, das über bootfähige CD- und USB-Optionen verfügt und „ein Open-Source-Projekt ist, das auf SourceForge gehostet wird. Das Programm ist dafür ausgelegt, eine Festplatte sicher zu löschen, bis die Daten dauerhaft entfernt sind und nicht mehr wiederhergestellt werden können.“

Antwort4

Um Marcos Antwort zu vervollständigen: Was Sie brauchen, ist ein schnellerer Zufallszahlengenerator.

Sie verwenden ein einfaches Programm, das Zufallszahlen aus einer guten Bibliothek wie wiedergibt, boost::randomund verwenden dieses in dd.

Wenn Sie Boost wählen, können Sie verwendenDasBeispielsweise können Sie die experimentFunktion Ihren Bedürfnissen entsprechend ändern.

verwandte Informationen