¿Por qué GNU se destruye más rápido que dd cuando se llena un disco con datos aleatorios?

8

Mientras borraba de forma segura un disco duro antes de desmantelarlo, noté que eso dd if=/dev/urandom of=/dev/sdatoma casi todo un día, mientras que shred -vf -n 1 /dev/sdasolo toma un par de horas con la misma computadora y el mismo disco.

¿Cómo es esto posible? Supongo que el cuello de botella es la salida limitada de /dev/urandom. ¿Shred utiliza algún generador de pseudoaleatoriedad que sea menos aleatorio y solo suficiente para su único propósito (es decir, más eficiente) que urandom?


fuente
Tenga en cuenta que la mejor opción para borrar unidades, especialmente unidades ssd, es el comando de borrado seguro SATA. Cualquier otra opción, salvo la destrucción, fallará. También es mucho más rápido, y puede tomar segundos en un SSD.
Maarten Bodewes

Respuestas:

11

Shred utiliza un generador pseudoaleatorio interno

De manera predeterminada, estos comandos usan un generador pseudoaleatorio interno inicializado por una pequeña cantidad de entropía, pero se puede dirigir a usar una fuente externa con la opción --random-source = file. Se informa un error si el archivo no contiene suficientes bytes.

Por ejemplo, el archivo del dispositivo / dev / urandom podría usarse como fuente de datos aleatorios. Por lo general, este dispositivo reúne el ruido ambiental de los controladores de dispositivos y otras fuentes en un grupo de entropía, y usa el grupo para generar bits aleatorios. Si el grupo tiene pocos datos, el dispositivo reutiliza el grupo interno para producir más bits, utilizando un generador de números pseudoaleatorios criptográficamente seguro. Pero tenga en cuenta que este dispositivo no está diseñado para la generación masiva de datos aleatorios y es relativamente lento .

No estoy convencido de que los datos aleatorios sean más efectivos que un solo paso de ceros (o cualquier otro valor de byte) para ocultar contenidos anteriores.

Para desmantelar de forma segura una unidad, utilizo un imán grande y un martillo grande.

RedGrittyBrick
fuente
2

Supongo que sería causado por el dduso de fragmentos más pequeños para escribir los datos. Intenta dd if=... of=... bs=(1<<20)ver si funciona mejor.

jpalecek
fuente
Lo intentaré en la próxima ocasión y publicaré los resultados.
+1 El ddtamaño de bloque predeterminado es 512. Se realizó muy por debajo de los límites del disco en mi computadora.
Piotr Findeisen
/ dev / urandom es probablemente bastante rápido: el tamaño del bloque dd es casi el problema.
Dan Pritts
2
Una vez que aumenta el tamaño del bloque, parece que /dev/urandompuede convertirse en un cuello de botella: estoy probando algunas unidades SSD a través de USB 3.0 y con el mismo ddcomando obtengo 326 MB / s para if=/dev/zeropero solo 12.8 MB / s paraif=/dev/urandom
austinmarton