W następującym filmie: Linux HOWTO: Zabezpiecz swoje dane za pomocą PGP, część 2 , pokazano, jak utworzyć parę kluczy gpg
. Mniej więcej 1:50
instruktor mówi:
Podczas generowania klucza dobrym pomysłem jest nieco przesunięcie myszy, aby uzyskać nieco więcej entropii liczb losowych w celu utworzenia pary kluczy.
Wydaje mi się to mitem, zwłaszcza że kursor zwykle nie powinien mieć wpływu na narzędzia wiersza poleceń. Z drugiej strony nie mam pojęcia, jak działa generator liczb losowych w Linuksie, czy jest on współdzielony przez GUI, czy niezależny od niego. Czy jest coś w tym, co twierdzi, czy to przykład programowania kultowego ładunku ?
Odpowiedzi:
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 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.źródło
add_input_randomness
wdrivers/input/input.c
, ale nie wiem, w jakich okolicznościach będzie faktycznie wstrzyknąć entropii.GPG korzysta z generatora liczb losowych w systemie Linux (jądro). Generator jądra otrzymuje entropię (losowość) ze wszystkich miejsc, w tym między innymi do czasu przerwania. Poruszanie myszą (i pisanie, aktywność dysku itp.) Spowoduje przerwanie.
Tak więc poruszanie myszą rzeczywiście potencjalnie zasila generator liczb losowych. Ale czy tak, zależy od używanej wersji jądra; nowsze wersje nie używają (przynajmniej w moich testach) przerwań klawiatury lub myszy do entropii. Aktywność dysku jednak tak robi (np. Uruchamianie
sync
spowoduje dodanie potencjalnie dużej ilości entropii, w zależności od tego, ile jest opróżnionego).W skrócie: nie jest to prawdą w obecnych wersjach systemu Linux. To było na starszych.
Jeśli jednak w generatorze zabraknie entropii, powinno się po prostu zatrzymać - więc generowanie klucza zostanie zawieszone, dopóki nie zostanie wygenerowana entropia. Byłby to więc problem na zawsze, a nie problem bezpieczeństwa.
Możesz zobaczyć, ile entropii jest dostępne przez
cat /proc/sys/kernel/random/entropy_avail
.źródło
rngd
sztuczne podawanie puli entropii.haveged
to kolejne dobre narzędzie do sztucznego karmienia puli entropii.Tails ma niezwykle szybkie generowanie kluczy, ponieważ
haveged
zainstalował:źródło