Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Urokliwe manifestacje zagadnień losowości w nieprzewidywalnym świecie

Jako przedstawiciel pokolenia wychowywanego przez ludzi przyspawanych do telewizora w myśl reguły „oglądam to, bo nie ma nic lepszego”, pamiętam następujący obrazek, zaobserwowany w okolicach roku 1999 z balkonu w moim mieście. Którymś ciepłym wieczorem, około godziny dwudziestej (nie pamiętam dokładnie), okna u wszystkich sąsiadów oraz w kilku pobliskich blokach, zmieniały kolor na jednorodny, lekko migoczący od kiepskich kineskopów, odcień niebiesko-żółtego. Rozpoczynało się Losowanie Lotto na Polsacie. W Polsce B (tej prawdziwej i tej mentalnej, w latach 90tych wyziewającej jeszcze tu i ówdzie) była to niemal msza święta, w intencji ludzi sfrustrowanych krzywą płac w realiach post-transformacji ustrojowej. W Telegazecie, na stronach przeznaczonych na reklamy, oraz w telegazetowym zegarku (anyone?) pojawiały się ogłoszenia przeróżnych „systemów” rzekomo gwarantujących zwycięstwo. U szczytu swej popularności, były one reklamowane również na krzywo kserowanych ulotkach na kolorowym, acz zaskakująco sztywnym, papierze, zostawianych na parapetach wielkopłytowców.

Zastanawiałem się wtedy, ponieważ nie biegałem za piłką jak bezpański pies, a Dragon Ball akurat nie leciał, jaka jest rzeczywista losowość wspomnianych „losowań”. Tych durnych piłeczek jest tyle samo takich samych, Jaśnie Bęben Maszyny Losującej również taki sam, nawet spetryfikowani starcy z siedzącej obok Komisji Kontroli Gier i Zakładów zdawali się nie zmieniać. W sumie niewiele rzeczy ulega zmianie – nawet „Rzut kostką”, potoczna definicja losowości, ma więcej zmiennych, bo rzucać można na wiele sposobów.

Popełniłem wtedy błąd i postanowiłem zapytać o to w szkole. Oczywiście, dowiedziałem się, że w procesie bierze udział bardzo wiele zmiennych. Marne przebicie miał mój kontrargument, że wobec tego nie jest to proces losowy, a jedynie proces, którego przebiegu nie znamy. Wtedy padło hasło, że losowość bierze się z liczby elementów „na które nie mamy wpływu”. I to do mnie nie trafiło. Wszak na to, że nienawidzę swojego wuefisty i że szkolna stołówka ewidentnie podaje risotto z martwych gołębi również nie mam wpływu, a nie czyni to powyższych zjawisk ani trochę losowymi. Z pomocą przyszedł nauczyciel informatyki, zmuszony przez los do prowadzenia zajęć na komputerach Compaq Presario 433 które, mimo niewątpliwego piękna, rozpamiętywanego przeze mnie do dziś, były morderczo słabymi maszynami. Poinformował mnie, że w naturze nie zachodzą żadne zjawiska losowe, a my szukając stanów losowych, możemy wybierać spośród tych zjawisk, które nie pozwalają nam wymyślić związku przyczynowo-skutkowego między kolejnymi przybieranymi stanami.

r   e   k   l   a   m   a

Od tego czasu jestem zadeklarowanym deterministą, chociaż implikacji filozoficznych i światopoglądowych nie byłem świadom jeszcze przez kilka następnych lat. W międzyczasie poznałem tuziny żenujących źródeł losowości i nauczyłem się, że ludzkość potrzebuje generatorów liczb losowych tylko dla dwóch zastosowań: hazardu i szyfrowania. Swoją drogą, obie te rzeczy będą niedługo nielegalne. Dla większości.

Dlaczego zdobycie danych czysto losowych nie jest możliwe? Z tego samego powodu, dla którego losowanie Lotto nie jest losowe – to po prostu my jesteśmy głupi. Nie znamy wszystkich możliwych własności materiałowych tych przeklętych kulek i nie potrafimy rozrysować wszystkich wektorów sił, które na nie działają. Ale to nie znaczy, że te czynniki są spontaniczne. Po prostu ich nie znamy. Niektórych nie możemy nigdy poznać, bo z powodów pragmatycznych, ich pomiar zmieni ich wartość. Nie oznacza to jednak, że wspomniane procesy są losowe ze swej natury. Są jednak „wystarczająco losowe” dla nas.

