Jak często / dev / urandom wysiewa próbki z / dev / random?

15

Chyba że jestem całkowicie zdezorientowany i tak nie jest.

Chcę wiedzieć, czy / dev / urandom zyska zwiększoną entropię, jeśli wezmę sprzętowy RNG i podłączę jego entropię do / dev / random.

Tak więc, inaczej mówiąc, jeśli miałbym zwiększyć entropię / dev / random o X bitów / sekundę (to znaczy, / dev / random po wstrzyknięciu pozwala próbkować X bitów / sekundę) czy to zwiększenie przeniesienia entropii przejdzie na urandom?


źródło
2
Chociaż nie jest to bardzo istotne, przydatne mogą być 2uo.de/myths-about-urandom i blog.cloudflare.com/… (w szczególności wykres na blog.cloudflare.com/content/images/image01.png ).
user1686
Jeśli masz prawdziwy sprzętowy RNG, możesz go użyć bezpośrednio.
Michael Hampton

Odpowiedzi:

25

Nie jest tak naprawdę dokładne stwierdzenie, że /dev/urandompróbki /dev/random. Zamiast tego dwie pule są wspierane przez to samo źródło entropii. Kiedy liczba entropii puli osiągnie zero, resetują one ponownie ze wspólnej puli wejściowej. Więc jeśli podasz entropię wejścia jądra w jakiś sposób, może on użyć tego dla jednego /dev/randomlub /dev/urandom, w zależności od tego, który zostanie odczytany.

Jest jednak /dev/urandom również ograniczony w częstości, w jakiej może poprosić o ponowne posadzenie. Domyślnie można go ponownie uruchamiać tylko co 60 sekund.

Nic z tego tak naprawdę nie ma znaczenia w praktyce, ponieważ dopóki pula jest początkowo zaszczepiona co najmniej 128 bitami entropii, przewidywanie dowolnego wyniku wymagałoby nie tylko zobaczenia poprzednich wyników, ale także złamania zastosowanych algorytmów, w tym co najmniej rezystancji preimage SHA-1 ( który pozostaje nieprzerwany ).

otus
źródło
7

To zależy od wdrożenia. Ale zwykle /dev/randomi /dev/urandomwyciągaj entropię z tej samej puli, więc tak będzie.

Schemat z https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/

David Schwartz
źródło
4

W Linuksie wszelkie dane zapisane w / dev / random lub / dev / urandom są kopiowane zarówno do puli blokującej (źródło losowości dla / dev / random), jak i puli nieblokującej (źródło losowości dla / dev / urandom).

Wystarczy spojrzeć na funkcję random_write .

Ale dane zapisane do / dev / random nie są liczone przez wewnętrzny estymator entropii (w końcu niektórzy lokalni przeciwnicy mogą próbować przekierować / dev / zero lub inne wysoce nielosowe źródło do / dev / random), więc jeśli masz problemy z blokowaniem / dev / random, pisanie do / dev / random nie pomaga.

W Linuksie pisz do / dev / random (lub / dev / urandom, bez różnicy), ale zawsze czytaj z / dev / urandom (gdy jest on zaszczepiony - właściwie najlepszym sposobem jest użycie nowego wywołania systemowego getrandom ).

Nie wiem, jak to działa w innych Unikach.

JJZ
źródło