Źródła Entropy dla systemu Linux

9

Powiedzmy, że chcę około gigabajta przypadkowych danych z / dev / random, odpowiednich dla jednorazowego padu (więc / dev / urandom jest wyłączony.) Jak mogę zapełnić mój / dev / random wystarczającą entropią, aby to zrobić? Szukam do tego konkretnych poleceń i programów. Nie chcę nic kupować. Używam Arch Linux, jeśli to robi różnicę.

PyRulez
źródło
Czy taki program nie zmieniłby / dev / random w coś z takim samym problemem jak / dev / urandom, którego nie chcesz używać? A może masz na myśli coś, co dostaje dodatkową entropię z jakiegoś urządzenia lub przez sieć?
Anthon
@Anthon Mówię o konkretnych programach do wyodrębniania losowości ze źródła entropii, takich jak szum strzału, hałas termiczny, jakieś urządzenie itp. Program sam nie stworzyłby losowości.
PyRulez
... na przykład polecenie lub program, który mówi Here — type something:, a następnie mierzy delty czasu między naciśnięciami klawiszy z większą precyzją, niż człowiek może kontrolować?
G-Man mówi „Reinstate Monica”
1
Wspomina jednorazową podkładkę jako jeden z dwóch wyjątków od twierdzenia, że ​​_'... prawie wszystkie algorytmy kryptograficzne ... „tylko” oferują bezpieczeństwo obliczeniowe ”. Chyba że możesz zacytować coś, co przeoczyłem tam, gdzie mówi, że jednorazowe podkładki nie mogą używać urandomu?
Bezużyteczne

Odpowiedzi:

4

Dwa programy, które mogą zwiększyć pulę entropii bez dodatkowego sprzętu, to rng-toolsi haveged. rng-toolswykorzystuje RNG dostępne w nowoczesnych procesorach i mikroukładach, havegedwykorzystuje nowoczesną losowość procesora (zachowanie pamięci podręcznej itp.). Oba są dostępne w Arch, a wiki Arch ma ciekawą stronę na ich temat. Nie próbowałem ich używać do generowania gigabajta danych, ale powinno to być możliwe w rozsądnym czasie.

Wyraźnie wykluczasz kupowanie czegokolwiek, ale dla kompletności jest ciekawy artykuł w LWN na temat entropii z NeuG , który obejmuje dyskusję havegedi różne inne podejścia. Możesz kupić kartę STM8S z obsługą NeuG za mniej niż 10 USD lub FST-01 za 35 USD.

Stephen Kitt
źródło
4

Niestety, / dev / random nie nadaje się również do użycia na padzie jednorazowym, a przynajmniej nie na padzie jednorazowym (z możliwymi do udowodnienia gwarancjami bezpieczeństwa), którą większość ludzi wyobraża sobie, gdy myśli o lub wdraża pady jednorazowe. Większość poniższych informacji streszczono w (bardzo długim) artykule na stronie http://www.2uo.de/myths-about-urandom/

Problem polega na tym, że / dev / random nie jest tak naprawdę losowy; wykorzystuje CSPRNG do generowania danych wyjściowych. W rzeczywistości / dev / random używa dokładnie tego samego CSPRNG, co / dev / urandom. Jedyną różnicą jest to, że / dev / random blocks, jeśli wewnętrzne oszacowanie entropii jest niewystarczające.

Kluczowe jest słowo „oszacowanie” w poprzednim zdaniu. Większość ludzi uważa, że ​​ta ocena jest zawsze dokładna i idealna, ale w rzeczywistości wcale nie jest dokładna. Gdy tylko oszacowanie jest błędne, tracisz wszystkie możliwe do udowodnienia gwarancje jednorazowego padu, a wszystko, co pozostało, to bezpieczeństwo obliczeniowe - nie lepiej niż gdybyś użył / dev / urandom!

Nieprawidłowe oszacowanie entropii nie powoduje, że twój jednorazowy pad jest trochę niepewny. Udokumentowana gwarancja bezpieczeństwa jednorazowej podkładki to wszystko albo nic.

Założeniem tego pytania jest to, że problemy z / dev / random można „naprawić”, dodając więcej entropii. Niestety, ta przesłanka jest błędna. Złośliwe źródło entropii jest znacznie gorsze niż brak entropii, ponieważ źródła entropii często mają dostęp do danych wewnętrznych i mogą je eksportować potajemnie przy użyciu danych wyjściowych RNG - patrz http://blog.cr.yp.to/20140205-entropy .html do pełnej dyskusji (zbyt długo, by streścić tutaj). W szczególności sprzętowe źródło entropii (zalecane przez kilka innych odpowiedzi) jest bardzo złym wyborem z punktu widzenia bezpieczeństwa, ponieważ sprzęt ten jest w najlepszej pozycji do robienia szkodliwych rzeczy i jest zasadniczo niesłyszalny.

