Entropia w Linuksie – HOWTO

Dawno temu pojawił się mit, że źródłem prawdziwej entropii w Linuksie jest /dev/random jest, /dev/urandom jest gorszy. Pokutuje on do dziś i część softu za źródło danych przyjmuje właśnie /dev/random, niezależnie od realnych potrzeb. Ilość losowych danych w systemie nie jest nieskończona i zależy od dostępnych źródeł i zdarzeń zewnętrznych. Dopóki komputery były głównie fizyczne, często obsługiwane przez ludzi, problem był nieco mniejszy. W epoce wirtualek systemy i ruch są coraz bardziej powtarzalne, więc z „prawdziwą” entropią są problemy. A entropia w systemie Linux nadal jest w systemach aplikacjom potrzebna – słusznie lub nie, chyba nawet bardziej niż kiedyś, bo szyfrowanie wszystkiego jest coraz bardziej popularne i wykorzystywane są coraz silniejsze algorytmy.

Od pewnego czasu (okolice wersji 3.7) kernel Linuksa potrafi co prawda korzystać ze sprzętowych modułów (TPM) zapewniających źródła losowych danych, o ile takie są obecne. Nie każdy sprzęt jest jednak w to wyposażony, nie każda wirtualka posiada dostęp do danych z hypervisora i obecność modułu nie oznacza jeszcze, że dane będą dostępne dla programów, więc problem nadal pozostaje.

Entropia w systemie Linux – sprawdzenie dostępności

Jeśli nie wiemy, czy faktycznie system ma problem z dostępną entropią, możemy to w prosty sposób sprawdzić. Aktualną ilość można odczytać przez wydanie polecenia:

cat /proc/sys/kernel/random/entropy_avail

Oczywiście jest to wartość chwilowa, zmieniająca się w czasie, żeby z całą pewnością stwierdzić, jak system stoi z entropią, trzeba by poobserwować w dłuższym czasie, a najlepiej monitorować ją, np. przy pomocy Zabbiksa. Wartość powyżej 1000 oznacza, że na pewno problemu nie ma, wartości poniżej 300 oznaczają, że prawie na pewno są niedobory, mogące wpływać na pracę usług.

rngd

Istnieją dwa rozwiązania, które pomogą zwiększyć ilość dostępnych danych losowych w systemie. Pierwsze z nich, to rngd z pakietu rng-tools. Jego zadanie jest proste – dostarczać dane do napełniania /dev/random korzystając ze wskazanego źródła.

Jeśli platforma posiada sprzętowy moduł dostarczający dane losowe, rngd warto skonfigurować, by z niego korzystał. W tym celu w pliku

/etc/default/rng-tools

należy umieścić linię

HRNGDEVICE=/dev/hwrng

Natomiast w przypadku braku takiego modułu, sugerowane jest dodanie linii

HRNGDEVICE=/dev/urandom

Kontrowersje korzystania z /dev/urandom

Korzystanie z /dev/urandom jako źródła danych dla /dev/random powoduje kontrowersje. Główne zarzuty to niegwarantowana losowość danych w /dev/urandom (ale patrz mit), oraz powstawanie sprzężenia zwrotnego, co łącznie może powodować okresowość, a zatem teoretyczną możliwość przewidzenia stanu generatora liczb pseudolosowych. Podkreślam, że jest to możliwość czysto teoretyczna, nie wykazana w praktyce.

Alternatywa dla rngd

Istnieje drugie popularne rozwiązanie programowe, które pozwala na zwiększenie dostępnej w systemie entropii w systemie Linux. Jest to demon haveged z pakietu o tej samej nazwie. Korzysta on z faktu, że czas wykonania kodu przez procesor jest mało powtarzalny i zależy od wielu czynników. Jest to rozwiązanie obecne w dystrybucjach od wielu lat, proste w użyciu.

Wybór rozwiązania

Jeśli system posiada moduł sprzętowy, to bym z niego korzysał, za pośrednictwem rngd. Czy haveged jest lepszy od rngd zasilanego z /dev/urandom? Nie podejmuję się odpowiedzi na to pytanie. Oba zapewniają najważniejszą sprawę, czyli dostępność danych losowych. Oba rozwiązania spełniają proste testy badające losowość danych. Osobiście uważam, że w większości przypadków rozwiązanie korzystające z rngd jest wystarczające. Tam gdzie do losowości danych przykładamy dużą wagę, nie powinno być problemu z dostępem do sprzętowych generatorów, a niedobory entropii zawsze są bardziej szkodliwe, niż jej teoretycznie niższa jakość.

Linki

Na koniec zbiór linków dotyczących zagadnienia jakim jest entropia w systemie Linux; zarówno źródła jak i dalsza lektura, czyli ciekawe linki (kolejność losowa):