Zakładając, że prawdziwa spontaniczność i losowość nie istnieją z definicji (podobnie, jak np. altruizm), zachodzi konieczność odnalezienia źródeł „wystarczająco losowych”. Większość nowoczesnych systemów operacyjnych oferuje usługę w postaci źródła danych losowych. Nie jest to jednak funkcjonalność oczywista i dostępna od zawsze. Środowisko programowania Visual Basic z 1998 roku miało na przykład generator liczb wyglądających losowo. Domyślnie wybierał on liczby ze znanego, zamkniętego ciągu. Konieczne było jawne przesłanie dyrektywy Randomize, żeby generator zachowywał się bardziej „losowo”, acz w dalszym ciągu był zaskakująco słaby i przewidywalny.

Linux oferuje dostawcę losowości w formie pliku „random” w wirtualnej przestrzeni plików /dev. Upraszczając, model losowości z /dev/random traktuje losowość jako wartość dyskretną, niemal policzalną. To fenomenalny pomysł z pogranicza abstrakcji: coś w stylu mierzenia wściekłości w omach i sprzedawania jej w dwudziestoomowych paczkach na osiedlowej Biedronce. Mądrzej mówiąc, dokonuje on kwantyfikacji entropii, wprowadzając pojęcie „puli entropii”, zawierającej dane, na temat których można z przekonującą pewnością powiedzieć, że są w potocznym rozumieniu losowe. Kocham tę definicję. Źródłami wypełniającymi ową pulę są zjawiska środowiskowe: naciśnięcia klawiszy, ruch myszy, natężenie zwrotnego ruchu sieciowego albo (moje ulubione) szum z wejścia mikrofonowego. Co więcej – i jest to bardzo uniksowe – do pliku /dev/random da się PISAĆ. To jest doprawdy wspaniałe. Linux zawiera więc wbudowaną platformę do badania jakości entropii: wystarczy wpuścić jakieś badane wyjście do pliku random i zobaczyć, czy wpłynie to na rozrzut wyników.

Źródło losowości jest też przewidziane w języku C. Przerzuca to odpowiedzialność za jego obsługę na bibliotekę libc/msvcrt, które zapewne pod spodem korzystają właśnie z systemowego random, ale obecność tej funkcji uchodzi za oczywistą w poważnym języku programowania. Dlatego dostarczają je również Java oraz .NET (Nawet z parametrami! Żeby być… inaczej losowym?).

Losowość jest zjawiskiem na tyle pożądanym, że istnieją wręcz usługi, które dostarczają „prawdziwą losowość”. Serwisy takie, jak Random.org korzystają darmowej entropii darowanej przez naturę, czyli źródeł takich, jak szum atmosferyczny albo cieplny, naturalne promieniowanie tła, oraz promieniowanie reliktyczne (to jest fajne!). Za każdym z nich niewątpliwie stoi niepodważalna fizyka, ale natura zjawisk jest na tyle skomplikowana, że nie jesteśmy zdolni wydzielić czynników pozwalających na przewidzenie danych zwracanych z takiego źródła.

Myli się jednak ten, kto twierdzi, że źródłem pseudolosowości (a więc nieprzewidywalności) musi być zjawisko, które jest szalenie skomplikowane. Oczywiście, źródła termodynamiczne, jak wymiana ciepła i masy, z całą swoją górą wzorów empirycznych ze zmyślonymi stałymi zdają się czasem sugerować, że cała te mechanika płynów to bujda i tak naprawdę to nikt nie wie, jaki jest procent spadku wydajności rury podczas przepływu w przekroju zwilżonym, bo po prostu nie da się tego policzyć i ludzie napisali te wszystkie książki dla beki (takie miałem wrażenie podczas sesji parę lat temu, a musiałem swego czasu przejść przez mechanikę płynów, termodynamikę oraz wymianę ciepła i masy). Bardzo łatwo jest otrzymać szalenie skomplikowane wyniki, stosując jedynie mały zbiór prostych reguł początkowych. Zaskakująco trudnym przykładem jest podwójne wahadło zespolone. Jest ładne. Proszę zobaczyć:

