/ Dev / random komutunun bir Ubuntu sanal makinesinde çalışmasını nasıl sağlayabilirim?


19

Görünüşe göre, / dev / random donanım kesintilerine veya fiziksel donanımın benzer öngörülemeyen yönlerine dayanmaktadır. Sanal makinelerde fiziksel donanım bulunmadığından, cat /dev/randomsanal makinede çalıştırmak hiçbir şey üretmez. Libvirt / KVM ile ev sahibi ve misafir olarak Ubuntu Server 11.04 kullanıyorum.

Kerberos'u bir VM içinde kurmam gerekiyor, ancak krb5_newrealmsistem hiç üretmediği için sonsuza kadar "Rastgele veri yükleniyor" duruyor.

Herkes bu sorunu çözmek için biliyor mu? Vm'nin rasgele verilerini kullanabilmesi için ana bilgisayarın / dev / random (çok konuşkan) vm'ye geçmek mümkün mü?

Bazı yazılım alternatifleri olduğunu okudum, ancak yeterince rasgele olmadıkları için kriptoloji için iyi değiller.

EDIT: Görünüşe göre vm üzerinde cat / dev / random, çok, çok yavaş çıktı üretir. Bölge kurulumumu "Rastgele veri yükleniyor" iken yaklaşık iki saat bekleyerek aldım. Sonunda devam etmek için yeterli oldu. Yine de bunu hızlandıracak bir yolla ilgileniyorum.

Yanıtlar:


10

'Sadece işe yaramalı'. Vm'nin özel bir fiziksel donanıma sahip olmamasına rağmen, yine de birkaç çok iyi rasgelelik kaynağına erişebilir. Örneğin, CPU'nun TSC'sini sanal disklerden okumasını zamanlamak için kullanabilir ve bu da zamanla fiziksel diskleri saniyenin milyarda birine kadar sarar. Bu zamanlamalar, sabit sürücüdeki öngörülemeyen türbülanslı hava akımı makaslamasına bağlıdır.

Benzer mantık ağ trafiği için de geçerlidir. Arayüz sanallaştırılsa bile, paket fiziksel bir ağdan kaynaklandığı sürece (ve başka bir vm'den kaynaklanan kutuda yerel olmadığı sürece), paket zamanlaması ağ kartındaki kristal osilatör arasındaki faz ofsetine bağlıdır. ve TSC'yi tahrik eden kristal osilatör. Bu, iki kuvars kristalindeki mikroskopik bölge sıcaklık değişimlerine bağlıdır. Bu da öngörülemez.

Herhangi bir nedenden dolayı çalışmıyorsa, en basit çözüm entropi madenciliği için bir program yazmak ve sistem havuzuna eklemektir. Ağ arayüzü en güvenilir kaynağınızdır. Örneğin, aşağıdakilere kod yazabilirsiniz:

1) TSC'yi sorgulayın.

2) Aynı fiziksel makinede olmadığı bilinen bir sunucuya DNS sorgusu verin.

3) Sorgu tamamlandığında TSC'yi sorgulayın.

4) Tüm TSC değerlerini toplayarak bunu birkaç kez tekrarlayın.

5) Birikmiş TSC fonksiyonlarında güvenli bir karma gerçekleştirin.

6) Güvenli sağlama işlevinin çıktısını sistemin entropi havuzuna aktarın.

7) Entropi havuzu seviyesini izleyin ve alçalıncaya kadar bekleyin. Öyleyse, 1. adıma geri dönün.

Linux, havuza entropi eklemek, havuz seviyesini kontrol etmek vb. İçin basit IOCTL çağrılarına sahiptir. Muhtemelen rngdbir borudan entropi alabilir ve sistem havuzuna besleyebilirsiniz. Boruyu, ister kendi entropi kaynağınızdan ister TSC veya 'wget' istekleri olsun, istediğiniz herhangi bir kaynaktan doldurabilirsiniz.


İkinci öneriniz teoride ilginç görünüyor, ama ben programlama içermeyen bir çözüm umuyordum. Ben büyük bir dosyayı bir usb sürücüden veya ana bilgisayardan kopyalamak vm entropi havuzu (yani daha hızlı çalışmasını sağlamak) etkiler mi merak ediyorum? Eğer öyleyse, ana makinede bir makine görüntüsünün yedeğini çalıştırırken alemi oluşturmaya çalışabilirdim ...
Nick

1
Entropi havuzunu neyin doldurduğunu görmek için bazı testler yapabilirsiniz. İşe yarayan bir şey bulduğunuzda, bunu yapabilirsiniz. Ağ trafiği bunu yapmalıdır. Drive etkinliği bunu yapmalıdır. Bu komutla neyin işe yaradığını görmek için test edebilirsiniz: cat /proc/sys/kernel/random/entropy_availArtan her şey işe yarıyor.
David Schwartz

Çalışan kedinin entropiyi "yediği" (adres alanının randomizasyonu) olduğunu unutmayın. Kullanabilirsiniz python -c 'while True: import time; print str(time.sleep(1))[0:0] + open("/proc/sys/kernel/random/entropy_avail", "rb").read(),'. Evet, bunu okumak zor, ama yorumlara yeni satırlar girmenin bir yolunu görmüyorum ...
Doncho Gunchev

10

Şifreleme işlemleri gerçekleştiren tüm başsız sunucularımda (örneğin TLS el sıkışmalar, kerberos, vb.) Karışık kullanıyorum. Çoğu Ubuntu sürümünün paket deposunda olmalıdır: http://packages.ubuntu.com/search?keywords=haveged&searchon=names&suite=all§ion=all

