
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/sda
in der Vergangenheit mit versucht habe, lag die voraussichtliche Ankunftszeit im Bereich von Tagen. Ich habe etwas über die Verwendung badblocks
anstelle 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 dd
oder 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/sda
ist nicht die schnellste Möglichkeit, eine Festplatte mit zufälligen Daten zu füllen. Linux /dev/urandom
ist 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/zero
mit 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, pv
um 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_bytes
openssl 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 openssl
Prozesse 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=2
Flag 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::random
und verwenden dieses in dd
.
Wenn Sie Boost wählen, können Sie verwendenDasBeispielsweise können Sie die experiment
Funktion Ihren Bedürfnissen entsprechend ändern.