Goodbye Yanosik!

Nie napisałem nic o tegorocznym urlopie. W zasadzie urlopach. W ramach nadrobienia zaległości spojrzenie na urlopy przez pryzmat appek androidowych. Zmiany są dwie: zacząłem korzystać ze Strava – ot, kolejna appka do mierzenia biegania czy pedałowania. W sumie poznałem ją, gdy oficjalna appka Kręć Kilometry przestała mi poprawnie i stabilnie działać, zwłaszcza zapisywać trasę. Zalety: dość dokładna, fajne automagiczne porównywanie czasów na odcinkach, liczenie rekordów. Wady: dość długo „się zbiera” do wykonania operacji, czyli czasami trzeba poczekać. Ale potem działa już pewnie, więc lubię.

Zmiana druga wymaga wstępu. Na jednym z wakacyjnych wyjazdów, przed podróżą powrotną do Poznania, zaczęło się kończyć paliwo. Poszukałem stacji, zjechałem parę kilometrów w nieznany teren, zatankowałem. I wracam, wg nawigacji, tak samo zresztą jak przyjechałem. O dziwo inna trasa, niż przyjechałem, ale nie wnikam – na oko kierunek się zgadza.

Więc jadę sobie drogami między wioskami. Pasażerowie przysypiają. I nagle widzę rozjazd. Asfalt lekkim łukiem w lewo, na wprost nawierzchnia szutrowa. Nawigacja zdecydowanie pokazuje jazdę na wprost, po szutrowej. Azymut się zgadza, wiec trochę zwalniam i wjeżdżam w tę szutrową. Chwilę później ostre hamowanie, bo okrutna dziura, idealna, by urwać koło. Dobrze, że zwolniłem wjeżdżając na tę szutrową. Jadę dłuższy kawałek, dziur wcale nie ubywa. Potem było jeszcze lepiej – gruntówka w lesie, ogromne kałuże na całą szerokość. Jakoś uniknąłem zakopania czy utopienia auta i przejechałem, ale było to ładne parę kilometrów. Dodam, że w poprzednią stronę przyjechałem całą drogę zupełnie znośnym asfaltem.

Nawigacja, która mnie tak poprowadziła to oczywiście Yanosik. Stwierdziłem, że enough is enough, tym bardziej, że to nie pierwszy tego typu wyczyn. Choć w tym przypadku skala porażki zadziwiła.

Dodatkowo Yanosik grabił sobie u mnie już wcześniej zbieraniem dużej ilości danych („styl jazdy”). I późniejszą próbą monetyzacji tej wiedzy w formie sprzedaży ubezpieczenia. Nie mam złudzeń, w tej grze kierowca traci – algorytmy i big data dają przewagę ubezpieczycielowi. O ile w przypadku cech ogólnych liczy się statystyka, to dane o stylu jazdy pozwalają na wnioskowanie poza granicą ludzkiej percepcji. Czyli software ubezpieczyciela zna lepiej zachowania kierowcy niż on sam. I jeśli stwierdzi, że jeździsz o niebezpiecznych porach, to nie tylko nie dostaniesz zniżki, ale jeszcze dopłacisz. Nawet jeśli jeździsz bezpiecznie. Na dodatek nie informują, co dokładnie jest mierzone. Oczywiście nie wyraziłem zgody, ale sam fakt możliwości zbierania takich danych jest niepokojący. Pytanie o zgodę było ponawiane – liczą na to, że użytkownik się pomyli i kliknie, że się zgadza?

W każdym razie po tej akcji z nawigacją Yanosik wyleciał w trybie ekspresowym, po przejechanych z nim jakichś 20 tys. Oczywiście potrzebuję dość często nawigacji, więc użyłem tego, co miałem pod ręką – Google Maps. Korzystałem kiedyś dawno temu przez chwilę i albo nie doceniałem, albo spory postęp zrobili.

Pierwsze wrażenie: Yanosik dawał instrukcje trochę za późno czasami (do tego stopnia, że zdarzało mi się nie skręcić we właściwą ulicę). Google Maps radzi sobie o wiele lepiej, informując z sensownym wyprzedzeniem. Do tego ma przyjemny ficzer w postaci zmiany skali w zależności od aktualnej prędkości. Nie ukrywam, że przestawienie się i przyzwyczajenie do dobrego zajęło mi chwilę. Różnica jest kolosalna – Google Maps potrafi pokazywać pasy, dawać drobne wskazówki gdzie odbić. Jest to bardzo przydatne na węzłach na autostradach. Za to przyznaję, że na rondach Yanosik radził sobie lepiej, choć też nie idealnie.

