21 votos

How do I get /dev/random para trabajar en una máquina virtual con Ubuntu?

Al parecer, /dev/random está basado en interrupciones de hardware o similar impredecible aspectos de hardware físico. Ya que las máquinas virtuales no tienen el hardware físico, ejecución cat /dev/random dentro de una máquina virtual no produce nada. Estoy usando Ubuntu Server 11.04 como el anfitrión y el invitado, con libvirt/KVM.

Necesito configurar Kerberos dentro de una máquina virtual, pero krb5_newrealm sólo se bloquea para siempre "Carga de datos aleatorios", ya que el sistema no está produciendo.

¿Alguien sabe cómo solucionar esto? Es posible pasar del host /dev/random (que es muy hablador) en la máquina virtual para la máquina virtual puede utilizar los datos aleatorios?

He leído que hay algunas alternativas de software, pero no son buenos para la criptografía, ya que no son lo suficientemente aleatorios.

EDIT: parece que cat /dev/random en la vm no produce salida, muy, muy lentamente. Tengo mi reino por esperar cerca de dos horas, mientras se "Carga de datos aleatorios". Finalmente, se tiene lo suficiente para continuar. Todavía estoy interesado en una manera de acelerar este aunque.

10voto

David Schwartz Puntos 22683

Debería "sólo trabajo". Aunque la vm no tiene dedicado hardware físico, todavía tiene acceso a varias y muy buenas fuentes de aleatoriedad. Por ejemplo, puede utilizar la CPU del TSC a la hora de su lectura de los discos virtuales, que en última instancia va viento tiempo de discos físicos a la milmillonésima parte de un segundo. Estos tiempos dependen de la turbulento el flujo de aire cortante en el disco duro, que es impredecible.

Una lógica Similar se aplica al tráfico de la red. Aunque la interfaz está virtualizado, siempre y cuando el paquete se origina en una red física (y no es local a la caja, dicen originarios de la otra vm), el paquete de temporización depende del desplazamiento de fase entre el oscilador de cristal en la tarjeta de red y el oscilador de cristal que las unidades de la TSC. Esto depende microscópico de la zona de las variaciones de temperatura en los dos cristales de cuarzo. Esto también es impredecible.

Si por alguna razón no funciona, la solución más sencilla es escribir un programa para la mina de entropía y agregarlo al sistema de la piscina. La interfaz de red es su fuente más confiable. Por ejemplo, puede escribir código para:

1) Consulta de la TSC.

2) Emitir una consulta DNS a un servidor conocido de no estar en la misma máquina física.

3) Consulta de la TSC cuando finaliza la consulta.

4) Repite esto un par de veces, la acumulación de todos los TSC valores.

5) Realizar un hash seguro en el acumulado de los TSC funciones.

6) Pasar de la función de hash seguro de la salida del sistema de entropía.

7) Supervisar la entropía nivel de la piscina, y esperar hasta que se baja. Cuando es así, vuelva al paso 1.

Linux ha simples llamadas IOCTL para aumentar la entropía a la piscina, revise la piscina de su nivel, y así sucesivamente. Usted probablemente ha rngd, que puede tomar la entropía de un tubo y alimentar el sistema de la piscina. Usted puede llenar el tubo de cualquier fuente que desea, si es el TSC o 'wget' las peticiones de su propia entropía de la fuente.

10voto

Frank L Puntos 51

Yo uso haveged en todos mis servidores sin periféricos que realizar operaciones criptográficas (por ejemplo, TLS apretones de manos, kerberos, etc). Se debe en la mayoría de las versiones de Ubuntu' repositorio de paquetes: http://packages.ubuntu.com/search?keywords=haveged&searchon=names&suite=all&section=all

haveged utiliza el HAVAGE algoritmo para extraer la entropía desde el estado interno de los procesadores modernos. He aquí una detallada explicación: http://www.irisa.fr/caps/projects/hipsor/

Usted puede comprobar la aleatoriedad de la entropía generada con la ent paquete. En mis sistemas que se generan entropía de haveged pasado todas las pruebas de aleatoriedad por ent

7voto

polynomial Puntos 3284

Sí se puede de semillas, a partir de:

http://manpages.ubuntu.com/manpages/jaunty/man4/random.4.html

Usted puede poner que en /dev/urandom y debe semilla de la entropía. Yo era capaz de confirmar esta:

root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
128
root@mx01-ewr:/proc/sys/kernel/random# cat /dev/xvda >/dev/urandom  &
[1] 16187 # just using this as a source of data, you could do ssh hostIP 'cat /dev/random' >... etc
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1221
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1398

De bonificación si usted hace el comando ssh ir a través de un router por lo que genera entropía *:)

5voto

user1665794 Puntos 11

Esto funcionó para mí

Ejecución de krb5_newrealm dentro de una máquina virtual puede tomar un largo tiempo para terminar (después de la exhibición de "la Carga de datos aleatorios de los mensajes"). Usted puede utilizar este truco para acelerar un poco las cosas.

$ sudo aptitude install rng-tools -y
$ sudo rngd -r /dev/urandom -o /dev/random  # don't do this in production!

publicado en http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md

1voto

David Johnston Puntos 111

86 respuesta es asegurarse de que su VM no trampa de RdRand o RdSeed. La confianza en su VM para muchas cosas, este es uno de ellos.

Una lo suficientemente reciente RNGd en un post Snady Puente de la CPU, es (o puede ser contada a) el uso de RdRand o RdSeed, y no interceptado RdRand o RdSeed obtiene de la entropía en la VM. /dev/random, a continuación, trabaja con un real (no virtual) de la fuente de la entropía.

Esto no es por accidente. Es justo allí, en la arquitectura de Intel docs.

Para un dispositivo de hardware basada en la entropía de la fuente (I. E. utiliza un controlador de núcleo para compartir) que necesita la máquina virtual correctamente virtualizar el origen físico. No tengo ni idea de si ellos hacen esto, y si es así, para qué dispositivos.

Si su RNGd no tiene la drng opción a continuación, la actualización de la misma. Si su hardware no tiene un hardware muy rápido del generador de números aleatorios, estás condenada y usted debe considerar el uso de un hardware diferente para fines de seguridad.

# rngd --help
Usage: rngd [OPTION...]
Check and feed random data from hardware device to kernel entropy pool.

  -b, --background           Become a daemon (default)
  **-d, --no-drng=1|0          Do not use drng as a source of random number input**
                             (default: 0)
  -f, --foreground           Do not fork and become a daemon
  -n, --no-tpm=1|0           Do not use tpm as a source of random number input
                             (default: 0)
  -o, --random-device=file   Kernel device used for random number output
                             (default: /dev/random)
  -p, --pid-file=file        File used for recording daemon PID, and multiple
                             exclusion (default: /var/run/rngd.pid)
  -q, --quiet                Suppress error messages
  -r, --rng-device=file      Kernel device used for random number input
                             (default: /dev/hwrng)
  -s, --random-step=nnn      Number of bytes written to random-device at a time
                             (default: 64)
  -v, --verbose              Report available entropy sources
  -W, --fill-watermark=n     Do not stop feeding entropy to random-device until
                             at least n bits of entropy are available in the
                             pool (default: 2048), 0 <= n <= 4096
 -?, --help                 Give this help list
  --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

Report bugs to Jeff Garzik <jgarzik@pobox.com>.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X