Wygeneruj entropię dla klucza PGP

12

Jestem zalogowany na maszynie wirtualnej zdalnie i próbuję wygenerować 4096-bitowy klucz PGP, po prostu zawiesza się na zawsze, ponieważ nie ma entropii, a ponieważ pracuję za pośrednictwem zdalnego pulpitu, prawdopodobnie nie wykrywa ruchu myszy jako entropii.

Jak mogę wygenerować trochę?

Próbowałem, cat /dev/urandom > /dev/nullale to nie pomaga.

redic
źródło

Odpowiedzi:

13

Pobieranie danych z od /dev/randomlub /dev/urandomzdecydowanie nie pomoże, wszystko to będzie zrobić, to wyczerpywać swoją entropię basen, sprawiając, że problem jeszcze gorzej. Główną różnicą między tymi dwoma plikami jest to, że nawet gdy w jądrze zabraknie entropii, urandombędzie generować losowe dane o niższej jakości, a jednocześnie randomblokować, dopóki nie będzie w stanie zebrać świeżych losowych danych o wysokiej jakości. PGP wymaga najwyższych możliwych danych losowych do wygenerowania bezpiecznych kluczy, więc zawsze będzie z nich korzystać /dev/random.

Jeśli masz dobre losowe dane lub wyeksportujesz je z innego serwera /dev/random, możesz to catzrobić na swoim serwerze, /dev/randomaby uzyskać więcej entropii. Jednak nigdy nie powinieneś używać cattego samego pliku dwa razy /dev/random.

Jeśli często brakuje Ci entropii, możesz również rozważyć zainstalowanie czegoś takiego jak haveged , demona, który ponownie generuje entropię w tle i wypełnia /dev/randomw razie potrzeby.

Również może to być kuszące, aby podlinkowujemy /dev/randomsię /dev/urandom, ale to powinno być uważane za zagrożenie dla bezpieczeństwa, jak każdy klucz generowany przy użyciu może być mniej bezpieczne niż powinny. Chociaż może to pomóc w przypadku jednej mniej krytycznej aplikacji, należy wziąć pod uwagę każde inne możliwe użycie /dev/random, w tym innych użytkowników generujących własne klucze, CSR itp.

Thomas Guyot-Sionnest
źródło
Pamiętaj, że na FreeBSD /dev/randomjest wysokiej jakości PRNG i zwykle nie powinien blokować.
Kevin
@Kevin /dev/randomto wysokiej jakości PRNG na nowoczesnych systemach BSD i Linux, oczywiście . Ale zablokuje się, jeśli nie będzie wystarczającej ilości entropii. Z drugiej strony /dev/urandomnie zablokuje się, jeśli nie będzie wystarczającej ilości, ale w tym przypadku może ucierpieć jego losowość. W szczegółach istnieje wiele subtelności między losowymi i losowymi implementacjami między Linuksem a różnymi BSD, ale powyższe powinno być prawdziwe na wszystkich AFAIK.
Huygens,
W systemie Linux można wygenerować więcej entropii, po prostu pingując hosta (np. ping 8.8.8.8), Jeśli posiadasz innego hosta sieciowego, spróbuj pingować co 100ms (jeśli twój RTT jest <100ms oczywiście). I / lub użyj, findaby wyszukać pliki na dysku twardym i opróżnić pamięć podręczną RAM między każdym wyszukiwaniem plików.
Huygens,
@Huygens: Otwórz stronę podręcznika, do której linkowałem, i Ctrl + F „kern.random.sys.seeded”; domyślnie /dev/randomnie blokuje na FreeBSD.
Kevin,
1
@Kevin tak masz rację, entropijne łączenie zbiorów lub zbieranie są prawdopodobnie dwoma różnymi sposobami „wysiewania” PRNG. Po kilku testach na moim urządzeniu BSD odkryłem, że losowe i losowe zachowują się tak samo, blokują się, gdy nie są w stanie wygenerować wystarczająco dobrego PRNG. Spróbuj uruchomić dd if=/dev/random of=/tmp/rndtest bs=64M count=1po nowym uruchomieniu, zajęło 2 kolejne uruchomienia, aby zobaczyć czas na wygenerowanie wzrostu pliku o 64 MB. Myślałem, że nie będę postrzegał tego efektu z urandomem jako danymi wejściowymi, ale FreeBSD wydaje się również blokować go, w przeciwieństwie do Linuksa.
Huygens,
9

Możesz użyć haveged.

haveged jest demonem, który w razie potrzeby generuje entropię.

Firmowa Sylvain
źródło
Tak apt-get install haveged
Uwe Burger
2
Dbaj o Haveged w środowisku wirtualnym. Może być nieoptymalny w zależności od konfiguracji hiperwizora. Sprawdź tę stronę: wiki.archlinux.org/index.php/Haveged#Virtual_machines
Huygens
4

Polecam wygenerować klucze gpg na lokalnym komputerze, który będzie miał znacznie lepszą losowość niż zdalny. A następnie migruj klucze za pomocą SSH na zdalny komputer.

Generowanie lokalne będzie szybsze (więcej źródeł dla entropii), bezpieczniejsze (nikt nie będzie mógł szpiegować procesu, jeśli komputer nie zostanie zainfekowany, większa losowość).

Jeśli nadal chcesz je generować zdalnie: w systemie Linux możesz wygenerować więcej entropii, po prostu pingując hosta (np. ping 8.8.8.8), Jeśli posiadasz innego hosta sieciowego, spróbuj pingować co 100ms (jeśli twój RTT jest <100ms oczywiście). I / lub użyj, findaby wyszukać pliki na dysku twardym i opróżnić pamięć podręczną RAM między każdym wyszukiwaniem plików.

Możesz również zainstalować, havegedale przeczytać ograniczenia, jeśli uruchamiasz go w środowisku wirtualnym: https://wiki.archlinux.org/index.php/Haveged#Virtual_machines

Huygens
źródło
Moim zdaniem jest to właściwe rozwiązanie - +1 ode mnie.
MadHatter,
3

W systemach opartych na Debianie możesz zainstalować rng-toolspakiet za pomocą atp-get, a następnie uruchomić demona, aby wygenerować entropię:

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

Na serwerach CentOS-6 rngdemon jest instalowany jako jedno z podstawowych narzędzi (przynajmniej na większości systemów, na których pracowałem) i możesz uruchomić następującą komendę, aby go uruchomić, aby wygenerować entropię:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart
Andrzej
źródło
Nie sądzę, aby używanie urandomu jako źródła dla rngd było sprytne. Pomoże to szybciej wyczerpać dostępną entropię, a po wyczerpaniu będzie tendencyjnym źródłem entropii. Chciałbym więc uniknąć tego rozwiązania.
Huygens,
1
sudo yum install haveged && sudo systemctl start haveged

zdecydowanie działa na maszynie Wirtualnej CentOS 7.2. Czasami chcesz utworzyć klucze GPG na maszynie wirtualnej, jeśli tworzysz grupę i chcesz, aby Twój klucz był nienaruszony.

init0
źródło