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/sdaen el pasado, ETA parecía estar en el orden de los días. Vi algo sobre el uso badblocksen 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 ddo 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=1Mpor ejemplo.iostat -kx 10qué porcentaje de ocupado está en la unidad.shred -v -n 1 /dev/overwritethises rápido. Se trata del único caso en elshredque 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/urandomno 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/zerocasi siempre es suficiente. Solo no es suficiente si desea ocultar la cantidad de espacio libre en el volumen cifrado./etc/fstabcifrar, a menos que haya encriptado la partición raíz, e incluso entonces no hay tantas opciones posibles).openssl randparece 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 getpara generar tantos bytes aleatorios.openssl randcomando 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=2bandera, si es un SSD nuevo para la evaluación comparativa.Si desea que sea seguro, puede usar la
-randrepeat=boolopció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/zerocon una contraseña aleatoria, lo que proporciona datos pseudoaleatorios decentes muy rápido (si su CPU admite acelerarlo).Podrías canalizar esto
pvpara 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_byteslugar de laopenssl enc ...declaración más complicada anterior, pero hay un error que permitirásslproducir 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
opensslprocesos paralelos en núcleos separados, combinándolos usando un FIFO.fuente
openssl rand.dd if=/dev/urandom18MiB / sopenssl enc,: ~ 180MiB / sfio,: 169MiB / s,openssl randsin 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,sdaestá 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::randomy usa ese endd.Si elige boost, puede usar este ejemplo, cambiando la
experimentfunción a sus necesidades.fuente
/dev/urandom.boost::randomno 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::randomson los generadores, la única forma de saberlo con certeza es medir su algoritmo más rápido/dev/urandomEl 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/urandomes en magnitud más rápido en comparación con/dev/randomya 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/zeroes 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/urandomes 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=progressque era demasiado lento (independientemente de labs=configuración), y parece queopenssltiene 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/sdXAsegúrese de usar lo
-n 1contrario, de forma predeterminada se escribirá el dispositivo 3 veces (más el-vque 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