Dodanie „entropii liczb losowych” dla kluczy GPG?

10

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:50instruktor 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 ?

IQAndreas
źródło
Jako pytanie poboczne, czy jest to prawidłowe użycie „miejskiego mitu”, czy też istnieje podobne wyrażenie „mit w informatyce”?
IQAndreas
1
Myślę, że to zdanie jest miejską legendą ; Nigdy nie słyszałem o miejskim micie . Zobacz en.wikipedia.org/wiki/Urban_legend W informatyce właściwe może być wyrażenie „kult ładunku” .
derobert

Odpowiedzi:

8

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/randomi/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/randomoblicza 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/randomblokuje 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/urandomjest 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/randomtego 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.

Gilles „SO- przestań być zły”
źródło
Z wyjątkiem obecnych wersji linuxa, przynajmniej z moich testów, nie używam urządzeń wejściowych jako źródła entropii (lub przynajmniej szacowanej entropii). Jestem pewien, że to zmienili, ponieważ teoretycznie mogą być pod kontrolą atakującego.
derobert
@derobert poczynając od 3.12 jest wywołanie add_input_randomnessw drivers/input/input.c, ale nie wiem, w jakich okolicznościach będzie faktycznie wstrzyknąć entropii.
Gilles „SO- przestań być zły”,
Wydaje mi się, że dodaje entropię, ale przy wartości szacunkowej 0 ... Próbowałem zarówno myszy USB, jak i klawiatury PS / 2, ale żadna z tych wartości nie wydawała się wyższa. Nie jestem pewien, dlaczego, ponieważ widzę w kodzie wezwanie do credit_entropy_bits.
derobert
3

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 syncspowoduje 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.

derobert
źródło
Pamiętaj też, że możesz użyć narzędzi, takich jak rngdsztuczne podawanie puli entropii.
Patrick
@Patrick rzeczywiście, a jeśli masz nowy układ i ufasz NSA (och, czekaj, mam na myśli, Intel), możesz użyć RDRAND.
derobert
havegedto kolejne dobre narzędzie do sztucznego karmienia puli entropii.
mavillan
To nie jest pełna historia - RNG nie kończy się na entropii, kończy się na wewnętrznej miary entropii. Ważnym elementem układanki jest to, że gpg nie dba o mysz, tylko jądro.
Gilles „SO- przestań być zły”
@Gilles Wyjaśniłem, że gpg używa Linux RNG. A błędy w estymatorze entropii wydają się poza zakresem.
derobert
0

Tails ma niezwykle szybkie generowanie kluczy, ponieważ havegedzainstalował:

sudo apt-get install haveged
użytkownik123456
źródło