Jest w tym ziarno prawdy, w rzeczywistości więcej prawdy niż mitu, ale mimo to stwierdzenie odzwierciedla podstawowe niezrozumienie tego, co się dzieje. Tak, poruszanie myszą podczas generowania klucza za pomocą GPG może być dobrym pomysłem. Tak, poruszanie myszą powoduje entropię, która sprawia, że losowe liczby są losowe. Nie, poruszanie myszą nie zwiększa bezpieczeństwa klucza.
Wszystkie dobre generatory losowe odpowiednie do kryptografii, a Linux należy do tej kategorii, mają dwa składniki:
- Entropia źródła, które nie jest deterministyczny. Celem entropii jest uruchomienie generatora liczb losowych z nieprzewidywalnymi danymi. Źródło entropii musi być niedeterministyczne: w przeciwnym razie przeciwnik mógłby odtworzyć to samo obliczenie.
- Pseudolosowych numer generator , który wytwarza nieprzewidywalne liczb losowych w sposób deterministyczny ze zmieniającym się stanem wewnętrznym.
Entropia musi pochodzić ze źródła zewnętrznego w stosunku do komputera. Użytkownik jest jednym ze źródeł entropii. To, co robi użytkownik, nie jest w większości przypadkowe, ale precyzyjny czas naciskania klawiszy i ruchów myszy jest tak nieprzewidywalny, że jest nieco losowy - niezbyt losowy, ale stopniowo, narasta. Inne potencjalne źródła entropii obejmują synchronizację pakietów sieciowych i biały szum kamery lub mikrofonu. Różne wersje i konfiguracje jądra mogą korzystać z innego zestawu źródeł. Niektóre komputery mają dedykowane sprzętowe obwody RNG oparte na rozpadzie radioaktywnym lub, co mniej imponujące, niestabilne obwody elektroniczne. Te dedykowane źródła są szczególnie przydatne w urządzeniach wbudowanych i serwerach, które mogą mieć dość przewidywalne zachowanie przy pierwszym uruchomieniu, bez konieczności robienia dziwnych rzeczy przez użytkownika.
Linux zapewnia programom losowe liczby za pośrednictwem dwóch urządzeń: /dev/random
i/dev/urandom
. Odczyt z dowolnego urządzenia zwraca jakość kryptograficzną. Oba urządzenia używają tego samego wewnętrznego stanu RNG i tego samego algorytmu do transformowania stanu i generowania losowych bajtów. Mają szczególne ograniczenia, co sprawia, że żadne z nich nie jest właściwe:
/dev/urandom
może zwrócić przewidywalne dane, jeśli system nie zgromadził jeszcze wystarczającej entropii.
/dev/random
oblicza ilość dostępnej entropii i bloków, jeśli nie ma ich wystarczająco dużo. Brzmi dobrze, z tym wyjątkiem, że obliczenia oparte są na rozważaniach teoretycznych, które powodują, że ilość dostępnej entropii zmniejsza się liniowo z każdym bitem wyjściowym. W ten sposób /dev/random
blokuje się bardzo szybko.
Systemy Linux zapisują wewnętrzny stan RNG na dysku i przywracają go podczas rozruchu. Dlatego entropia przenosi się z jednego rozruchu na drugi. Jedyny moment, w którym system Linux może nie mieć entropii, jest wtedy, gdy jest świeżo zainstalowany. Gdy w systemie jest wystarczająca entropia, entropia nie zmniejsza się; tylko błędne obliczenia Linuksa maleją. Aby uzyskać więcej wyjaśnień na ten temat, przeczytaj /dev/urandom
jest odpowiedni do wygenerowania klucza kryptograficznego przez profesjonalnego kryptografa. Zobacz także Czy potrafisz wyjaśnić wartość szacunkową entropii użytą w random.c .
Poruszanie myszą dodaje do systemu więcej entropii. Ale gpg może tylko czytać /dev/random
, a nie/dev/urandom
(sposobem na rozwiązanie tego problemu jest zrobienie /dev/random
tego samego urządzenia 1: 9 co /dev/urandom
), więc nigdy nie ma ryzyka otrzymania losowo niewystarczającej liczby losowej. Jeśli nie poruszysz myszą, klawisz jest losowy, jak to tylko możliwe; ale może się zdarzyć, że gpg może zostać zablokowany w czytaniu od /dev/random
, czekając na wzrost licznika entropii jądra.