Zazwyczaj czytanie z /dev/random
produkuje 100-500 bajtów i bloków, czekając na pobranie entropii.
Dlaczego zapisywanie informacji /dev/random
przez inne procesy nie przyspiesza czytania? Czy nie powinien zapewnić wymaganej entropii?
Może być przydatny do odblokowywania gpg
lub podobnego oprogramowania bez ponownego uruchamiania go i ponownego wprowadzania wszystkiego, do generowania kluczy, które nie są ściśle tajne itp.
/dev/urandom
zamiast./dev/urandom
jest tak samo bezpieczny, jak w/dev/random
przypadku zastosowania kryptograficznego , zachowanie/dev/random
jest złym projektem.gpg --gen-key
z/dev/random
na/dev/urandom
bez ponownego uruchamiania?gpg
ma/dev/random
zakodowane na stałe. Możesz zmienić konfigurację udev, aby stworzyć/dev/random
to samo urządzenie, co/dev/urandom
między innymi.gpg --gen-key
, dlatego też ponownie wymaga danych, o które pyta interaktywnie (lub przy użyciu bardziej sprytnych metod, takich jak określenie większej liczby parametrów wiersza poleceń). Również czas procesora generujący liczbę pierwszą mógłby zostać utracony (gpg może działać przez minutę, wydrukować niektóre+
es, a następnie zażądać dodatkowych losowych danych). I daje uczucie „wracajmy i idź inną drogą” zamiast „weźmy młotek i zmuśmy go do przodu” ...Odpowiedzi:
Możesz pisać do,
/dev/random
ponieważ jest to część sposobu na dostarczenie dodatkowych losowych bajtów/dev/random
, ale to nie wystarczy, musisz również powiadomić system, że istnieje dodatkowa entropia za pośrednictwemioctl()
połączenia.Potrzebowałem tej samej funkcjonalności do testowania mojego programu instalacyjnego karty inteligentnej , ponieważ nie chciałem czekać, aż moja mysz / klawiatura wygeneruje wystarczającą liczbę połączeń,
gpg
które zostały wykonane dla każdego uruchomienia testowego. To, co zrobiłem, to uruchomienie programu Python, który następuje równolegle z moimi testami. Oczywiście nie należy go w ogóle używać dogpg
generowania prawdziwych kluczy, ponieważ losowy ciąg nie jest wcale losowy (losowe informacje generowane przez system nadal będą przeplatane). Jeśli masz źródło zewnętrzne, dla którego chcesz ustawić ciągrandom
, powinieneś mieć wysoką entropię. Możesz sprawdzić entropię za pomocą:Program:
(Nie zapomnij zabić programu po zakończeniu.)
źródło
rngd
. Jest dostępny jako pakiet w większości (wszystkich?) Dystrybucji.random = "3420348024823049823-984230942049832423l4j2l42j"
patrz xkcd.com/221Zazwyczaj jest zaprojektowany przez programistów jądra i udokumentowany w
man 4 random
:źródło
Anthony wyjaśnił już, że pisanie do
/dev/random
nie zwiększa liczby entropii i pokazał, w jaki sposób można użyć ioctl RNDADDENTROPY (patrz random (4) ) do uznania entropii. To oczywiście nie jest naprawdę bezpieczne, więc tutaj jest alternatywa, gdy dostępny jest sprzętowy generator liczb losowych.Następujące implementacje pobierają losowo 512 bajtów (4096 bitów)
/dev/hwrng
i przesyłają je do puli entropii (przypisując 4 bity entropii na bajt, to ode mnie arbitralny wybór). Następnie wywoła syscall select (2), aby zablokować, gdy pula entropii jest pełna (udokumentowana na losowej (4) stronie podręcznika).Wersja Python:
Ponieważ w Arch Linux iso nie zainstalowano Pythona, tutaj jest również wersja Perla:
Prawdopodobnie właśnie to robi program rngd (część rng-tools ) (niezweryfikowany), z tym wyjątkiem, że używa narzędzi (Python lub Perl), które są już powszechnie dostępne.
źródło
/dev/urandom
zamiast tego,/dev/hwrng
jeśli absolutnie nie zależy ci na niepewnych losowych wartościach .getrandom()
syscall jest używany z hwrng na jądrach starszych niż 4.8-rc1, co powoduje blokowanie. Obejściem jestread()
dwa razy więcej/dev/random
, patrz github.com/Lekensteyn/archdir/commit/…