haveged modern işlemcilerin iç durumundan entropi çıkarmak için HAVAGE algoritmasını kullanır. İşte ayrıntılı bir açıklama: http://www.irisa.fr/caps/projects/hipsor/

Ent paketiyle oluşturulan entropinin rastgele olup olmadığını kontrol edebilirsiniz. Sistemlerimde oluşturulan entropi ent tarafından tüm rasgelelik testlerini geçti


Emin olmak için NIST test paketini de çalıştırmanız gerekir.
Michael Hampton

7

Evet, tohumlayabilirsiniz:

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

Bunu / dev / urandom'a koyabilirsiniz ve entropi havuzunu tohumlamalıdır. Bunu şu şekilde onaylayabildim:

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

Eğer ssh komutunu entropi üretir *


Orta kısım hakkında kafam karıştı. Sistemde "/ dev / xvda" yok. Hedef, ana bilgisayarın / dev / random öğesini vm / dev / urandom'a yönlendirmek için ssh kullanmak mı? İstediğim herşeyi "/ dev / urandom" ya gönderebilirim ve "/ dev / random" dan çıkıyor?
Nick

"Ssh 192.168.1.1 'cat / dev / random'" kullanarak ana bilgisayardan rastgele veri alabilirim, ancak konukları "/ dev / random" nasıl etkileyeceğini bilmiyorum. "ssh 192.168.1.1 'cat / dev / random'> / dev / urandom" hiçbir şey yapmıyor gibi görünüyor.
Nick

Sadece bir terminalde 'cat / dev / random' çalıştırarak ve veri çıkışını durdurana kadar bekleyerek test ettim. Sonra bir başkasında 'cat somerandomfile> / dev / urandom' yaptım ve yavaşça 'cat / dev / random' tekrar bir şeyler çıkarmaya başladı. Değerli / dev / rastgele giriş yapmak için / dev / urandom üzerinde çok sayıda rastgele girişe ihtiyacınız var gibi görünüyor. Kediyi yaparken ... / dev / urandom yaparken / dev / random'da hiç çıktı görmediğinizi mi söylüyorsunuz?
polinom

Sonunda bazı çıktılar görüyorum, ama çok yavaş. Doğal olarak üretilenden daha fazlası olup olmadığından emin değilim. VM'lerde çok yavaş ve az miktarda rastgele veri üretildiğini keşfettim, sadece sonsuza dek sürüyor. Alemimi yaklaşık 2 saat oturmasına ve "rastgele veri toplamasına" izin verdikten sonra oluşturdum.
Nick

Yararlı yanıt için +1.
Nick

5

Bu benim için çalıştı

VM'de krb5_newrealm'ı çalıştırmak uzun sürebilir ("Rasgele veri yükleniyor" mesajını gösterdikten sonra). İşleri biraz hızlandırmak için aşağıdaki hack'i kullanabilirsiniz.

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

http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md adresinde yayınlanmıştır


1

X86 yanıtı, VM'nizin RdRand veya RdSeed'i yakalamadığından emin olmaktır. VM'nize birçok şey için güveniyorsunuz, bu onlardan biri.

Bir Snady Bridge CPU'sunda yeterince yeni bir RNGd, RdRand veya RdSeed kullanır (veya söylenemez) ve işlenmemiş bir RdRand veya RdSeed VM'ye entropi alır. / dev / random daha sonra gerçek (sanal değil) bir entropi kaynağı ile çalışır.

Bu tesadüfen değil. İşte Intel mimarisi belgelerinde.

Aygıt tabanlı bir donanım entropi kaynağı (IE, paylaşmak için bir çekirdek sürücüsü kullanır) için, fiziksel kaynağı doğru bir şekilde sanallaştırmak için VM'ye ihtiyacınız vardır. Bunu yaparlarsa ve eğer varsa, hangi cihazlar için hiçbir fikrim yok.

RNGd'nizde drng seçeneği yoksa güncelleyin. Donanımınızın hızlı bir donanım RNG'si yoksa, mahkum olursunuz ve güvenlik amacıyla farklı donanımlar kullanmayı düşünmelisiniz.

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

0

Ben de krb5_newrealm asılı ile ilgili sorunlar yaşıyordu. Yukarıdaki cevaba dayanarak bu benim için iyi çalıştı:

cat /dev/sda > /dev/urandom

Rastgele veri ihtiyacınızı tamamladıktan sonra onu öldürmek isteyebilirsiniz. / dev / sda muhtemelen ihtiyacınız olandan daha fazla veriye sahiptir.

Not: Bu şekilde üretilen rastgele verilerin gerçekte ne kadar rastgele olduğundan emin değilim.


Lütfen posterin adını kullanarak diğer gönderilere başvurun. "Yukarıda" veya "aşağıda" demek anlamsızdır, çünkü hepiniz yayınları aynı sırada görmüyoruz.
John Gardeniers

4
Bu işe yarayabilir, ancak / dev / sda rastgele olmayan birçok veri içerir (en az ton sıfır), bu da fikri güvenlik açısından çok iyi yapmaz. Sıfırlara ek olarak, aslında çok öngörülebilir olan MBR ile başlar, en az 3 bayt tahmin edebilirim ... ya da önyükleme yapmayacak;)
Doncho Gunchev 29:13
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.