web-dev-qa-db-fra.com

Comment puis-je obtenir / dev / aléatoire pour travailler sur une machine virtuelle Ubuntu?

Apparemment,/dev/aléatoire est basé sur des interruptions matérielles ou des aspects similaires imprévisibles du matériel physique. Puisque les machines virtuelles n'ont pas de matériel physique, fonctionnent cat /dev/random Dans une machine virtuelle ne produit rien. J'utilise Ubuntu Server 11.04 comme hôte et invité avec libvirt/kvm.

J'ai besoin de configurer Kerberos à l'intérieur d'un VM, mais krb5_newrealm Il suffit de suspendre pour toujours "charger des données aléatoires", car le système ne produit aucune.

Est-ce que quelqu'un sait comment travailler autour de cela? Est possible de transmettre l'hôte/dev/aléatoire (qui est très bavard) dans la machine virtuelle pour que la machine virtuelle puisse utiliser ses données aléatoires?

J'ai lu qu'il existe des alternatives logicielles, mais elles ne sont pas bonnes pour la cryptologie car elles ne sont pas assez aléatoires.

EDIT: Il apparaît que Cat/Dev/aléatoire sur le VM produise une sortie, tout simplement très lentement. J'ai eu ma configuration de royaume en attendant environ deux heures pendant que c'était "charger des données aléatoires". Finalement, il a eu assez de continuer. Je suis toujours intéressé par un moyen d'accélérer cela.

19
Nick

Il devrait "travailler". Même si le VM n'a pas de matériel physique dédié, il a toujours accès à plusieurs très bonnes sources de hasard. Par exemple, il peut utiliser le TSC de la CPU à temps sa lecture des disques virtuels, qui finira par finir à des disques physiques chronométrés au milliardième d'une seconde. Ces horaires dépendent de cisaillement de flux d'air turbulents dans le disque dur, qui est imprévisible.

La logique similaire s'applique au trafic réseau. Même si l'interface est virtualisée, tant que le paquet provient sur un réseau physique (et n'est pas local dans la boîte, par exemple, par exemple dans une autre machine virtuelle), le chronométrage du paquet dépend du décalage de phase entre l'oscillateur cristallin sur la carte réseau sur la carte réseau et l'oscillateur cristallin qui conduit le TSC. Cela dépend des variations de température de la zone microscopique dans les deux cristaux de quartz. C'est aussi imprévisible.

Si, pour une raison quelconque, cela ne fonctionne pas, la solution la plus simple consiste à écrire un programme à l'entropie minière et à l'ajouter au pool du système. L'interface réseau est votre source la plus fiable. Par exemple, vous pouvez écrire du code à:

1) Requête le TSC.

2) Émettre une requête DNS sur un serveur connu de ne pas être sur la même machine physique.

3) Requête le TSC lorsque la requête complète.

4) Répétez cette opération à quelques reprises, accumulant toutes les valeurs TSC.

5) Effectuez un hachage sécurisé sur les fonctions Cumulées TSC.

6) Passez la sortie de la fonction de hachage sécurisée au pool d'entropie du système.

7) Surveillez le niveau de la pool d'entropie et attendez que ce soit bas. Quand c'est-à-dire, retournez à l'étape 1.

Linux a de simples appels IOCTL pour ajouter entropie à la piscine, vérifier le niveau de la piscine, etc. Vous avez probablement rngd, qui peut prendre l'entropie à partir d'un tuyau et le nourrir au pool du système. Vous pouvez remplir le tuyau de n'importe quelle source que vous souhaitez, qu'il s'agisse des demandes de TSC ou de "wget" de votre propre source d'entropie.

10
David Schwartz

J'utilise sur tous mes serveurs sans tête qui effectuent des opérations cryptographiques (par exemple, des poignées de main TLS, Kerberos, etc.). Il devrait être dans la plupart des versions Ubuntu 'Package Repository: http://packages.ubuntu.com/search?keywords=havged&searchon=names&suite=all&section=all

utilise l'algorithme de Havage pour extraire l'entropie de l'état interne des processeurs modernes. Voici une explication approfondie: http://www.irisa.fr/caps/projects/hipsor/

Vous pouvez vérifier le hasard de l'entropie générée avec le package ENT. Sur mes systèmes, l'entropie générée de DÉGAGÉ a passé tous les tests de aléatoire par ENT

10
Frank L

Ouais tu peux le graver, de:

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

Vous pouvez simplement mettre cela dans/dev/urandom et il devrait semer le pool de l'entropie. J'ai pu confirmer cela par:

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

Bonus Si vous faites la commande SSH passer par un routeur afin qu'il génère entropy * :)

7
polynomial

Cela a fonctionné pour moi

En cours d'exécution krb5_newrealm à l'intérieur d'un VM== peut prendre beaucoup de temps à compléter (après avoir montré le message "Chargement de données aléatoire"). Vous pouvez utiliser le piratage suivant pour accélérer les choses un peu.

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

posté à - http://fossies.org/linux/john/doc/kerberos-auditing-howto.md

5
Vivek

La réponse X86 est assurée que votre VM ne pas piéger RDRAND ou RDSEED. Vous faites confiance à votre VM pour beaucoup de choses, c'est l'une d'elles.

Un RNGD suffisamment récent sur un processeur de pont post snady, sera (ou peut être dit à) utiliser RDRAND ou RDSEED, et un RDDRAND non fourni ou RDSEED devient entropié dans la machine virtuelle./dev/aléatoire fonctionne alors avec une source d'entropie réelle (non virtuelle).

Ce n'est pas par accident. C'est juste là dans les documents Intel Architecture.

Pour une source d'entropie matérielle basée sur un périphérique (c'est-à-dire utilise un pilote de noyau pour le partager), vous avez besoin du VM pour virtualiser correctement la source physique. Je n'ai aucune idée si elles le font et si oui, pour quels appareils.

Si votre RNGD n'a pas l'option DRNG ci-dessous, mettez-la à la mettre à jour. Si votre matériel n'a pas de matériel de matériel rapide, vous êtes condamné et vous devez envisager d'utiliser différents matériels à des fins de sécurité.

# 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 <[email protected]>.
1
David Johnston

J'avais des problèmes avec krb5_newrealm suspendu aussi. Cela a bien fonctionné pour moi, basé sur la réponse ci-dessus:

cat /dev/sda > /dev/urandom

Vous voudrez peut-être le tuer une fois que vous avez terminé avec votre besoin de données aléatoires./dev/SDA a probablement plus de données que nécessaire.

Remarque: Je ne sais pas à quel point les données aléatoires générées de cette manière sont réellement.

0
mgwilliams