Gibt es eine Alternative zu / dev / urandom?

21

Gibt es einen schnelleren Weg als / dev / [u] random? Manchmal muss ich Dinge tun wie

cat / dev / urandom> / dev / sdb

Die zufälligen Geräte sind "zu" sicher und dafür leider zu langsam. Ich weiß, dass es wipeund ähnliche Tools für sicheres Löschen gibt, aber ich nehme an, dass es auch einige integrierte Mittel dafür in Linux gibt.

cgp
quelle
Entspricht StackOverflow
David Z
1
Ist dd nicht ein besserer Weg, dies zu tun? Möglicherweise ein Kandidat für den UUoC Award?
Tom O'Connor

Antworten:

12

Wenn Sie eine "sichere" Löschung einer Festplatte (oder Datei) vornehmen möchten, sollten Sie sich das Shred-Dienstprogramm ansehen.

Wie in den vorherigen Postern erwähnt, sollen die / dev / * -Zufallsgeräte als Quelle für kleine, zufällige Datenmengen verwendet werden.

MikeyB
quelle
1
Laut Manpage verwendet 'shred' / dev / urandom. Es ist zwar eine gute Antwort für das Löschen der Festplatte, bietet aber keine Beschleunigung gegenüber anderen Techniken, die aus / dev / urandom gelesen werden. (Ein weiterer Tipp bei der Verwendung von "Shred": Die meisten Menschen sind mit 1-2 Durchgängen zufriedener als mit der riesigen Standardanzahl, so dass ein Abwischen keine Tage dauert.)
gojomo
4
Eigentlich ist Shred viel schneller als / dev / urandom. Ich vermute, es stellt seine eigenen Pseudozufallsdaten mit / dev / urandom oder / dev / random als Startwert bereit.
Thomasrutter
24

Leider hat Linux eine schlechte Implementierung von Urandom. Sie könnten aes256-ctr mit einem zufälligen Schlüssel verwenden und mehrere hundert Megabyte Pseudozufälligkeit pro Sekunde erhalten, wenn Ihre CPU AES-NI (Hardwarebeschleunigung) unterstützt. Ich freue mich darauf, auch zu einem modernen Ansatz überzugehen.

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

Dieser Welpe macht 1.0 GB / s auf meiner Box (verglichen mit 14 MB / s von / dev / urandom). Es verwendet urandom nur zum Erstellen eines zufälligen Passworts und verschlüsselt dann / dev / zero sehr schnell mit diesem Schlüssel. Dies sollte ein kryptografisch sicheres PRNG sein, aber ich werde keine Garantien abgeben.

Tronic
quelle
Vielen Dank für diese großartige Antwort. Ich konnte mit / dev / urandom von 9,5 MB / s auf über 120 MB / s mit openssl aufsteigen.
DDR
Mit Ausnahme der ersten Aussage, dass Linux eine schlechte Implementierung von Urandom hat , stimme ich dieser Antwort zu. Gut genug, um eine Festplatte vor der Verschlüsselung zu löschen (oder zu füllen?).
Vikrant Chaudhary
5
Pass pvfür eine schöne Fortschrittsanzeige durch. openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | pv -pterb > /dev/sdb.
Vikrant Chaudhary
@VikrantChaudhary urandom erzeugt natürlich qualitativ hochwertige Pseudo-Zufallszahlen, aber das ist keine Entschuldigung dafür, langsam zu sein. Der AES-Zählermodus ist viel schneller und es ist schwierig zu argumentieren, wie er weniger sicher ist als / dev / urandom.
Perseiden
1
Nur um die hinzufügen pvEmpfehlung, können Sie Rohr pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdbhaben , pvzeigen Sie die Fortschritte in Richtung auf die Schreib beenden.
Asciiphil
7

In einem Schnelltest unter Ubuntu 8.04 auf einem Thinkpad T60p mit T2500-CPU waren 1 GB Zufallsdaten von openssl rand3-4-mal schneller als/dev/urandom . Das ist,

time cat /dev/urandom | head -c 1000000000 > /dev/null

... war etwa 4 Minuten, während ...

