Fuentes de entropía para Linux

9

Digamos que quiero un gigabyte más o menos de datos aleatorios de / dev / random, adecuados para un pad de una sola vez (por lo que / dev / urandom está fuera). ¿Cómo sembro mi / dev / random con suficiente entropía para hacer esto? Estoy buscando comandos y programas específicos para esto. No quiero comprar nada. Estoy usando Arch Linux, si eso hace la diferencia.

PyRulez
fuente
¿Acaso un programa de este tipo no convertiría / dev / random en algo que tenga el mismo problema que / dev / urandom que no desea usar? ¿O se refiere a algo que obtiene entropía adicional de algún dispositivo o de la red?
Anthon
@Anthon Estoy hablando de programas específicos para extraer aleatoriedad de una fuente de entropía, como ruido de disparo, ruido térmico, algún dispositivo, etc. El programa no haría la aleatoriedad en sí.
PyRulez
... por ejemplo, un comando o programa que dice Here — type something:, y luego mide los deltas de tiempo entre pulsaciones de teclas con una precisión mayor que la que un humano puede controlar?
G-Man dice 'reinstalar a Monica' el
1
Menciona una plataforma única como una de las dos excepciones a la afirmación de que _'... casi todos los algoritmos criptográficos ... "solo" ofrecen seguridad computacional ". ¿A menos que pueda citar algo que me perdí donde dice que los pads únicos no pueden usar urandom?
Inútil

Respuestas:

4

Dos programas que pueden aumentar el grupo de entropía sin requerir hardware adicional son rng-toolsy haveged. rng-toolsusa RNG disponibles en CPU y chipsets havegedmodernos , usa aleatoriedad de CPU moderna (comportamiento de caché, etc.). Ambos están disponibles en Arch, y la wiki de Arch tiene una página interesante que los discute. No he intentado usarlos para generar un gigabyte de datos, pero debería ser posible en una cantidad de tiempo razonable.

Excluye explícitamente la compra de cualquier cosa, pero solo por completar, hay un artículo interesante en LWN sobre la entropía con NeuG , que incluye la discusión havegedy varios otros enfoques. Puede comprar una placa STM8S capaz de ejecutar NeuG por menos de $ 10, o una FST-01 por $ 35.

Stephen Kitt
fuente
4

Desafortunadamente, / dev / random tampoco es adecuado para usar en una plataforma de una sola vez, al menos no el tipo de plataforma de una sola vez (con garantías de seguridad comprobables) que la mayoría de las personas imaginan cuando piensan o implementan plataformas de una sola vez. La mayor parte de la información a continuación se resume del artículo (muy largo) en http://www.2uo.de/myths-about-urandom/

El problema es que / dev / random no es realmente aleatorio; utiliza un CSPRNG para generar su salida. De hecho, / dev / random usa exactamente el mismo CSPRNG que / dev / urandom. La única diferencia es que / dev / bloques aleatorios si su estimación interna de entropía es insuficiente.

La palabra "estimar" en la oración anterior es clave. La mayoría de la gente piensa que esta estimación siempre es precisa y perfecta, pero en realidad no es del todo precisa. En el instante en que la estimación es incorrecta, pierde todas las garantías de seguridad comprobables de la plataforma de un solo uso, y todo lo que le queda es seguridad computacional, ¡no mejor que si hubiera usado / dev / urandom!

Obtener el cálculo de la entropía un poco incorrecto no hace que su plataforma única sea un poco insegura. La garantía de seguridad comprobable de una almohadilla única es todo o nada.

La premisa de esta pregunta es que los problemas con / dev / random se pueden "arreglar" agregando más entropía. Lamentablemente, esta premisa está mal. Una fuente maliciosa de entropía es mucho peor que ninguna entropía, porque las fuentes de entropía a menudo tienen acceso a datos internos y pueden exportar estos datos de forma encubierta utilizando la salida RNG; consulte http://blog.cr.yp.to/20140205-entropy .html para una discusión completa (demasiado largo para resumir aquí). En particular, una fuente de entropía de hardware (como recomiendan varias otras respuestas) es una muy mala elección desde una perspectiva de seguridad, ya que ese hardware está en una posición privilegiada para hacer cosas maliciosas, y es esencialmente inaudible.