Brakuje oczywiście głównej funkcji Yanosika, czyli „antyradaru”, nie ma całej grywalizacji i statystyk ale… w sumie w Yanosiku grywalizacja była niedorobiona, a statystyki niespecjalnie coś wnosiły. Chociaż lubię popatrzeć. Google Maps dobrze nawiguje i… tyle. W każdym jeśli chodzi o nawigację to niebo a ziemia – totalna przepaść w jakości oprogramowania.

Rozważam jeszcze wypróbowanie głównego polskiego konkurenta Yanosika, czyli Ryśka, ale boję się, że nawigacja będzie słabsza od Google Maps, a dane dot. sytuacji na drodze gorsze, niż w Yanosiku.

UPDATE: Rysiek może kiedyś będzie testowany, ale najpierw szansę dostanie Waze. Wiele osób poleca Wazie i w komentarzach na blogu (nie tylko pod tym wpisem), i poza blogiem. Podobno wykupione przez Google, jest nawigacja i antyradar, może być fajne. Recenzja za jakiś czas.

UPDATE: Pewnie nie wszyscy zauważyli, ale Yanosik zaliczył poważną wtopę. Wykorzystywał urządzenia użytkowników bez ich wiedzy i zgody do realizowania innej usługi swojej firmy. Szczegóły opisała ZaufanaTrzecia strona, a pokrótce wykorzystywane były: włączenie bluetooth, co za tym idzie zwiększone zużycie baterii, transmisja dodatkowych danych – zużycie transferu. IMO takie nadużycie i pokrętne próby tłumaczenia są dyskwalifikujące, więc zamierzam trzymać się z daleka od wszelkich rozwiązań tej firmy.

Niezgoda na brak zgody

Ostatnio w okolicach ruchów pro- i antyszczepionkowych na Facebooku głośno o sprawie rodziców z Białogardu. Dla nieznających krótkie przypomnienie: przyjechali do szpitala rodzić; nie wyrazili zgodę na żadne czynności medyczne w tym podgrzewanie, szczepienie itp. Lekarz zareagował podaniem sprawy do sądu, który w trybie przyspieszonym, już po paru godzinach ograniczył prawa rodzicielskie w zakresie opieki zdrowotnej nad dzieckiem i lekarze mogli dokonać procedur. Rodzice zareagowali „kradzieżą” (zabraniem) dziecka ze szpitala i są poszukiwani.

Przyznaję, że kupy mi się to nie trzyma. I zupełnie nie będę tu dyskutował nt. „jak to jest w innych krajach” ani „czy szczepić”. Sensu nie trzyma mi się to z innego powodu: jeśli się o coś kogoś pyta lub pozwala mu się nie wyrazić na coś zgody, to należy tę decyzję uszanować. Reakcja rodziców nie dziwi mnie w żaden sposób. I w sumie nie bardzo widzę podstawy do poszukiwania, nawet przy ograniczonym prawie do opieki zdrowotnej (co też uważam za bzdurę). Dziecko jest zdrowe, więc opieki medycznej nie wymaga.

Absurdalna jest też sytuacja, że czekano parę godzin na wyrok sądu, zapewne naruszając przy okazji prawo do obrony (sorry, ale nie widzę jakoś matki parę godzin po porodzie na sali). Ogrzewać dziecko można na kilka sposobów, skoro wytrzymało kilka godzin, to nie było bezpośredniego zagrożenia zdrowia lub życia. A rodzice będą się opiekowali dzieckiem przez resztę życia. I nie przypuszczam, by chcieli dla dziecka źle.

Z pewnością utracono możliwość jakiejkolwiek kontroli zdrowia dziecka w szpitalu, niepotrzebnie stresowano rodziców i naraża się dziecko w tej chwili (skoro się ukrywają, to zapewne się przemieszczają, a to korzystne dla tak małego dziecka nie jest), a postawa siły gwarantuje, że druga strona pozostanie trwale nieprzekonana.

Zastanawiam się, gdzie rodzice zdecydują się rodzić kolejne dzieci. Przypuszczam, że nie w szpitalu, który, nawiasem, zdaniem niektórych jest średnio przyjazny w standardowych okolicznościach – to jednak obce środowisko. Chociaż oczywiście posiada odpowiednie wyposażenie na okoliczność komplikacji.

W każdym razie prezentowane podejście, zamiast łagodnego przekonywania i dialogu powoduje IMO tylko pogłębienie niechęci do służby zdrowia, wymiaru sprawiedliwości i szczepień.

UPDATE: Po namyśle doszły dwie sprawy:
Jakie są konsekwencje dla matek palących czy pijących w ciąży i co jest bardziej szkodliwe dla dziecka, picie i palenie, czy brak zabiegów higienicznych? O niezdrowym odżywianiu nie wspominam.
Jak można mówić o prawie kobiet do przerywania ciąży, skoro zabrania im się decydowania nawet o sposobie opieki nad dzieckiem?