time openssl rand 1000000000 | head -c 1000000000 > /dev/null

... war etwas mehr als 1 Minute.

Wir sind uns nicht sicher, ob es einen Unterschied in der Zufallsqualität gibt, aber beide sind wahrscheinlich in Ordnung für HD-Wiping.

Gojomo
quelle
5

Ich sehe viele Antworten, die besagen, dass die Verwendung von Zufallsdaten nicht wichtig ist. Das stimmt so ziemlich, wenn Sie lediglich versuchen, das Laufwerk zu löschen, aber nicht so sehr, wenn Sie es zur Vorbereitung der Festplattenverschlüsselung löschen.

Wenn Sie ein Gerät mit nicht zufälligen Daten füllen und eine verschlüsselte Partition darauf platzieren, kann dies zu Problemen führen. Der Teil des Laufwerks, der verschlüsselte Daten speichert, hebt sich vom Rest des Laufwerks ab, da die verschlüsselten Daten zufällig aussehen und der Rest nicht. Dies kann verwendet werden, um Informationen über die Kryptodiskette zu ermitteln, die zum Knacken verwendet werden könnten. Der folgende Link erklärt die Theorie, wie einige der häufigsten Angriffe funktionieren und wie man sich gegen sie verteidigt (auf jeden Fall unter Linux).

Linux-Festplattenverschlüsselungseinstellungen

user104021
quelle
1
Sehr richtig. Bei relativ modernen Festplatten (> 20 GB) ist ein Überschreiben in einem Durchgang ausreichend. Sogar die NSA und ähnliche Unternehmen wären sehr bemüht, eine signifikante Datenmenge vom Laufwerk zu erhalten. Und es ist sehr teuer. Denken Sie an 100.000 USD pro Megabyte. Die Bemerkung zur Verschlüsselung ist sehr richtig. Sie möchten, dass die nicht verwendeten Teile der Festplatte "so zufällig" aussehen wie die verwendeten Teile.
Tonny
Verändert Ihre Geräteverschlüsselungssoftware nicht die gesamte Festplatte nach dem Zufallsprinzip?
Nathan Garabedian
5

Wenn Sie eine Festplatte sicher löschen müssen, gibt es ein sehr leistungsfähiges Tool : DBAN

Arg
quelle
5

Wenn Sie ein großes Block-Gerät löschen möchten, ist es meiner Meinung nach robuster zu verwenden ddund der Geräte-Mapper leitet keine zufälligen Daten um. Im Folgenden wird Karte /dev/sdbzu /dev/mapper/deviceToBeErasedVer- und Entschlüsselung in transparenter Weise dazwischen. Um das Gerät verschlüsselt auszufüllen, werden Nullen auf die Klartextseite des Mappers ( /dev/mapper/deviceToBeErased) kopiert .

cryptsetup --cipher aes-xts-plain64 --key-file /dev/random --keyfile-size 32 create deviceToBeErased /dev/sdb
dd if=/dev/zero of=/dev/mapper/deviceToBeErased bs=1M

Die verschlüsselten Daten /dev/sdbsind garantiert nicht von zufälligen Daten zu unterscheiden, wenn keine ernsthafte Schwäche in AES vorliegt. Der verwendete Schlüssel stammt von /dev/random(keine Sorge - er verwendet nur 32 Bytes).

Perseiden
quelle
2

Je schneller Ihr Werkzeug ist, desto weniger sicher ist das Ergebnis. Das Erzeugen einer guten Zufälligkeit braucht Zeit.

Wie auch immer, Sie könnten so etwas wie dd verwenden, wenn = / dev / zero von = / dev / sdb , aber das wird natürlich nicht zufällig sein, es wird nur viel schneller gelöscht.

Eine andere Option könnte sein, diese Methode / sbin / badblocks -c 10240 -s -w -t zufällig -v / dev / sdb zu verwenden. Sie ist schneller als die übliche Methode , aber die PRNG der badblocks ist weniger zufällig.