djao
źródło
Nie powiedziałem, że naprawiam to z większą entropią, po prostu potrzebowałem więcej na większy klucz. To dobra uwaga na temat tego, że jest wadliwa. Czy możesz polecić jakieś alternatywy?
PyRulez
1
To dobra odpowiedź, z wyjątkiem ostatniego fragmentu na temat źródeł sprzętowych. Sprzętowe źródła entropii to jedyny niezawodny, możliwy do skontrolowania sposób uzyskania entropii. Ty (lub ktoś, komu ufasz) musisz przeprowadzić kontrolę źródła - to wymaga posiadania informacji projektowych i sprawdzenia, czy proces produkcyjny przestrzega informacji projektowych. Możesz nawet łączyć źródła entropii, aby jeśli co najmniej jedno z nich było w porządku, to wynik jest w porządku (Uwaga: w tym celu musisz połączyć je poprawnie).
Gilles „SO- przestań być zły”
Gilles, przeczytaj drugi link, który opublikowałem. Całkowicie fałszywe jest twierdzenie, że jeśli co najmniej jedno źródło entropii jest w porządku, wynik jest w porządku. Cały ten link ma na celu obalenie tego fałszywego roszczenia!
djao
Co więcej, nie wystarczy audyt źródła i procesu produkcyjnego. Musisz skontrolować indywidualne urządzenie, aby upewnić się, że zostało ono wyprodukowane zgodnie z procesem produkcyjnym. Jest to o wiele trudniejsze zadanie niż analogiczne zadanie w oprogramowaniu, które polega po prostu na sprawdzeniu sumy kontrolnej.
djao
Co do alternatyw: nie ma alternatywnego magicznego sposobu na pobranie 1 GB losowych danych z komputera. Potrzebujesz do tego urządzenia sprzętowego (ale zwróć uwagę na to, co powiedziałem o trudnym do skontrolowania sprzęcie). Jeśli chcesz użyć / dev / random, to / dev / urandom jest równie dobry; nie jest gorszy niż / dev / random dla wszystkich aplikacji kryptograficznych.
djao
3

Wygląda na to, że komponent sprzętowy jest najlepszym pomysłem. Istnieje kilka układów scalonych generatora HW, ale musisz im zaufać, gdy tylko przyjdą.

Dwa prawdopodobnie dobre rozwiązania to wywołanie szumu w komponencie; wydaje się, że dwa główne rozwiązania to odchylenie temperatury i hałas lawinowy powstały za pomocą diody (patrz http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html )

Ponieważ elementy takie jak żyroskop i akcelerometr stały się bardziej sensowne, dzięki czemu pracują z najwyższą czułością, a używanie ich wartości LSB może być również dobrym rozwiązaniem, ale AFAIK nikt tego nie kontrolował.

To zabawne, ponieważ jest dużo papieru na NIE robić RNG, ale nie jest otwarta i zweryfikowana implementacja HW

Lesto
źródło
2

Możesz użyć pycsprng.py . Kryptograficznie bezpieczny? Nie jestem do końca pewien, ale chciałbym trochę recenzji.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

Potok do pvjest opcjonalny i pomoże ci tylko dowiedzieć się, ile danych zostało przesłanych.

Może się okazać, że większe rozmiary bloków (bs) zwiększają wydajność. Musisz zwiększyć liczbę, aby nie generować zbyt dużego pliku, jeśli zwiększysz rozmiar bloku.

Daryl Tucker
źródło
3
To po prostu wykorzystuje /dev/urandom...
Stephen Kitt
1
pycsprng.pyjest dosłownie 10 skryptem SLOC, który otrzymuje losowość os.urandom. Dokumenty mówią, że „Zwrócone dane powinny być wystarczająco nieprzewidywalne dla aplikacji kryptograficznych [...] W systemie podobnym do UNIXa to zapyta /dev/urandom . W rzeczywistości tak jest (choć jest to przestarzałe źródło), a Security.SE mówi, że jest w porządku dla szyfrowania .
gronostaj
Nie jeden raz pad krypto!
PyRulez
0

To, co otrzymujesz z kanału mikrofonu analogowego, gdy nie podłączysz mikrofonu, jest zwykle po prostu statyczne. Prześlij go przez bzip2, na przykład w celu wybielenia, zmieszaj z innym źródłem losowości (urandom lub inne gniazdo mikrofonu), być może przesuń wynik przez openssl, aby uzyskać dobrą miarę, a to, co otrzymasz, powinno być dość losowe.

Trudno byłoby jednak udowodnić twarde i szybkie właściwości bezpieczeństwa dotyczące losowości wyniku.

Johannes Bauer
źródło
0

Jeśli używasz jądra Linuksa 2.6.9 lub nowszego na procesorze amd64 / x86_64, w środowisku wirtualnym lub fizycznym, możesz wypróbować ncomputers.org/pandom prawdziwy generator liczb losowych, który oferuje entropię 8 KiB / s 64 ubitów / 64 bitów przez/dev/random

próbka wyjściowa

nkomputery
źródło
Linki zostały przerwane, nie można znaleźć kopii zapasowej.
slm
0

Aby wygenerować 100 MB losowych danych generowanych sprzętowo, możesz:

  • Nagraj 20 minut dźwięku (mono 96 kHz 16 bitów) za pomocą wbudowanego mikrofonu komputera (dostępnego na laptopie). Otrzymasz plik WAV ~ 220 MB.

  • Odrzuć niepotrzebne bity i potasuj bity danych binarnych (wiele sposobów na zrobienie tego) z pewną matematyką

  • Wyeksportuj przetasowane bity jako plik binarny ~ 100 MB

Oto artykuł na ten temat: Próba wygenerowania prawdziwej entropii i losowych danych z dźwiękiem (i wbudowanym mikrofonem komputera) .

Basj
źródło