djao
fuente
No dije que lo estaba arreglando con más entropía, solo necesitaba más para una clave más grande. Sin embargo, ese es un buen punto sobre que es defectuoso. ¿Me puede recomendar alguna alternativa?
PyRulez
1
Esta es una buena respuesta, excepto el último bit sobre las fuentes de hardware. Las fuentes de entropía de hardware son la única forma confiable y auditable de obtener entropía. Usted (o alguien de su confianza) necesita auditar la fuente, eso requiere tener información de diseño y verificar que el proceso de fabricación respete la información de diseño. Incluso puede combinar fuentes de entropía para que si al menos una de ellas está bien, entonces el resultado está bien (NB necesita combinarlas correctamente para eso).
Gilles 'SO- deja de ser malvado'
Gilles, lee el segundo enlace que publiqué. Es completamente falso afirmar que si al menos una fuente de entropía está bien, entonces el resultado está bien. ¡El propósito completo de ese enlace es refutar esta afirmación falsa!
djao
Además, no es suficiente auditar la fuente y el proceso de fabricación. Debe auditar su dispositivo individual para asegurarse de que su dispositivo se fabricó de acuerdo con el proceso de fabricación. Esta es una tarea mucho más difícil que la tarea análoga en software, que consiste simplemente en verificar una suma de verificación.
djao
En cuanto a las alternativas: no hay una forma mágica alternativa de obtener 1 GB de datos aleatorios de una PC. Necesitaría un dispositivo de hardware para eso (pero luego preste atención a lo que dije acerca de que el hardware es difícil de auditar). Si estaba dispuesto a usar / dev / random, entonces / dev / urandom es igual de bueno; No es peor que / dev / random para todas las aplicaciones criptográficas.
djao
3

Parece que un componente HW es la mejor idea. Hay algunos IC generadores de hardware por ahí, pero hay que confiar en ellos tal como vienen.

Dos soluciones probablemente buenas son inducir componentes para crear ruido; dos soluciones principales parecen ser el sesgo de temperatura y el ruido avanche creado con un diodo (consulte http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html )

Como los componentes como el giroscopio y el acelerómetro se han vuelto más sensibles, hacer que funcionen con la mayor sensibilidad y usar su valor LSB también puede ser una buena solución, pero AFAIK nadie lo auditó.

Es curioso ya que hay mucho papel sobre NO hacer RNG, pero no hay una implementación HW abierta y verificada

Lesto
fuente
2

Puedes usar pycsprng.py . ¿Criptográficamente seguro? No estoy muy seguro, pero me gustaría una revisión por pares.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

La canalización a pves opcional y solo le ayudará a saber cuántos datos se han transferido.

Es posible que los bloques de mayor tamaño (bs) aumenten el rendimiento. Tendrá que ajustar el recuento para no generar un archivo demasiado grande si aumenta el tamaño del bloque.

Daryl Tucker
fuente
3
Eso solo usa /dev/urandom...
Stephen Kitt
1
pycsprng.pyes literalmente un script de 10 SLOC que obtiene aleatoriedad os.urandom. Los doctores dicen que "los datos devueltos deberían ser lo suficientemente impredecibles para aplicaciones criptográficas [...] en un sistema similar a UNIX, esto preguntará /dev/urandom" . En realidad lo hace (aunque es una fuente desactualizada) y Security.SE dice que está bien para el cifrado .
gronostaj
¡Ni una sola vez, criptografía!
PyRulez
0

Lo que obtienes de un canal de micrófono analógico cuando no enchufas un micrófono es generalmente estático. Canalice eso a través de bzip2, por ejemplo, para blanquear, mezcle con otra fuente de aleatoriedad (urandom u otro conector de micrófono), tal vez canalice el resultado a través de openssl para una buena medida y lo que obtenga debería ser bastante aleatorio.

Sin embargo, sería difícil demostrar las propiedades de seguridad duras y rápidas sobre la aleatoriedad del resultado.

Johannes Bauer
fuente
0

Si está utilizando Linux kernel 2.6.9 o más reciente en un procesador amd64 / x86_64, entorno virtual o físico, puede probar ncomputers.org/pandom un verdadero generador de números aleatorios, que ofrece 8 KiB / s entropía de 64 ubits / 64 bits a través de/dev/random

salida de muestra

ncomputadoras
fuente
Enlaces rotos, no pudo encontrar una copia de seguridad.
slm
0

Para generar 100 MB de datos aleatorios generados por hardware, puede:

  • Grabe 20 minutos de audio (96khz 16bit mono) con el micrófono incorporado de su computadora (disponible en una computadora portátil). Obtendrá un archivo ~ 220 MB WAV.

  • Deseche los bits no útiles y mezcle los bits de datos binarios (muchas formas de hacerlo) con algunas matemáticas

  • Exporte los bits barajados como un archivo binario de ~ 100 MB

Aquí hay un artículo sobre esto: un intento de generar una verdadera entropía y datos aleatorios con audio (y el micrófono incorporado de su computadora) .

Basj
fuente