Zoredache
quelle
1
und ehrlich - das ist VIEL der Sicherheit für den Antrieb
warren
Das mehrfache Überschreiben, wie es Shred tut, benötigt Zeit und bietet eine bessere Sicherheit als das einmalige Überschreiben von "perfekt" zufälligen Daten.
Bis auf weiteres angehalten.
"Je schneller Ihr Werkzeug ist, desto weniger sicher ist das Ergebnis. Eine gute Zufälligkeit zu erzeugen, braucht Zeit." - Das ist nicht wahr. Ein AES Counter Mode (Pseudo) Zufallszahlengenerator ist weitaus besser analysiert und um Größenordnungen schneller als / dev / urandom. (Siehe Tronics Antwort.)
Perseiden
2

/dev/random Verwendet viel Systementropie und erzeugt daher nur einen langsamen Datenstrom.

/dev/urandom ist weniger sicher und schneller, ist aber immer noch auf kleinere Datenblöcke ausgerichtet - es ist nicht dazu gedacht, einen kontinuierlichen Strom von Hochgeschwindigkeits-Zufallszahlen bereitzustellen.

Sie sollten einen PRNG nach Ihrem eigenen Muster erstellen und ihn mit etwas aus /dev/randomoder ausstatten /dev/urandom. Wenn Sie es etwas zufälliger benötigen, setzen Sie es in regelmäßigen Abständen ein - alle paar MB (oder wie lang Ihr Prng auch sein mag). Das Abrufen von 4 Bytes (32-Bit-Wert) aus urandom oder random ist schnell genug, damit Sie dies alle 1k Daten tun können (Ihren prng alle 1k neu einlesen) und sehr zufällige Ergebnisse erhalten, während Sie sehr, sehr schnell vorgehen.

-Adam

Adam Davis
quelle
7
Es ist sehr selten, dass jemand seinen eigenen Zufallsgenerator schreiben kann, der besser ist als der, der bereits verfügbar ist. In den meisten Fällen ist das Ergebnis ein vorhersehbares Muster und ein falsches Sicherheitsgefühl. Ich würde empfehlen, Shred auf einem Laufwerk über seinen / dev-Eintrag oder über eine sehr gründliche physische Zerstörung zu verwenden.
Bis auf weiteres angehalten.
Genau. Ich würde Shred verwenden, das standardmäßig urandom verwendet (was ich ehrlich gesagt nicht langsam finde). Hinweis: Wenn Sie sehr geduldig sind, können Sie / dev / random mit shred verwenden (indem Sie --random-source = / dev / random angeben).
Matthew Flaschen
2

Wenn Sie eine Festplatte schnell löschen möchten, schreiben Sie nicht-zufällige Daten darauf. Dies ist nicht weniger sicher als die Verwendung zufälliger Daten. In beiden Fällen können die Originaldaten beim Anschließen an einen Computer nicht gelesen werden. Überschreiben von Festplattendaten: Die große Wischkontroverse zeigt, dass die Originaldaten auch nicht mit einem Mikroskop gelesen werden können.

Sciurus
quelle
2

Formatieren Sie mit LUKS und dd über das verschlüsselte Volume. Verwenden Sie dann / dev / urandom, um den LUKS-Header zu löschen.

Wenn Sie Hardware-AES-Unterstützung haben, ist dies eine sehr schnelle Lösung.

Kurz:

cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX cryptodev
dd if=/dev/zero bs=1M of=/dev/mapper/cryptodev
cryptsetup luksClose cryptodev
# wipe the luks header.  Yes, it uses /dev/urandom but only for 2MB of data:
dd if=/dev/urandom bs=1M count=2 of=/dev/sdX

getan!

Siehe mein Blog: Fülle schnell eine Diskette mit zufälligen Bits (ohne / dev / urandom)

Eric Wheeler
quelle
Warum stören Sie sich an LUKS, wenn Sie nur das Gerät überschreiben möchten? Plain dm-crypt ("plain mode" von cryptsetup) ist dafür viel einfacher zu benutzen.
Perseiden
2

