Come faccio a / dev / random per lavorare su una macchina virtuale Ubuntu?

A quanto pare, / dev / random si basa su interrupt hardware o simili aspetti imprevedibili dell'hardware fisico. Poiché le macchine virtuali non dispongono di hardware fisico, eseguire il cat /dev/random all'interno di una macchina virtuale non produce nulla. Sto usando Ubuntu Server 11.04 come host e ospite, con libvirt / KVM.

Ho bisogno di impostare Kerberos all'interno di un VM, ma krb5_newrealm appende appena per sempre "Caricamento dati casuali", in quanto il sistema non produce alcuna.

  • Come installare Ubuntu Server 12.04 in un Virtualbox VM con avvio UEFI abilitato
  • pam service (sshd) ignorando i tentativi massimi
  • Burattino: come saltare il riavvio durante l'aggiornamento del pacchetto fino alla sostituzione della configuration?
  • sftp / ssh fallito dopo aver aggiunto la clausola "gruppo di partite"
  • Login di GUI di Ubuntu MySQL con certificato / chiave
  • Come impostare $ LD_LIBRARY_PATH in Ubuntu?
  • Qualcuno sa come lavorare intorno a questo? È ansible passare il / dev / random del host (che è molto chiacchierato) nel vm in modo che il vm possa utilizzare i dati casuali?

    Ho letto che ci sono alcune alternative software, ma non sono buone per la crittologia poiché non sono abbastanza casuali.

    EDIT: Sembra che il gatto / dev / random sul vm produce output, solo molto, molto lentamente. Ho ottenuto il mio regno impostando aspettando circa due ore mentre era "Caricamento dati casuali". Alla fine è bastato per continuare. Sono ancora interessato ad un modo per accelerare questo però.

    6 Solutions collect form web for “Come faccio a / dev / random per lavorare su una macchina virtuale Ubuntu?”

    Dovrebbe "funzionare". Anche se il vm non dispone di hardware fisico dedicato, ha ancora accesso a diverse ottime fonti di casualità. Ad esempio, è ansible utilizzare il TSC della CPU per la sua lettura da dischi virtuali, che in ultima analisi concluderà i dischi fisici di temporizzazione al miliardo di secondo. Questi tempi dipendono dal taglio del stream d'aria turbolento nel disco rigido, che è imprevedibile.

    Una logica simile si applica al traffico di networking. Anche se l'interface è virtualizzata, fintanto che il pacchetto proviene da una networking fisica (e non è locale alla casella, diciamo originario di un altro vm), la temporizzazione dei pacchetti dipende dall'offset di fase tra l'oscillatore di cristallo sulla scheda di networking e l'oscillatore di cristallo che guida il TSC. Ciò dipende dalle variazioni microscopiche della temperatura delle zone nei due cristalli di quarzo. Anche questo è imprevedibile.

    Se per qualche motivo non funziona, la soluzione più semplice è scrivere un programma per l'entropia della miniera e aggiungerlo al pool di sistema. L'interface di networking è la tua fonte più affidabile. Ad esempio, puoi scrivere il codice a:

    1) Richiama il TSC.

    2) Esegue una query DNS a un server noto per non essere sulla stessa macchina fisica.

    3) Richiama il TSC quando la query viene completata.

    4) Ripetere questa procedura alcune volte, accumulando tutti i valori TSC.

    5) Esegui un hash sicuro sulle funzioni TSC accumulate.

    6) Passare l'output della function di hash protetta al pool di entropia del sistema.

    7) Monitorare il livello della piscina di entropia e attendere che sia basso. Quando è, torna al passaggio 1.

    Linux ha semplici chiamate IOCTL per aggiungere entropia al pool, controllare il livello della piscina e così via. Probabilmente hai rngd , che può prendere l'entropia da un pipe e alimentarla al pool di sistema. È ansible riempire il pipe da qualsiasi sorgente che si desidera, siano esse le richieste TSC o 'wget' dalla propria origine di entropia.

    Io uso haveged su tutti i miei server senza testa che eseguono operazioni crittografiche (ad es. TLS handshakes, kerberos, ecc). Dovrebbe essere nella maggior parte dei repository dei pacchetti di Ubuntu: http://packages.ubuntu.com/search?keywords=haveged&searchon=names&suite=all&section=all

    haveged utilizza l'algorithm HAVAGE per estrarre l'entropia dallo stato interno dei processri moderni. Ecco una spiegazione indepth: http://www.irisa.fr/caps/projects/hipsor/

    È ansible controllare la casualità dell'entropia generata con il pacchetto ent. Nei miei sisthemes l'entropia generata da haveged ha passato tutti i test di casualità da ent

    Sì, puoi farlo, da:

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

    Puoi semplicemente metterlo in / dev / urandom e dovrebbe seminare il pool di entropia. Sono stato in grado di confermare questo:

     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 se si esegue il command ssh attraverso un router in modo che genera entropia * 🙂

    Questo ha funzionato per me

    L'esecuzione di krb5_newrealm all'interno di un VM può richiedere molto tempo per completare (dopo aver mostrato il messaggio "Caricamento dati casuali"). È ansible utilizzare il seguente hack per accelerare le cose un po '.

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

    pubblicato su http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md

    La risposta X86 è assicurarsi che il VM non blocchi RdRand o RdSeed. Hai fiducia in VM per molte cose, questo è uno di loro.

    Un RNGd sufficientemente recente su una CPU Snady Bridge Bridge sarà (o può essere detto) utilizzare RdRand o RdSeed e un RdRand o RdSeed non rimuove entropia nel VM. / dev / random quindi funziona con una fonte reale (non virtuale) di entropia.

    Non è un caso. È proprio lì nei documenti di architettura di Intel.

    Per un'origine di entropia hardware basata su dispositivi (IE utilizza un driver del kernel per condividerla) è necessario che il VM virtualizzi correttamente la sorgente fisica. Non ho alcun indizio se lo fanno e se è così, per quali dispositivi.

    Se il tuo RNGd non ha la seguente opzione drng, aggiorna. Se l'hardware non dispone di un hardware veloce RNG, sei destinato a scommettere e dovresti considerare l'utilizzo di hardware diversi per scopi di sicurezza.

     # 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>. 

    Ho avuto problemi con krb5_newrealm appeso pure. Questo ha funzionato bene per me, sulla base della risposta di cui sopra:

     cat /dev/sda > /dev/urandom 

    Potresti volerlo ucciderlo una volta che hai finito con la tua necessità di dati casuali. / dev / sda probabilmente ha più dati di quanto ti serve.

    Nota: Non sono sicuro di quanto siano casuali i dati casuali generati in questo modo.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.