Alimentando /dev/random con lecturas de disco, etc.

Alimentando /dev/random con lecturas de disco, etc.

¿Hay alguna manera de alimentarse /dev/randomcon suficiente entropía? Los datos no tienen que ser verdaderamente aleatorios, es decir, puedo agregar la hora del día con pid y agregarle 27, no importa, solo quiero que se ejecute más rápido.

Intenté poner la pelota en marcha con dd if=/dev/zero of=/dev/null. Quiero saber si hay alguna forma que pueda utilizar add_keystroke_randomnesspara /linux/random.halimentarme artificialmente /dev/randompara no recibir esas llamadas de bloqueo impredecibles. es decir, estoy dispuesto a sacrificar algo de aleatoriedad a cambio de velocidad.

PD: no sugiera el uso/dev/urandom

Respuesta1

Existen varias soluciones para generar entropía. Por ejemplo haveged(con lo cual estoy muy contento), timer_entropyd, audio-entropyd, etc., etc., generalmente producen suficiente entropía para la mayoría de las aplicaciones que usan /dev/random. Si desea hacer todo lo posible, también hay generadores aleatorios de hardware, disponibles como memorias USB. Aunque pueden producir menos entropía de lo que piensas...

Aun así, /dev/urandomsiempre es una buena opción cuando necesitas que los datos estén disponibles sin demora.

Para grandes cantidades de datos (como sobrescribir discos duros), ninguno de los dispositivos aleatorios es adecuado en términos de velocidad, independientemente de la entropía disponible; una solución basada en PRNG shredhace un trabajo mejor y más rápido.

Respuesta2

(Mi respuesta se aplica a Linux. Los principios generales se aplican a otras variantes de Unix, pero no a la distinción random/ urandom).

Esto ya está sucediendo dentro del kernel.

Nunca está de más inyectar entropía adicional. Si tiene un montón de bytes pseudoaleatorios por ahí, simplemente escríbalos en /dev/randomy se mezclarán en el grupo de entropía.

Havegees un programa popular para recolectar entropía adicional.

dd if=/dev/zero of=/dev/nullno causa ninguna E/S de hardware, por lo que no agrega ninguna entropía. Las pulsaciones de teclas contienen una pequeña cantidad de entropía.


Tenga en cuenta que si está leyendo desde /dev/randomLinux, lo está haciendo mal. Los diseñadores de LinuxEntendiste mal: declararon que la entropía es algo que se agota rápidamente, lo queno es el caso. La solución a los " /dev/randombloques" no es "inyectar más entropía" sino "utilizar el dispositivo apropiado". Ya sea que quieras escucharlo o no,deberías leer desde/dev/urandom.

Respuesta3

Dependiendo de la versión del kernel, Linux implementa add_disk_randomness(), add_input_randomness()y add_interrupt_randomness()como fuentes de entropía. Estos corresponden a eventos de E/S de disco, eventos de teclado y mouse y eventos de interrupción (IRQ). Consulte random.c para conocer la implementación exacta. Estas fuentes condicionan, mezclan y almacenan internamente y se utilizan para alimentar controladores bloqueantes /dev/randomy no bloqueantes . /dev/urandomEn este caso, no bloqueo significa que una llamada a /dev/urandomsiempre producirá resultados incluso si el grupo de entropía no contiene entropía. Por improbable que sea, /dev/urandomsu uso puede conducir a una siembra de baja entropía y a un RNG determinista predecible. Esto, a su vez, puede provocar que las criptomonedas se rompan, siendo RSA especialmente vulnerable a condiciones de baja entropía. Por lo tanto, no deberías usarlo /dev/urandompara criptografía. Sin embargo, /dev/urandomla entropía del tiempo de arranque es persistentemente problemática en sistemas sin cabeza y requeriría fuentes de entropía adicionales para funcionar correctamente.

La solución más sencilla para una entropía de arranque insuficiente es habilitar RdRand(o RdSeed) a través de hw_rand, pero eso requiere confiar en la implementación de caja negra de Intel (y ahora AMD). Si utiliza QorlQ, existe una funcionalidad SEC equivalente.

Alternativamente, existen software generadores de números aleatorios verdaderos (?) que puede implementar. Mi recomendación esFluctuación del tiempo de CPUpor Stephan Muller ya que es un diseño bien documentado y fácil de integrar con el sistema existente. Tenga en cuenta que debe compilarse sin optimizaciones para obtener resultados de entropía máxima.

información relacionada