Wenn Sie eine Festplatte löschen möchten, löscht dd den Inhalt der neu zugewiesenen Sektoren nicht und ist sehr langsam, wenn die Festplatte ausfällt. Stattdessen können Sie die seit langem standardisierte integrierte Löschfunktion für Laufwerke verwenden.

In diesem Beispiel lösche ich eine mechanische 500-GB-Festplatte in nur 102 Minuten. Auch wenn es voll von neu zugewiesenen Sektoren ist:

root@ubuntu:~# hdparm --security-set-pass Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_SET_PASS command, password="Eins", user=user, mode=high
root@ubuntu:~# time hdparm --security-erase-enhanced Eins /dev/sdaj
security_password="Eins"

/dev/sdaj:
 Issuing SECURITY_ERASE command, password="Eins", user=user

real    102m22.395s
user    0m0.001s
sys     0m0.010s

root@ubuntu:~# smartctl --all /dev/sdaj | grep Reallocated
  5 Reallocated_Sector_Ct   0x0033   036   036   036    Pre-fail Always   FAILING_NOW 1327 

Weitere Informationen finden Sie unter ata.wiki.kernel.org . In ihrem Beispiel wird jedoch --security-erase-enhanced nicht verwendet. Dies ist erforderlich, um die zuvor erwähnten neu zugewiesenen Sektoren zu löschen.

Per Mejdal Rasmussen
quelle
1

In der Praxis ist es wahrscheinlich nicht erforderlich, die gesamte Festplatte aus einem kontinuierlich zufälligen Stream zu extrahieren.

Sie könnten ein Stück zufälliger Daten in bescheidener Größe erstellen und dies dann immer wieder auf der Festplatte wiederholen.

Stellen Sie nur sicher, dass dieser Datenblock nicht ein Vielfaches der normalen Blockgröße der Festplatte beträgt, um sicherzustellen, dass Sie korrelierte Datenblöcke nicht mit genau demselben Bit zufälliger Daten überschreiben. Eine Blockgröße, die eine Primzahl im Bereich von ~ 1 MB ist, sollte gut passen.

Führen Sie dies zur Erhöhung der Sicherheit nur ein paar Mal aus, und verwenden Sie dabei jedes Mal eine andere Blockgröße.

Alnitak
quelle
1

Das Dienstprogramm "Shred" ist einfach und schnell. Wenn die SMART-Attribute des Laufwerks null neu zugewiesene Sektoren anzeigen, ist Shred wahrscheinlich sicher genug.

Wenn das Laufwerk jedoch Sektoren neu zugewiesen hat, werden die Daten zu beschädigten Sektoren angezeigt nicht überschrieben. Wenn die beschädigten Standorte vertrauliche Daten enthielten, bevor sie neu zugewiesen wurden, ist Shred möglicherweise nicht gut genug. Die "fehlerhaften" Sektoren können gelesen werden, indem die Zuordnungszuordnung des Laufwerks zurückgesetzt und (wiederholt) gelesen wird.

Die Möglichkeit, die Zuordnung der fehlerhaften Sektoren zurückzusetzen, hängt vom Hersteller und vom Laufwerksmodell ab.

getrunken
quelle
0

Wenn Sie nur die Festplatte überschreiben möchten, spielt es keine Rolle, was Sie verwenden, denn alles schlägt alles außer einem Forensiklabor, und ich würde nichts anderes vertrauen, als das Laufwerk zu verschrotten, um diese Ressourcenmenge zu stoppen .

Verwenden Sie einfach eine nicht zufällige Quelle wie alle Nullen oder Einsen oder ein sich wiederholendes Muster wie (ich denke, das wird funktionieren)

(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb
BCS
quelle
Das mag der Fall sein, aber manchmal kann man das Management nicht davon überzeugen, dass die durch einen zufälligen Schreibvorgang gewährte Sicherheit nicht wirklich größer ist als die Verwendung aller Nullen, da der zum Wiederherstellen von Daten erforderliche Technologiestand für beide Szenarien gleich ist. In diesem Fall ist es oft besser, die Anforderung zu erfüllen, indem Sie Ihren eigenen schnellen Zufallszahlengenerator erstellen.
Adam Davis