He leído sobre cómo hacer que los discos duros sean seguros para el cifrado, y uno de los pasos es escribir bits aleatorios en el disco, para que los datos cifrados no se puedan distinguir del resto de los datos en el disco duro.
Sin embargo, cuando intenté usarlo dd if=/dev/urandom of=/dev/sda
en el pasado, ETA parecía estar en el orden de los días. Vi algo sobre el uso badblocks
en lugar de urandom, pero eso no pareció ayudar mucho. Solo me gustaría saber si hay alguna forma que pueda ayudarme a acelerar esto, como las opciones dd
o alguna otra cosa que me pueda faltar, o si la velocidad es solo una limitación de la HD.
encryption
dd
random
bitflips
fuente
fuente
dd bs=1M
por ejemplo.iostat -kx 10
qué porcentaje de ocupado está en la unidad.shred -v -n 1 /dev/overwritethis
es rápido. Se trata del único caso en elshred
que realmente es útil para algo.Respuestas:
dd if=/dev/urandom of=/dev/sda
, o simplementecat /dev/urandom >/dev/sda
, no es la forma más rápida de llenar un disco con datos aleatorios. Linux/dev/urandom
no es el RNG criptográfico más rápido que existe. ¿Hay una alternativa a / dev / urandom? tiene algunas sugerencias En particular, OpenSSL contiene un PRNG criptográfico más rápido:Tenga en cuenta que al final, si hay una mejora o no depende de qué parte es el cuello de botella: la CPU o el disco.
La buena noticia es que llenar el disco con datos aleatorios es inútil. Primero, para disipar un mito común, limpiar con ceros es igual de bueno en el hardware actual . Con la tecnología de disco duro de la década de 1980, sobrescribir un disco duro con ceros dejó una pequeña carga residual que podría recuperarse con hardware algo costoso; Fueron necesarios múltiples pases de sobrescritura con datos aleatorios (el "borrado de Gutmann"). Hoy, incluso un solo paso de sobrescritura con ceros deja datos que no pueden recuperarse de manera realista incluso en condiciones de laboratorio.
Cuando está encriptando una partición, no es necesario llenar el disco con datos aleatorios para la confidencialidad de los datos encriptados. Solo es útil si necesita hacer que el espacio utilizado por los datos cifrados no se pueda distinguir del espacio no utilizado. La creación de un volumen cifrado encima de un contenedor no aleatorio revela qué bloques de disco ha utilizado el volumen cifrado. Esto da una buena pista sobre el tamaño máximo del sistema de archivos (aunque con el tiempo se convertirá en una aproximación cada vez peor), y poco más.
fuente
cat /dev/zero
casi siempre es suficiente. Solo no es suficiente si desea ocultar la cantidad de espacio libre en el volumen cifrado./etc/fstab
cifrar, a menos que haya encriptado la partición raíz, e incluso entonces no hay tantas opciones posibles).openssl rand
parece tener un límite superior en la cantidad de bytes que generará. Si excede ese límite, por ejemplo, 'openssl rand 810000000000 openssl', then no random output is generated. Only a brief "help" text is printed. I'm trying to random (pretty much) fill a 3TB hard drive. Not sure if there is a way to get
para generar tantos bytes aleatorios.openssl rand
comando en cada partición en reversa comenzando desde sda5 o lo que sea y trabajando hacia atrás hasta sda1 y finalmente sda?El openssl no parecía funcionar para mí. Obtuve "opciones desconocidas" y otros problemas con las soluciones proporcionadas. Así que terminé yendo con el programa fio.
Lo que parece estar tomando 3 horas para hacer 19 TB en 24 discos duros. Entonces, aproximadamente 1,800 MB / s
Espero que estos sean datos aleatorios. La página de manual dice fio "Predeterminado: llenar buffers con datos aleatorios". http://linux.die.net/man/1/fio
No lo estoy haciendo con fines de seguridad / encriptación, solo estoy tratando de asegurarme de que mis pruebas de lectura posteriores sean datos reales y no solo ceros. Este mismo comando fio podría usarse para el preacondicionamiento SSD / NVMe. Como el solo uso de / dev / zero puede llevar a una compresión de nivel de disco "trampa" cuánto se escribe realmente. Aunque le agregaría una
-loops=2
bandera, si es un SSD nuevo para la evaluación comparativa.Si desea que sea seguro, puede usar la
-randrepeat=bool
opción, ya que eso alternará "Sembrar el generador de números aleatorios de una manera predecible para que los resultados se repitan en las ejecuciones. Valor predeterminado: verdadero", pero todavía no seguro de lo seguro que sería.Además, algunos discos duros de clase empresarial son SED (unidades de autocifrado) y le permitirán girar la clave de cifrado para borrar de forma instantánea y segura todos los datos escritos.
Por último, he usado DBAN (también conocido como Darik's Boot and Nuke), que tiene opciones de arranque de CD y USB y "es un proyecto de código abierto alojado en SourceForge. El programa está diseñado para borrar de forma segura un disco duro hasta que sus datos estén permanentemente eliminado y ya no es recuperable "
fuente
Puedes hacer que OpenSSL encripte
/dev/zero
con una contraseña aleatoria, lo que proporciona datos pseudoaleatorios decentes muy rápido (si su CPU admite acelerarlo).Podrías canalizar esto
pv
para obtener progreso / ETA. Los comandos que estoy ejecutando en este momento (en un shell de raíz) son:Tengo esta idea de esta respuesta , después de tener el mismo problema que John irracional , quien comentó sobre la respuesta de Gilles arriba. Esto aumentó mi velocidad de borrado a mi nueva matriz RAID de 11 MB / s a alrededor de 300 MB / s, reduciendo lo que iba a llevar una semana a 10 horas.
Agregaré que deberías poder usar
openssl rand #of_bytes
lugar de laopenssl enc ...
declaración más complicada anterior, pero hay un error que permitirássl
producir solo 16 MB de salida. (Este error se archivó en enero de 2016).Y, según la respuesta a esta pregunta , y continuando asumiendo que la CPU es el cuello de botella, puede ser posible aumentar aún más la velocidad ejecutando múltiples
openssl
procesos paralelos en núcleos separados, combinándolos usando un FIFO.fuente
openssl rand
.dd if=/dev/urandom
18MiB / sopenssl enc
,: ~ 180MiB / sfio
,: 169MiB / s,openssl rand
sin soporte> 754GB. Tenga en cuenta que si usted también quiere cálculo de tamaño automático, utilice:openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt </dev/zero | pv --progress --eta --rate --bytes --size $(</proc/partitions awk '$4=="sda" {print sprintf("%.0f",$3*1024)}') | dd of=/dev/sda bs=2M
. Cuidado,sda
está presente dos veces en este comando.Completando la respuesta de Marco, lo que necesita es un generador de números aleatorios más rápido.
Utiliza un programa simple que hace eco de números aleatorios de una buena biblioteca
boost::random
y usa ese endd
.Si elige boost, puede usar este ejemplo, cambiando la
experiment
función a sus necesidades.fuente
/dev/urandom
.boost::random
no ofrece un Crypto RNG, ¿verdad? Si va a usar un RNG no criptográfico, también podría usar ceros: al menos no tendrá una ilusión de seguridad.boost::random
son los generadores, la única forma de saberlo con certeza es medir su algoritmo más rápido/dev/urandom
El cuello de botella no es ni el tamaño del bloque ni el disco duro, sino la lenta generación de números pseudoaleatorios.
/dev/urandom
es en magnitud más rápido en comparación con/dev/random
ya que no está bloqueando en un grupo de baja entropía.Puede confirmar esto midiendo la salida sin formato de sus números pseudoaleatorios:
Esta velocidad será mucho más lenta que la velocidad de escritura de su disco duro. Una solución correcta depende totalmente de su nivel de seguridad requerido. Si necesita alta seguridad, use un generador aleatorio de hardware rápido o acepte la velocidad lenta. Si sus necesidades de seguridad no son tan altas, podría capturar unas pocas docenas de MiB de datos y escribir esa cadena repetidamente en la unidad. O tal vez incluso escribir ceros desde
/dev/zero
es una opción.Resumen
/dev/random
- seguro, muy lento/dev/urandom
-menosseguro¹,hardware lento RNG - seguro, rápido, muy costoso
(
/dev/zero
- no aleatorio en absoluto, muy rápido)¹ Según ¿Es seguro un rand de / dev / urandom para una clave de inicio de sesión?
/dev/urandom
es tan seguro como/dev/random
. Gracias a Gilles por señalar esto.fuente
urandom
./dev/random
.Estaba tratando de llenar un HDD USB externo de 4TB con
dd if=/dev/urandom of=/dev/sdX status=progress
que era demasiado lento (independientemente de labs=
configuración), y parece queopenssl
tiene un límite en la cantidad de datos aleatorios que saldrá (al menos para la versión 1.0.2p). La mejor opción que encontré fue el comentario de frostschutz para usarshred
, como en:shred -v -n 1 /dev/sdX
Asegúrese de usar lo
-n 1
contrario, de forma predeterminada se escribirá el dispositivo 3 veces (más el-v
que muestra el progreso). No creo que la calidad de los números pseudoaleatorios sea tan alta, pero es suficiente para mí preparar un HDD portátil de gran capacidad para el cifrado.fuente