Postraszę trochę matematyką, żeby nie było, że tylko blogi piszę a dyplom kupiłem na bazarze: o ile równania „na wahadło” uczą nawet w liceum, to podpięcie drugiego wahadła sprawia, że mamy model, do którego nie da się wymyślić równania. Jak na podstawowy problem techniki, jest to zaskakująco nieintuicyjne. Wiemy przecież, że siła to masa razy przyspieszenie, a naszym przyspieszeniem będzie minus grawitacja razy sinus wychylenia. Wiemy też, że prędkość to droga podzielona przez czas, a nasza droga to wobec tego długość wahadła razy wychylenie (narysować sobie w razie wątpliwości ;) ). No a skoro tak, to nasze przyspieszenie to druga pochodna drogi po czasie, czyli druga pochodna wychylenia razy długość. Tak? Super. Dzięki temu dostajemy ładne równanie różniczkowe, które dla małych kątów można nawet policzyć na piechotę. Zatem gdzie jest problem, jak dorzucimy drugie wahadło do pierwszego? Grawitacja, droga, długość, ze dwa kąty i tyle. To wszystko brzmi jak przepis na proste równanie. Powodzenia. Mamy dwa kąty, a więc więcej niewiadomych. Do naszego Newtona musimy dodać Lagrange’a, żeby mieć jakąkolwiek zależność. Odkładając przekształcenia na bok, bo na pewno bym się na nich pomylił, finalnie dostajemy równania ruchu, których nie da się potraktować całką tak, żeby dostać zmianę kąta po czasie. Innymi słowy, nie da się napisać równania, które wyrażałoby ruch wahadła jako funkcja. Nie da się stworzyć matematycznego modelu. Można go liczyć numerycznie na siłę, metodą RK4. Fuck that. Oblałem na tym metody numeryczne u słynnego profesora Rońdy.

A więc dwa majtające się patyki potrafią generować ruch chaotyczny, którego nie potrafimy odtworzyć analitycznie. To pozwala unaocznić skalę zjawiska. Jest wiele innych zagadnień opisanych prostymi regułami, które dają kosmicznie skomplikowane wyniki. Są to na przykład automaty komórkowe. Automat komórkowy to machanizm przejścia stanu jednego węzła w jednorodnej sieci. Jedyną jego cechą jest zbiór reguł przejścia: informacja jaki będzie jego stan w następnej iteracji, w zależności od stanu sąsiadów. Proste. Na tej zasadzie działa na przykład „gra w życie”: jeżeli komórka ma trzech sąsiadów, zapala się, trwa zapalona, gdy ma dwóch lub trzech sąsiadów, w przeciwnym wypadku gaśnie. Ten krótki zestaw zasad potrafi tworzyć niezwykle skomplikowane struktury, zmienne w czasie. Da się przewidzieć zachowanie niektórych z nich (np. latawca), ale zapełnienie np. przestrzeni 1000x1000 i odczekanie kilkuset iteracji daje już wyniki gołym okiem nieodróżnialne od szumu. Oczywiście, istnieją inne, mniej przewidywalne automaty komórkowe, bardziej chaotyczne niż gra w życie. I tak, tego również uczyli mnie na studiach. Nawet program taki pisaliśmy:

Zbliżam się powoli do kwestii, która zmotywowała mnie do ponownych przemyśleń natury losowości. Otóż wyczytałem niedawno w porąbanych zakamarkach internetu pewną wieść na temat CloudFlare. To taka firma, która obsługuje pół internetu, a o której, podobnie jak o Akamai, nikt nie słyszał. Świadczą usługi między innymi z zakresu CDN (content delivery), czyli obierania ruchu sieciowego z ciężkich elementów, jak obrazy, żeby nie gwałcić łącza i pozwolić dostarczać treści, a nie tylko siłować się z przepychaniem obrazków. Gdy CloudFlare nie działa, mnóstwo stron wygląda szkieletowato, a niektóre, wirtualizujące hosting, w ogóle znikają. Oczywiście, CloudFlare i Akamai potrzebują dobrego szyfrowania, bo firmy, dla których świadczą usługi, muszą im ufać. Akamai dostarcza na przykład aktualizacje w ramach infrastruktury Windows Update. Co by się stało, gdyby ktoś podszył się pod tę komunikację? Byłoby ciekawie, o ile byśmy przeżyli. Dlatego Cloudflare nie ufa systemowej „puli entropii”, a bliżej im właśnie do wahadła zespolonego. Ponieważ jednak zatrudnili millenialsów, czyli ludzi, którzy nie są w stanie poważnie traktować świata, który ich otacza, generatorem losowości, jaki otrzymali jest… ściana lamp lawowych.

O. MÓJ. BORZE. Tak bardzo to. Jaram się jak Most Łazienkowski. Jest to po prostu genialne. Odwołuje się do beznadziejnej „niepoliczalności” mechaniki płynów, dostarcza ciągły strumień entropii i przede wszystkim matematyzuje kicz. Absurdalna nieprzydatność i wątpliwe walory estetyczne ulegają tu estetycznej gloryfikacji, wzmacniając przekaz dotyczącego tego, co CloudFlare tak w zasadzie robi. Niezwykle przypadł mi do gustu ten pomysł i oczywiście zdecydowanie popieram to, że lawowa ściana szyfrująca jest wyeksponowana jako jedna z pierwszych rzeczy, jakie widzi osoba wchodząca do siedziby firmy. Dokładnie tak powinno się to robić. Chylę czoła.

Okazuje się, że CloudFlare wykorzystuje również zespolone wahadła, w swoim biurze w Londynie. Tymczasem w Singapurze, źródło losowe jest pobierane z obserwacji rozpadającej się próbki uranu-238. O ile jest to znacznie ciekawsze niż lawowa lampa, obiektywnie jest o wiele mniej wizualnie spektakularne.

Oczywiście, wątpliwe jest, że ściana lamp lawowych albo kamyk z izotopem promieniotwórczym są prawdziwym źródłem random seedu używanego w szyfrowaniu całej komunikacji w CloudFlare. Niezależnie jednak, jak istotną cegiełką całego procesu inżynieryjnego jest to osobliwe rozwiązanie, skłania do zastanowienia się przez chwilę nad zastosowaniem i pochodzeniem losowości. Wszak gdy prawdziwa losowość nie istnieje, nie istnieje również wolna wola. Jeżeli ktoś nie akceptuje owego poglądu, niech będzie świadom, że alternatywa jest jeszcze gorsza: jest nią bowiem właśnie losowość. Już wolę być skomplikowany, acz deterministyczny, niż spontaniczny, ale losowo. Ponownie jednak, zagadnienie to nie jest na tyle czarno-białe, by przestawiać je właśnie jako kontrast powyższych biegunów. Zainteresowani powinni skierować swą uwagę na tzw. interpretację kopenhaską reguł mechaniki kwantowej. Na początek. Wszak zbliżamy się do jej dziewięćdziesięciolecia :)

Addendum

Kiedyś dałem swoim studentom następujące zadanie: zbierać surowe wejście mikrofonowe z wykorzystaniem PulseAudio, rzutować je na base64, a następnie sprawdzić, po jakim czasie na wyjściu pojawi się zbiór znaków składających się na wyraz w języku polskim. Odbywało się to na trzydziestu identycznych konfiguracjach sprzętowych. Na większości z nich trwało to około godziny-dwóch. Kilka osób otrzymało wyrazy już chwilę po uruchomieniu. Kilku osobom nie udało się to nigdy. Podobny rozrzut wyników pojawił się, gdy uruchamiali swój kod po zajęciach, na swoich wielu różnych laptopach. A więc byliśmy wystarczająco losowi :) Trochę mi brakuje tych czasów.

Cheers! 

internet bezpieczeństwo inne

Komentarze