Adam Cebula

Działy stałe:
spis treści
wstępniak
stopka
kontakt
komunikat
galeria
literatura
interaktywna...

Echelon

copyright © Adam Cebula

antykwariat
linki
erotyka
chat

Literatura:
Baranowska & Landowski
Dudek
Kostrzewa
Kowalski
Rybicki
Wróbel
Ziemiański

Publicystyka:
Cebula
Landowski
Sędziak




Uwaga! Wszystkie pliki o których pisze Autor, znajdują się w jednym zip-ie - tu

P

rywatność jest obecnie jednym z najwyżej cenionych dóbr, nie tylko w Internecie. Dlatego wszelkie próby jej ograniczenia budzą protesty. Opinia publiczna pilnie śledzi doniesienia na temat działalności służb specjalnych.
     Zapewne z tego samego powodu wszelkie informacje na temat możliwości śledzenia i  oglądania są wyjątkową dziennikarską gratką. Jeśli już coś się zdarzy, spekulacjom , domniemaniom i pomówieniom nie będzie końca.
     Ostatnio pojawiły się w polskich czasopismach doniesienia o tajnej międzynarodowej organizacji Echelon, której zadaniem ma być śledzenie wszelkiej elektronicznej wymiany informacji.
     Doniesienia te mogą konkurować z scenariuszem ,,Archiwum X''. Tak naprawdę nie wiadomo kto prowadzi tego typu akcję: zapewne rząd USA, który także w lodówce przetrzymuje zwłoki kosmity. Prawdopodobnie robi to w porozumieniu z rządami państw europejskich. PC World donosi, że system działa w oparciu o programowe filtrowanie.
     Zostawmy na razie ów projekt na boku, przypatrzmy się bardziej codziennym problemom.
     Paradoksalnie, wszelkie narzędzia komputerowe są skonstruowane jakby przeciw ochronie prywatności. Przeglądarki internetowe mają specjalnie wbudowane katalogi do przechowywania danych witryn, które odwiedzaliśmy, pliki cashe przechowują także kawałki witryn. Jest to jednakże połowa biedy, bo te dane znajdują się na naszym komputerze: zawsze można je skasować, pod warunkiem, że wiemy, gdzie one się znajdują.
     Właściciele komputerów pracujących w Linuksie wiedzą, że wszelkie czynności są zapisywane w plikach logów. Tam można znaleźć min informację o uruchamianych programach, wysyłanych i otrzymywanych listach.
     Wysyłane z naszego komputera informacje przechodzą przez szereg innych komputerów- serwerów. Protokół pozwala odczytać je, o ile oczywiście nie są one zaszyfrowane.
     Największy problem z podpatrywaniem mają administratorzy wielkich sieci, gdzie pracuje jednocześnie duża liczba faktycznie autonomicznych maszyn. W przypadku ośrodka komputerowego, gdzie pracuje jeden komputer i wiele terminali, przynajmniej teoretycznie jest łatwiej, bo za pomocą narzędzi administracyjnych, takich jak ,,top'' można próbować sprawdzać, co też użytkownicy robią.
     W przypadku wielu komputerów, któryś z nich może tylko udawać ,,niewiniątko''. Ale nie koniecznie to musi być największy kłopot. Typowe informatyczne metody są do wykrycia innymi programowymi narzędziami. Kiedy jednak włamywacz sięgnie po przecinaki i wepnie się gdzieś w sieć, pozostanie z konsoli komputera całkowicie niewidzialny. W dzisiejszych czasach, gdy królują tanie ,,skrętki'' jest to z technicznego punktu widzenia szczególnie proste.
     Na ,,podpinacza'' jest tylko właściwie jedna metoda: przeglądać regularnie metr po metrze przewody łączące komputery. Porządnie wykonanego ,,podpięcia'' z porządnie wykonanym wzmacniaczem buforującym nie da się praktycznie inaczej wykryć. Nic nie pomogą metody informatyczne, bo gdyby nawet podsłuchujący komputer całkowicie zwariował na skutek nader sprytnego wirusa wpuszczonego do sieci, nawet gdyby darł się w niebogłosy ,,Tu jestem'' przez wzmacniacz nie przedostaną się żadne sygnały zwrotne.
     W praktyce jednak okazuje się, że zupełnie wystarczające są metody o wiele bardziej bezczelne. Postrachem są sniffery - ,,wąchacze'' - programy które instalują się na serwerach nieproszone i usiłują zebrać i wysłać ważne informacje o systemie. Potrafią one np. podpatrzeć jakie hasło jest wpisywane przy logowaniu na konto, jakie są uruchomione usługi, o typie i wersji systemu operacyjnego nie ma co wspominać.
     Programy te mają wbudowane specjalne mechanizmy maskujące. Nie pojawiają się w logach, gdzie zapisywane są wszystkie uruchamiane procesy, nie wykrywają ich narzędzia administracyjne jak wspomniany ,,top''. Gdy aktualnie nie ma połączenia z siecią gromadzą informacje w zaszyfrowanych katalogach z mylącymi nazwami.
     Można sobie wyobrazić skutki działania takiego programu w komputerze bankowym. Nie to jednak jest najniebezpieczniejsze: dokonanie niespodziewanych przelewów może zostać szybko wykryte. Profesjonalny włam komputerowy nie zostawia śladów.
     Znacznie bardziej prawdopodobny jest całkiem inny scenariusz. Każda firma handlowa, czy produkcyjna posiada tzw. wewnętrzne cenniki. Znają je sprzedawcy, przy czym nie należy sobie wyobrażać takiego ,,sprzedawcę'', jako człowieka stojącego za ladą. Taki człowiek załatwia kontrakty na dziesiątki tysięcy conajmniej, a czasami na miliony.
     Firmy konkurencyjne, przy składaniu ofert, zazwyczaj są w stanie oszacować wewnętrzną cenę z dokładnością do kilku procent, ale właśnie o te procenty toczy się wojna.
     Gdy informacje na temat kosztów produkcji, zakupów u kontrahentów wyciekną, sprytna konkurencja może mając nawet kiepską kondycję finansową narobić sporo szkody. Wystarczy na początku złożyć ofertę dostaw po cenie kosztów konkurencji, a następnie pod byle pretekstem się wycofać. Rezultatem jest zazwyczaj pozbawienie kontraktobiorcy prawie całego zysku kosztem przepadku wadium.
     Przykład ten nie jest bynajmniej wymyślony, z jednym szczegółem: najczęstszą przyczyną przecieku nie jest (przynajmniej w Polsce) atak hakera, ale głupota personalnego, który wylał na zbitą twarz kogoś, kto wiedział...
     Generalnie to jednak, jak sądzę jest to dobry przykład, jak cenna jest informacja handlowa i jak bardzo trzeba uważać na wywiad gospodarczy.
     Internautów niepokoją zupełnie inne historie: darmowe programy, czasami zupełnie bezczelnie zbierają dane o nas i wysyłają do firm za oceanem. W podobnych okolicznościach założyłem sobie stronę internetową: niestety, nie znam jej adresu, nie miałem ochoty na dalsze kontakty z nader hojnym producentem.
     Baza kilkudziesięciu tysięcy istniejących adresów e-mailowych jest dziś wystarczająco cennym towarem, by dla jej posiadania sięgnąć po takie metody. Szczególnie cenne są informacje o ludziach posiadających wykształcenie techniczne: są potencjalnymi klientami i kontrahentami.
     Pomimo ciągłego hałasu w prasie na temat ochrony prywatności i bezpieczeństwa komputerowego raczej wszystko idzie w złym kierunku. Przeglądarki internetowe komplikują się, coraz częściej uruchamiają przeróżne skrypty, programy, których działania do końca nie można przewidzieć.
     Że nie jest bezpiecznie, przekonali się odbiorcy I Love. Głupi podstęp spowodował ogromne straty. Przyczyna tkwi - co powtarzam do znudzenia - w popularności pewnego systemu operacyjnego, który, choć sieciowym nie jest, odmawia zainstalowania się bez przeglądarki internetowej. Popularności winni są ludzie: z jednej strony niechętni do nauki, z drugiej żądni wszelkiego rodzaju bajerów.

C

zy nieznana organizacja może np. rozkodować każdą informację? Czy amator może bez specjalnych programów utajnić swoją korespondencję np. w Internecie? Zamiast strzępić na darmo języki weźmy się do roboty. Pomińmy na razie wszelkie ograniczenia administracyjne. Dlaczego? List, którego nie sposób zrozumieć, może zostać najwyżej zatrzymany czy skasowany, w ewentualnym procesie może stanowić najwyżej marną poszlakę, nigdy zaś dowód.
     Rząd USA zabrania eksportu programów szyfrujących, czy słusznie? Czy "zamieszanie tekstu", Tak by stał się on nieczytelny, nie tylko dla osób, ale nawet la super-komputerów jest rzeczywiście takie trudne?
     Kryptografia jest obecnie bardzo trudną i złożoną dziedziną. Zasadniczą sprawą są algorytmy kodowania. W chwili obecnej są one bardzo rozbudowane i spełniają szereg bardzo wyrafinowanych wymagań. Jednym z najbardziej zaskakujących rozwiązań jest metoda tzw. klucza publicznego. Wiadomość jest kodowana za pomocą metody podawanej publicznie: mogą znać ją wszyscy. Do rozkodowania informacji potrzebne są dodatkowe informacje. Dzięki temu można przesłać np. oferty na przetarg bez obawy, że pozna je konkurencja, pomimo tego, że posiada ona pełną informację o kluczu, jaki został zastosowany do szyfru.
     Najprostszą metodą i najgorszą, jest metoda podstawieniowa. Polega ona na zastąpieniu znaków alfabetu i pisarskich, takich jak spacja, innymi, np. liczbami. Nadawca i odbiorca mają u siebie tabele z zestawem znaków. Kodowanie i rozkodowanie następuje za jej pomocą.
     Słabość tej metody polega nie tylko na konieczności posiadania tabel, która może np. zostać skradziona. Podstawowym problemem jest łatwość złamania szyfru. Wystarczy, że jakimś sposobem uda się poznać oryginalną wiadomość. Nawet, gdy mamy do dyspozycji tylko zaszyfrowane teksty złamanie kodu, nie jest trudne. Znaną od bardzo dawną metodą jest analiza częstotliwości występowania liter.
     Także od czasów starożytnych znane są bardziej finezyjne warianty metody podstawieniowej. Jednym z efektowniejszych sposobów jest metoda digramów. Polega ona na zastąpieniu dwójek znaków liczbami. W ogólności można pracowicie tworzyć takie dwójki. W takim wariancie do kodowania potrzebna byłaby wielka tabela danych. Są jednak metody (pomysł jest przypisywany Cezarowi, temu co miał powiedzieć "i ty Brutusie"), dzięki którym do roboty szyfranta potrzebna jest tylko znajomość metody i hasła. rzecz cała jest oparta na znajomości działania sytemu pozycyjnego (który wynaleźli dopiero Arabowie, co stawia pod znakiem zapytania rzymski rodowód algorytmu).\\
     Przykład metody tworzenia digramów

aa=32+1=31
ab=32+2=34
ba=(2*32)+1=64+1=65
ca=(3*32)+1=96+1=97
da=(4*32)+1=128+1=129

     Metoda digramów skutecznie przeszkadza zastosowaniu analizy częstości występowania liter. Jak twierdzi Near Koblitz zastąpienie digramów trigramami (czyli trójkami znaków liter i znaków pisarskich) praktycznie ją uniemożliwia.
     Współcześnie nikt z normalnych użytkowników komputerów nie martwi się skomplikowanymi algorytmami: stosuje się zwyczajnie gotowe programy szyfrujące. Dane na temat ich skuteczności bywają sprzeczne. Generalnie przyjmuje się, że takie, które stosują hasła 32 -- bitowe są łatwe do złamania, 64 -- bitowych może się nie udać pokonać.
     W czym rzecz? Skuteczność programu szyfrującego można ocenić właściwie tylko w oparciu o metodę łamania szyfru zwaną brutal force. Polega ona na bezmyślnym sprawdzaniu kolejnych kombinacji. Dokonuje tego komputer. W wypadku, gdy kombinacja utworzy coś na kształt czytelnego tekstu (co można poznać, przez sprawdzenie z hasłami w słowniku), program przekazuje rezultaty człowiekowi. Ten decyduje, czy rezultat jest zadawalający, czy kontynuować pracę dalej. Przy pracy w takim systemie stosunkowo łatwo ocenić liczbę potrzebnych operacji.
     Zdobycie dodatkowych informacji, czasami jakiś pomysł pozwalają często na łamanie szyfrów, które, gdy ocenić je metodą "brutal force" są absolutnie pewne. Zazwyczaj takie niespodziewane sukcesy są wynikiem znajomości albo części jakiegoś tekstu, albo metody szyfrowania. Ci, którzy czytali historię Enigmy wiedzą, jak istotne było odtworzenie konstrukcji maszyny.
     W realnej pracy ludzi łamiących szyfry prawdopodobnie znacznie większą rolę odgrywa znajomość realiów, kto, dlaczego szyfruje, psychologii itd. Człowiek wbrew pozorom, gdy np. typuje na oślep numery, robi to tak, że wytypowanie niektórych jest bardzo mało prawdopodobne. Co ciekawe, efekty te zazwyczaj są bardzo dobrze znane. Jednym z takich zaskakujących, a też wielokrotnie sprawdzonych jest nierównomierne brudzenie się tablic logarytmów. Wynika to ze sposobu w jaki ludzie poszukują liczb i systemu zapisu . 
     Dobrze znane są niemal wszystkie metody na tworzenie "znakomitych" haseł. Zazwyczaj równocześnie trafiają one do literatury komputerowej jako te dobre i do algorytmów programów łamiących. Warto sobie uświadomić, że ataki słownikowe zaczynają się od sprawdzania czy w jakimś słowie nie zamieniono liter małych na duże, literki "f" nie zastąpiono znakiem procentów (\%) bo znajduje się nad nią, czy czasem nie zastosowano wyglądającej jak maszynowo generowany kod kombinacji klawiszy leżących obok siebie. Sprawdzane są także tajemniczo brzmiące słówka fińskie, gwarowe, egzotyczne imiona.
     Jeśli zaszyfrowane wiadomości zawierają jakiś stały tekst (np. Szanowny Panie Ambasadorze), to prawie na pewno zostaną odczytane. Ludzie wbrew swojemu przekonaniu zostawiają po sobie znacznie więcej śladów, niż im się wydaje. Zazwyczaj nie zawodzi metoda poszukiwania w tekście imion, nazw miejscowości itd.
     Stosunkowo wiele informacji dostarcza sama wiedza o języku: wiadomo, jaka jest statystyczna długość słów i zdań. Gdy mamy do dyspozycji jeszcze jakieś inne, nie szyfrowane teksty osoby, lub np. instytucji której wiadomość staramy się odkodować, np. ogłoszenia prasowe, możemy starać się poszukiwać zwrotów, wyrazów charakterystycznych choćby dla dziedziny której wiadomość może dotyczyć.
     Idealnie zakodowana informacja, to blok cyfr, czy liter, zawsze o tej samej długości, pojawiający się albo zawsze o tej samej porze, lub ze stałą średnią częstością, nie dający się skorelować z jakimkolwiek wydarzeniem.
     Znaki w tej informacji powinny spełniać wszelkie testy losowe: nie może tam być jakichkolwiek korelacji. Testy statystyczne są dosyć skomplikowaną sprawą, jak na popularny tekst. Można jednak pokazać, o co chodzi "mniej więcej". Jeśli mp jakaś liczba powtarzałaby się wielokrotnie, częściej niż inne, to jest to ślad wart uwagi. Wykres wykonany wg. jakiegokolwiek kryterium np. kolejności powinien wyglądać zawsze tak samo: jednolicie "rozsmarowana plama".
     Od kuchni algorytm szyfrujący powinien zapewniać możliwie największą liczbę kombinacji przy rozsądnym czasie pracy komputera. Liczba tych kombinacji powinna być tak wielka, by sprawdzenie niewielkiej liczby spośród nich np. 1 procenta wymagało czasu znacznie większego niż czas ważności informacji. W praktyce oznacza, że musi to być najmniej kilka, kilkanaście lat pracy najszybszych komputerów.
     Jak widać są to ciężkie warunki do spełnienia. Reasumując, można powiedzieć, że jest to dziedzina dla zawodowców najwyższej klasy. Z jednej strony trzeba się ustrzec szkolnych błędów, z drugiej opracować odpowiednio mocne algorytmy. Współczesne komputery mają zazwyczaj do kilkuset (np. 512) procesorów typu RISC. Największy ma ich ponad 9 tysięcy, ale to wyjątek. Co prawda pracują one z częstościami zaledwie setek megaherców, nie więcej niż procesory komputerów domowych, jednak dzięki swej architekturze mogą odpowiednio napisane programy wykonywać nawet kilka razy szybciej. Tak więc można się spodziewać, że komputer profesjonalny wykona obliczenia kilka tysięcy razy szybciej od takiego, który stoi w domu. Akurat operacje łamania kodu dają się znakomicie rozpisywać na równoległe procesy.
     Przejdźmy jednak do konkretów. Przyjmijmy, że procesor jest w stanie sprawdzić jedną kombinację kodu w trakcie jednego taktu zegara. Jest to bardzo dobrotliwe podejście: w rzeczywistości potrzebne będzie kilkadziesiąt najmniej taktów. Przyjmijmy częstość zegara 1 GHz. Jak na dziś, jest to ciągle aktualne. Z przyczyn fizycznych zbudowanie procesora o zegarze 10 GHz pewnie okaże się trudne: za mała jest prędkość światła. Tak więc 1 GHz jest wielkością realną jeszcze przez kilka lat co najmniej. Oznacza to, że w trakcie sekundy wykonanych zostanie miliard operacji, przez jeden procesor. Powiedzmy, że mamy w komputerze 1000 procesorów i mogą one pracować z równą wydajnością. W ciągu sekundy sprawdzonych zostanie 1000 miliardów kombinacji naszego kodu. Ta imponująca liczba to 10 do 12 potęgi. Rok ma 31 536 000 sekund. Nie tak znowu wiele. Tak więc w ciągu roku zostanie wykonanych ok. 3*10 do potęgi 19 operacji.
     W rzeczywistości znacznie mniej, bo żaden procesor nie wykona sprawdzenia kombinacji w jednym takcie. Nie przejmujmy się tym. Jest to liczba tego samego rzędu co 2 do potęgi 64. Tak więc widać, że w tych okolicach długości hasła kończą się wszelkie możliwości łamania szyfrów. 64 bity, to jest zaledwie jedno słowo maszyny nieco lepszej od PC.
     Wniosek jest taki, że jak zwykle, jak zawsze ogromną przewagę mają szyfrujący. O ile nie popełni się zasadniczych błędów, ktoś nie wykradnie haseł, nie pomogą najszybsze komputery.
     W owych błędach jest cały problem. Na rynku komputerowym pojawiło się bardzo wiele programów zarówno do szyfrowania plików, jak i korespondencji. Kilkakrotnie czytałem bardzo krytyczne recenzje na ich temat. Jedną z najefektowniejszych wpadek w tej dziedzinie ma oczywiście Microsoft: umieszczanie hasła w nagłówku dokumentu. Wystarczy otworzyć go programem innej firmy, np tak egzotycznym jak Norton Edytor, i wszystko wiemy. Oczywiście do odczytania potrzebna jest znajomość algorytmu. Zainteresowanych tym i późniejszymi wyczynami odsyłam do literatury ("Nie tylko wirusy" Andrzej Dudek). Generalnie, gdy chodzi zabezpieczanie dostępu to trzeba szukać pomocy gdzie indziej.
     Inną jeszcze sprawą jest znajomość algorytmów. Sprawa zasadza się tak naprawdę na kilku zaledwie operacjach. Jedną z najwydajniejszych jest tzw. różnica symetryczna, najbardziej poprawnie nazywana jako mnożenie xor. Operacja ta jest w pełni odwracalna, zaimplementowana w większości języków programowania. Przeprowadza się ją na słowach bitowych. Definiuje ją taką tabliczka mnożenia:

0*0=0\\
1*0=1\\
0*1=1\\
0*0=0\\

     Jest to - trzeba przyznać dosyć oryginalny pomysł na mnożenie, jednak bardzo przydatny. Stosunkowo najprostszą metodą zakodowania informacji, jest przemnożenie jej przez jakieś hasło. Algorytm nie jest całkiem oczywisty: znaki pisarskie są zakodowane tylko 1 bajtem, trzeba się trochę wysilić, by złamanie kodu nie było zupełnie proste.
     Kolejnym tematem są generatory liczb pseudolosowych. Rzecz się sprowadza do tego, że potrzebujemy matematycznego modelu szumu. Ten szum oglądany bez tzw. zarodka wygląda jak prawdziwy szum. Nie sposób przewidzieć jaka będzie następna liczba, jakie są związki pomiędzy tymi, co już się pojawiły. Gdy znamy liczbę startową generatora i jego algorytm możemy precyzyjnie przewidzieć jaki będzie dowolnie odległy wyraz ciągu.
     Algorytmy szyfrujące nie muszą zawierać generatorów pseudolosowych, jednak zazwyczaj same stanowią taki generator. Jak już mówiłem, analiza statystyczna jest znakomitym narzędziem do łamania kodów. Gdy wynik działania algorytmu przypomina jednolicie wymieszaną szarą masę -- coś na kształt sadzy z mąką, nie ma od czego zacząć.
     Generator liczb pseudolosowych może znakomicie ułatwić uzyskanie tego efektu. Ponieważ dla wtajemniczonych jest całkowicie przewidywalny, można bezpiecznie z jego pomocą wymieszać znaki. Sprawa jest technicznie prosta: np. wymnożyć metodą xor kolejne znaki z ciągiem pseudolosowym. To, co otrzymamy, będzie także ciągiem pseudolosowym. O ile posłużyliśmy się dobrym generatorem, wynik jego działania, poza szczególnymi przypadkami nie jest skorelowany z kodem informacji, nie może być skorelowany efekt operacji xor. Odbiorca za pomocą dokładnie tego samego ciągu jest w stanie odwrócić wprowadzony chaos.
     W zasadzie każdy język programowania ma wbudowany generator liczb pseudulosowych. Ich uruchomienie sprowadza się najczęściej do podania jednej komendy. Jest to bardzo wygodne i skuteczne. Mają one jedną zasadniczą wadę, która znakomicie utrudnia ich zastosowanie w kryptografii: na różnych komputerach potrafią dawać różne wyniki.
     Jak to działa? Uzyskanie chaosu w takim środowisku jak komputer nie jest całkowicie prostym zadaniem. Wszelkie pomysły typu brania stanu komórek pamięci niezainicjowanych, odczytywanie wyrazów tekstu, jako liczb, jest bardzo dobre, ale nie prowadzi do oczekiwanego rezultatu. Trzeba sięgnąć po znane i sprawdzone algorytmy. Działają one nawet lepiej od tzw. fizycznych generatorów. To ostanie rozwiązanie czasami się jeszcze spotyka. Działa ono w oparciu o generowaniu szumów we wszystkich urządzeniach elektronicznych. Wystarczy podkręcić gałkę wzmacniacza, by usłyszeć szum. Zjawisko to leży u podstaw budowy świata i nie sposób go wyeliminować. Gdyby przyłączyć do końcówek opornika leżącego dosłownie na stole, woltomierz, okazałoby się, że generuje on bardzo małe napięcie elektryczne zmieniające wartość i kierunek w chaotyczny sposób. Gdy podgrzać opornik w ręce, napięcie nieco wzrośnie.
     Jest to bardzo głęboka zasada budowy tego świata: nie da się na tej zasadzie zbudować elektrowni, o ile nie zaczniemy pod opornikiem palić ognia. Sprawę chaosu, jako takiego w przyrodzie zostawmy mądrzejszym.
     Dlaczego, skoro szumy są tak powszechne, jednocześnie są takie kłopoty z ich otrzymaniem? W przypadku kryptografii odpowiedź jest oczywista: potrzebujemy przebiegu pseudolosowego: takiego który tylko wygląda na przypadkowy, w istocie jest całkowicie przewidywalny. W innych zastosowaniach, jak symulacje komputerowe fizyczne generatory (można mierzyć napięcie na oporniku i zapisywać wyniki, jako kolejne liczby losowe), wykazują czułość np. na zmiany temperatury, czas działania itd.
     Znacznie prościej i pewniej sięgnąć po sprawdzone algorytmy. Jeden z najstarszych opiera się o operację dzielenia z resztą. Jest ona obecna chyba we wszystkich chyba językach jako bezpośrednia instrukcja, a jej wynikiem jest właśnie reszta. Algorytm pracuje mniej więcej tak: bierzemy dużą liczbę pierwszą, dowolną mniejszą od niej. Dzielimy liczbę pierwszą, przez liczbę startową, mnożymy wynik, czyli resztę z dzielenia przez pewien stały czynnik, wynik zapisujemy jako liczbę losową, w następnym kroku dzielimy liczbę pierwszą przez ten wynik.
     Niestety, aby wszystko dobrze działało, potrzebne są pewne magiczne liczby: owa pierwsza i ten czynnik, przez który mnożymy. Jednym z najpopularniejszych zestawów jest 2 do 31-1 (214748364) i 16807. Znane są inne kombinacje, gdzie liczbą pierwszą jest 2 do 48 itd. Rozwiązanie to jest bardzo często stosowane, jednak dla kryptografii ma zasadniczą wadę: ciąg liczb pseudolosowych jest zbyt krótki. Liczby nie mogą się powtarzać, długość ciągu może wynosić najwyżej 2 do 31 minus 1.
     Kombinacje "magicznych" liczb są dobrze znane. Wniosek z tego, że trzeba szukać wielkich liczb pierwszych. Ktoś, kto zna największą znaną liczbę pierwszą, taką co do której jest duży stopień pewności, że nikt inny jej jeszcze nie zna, może generować bezpieczne klucze do szyfrowania. Także zastosowanie znanej, ale wielkiej liczby poprawia znacznie bezpieczeństwo: do ewentualnego złamania szyfru, nawet, gdyby "wyciekły" jakieś informacje o nim, potrzebny jest wielki komputer. Im większa liczba pierwsza, tym możliwy jest dłuższy klucz, tym trudniej jest go złamać.
     Zapewne wyjaśnia to do pewnego stopnia wielkie nakłady na badanie liczb pierwszych i ich poszukiwania. Jednak tylko do pewnego stopnia: znam osobiście ludzi, którzy są gotowi poświęcić temu problemowi bardzo wiele pomimo tego, że nie mają nic do zakodowania i za potężną robotę nikt nie chce im godziwie zapłacić. Nawet zupełnie symbolicznie. Jednak to zagadnienie odgrywa w teorii liczb tak ważną rolę, że dla ludzi zajmujących się matematyką i obliczeniami jest to chyba całkowicie zrozumiałe.
     Wracając jednak do tematu: na wyprodukowanie porządnego chaosu znajdowane są coraz to lepsze metody. Zainteresowani powinni udać się do bibliotek, niestety najprawdopodobniej uniwersyteckich, bo burzliwy rozwój dziedziny nastąpił dopiero w latach 80-90.
     Metoda reszta z prostego dzielenia ma jedną zasadniczą wadę: mianowicie wymaga programu obsługującego precyzyjną arytmetykę. Na stacjach roboczych z procesorami 64 - bitowymi w sposób naturalny można zastosować liczbę 2 do 64. Niestety niewiele więcej. Tyle, jak na razie dziś wystarcza do kodowania informacji. Komputery "normalne" czyli nasze poczciwe PC mają arytmetykę 32 bitową. Oczywiście istnieją programy prowadzące obliczenia z dowolną liczbą miejsc znaczących. Takim rozwiązaniem jest dołączony do tekstu program. Jednak odbywa się kosztem szybkości działania.
     Zasadniczym zastosowaniem generatorów pseudo-losowych są wszelkiego rodzaju obliczenia numeryczne. Jednym z najprostszych zastosowań jest choćby obliczanie całki oznaczonej. W przypadku prostych funkcji, dla których znamy dobrze ich przebieg sens czegoś takiego jest mocno dyskusyjny: wystarczy podzielić interesujący nas zakres na równe kawałki i policzyć pole trapezów. Jeśli funkcja jest kapryśna, to można pominąć tym sposobem szereg minimów i maksimów. W takim wypadku metoda z generatorem pseudolosowym, który wygeneruje szerokość przedziałów daje o wiele większe prawdopodobieństwo, że uzyskamy prawdziwą wartość. łatwo to zresztą sprawdzić, obliczając całkę kilkakrotnie z tą samą ilością trapezów, ale z różnym przebiegiem losowym. Gdy otrzymane wartości różnią się w zadowalającym stopniu, pewnie wszystko jest w porządku.
     W kilku publikacjach dotyczących kryptografii, nie stawiano generatorom licz pseudolosowych specjalnych wymagań. Można powiedzieć, że kryptografowie mają dobrze. Wystarczy spełnianie prostych testów statystycznych, a najważniejsza jest niepowtarzalność ciągu, i już. W przypadku obliczeń numerycznych "schody" pojawiają się na samym początku. Kłopotem jest już długość ciągu. Można to sobie wyobrazić: drobina materii o rozmiarach 1000X1000X1000 atomów to ledwie setka cząstek białka. A jest to już miliard atomów. Do symulowania przebiegu losowego na takim obiekcie generator 2 do 31 z definicji się nie nada. Daje on bowiem z definicji ciąg o długości 2 miliardy liczb.
     By obliczenia były wiarygodne i miały przyzwoitą dokładność trzeba je wielokrotnie powtórzyć. W trakcie tego wszystkiego nie powinno się wykorzystać nie więcej jak 0.7 całego ciągu. Najlepiej, gdyby było to zaledwie kilka procent.
     To jednak dopiero początek kłopotów. Generatory z definicji produkują "kluski" w postaci skorelowanych ze sobą ciągów liczb. Jest to tylko udawanie chaosu, w takim stopniu, w jakim go sobie wyobrażamy. Pierwsza zasadnicza różnica w porównaniu z ciągiem fizycznym polega na tym, że w zakresie zmienności do wyczerpania całego ciągu nie powtórzy się żadna liczba. Inaczej mówiąc generator ustawia w swoim porządku ciąg liczb zawartych pomiędzy np. 1 i 2 do 31.
     W prostych obliczeniach nie ma to na szczęście większego znaczenia, poza uwagami recenzentów i co bardziej złośliwych polemistów. Niestety, bywa, że po zamianie algorytmu haszującego wychodzi coś innego, czasami z przeciwnym znakiem i... tylko kamień u szyi. Wtedy są poważne kłopoty, bo oznacza to konieczność wkroczenia na grunt bardzo zaawansowanej teorii, zazwyczaj bardzo wiele czasu poświęconego kopaniu po literaturze.
     Dość powszechnie wiadomo, że liczby wygenerowane przez generatory liniowe dają się rozmieścić na płaszczyznach w kostce n-wymiarowej. Gdy potraktujemy pary takich liczb, jako współrzędne x i y to otrzymamy wykres pełen skośnych równoległych linii. Efekt ten można było min obserwować w starych komputerach "Amstrad". Sam nie sprawdzałem, lecz tę wadę podobno mają także generatory TurboPascala.
     Nie jest to tak bardzo dokuczliwe, gdy się wie, co się dzieje. Generatorów takich nie wolno stosować do symulacji np. perkolacji, czyli właśnie do losowego rozrzucania punktów na płaszczyźnie. Do symulacji procesów jednowymiarowych np. procesów zakupu w sklepie nadają się (z pewnymi zastrzeżeniami) stosunkowo nieźle. Więcej - szukać książki "komputerowe generatory liczb losowych" R Wieczorkowski, R. Zieliński.
     Jak się ostatnio przekonałem, generatory liczb losowych są "buzującą" dziedziną nauki. Ostatnim(?) hitem jest generator RanLux. Z jednaj strony są wymyślane coraz bardziej finezyjne konstrukcje, z drugiej coraz chytrzejsze testy. Co ciekawe, wiele konstrukcji generatorów pseudolosowych "padło" na stosunkowo prostych testach fizycznych.
     Jedną ze skuteczniejszych prób jest test błądzenia losowego. Cząstka porusza się po płaszczyźnie skokami pomiędzy węzłami prostokątnej siatki. Płaszczyzna jest ograniczona z  dwiema liniami odbijającymi i dwiema pochłaniającymi. Statystycznie, gdy są one jednakowej długości, taka sama liczba cząstek powinna zostać pochłonięta przez obie linie.
     Test ten pogrążył min. generatory z rejestrem przesuwnym.
     Dosyć tej teorii. Generalnie nie jest łatwo. Czasami chciałoby się otrzymać wynik jakiejś symulacji z dokładnością np. 0.01 by porównać jakieś dwa bardzo do siebie podobne efekty, czy sprawdzić "subtelny efekt", a tu pojawia się pytanie, ile pochodzi od generatora...
     Problem długości ciągu i jakości (czyli korelacji) można by w zasadzie bardzo łatwo rozwiązać za pomocą złożenia dwu algorytmów. Niestety, dochodzi kolejny wymóg, czysto techniczny: szybkość. Generator powinien zajmować jak najmniej czasu obliczeniowego. Warto sobie wyobrazić, że każda czynność zostanie powtórzona wiele milionów razy. Trzeba więc "ostro kombinować".
     Na marginesie warto zauważyć, że wszelkie proste operacje psują chaos. Bardzo popularne są generatory pseudolosowe, które dają wartości pomiędzy 1 i 0, czyli unormowane do 1. Jeśli zwyczajnie dodamy do siebie wartości z dwu generatorów, to najbardziej prawdopodobna wartość wyniesie 1, podczas gdy chcemy uzyskać równe prawdopodobieństwo dla wartości pomiędzy 0 i 2 (bo 1+1=2,wartość maksymalna). Jest to wynikiem tego, że by uzyskać wartość bliską "0" oba generatory muszą dać bardzo małą wartość. Prawdopodobieństwo takiego zdarzenia jest równe iloczynowi prawdopodobieństw uzyskania takiej wartości w obu generatorach. Wartość około 1 można uzyskać na bardzo wiele sposobów: pierwszy generator da prawie zero, drugi prawie 1, oczywiście z takim samym prawdopodobieństwem otrzymamy dobry wynik pierwszy da prawie 1 a drugi prawie 0.
     Podobnie zadziałają inne operacje arytmetyczne: zamiast "płaskiego" rozkładu prawdopodobieństwa otrzymamy zawsze gdzieś "górki".
     Dobrze zachowują się tylko niektóre operacje: np wspomniane xor dzielenie z resztą (w C++ operator \%), permutacje itp. Dlatego jednak, nie jest to "bardzo prosto" gdy nie zna się tych własności liczb losowych. Tym niemniej są to operacje nie wymagające wielu zabiegów, takie które można nawet przeprowadzić jedną instrukcją, a więc łatwe do zastosowania w programie.
     Obliczeniowcy skazani są na kompromisy pomiędzy tymi wszystkimi wymaganiami. Istnieją procedury które dają "same z siebie" bardzo długie ciągi, rzędu 2 do 127. Niestety, reguła jest taka, że im dłuższy ciąg, tym wolniej chodzi generator począwszy od długości słowa maszyny. Jest to efekt czysto techniczny, jednak nie do przeskoczenia. Do pewnego stopnia można go zminimalizować za pomocą assemblerowych procedur w maszynach z kilkoma procesorami, ale też nie widziałem programu w którym by to zrobiono.
     Jeśli jednak nie zajmujemy się dyfuzją w ciele stałym, nie liczymy prawdopodobieństwa perkolacji, nie symulujemy procesów na wielkich giełdach, to mamy pełny komfort. Do zakodowania informacji wystarczą bowiem całkiem kiepskie generatory, bardzo proste metody, możemy też sobie pozwolić na zatrudnienie komputera na stosunkowo długi czas.
     Niestety nie zamierzam tu przedstawić jakiegoś wyjątkowo wyrafinowanego algorytmu. Wręcz przeciwnie, raczej najgłupszy z możliwych, bo taki daje się wyjątkowo łatwo zanalizować. Najgłupszy jest oczywiście algorytm podstawieniowy. Zamieniamy literę na jakiś inny znak. Oczywiście, jeśli przygotujemy sobie zestaw 32 zamienników znaków pisarskich, to będzie to do niczego, bo bardzo dobrze zadziała metoda analizy częstości.
     Istnieje pewna metoda porozumiewania się, która gwarantuje zupełną tajność. To umówiony znak. Jeśli siedząc w okopach zobaczymy, że przeciwnik wystrzelił zieloną rakietę, to możemy się tylko domyślać, być może zaraz nastąpi atak, może odwrót, albo... komuś przypadkiem wypaliła rakietnica.
     W założeniu szyfr jest algorytmem, który pozwala nam przy zapamiętaniu stosunkowo krótkich haseł i prostych algorytmów zakodować bezpiecznie sporą porcję informacji. Chodzi tu głównie o oszczędzenie pracy i bezpieczeństwo.
     W epoce komputerów wiele jednak się zmienia. Swoje hasła możesz zapisać na dyskietce. 1.4 MB to jakieś 500 stron tekstu. Tyle tajnych informacji, to może mieć np Mosad CIA lub AWs, przeciętny obywatel zazwyczaj nie ma nawet jednej porządnie tajnej linijki informacji.
     Robimy tak: zapisujemy na dyskietce ciąg pseudolosowy. Informację zamieniamy na ciąg liczb. Jak? Tu już można zastosować najgłupszą metodę podstawieniową: a=1 b=1 czy coś równie inteligentnego. Następnie na ciągu liczb wykonujemy operację xor z ciągiem na dyskietce. Odbiorca musi mieć taką samą dyskietkę. Ponownie przeprowadzi mnożenie xor tego, co otrzymał z tym co na dyskietce. Otrzyma to co było na początku: teraz wystarczy przeprowadzić podstawienie 1=a, 2=b itd.
     Czy to jest mądra metoda? . W literaturze nazywa się to kluczem jednokrotnego zastosowania (onet-time pad) i dowodzi, że jest metodą szyfrowania absolutnego: nie ma sposobu na odkodowaniem informacji. Stosowana bywa w bardzo wyjątkowych sytuacjach, np. do podania hasła do odpalenia rakiet z głowicami atomowymi, albo do zapisania hasła lub piosenki wyborczej.
     Zasadniczą wadą jest rozrzutność, długość klucza jest co najmniej taka, jak informacji. Kłopotliwą sprawą jest przesłanie klucza: potrzebujemy albo kuriera, albo absolutnie pewnego kanału informacji. Z tego powodu nie ma ona praktycznego znaczenia w kryptografii. Jeszcze jedną przyczyną jest zapewne to, że nie da się tu już nic policzyć ani zmienić, metoda jest nie do złamania.
     Można się łatwo przekonać, że tak jest. Jeśli liczby zapiszemy za pomocą standardowych znaków ASCII to operacja xor przerobi je na liczby 32 - bitowe. Ponieważ jednak za każdym razem mamy nową liczbę z klucza, która tego dokonuje, nie możemy nic powiedzieć o znaku wejściowym: może to być dowolny znak pisarski.
     Jeśli jednak zastosuje się ten sam klucz choćby dwukrotnie, odszukując charakterystyczne znaki(np. spacje) w tekście można odczytać informacje.
     Jak już powiedziałem wersji generatorów licz pseudolosowych jest wiele, ale ich liczba nie jest znowu tak duża, może kilka tysięcy, pewnie tylko kilkaset powszechnie stosowanych: trzeba więc uważać. Można sobie wyobrazić program, który będzie kolejno sprawdzał znane algorytmy.
     Na szczęście dla szyfrujących, gdy wymagania, zwłaszcza co do szybkości działania są niewielkie, można sobie poszaleć. Od pewnego czasu ćwiczę generatory oparte na rejestrach przesuwnych (te, które zakwestionował test błądzenia). Są one chętnie realizowane w postaci sprzętowej w elektronice. Ich konstrukcja jest bardzo prosta. Bity krąża w komórkach pamięci, które tworzą "pociąg" o pewnej magicznej długości. Na początek "pociągu" bity są wprowadzane z bramki xor. Do niej podaje się wartość ostatniej i pewnej wybranej komórki rejestru. No i już. Trzeba tylko jeszcze "wystartować" maszynę tak by nie było samych zer w niej. Po pewnym czasie zacznie produkować piękny chaos. Może nie tak piękny, jak potrzeba do liczenia, ale do szyfrowania chyba wystarczy.
     Jeśli jest taka potrzeba, można zamienić ciąg zer i jedynek na liczby: np. poprzez naturalne podstawienie w systemie pozycyjnym. Długość ciągu jest potęgą długości rejestru. Maszyna jest łatwa do uruchomienia jako program, bo niemal każdy język zawiera instrukcję przesuwania bitów w prawo i w lewo. Jest to na dodatek instrukcja bardzo szybka: dlatego wszystko działa żwawo.
     Generatory te jednak mają jedną dość paskudną własność: gdy rejestr zapełniony jakimś regularnym przebiegiem, trwa "trochę" by owa regularność się "rozgoniła". Jest to znany problem "rozgrzewania" generatorów. Jest jednak na to rada: zapełnić na początku rejestr za pomocą innego generatora.
     Jak długie ciągi? W książce R.Wieczorkowski R. Zieliński znalazłem tabelkę z magicznymi liczbami: długości rejestru i miejsca pobierania wartości dla bramki xor. Jest tam ok 37 wartości z czego 15 jest interesujących: ostania wynosi 132049.
     Wypróbowałem generatory z długościami rejestrów 36, 89, 127, 3217, 9689, 19937. Dwa do potęgi 3217 to jest coś około 10 do tysiąc kilkanaście. Jeśli przyjąć na wyrost, że komputer z 1000 (pewnie 1024) procesorów jest w stanie przeliczyć 10 do 19 kombinacji w ciągu roku to ze znalezieniem liczby startowej dla tego generatora poradziłby sobie czasie gdzieś pomiędzy 50 a 500 lat, czego dokładnie nie liczyłem. Długość ciągu można przemnożyć przez kilka miliardów. Robimy to np. tak uruchamiamy drugi generator. Zazwyczaj jest to generator systemowy, a on ma taką długość ciągu. Za jego pomocą otrzymujemy pewną niewielką liczbę zawartą np. pomiędzy 0 a 128 000. Teraz właściwy generator wykonuje "na pusto" tyle ile wygenerowaliśmy kroków. Zapisujemy dopiero ostatni.
     Metoda jest wyjątkowo niemądra: prawie to samo można uzyskać na 100 innych sposobów, a ten akurat zwalnia pracę komputera najmniej te 128 000 razy. Jednak z punktu widzenie kodowania, czas ten nie jest tak zupełnie stracony.
     Gdyby ktoś próbował odszyfrować coś zapisane tą metodą, jego komputer też będzie musiał bezsensownie mielić liczby.
     Program, który zamieszczam operuje na generatorze dwa do 19937. To jest 10 z sześcioma tysiącami zer (na oko). W tych okolicach dochodzimy do kresu możliwości sprzętu. Wygenerowanie ciągu kilkunastu tysięcy liczb, dosyć by sobie poszyfrować w telegraficznym skrócie przez kilka miesięcy (1 strona maszynopisu znormalizowanego to ok. 1200 znaków) trwa już kilkanaście godzin, gdy liczba pustych skoków może sięgnąć 120000. Mój procesor ma 233 MHz.
     Na marginesie, warto zauważyć, że zastosowanie np Athlona 800 MHz poprawi pewnie ten wynik kilka razy, ale raczej w praktyce trudno to by było zauważyć.
     Na koniec warto zauważyć całkowicie głupi algorytm szyfrowania można mocno ulepszyć. Operację xor mnożenia "naturalnego" podstawienia (a=1) zamienić na jakąś inną o bardziej skomplikowanej tabliczce mnożenia. Sama zamiana liczb podstawianych za litery z 1 - 32 na np 1 - 32.000.000 "nieco skomplikuje" sytuację deszyfranta: zamiast 32 będzie miał w miejscu każdego znaku 32 miliony możliwości pierwotnej wersji ciągu losowego. To jakby ktoś miał co do ukrycia.
     Poważnie mówiąc, to zastosowanie typowego, nieco "mocniejszego" programu szyfrującego praktycznie nie da szans największym centrom obliczeniowym. Można spokojnie założyć, że nie jest się najważniejszym klientem CIA. W takim wypadku jeśli informacji nie da się rozkodować w ciągu kilkunastu minut, a to jest możliwe tylko wówczas, gdy stosuje się programy dostarczane dla sekretarek, CIA musi sobie dać spokój.
     Dostępne są programy szyfrujące z kluczem 1024 bity. O ile ich algorytm nie został sknocony, niema na nie sposobu. Co więcej są dostępne programy z kluczem publicznym, który jest bardzo wygodny: nie ma potrzeby wysyłania kuriera z tajną dyskietką.
     Na marginesie projektu Echelon warto wspomnieć o pojawiających się uparcie informacjach, o tylnych drzwiach w niektórych popularnych algorytmach do szyfrowania informacji.
     Dotyczy to np. bardzo popularnego i skutecznego algorytmu DES. Jednym z najważniejszych elementów jego są tzw. s-boksy, tabele 4x16 liczb. Zamienia się za ich pomocą słowa 6 - bitowe na 4 bitowe. Pierwszy i ostani bit z sześciu wyznacza wiersz 1 z czterech, natomiast "środkowe" 4 bity wyznaczają kolumnę, jedną z szesnastu. Na przecięciu wiersza i kolumny leży liczba będąca wynikiem działania.
     Algorytm DES został opracowany w IBM a następnie zmodyfikowany w Nationa Security Agency. Dobór liczb w s - boksach nie jest poparty żadną solidną analizą matematyczną, natomiast wiadomo, że w praktyce stosuje się tylko kilka kombinacji. Takie "liczby z kapelusza" zawsze budzą podejrzenia: być może jest to podstęp, być może Amerykanie znają sposób na rozszyfrowywanie informacji, bez znajomości klucza. Czy to możliwe?
     DES został w całości opublikowany, przez ponad 20 lat, pomimo wielkich wysiłków nikt nie odkrył w nim niczego podejrzanego. Zapewne domyśly wynikające m. in. z "magicznego" doboru niektórych parametrów metody są zwyczajnymi kaczkami dziennikarskimi.
     Natomiast w przypadku programów szyfrujących, które są dostarczane jako binaria, można mieć wątpliwości: można podejrzewać, że są "trojanami". W każdym razie spreparowanie takiego programu jest łatwe, natomiast odkrycie podstępu, bardzo trudne.
     Niestety, jest jeszcze jeden problem, chyba znacznie poważniejszy: kiepskie programy do szyfrowania. W przypadku gdy są dostarczane same binaria, i algorytm nie jest opisany, jest poważne niebezpieczeństwo, że mamy do czynienia z bublem.
     Dosyć łatwo sobie wyobrazić taką akcję blokowania organizacji Echelon. Kilkudziesięciu ludzi najlepiej mieszkających w różnych miejscach Ziemi śle do siebie listy po 1 MB . "Słuchaj stary, zbudowałem genialną maszynę losującą, sprawdź swoim genialnym programem, czy nie daje korelacji." I dalej plik txt z samymi liczbami. Czy może istnieć bardziej bezczelna metoda na przesłanie planów PENTAGONU? Swoją drogą został stworzony precedens: program SETI HOME to rozsyłanie plików z kompletnymi szumami.
     Kontrola informacji, gdy liczba komputerów podłączonych do Internetu rośnie w tempie eksponencjalnym jest całkowicie przegrana. Tak na dobrą sprawę trzeba by sprawdzać czy w nie ma czegoś okrytego w najmniej znaczących bitach w wysyłanych obrazkach. Narzędzia do czegoś takiego ma GIMP (Stegano). Zapewne nie zapewniają one wystarczającej tajności, jednak nie problem samemu coś takiego zmajstrować. Mechanizm może być o wiele prostszy niż w przypadku "znaków wodnych". W plikach o wielkiej rozdzielczości i głębi zapisu (np 32 bity) na samym końcu, 2, 3 ostanie bity są losowe, reprezentują szum. Jeśli zastąpimy je pseudoszumem, nie ma sposobu by cokolwiek zauważyć, jeśli nie zna się algorytmu wyprodukowania tego szumu. Jest tu pewien mały szkopuł, potrzebny jest szum o rozkładzie gausowskim: trzeba chwilę pewnie pomyśleć jak zakodować w nim informację i zachować rozkład. Ale tym niech się martwią szpiedzy. Oczywiście można w ten sposób "sprawić" każdy plik, który jest wynikiem zamiany informacji analogowej na cyfrową: przewalające się tonami mp3, pliki filmowe, pliki ASCII z wynikami pomiarów i co kto tam jeszcze umie wyprodukować.
     Metoda ta jest oczywiście dobrze znana, bywa nazywana metodą podprogową. Jej odmianą w elektronicznym wydaniu jest metoda widma rozproszonego. Wspólną cechą jest to, że bez znajomości zarodka (liczby startowej) generatora pseudolosowego, o ile jest on dostatecznie dobrze zbudowany, nie ma sposobu nawet na wykrycie przekazu informacji.
     Na końcu warto przypomnieć o metodzie umówionego sygnału: "Jutro ciotka urządza imieniny". Informacji takiej nie sposób uznać za niebezpieczną: mamy prawo do ciotek, a ciotki do imienin. Mamy prawo do przesyłania innych dziwacznych informacji.
     Tak więc kontrola informacji w dobie Internetu to zadanie o wiele trudniejsze, niż w okresie konnej poczty. Moim zdaniem zadanie całkowicie beznadziejne. Jedyne, co jest wykonalne, to namierzanie serwerów z serwisami które coś tam naruszają. Co zrobić gdy się okazuje, że ów pracuje w Krasnojarskim Kraju, albo innym równie dostępnym - o to niech martwi ten kto sieć chce kontrolować.
     Nie ma natomiast pewności, że taka akcja nie jest prowadzona. Niestety, zawsze są ludzie którzy mają pomysł na wyciągnięcie pieniędzy z państwowej kasy. Zawsze potrafią oni przedstawić się jako zbawiciele ludzkości. Idealna jest sytuacja, gdy daje się wszystko utajnić: wtedy fachowcy nie wykpią i nikt nie poniesie konsekwencji za marnowanie pieniędzy: przynajmniej do czasu gdy prawda nie wyjdzie na wierzch.
     Jest bardzo prawdopodobne, że na całym świecie tysiące osób zajmują się próbami kontroli Internetu. Z jednej strony jest to łatwe technicznie: o wiele łatwiejsze niż np. zakładanie podsłuchów. Z drugiej jeśli nawet wykonawcy zdają sobie sprawę z tego, że niczego ważnego w sieci nie znajdą (ważne informacje są bardzo łatwo dostępne: trudno je zrozumieć), to liczą na zebranie "haków" na przeciętnego obywatela. Jest to także mit, bo zdecydowanej większości wyciągnięcie takiego "haka" oznaczałoby dekonspirację całej operacji, prawdopodobnie kontrole finansowe ze standardowymi skutkami, ale pewnym ludziom samo posiadanie teczek poprawia humor.
     Niestety, obawiam się, że powstanie w przyszłości rodzaju "policji internetowej" może być konieczne. Myślę tu o "policji" wyłonionej i pracującej pod kontrolą społeczności internetowej, a nie organów państwowych. Tamci zapewne wykażą się jak przy ściganiu normalnych złodziei, albo jeszcze gorzej: jak na razie "tylko" pokradziono policji twarde dyski.
     Jak do tej pory w Internecie zanotowano właściwie niegroźne chuligańskie wybryki. Z drugiej strony rozpowszechnienie Najlepszego Systemu Okiennego, który z punktu zabezpieczeń przypomina dom zamknięty na skobel stwarza szansę wszelkiego rodzaju pomyleńcom. Trzeba jeszcze pewnie trochę czasu, by zorientowali się oni, że rozprowadzenie wirusa może narobić tyle samo szkody ludziom co wysadzenie samolotu.
     Jak na razie pisaniem wirusów zajmują się amatorzy. Nie słyszałem, by ktoś stosował jakieś specjalne zabezpieczenia, by nie dać się wykryć. Ludzie ci nie potrafią w rękach utrzymać lutownicy, ani języka za zębami. Co by było, gdyby pewien szesnastolatek nie zaczął się chwalić w grupach dyskusyjnych spowodowaniem jednego z największych zatorów informatycznych w dziejach Sieci? Pewnie wystarczyło tylko poczekać z ogłoszeniem tej rewelacji rok lub dwa i nikt by na niego nie zwrócił uwagi.
     Nie było jak do tej pory akcji typowo hardwarowych. Nie chcę specjalnie straszyć, ale przy obecnym braku kontroli całości sieci komputerowych, to się kiedyś źle skończy. Zabezpieczenia przed obcinakami stosuje się w domowych systemach alarmowych, a tymi nie przesyła się danych o stanie kont... Niezabezpieczone serwery, wykonane z domowych PC po załadowaniu jednodyskietkowego Linuxa są całkowicie zdobyte: w logach nie zostanie ani śladu, po tym co się działo.
     Największe jednak niebezpieczeństwo tkwi w radośnie rozwijającym się skryptowym "bajeranctwie". Te wszystkie gry typu "złap i wygraj" migające i kręcące się reklamy, wszystko to wymusza bardzo daleko posuniętą interaktywność. Gdy ci się łapsko obsunie na myszy i trafisz na stronę dla dorosłych, to jak masz nieszczęście mieć włączone skrypty javy, pozostaje Ci tylko zrestartować komputer, jeśli pracujesz w Oknach. Pingwiniarze mają lepiej: ale najlepiej powyłączać to wszystko. W każdym systemie jest kiepsko, ale VBasic dowalił do pieca nader skutecznie. W rezultacie w Win 2000, które jako system wreszcie sieciowy powinny zapewnić bezpieczeństwo będą te same kłopoty, co w Win9x.
     Wszystko to razem wzięte przypomina rozwój przemysłu samochodowego w latach 50 - 60. Trzeba było dziesiątek tysięcy zabitych, by zaczęto w samochodach montować pasy bezpieczeństwa.
     Jest pewne, że wiele instytucji zajmuje się kontrolą nośników informacji i samą informacją. Jednostki wojskowe prowadzą stały nasłuch na falach radiowych, eter kontroluje PIR. Komunikacja telefoniczna jest zmonopolizowana: w Polsce to relikt minionego systemu. Obywatelowi wolno było posiadać tylko krótkie odcinki kabla rozciągniętego w terenie. Krótkofalowiec był potencjalnym szpiegiem i trzeba było go szczególnie pilnować. A dziś telefonami komórkowymi posługują się złodzieje tak jak radiotelefonami.
     Skuteczność kontroli informacji, jak widać, po epidemiach wirusowych, po prymitywnych włamach komputerowych, jest bliska zera. Tymczasem, jak na razie przestępcy komputerowi działają bardzo prymitywnie i bezczelnie.
     Według mojego pobieżnego rozeznania, gdyby ktoś chciał dokonać aktu terroru w sieci i uniknąć rozpoznania, mógłby zastosować bardzo prostą metodę: rozesłać wirusa który uaktywni się dopiero po rotacji logów. Trzeba by być tylko nieco cierpliwym, poczekać kilka miesięcy i po zawodach. Na sewerach obsługujących sieci komputerowe nie można trzymać w nieskończoność plików zawierających zapis czynności: po pewnym czasie trzeba je skasować.
     Echelon, czy nie: jest problem. Zbyt szybko, jak na naszą wyobraźnię ten świat się rozwija. Kilka lat temu pisałem, gdy jeszcze nie marzyłem o stałym dostępie do Internetu, o potencjalnych zagrożeniach. Czy jest możliwe coś choćby w małej części podobnego do tego, co oglądamy w kinie, np. w "Kosiarzu Umysłów".
     Pisałem o inżynierze, który podłączył do komputera pralkę automatyczną i tak zostało, choć miało być do czasu kupienia nowego programatora. Zostało z lenistwa. Pralka sterowana komputerem nie spełnia norm bezpieczeństwa. Tymczasem wyprodukowano już urządzenia domowe z łączami internetowymi. Czy są bezpieczne? Czy pralka, która ma prawo spowodować zalanie domu jest zabezpieczona przed totalnym zwariowaniem procesora? Obawiam się że "w zasadzie".
     Bardziej niż tajemniczej organizacji kontrolującej Internet boję się głupoty i lenistwa.

C

zy z ewentualnym podglądaniem Internetu można jakoś walczyć?
     Zapewne dla przeciętnego obywatela jakaś akcja, czy organizacja zajmująca się wyszukiwaniem przestępców na całym świecie nie ma większego znaczenia, nie bardzo się przejmuje czy go ktoś podsłuchuje czy nie: zazwyczaj nie ma on niczego cennego do ukrycia. Nawet tak bardzo ostatnio chronione dane osobowe mają najwyżej cenę nieco zwiększonych rachunków telefonicznych. Natomiast, dla takiego krezusa, który posiada stałe łącze, jest wszystko zarówno, chyba że wkurza się przy odsiewaniu listów od spamu.
     Metoda na podsłuchiwaczy jest stara jak świat: wytworzyć tyle hałasu, by już nic nie dało się zrozumieć. Gdy radiotelegrafiści na wojnie nie mieli nic do przesyłania, wymieniali puste depesze, zawierające losowe ciągi znaków. To po to, by szyfranci strony przeciwnej mieli co robić i by po zwiększonym ruchu w eterze nie dało się zauważyć przygotowań do jakiejś operacji. Zasada jest prosta: radiostacja działa cały czas, tylko raz przekazuje informacje, a raz szum.
     W świecie komputerowym możliwości odczytywania i selekcji informacji wzrosły bez najmniejszej przesady w stosunku do "ręcznej obsługi" miliony razy. Na temat projektu Echelon prasa publikuje niesamowite informacje na temat możliwości automatycznego przeszukiwania. Ponoć z milionów tekstów do oceny przez człowieka trafia najwyżej kilkanaście.
     Warto opowiedzieć, jak to jest możliwe. Po pierwsze można zastosować analizę słów kluczy. Do tego wystarczy znana "od zawsze" funkcja "znajdź". Po drugie zawartość "trefnych" słów w tekście: jeśli na kilka stron, trafiło się jedno, to jest bardzo prawdopodobne, że nie warto się nim zajmować. Kolejne sito, to programy słownikowe, mogą one do pewnego stopnia odczytywać treść: sprawdzają czy szyk wyrazów jest typowy, czy rzeczowniki pełnią typowe role. Pomogą odrzucić błędne, lub przypadkowe wpisanie słów- kluczy.
     Kolejnym instrumentem są sieci neuronowe. Ich zastosowanie może być bardzo różne. Ich działanie jest bardzo nietypowe, jak na komputerowy świat. Najpierw trzeba sieć wytrenować lub nauczyć zazwyczaj za pomocą wcześniej przygotowanych przykładów. Proces przypomina bardziej naukę w szkole jak tresurę.
     W istocie, sieci neuronowe mają bardzo wiele wspólnego z działaniem prawdziwych organizmów żywych. Moim zdaniem nie tyle z inteligencją, co z intuicją. Co jeszcze bardziej wstrząsające, istnieje typ sieci, które uczą się bez nauczyciela. Działa to tak: siec dostaje do przerobienia nagromadzony bez składu i ładu materiał statystyczny i po pewnym czasie zaczyna sama nam wskazywać zależności, jeśli oczywiście takie są, jakie w nim występują.
     Taka sieć, gdyby jej zbudować odpowiednio sprawne oczy, nauczyłaby się sama rozróżniać ludzi, zwierzęta i przedmioty. Temat jest niesłychanie fascynujący, bez wątpienia materiał na całkiem osobny wielki artykuł.
     Wielką zaletą sieci, jest to, że potrafią nauczyć się rozróżniać to, czego nieraz nie potrafi sam eksperymentator. Dzięki tej własności upatruje się w nich rodzaj informatycznego panaceum na wszystkie problemy. Czy sieć neuronowa może nauczyć się rozumieć metafory?
     Do pewnego stopnia. Jeśli istnieją jakieś reguły ich tworzenia, jeśli nauczy się ją za pomocą przykładów.
     Powiedzmy że czytamy na stronie internetowej baner "każdą ilość srebrzystego metalu (minimum 0.5 kg!) o wdzięcznym imieniu boga podziemi. Dla stałych kontrahentów duże upusty!". Sprawa jasna: mamy na pieńku z sąsiednim narodem, walimy jak w dym. Potrzebujemy jeszcze baneru oferującego rydwan dla naszego nabytku: kwestia czasu by znaleźć. Nasza sieć, by to odczytać musi mieć co najmniej maturę z polskiego. Komputer, cokolwiek by w środku niego nie siedziało, jeśli ktoś wcześniej nie zebrał setki odpowiednich przykładów, ani mrugnie i przyjmie, że to zwyczajne ogłoszenie handlowe.
     Podobnie ma się sprawa z jeszcze bardziej karkołomną dla komputera sprawą: odczytywania znaczenia obrazków wraz z podpisami. Gdy człowiek zobaczy reklamę "piwa bezalkoholowego" - wie doskonale o co chodzi. Komputer ani trochę. Nie rozróżni króliczka z "Playboya" od upolowanego przez myśliwego.
     Reasumując, nie wydaje mi się możliwe, by stworzyć jakikolwiek działający rozsądnie system, który byłby w stanie wyłowić np. strony internetowe poświęcone faszyzmowi, czy rasizmowi, ogłoszenia handlarzy bronią czy coś temu podobnego, o ile ich autorzy wykażą się odrobiną fantazji.
     Powróćmy do zasadniczego pytania: czy internauci mogli by się bronić? jedna metoda jest na pewno dostępna: zawalenie sieci mnóstwem dokumentów. Skąd je wziąć? Wygenerować za pomocą programu.
     Proszę bardzo: masz tu załączony przykład programu, niestety nie dydaktycznego, który wygeneruje Ci np. 1000 raportów w formacie ps. lub pdf. Zaznaczam z góry, że nie nadaje się do niczego, z definicji został napisania do robienia bałaganu. Prócz programu potrzebujesz jeszcze dwu plików tekstowych (wyra1.txt i dane4.txt), oraz pakietu \LaTeX. Prościutki jak drut (bo liniowy) program wygeneruje plik wsadowy, który poleceniem pdflatex nazwaPliku przerobisz na plik pdf. Otrzymasz dokument, który ma naprawdę 1000 stron i każda jest inna. Teraz możesz go np. umieścić na swojej stronie internetowej, wysłać go pod jakiś podejrzany adres.
     Dlaczego format pdf, otwarty tekst? No bo tak mi wyszło. Załóżmy, że to będzie wyglądało bardzie podejrzanie. Prawdziwa przyczyna tkwi w tym, że chciałem sprawdzić pewną możliwość techniczną.
     Co mogą zrobić ewentualni szpiedzy? Zasadniczo dwie rzeczy: zignorować go, lub próbować sprawdzić jego znaczenie. Oba wybory nie wróżą niczego dobrego. Pierwsze: właśnie o to chodzi, by wszelkie służby "odpuściły sobie". Jeśli to nastąpi, bitwa została wygrana. Drugi pomysł też nie jest najlepszy, bo generalnie oznacza wykonywanie ogromnej ilości darmowej roboty. Brak efektów wcześniej, czy później zmusi wykonawców do przyjęcia wariantu pierwszego.
     Akurat ja bardzo źle przyłożyłem się do roboty, tekst wygląda naprawdę głupio. Jednak nie ma to większego znaczenia. Popatrz sobie na te tabele (tabe2.pdf). By nie zapychać sieci wygenerowałem tylko kilka stron. Jednak, jeśli dokument będzie liczył ich kilkaset, te cyfry mogą zawierać zakodowane naprawdę bardzo wiele informacji.
     Jeśli nadawca nie był idiotą, to na jej odczytanie nie ma szans. Co zatem szpiedzy mogą zrobić? Próbować dekodować kolejne pliki, śledzić nadawcę, próbować dopasowywać do siebie fakty i daty. I oczywiście nic to nie da. Pliki te bowiem nie zawierają żadnej innej informacji oprócz liczb startowych generatora ciągu pseudolosowego.
     Możesz być jeszcze bardziej złośliwy: popatrz na plik tabel.gif. Zapewne wydrukowałem moją tabelę i zeskanowałem na jakimś kiepskim urządzeniu. Nic takiego, szkoda drukarki i papieru. Po prostu zapisałem plik pdf jako gif w kiepskiej rozdzielczości, przedtem obróciłem go o 0.7 stopnia. No i teraz aby odczytać co jest w tabelach potrzeba dobrego programu ocr. Moje kiepskie się połamały. Można oczywiście pokiepścić jeszcze bardziej obraz, tak, że nie odczyta go nawet człowiek, bo nic tu do czytania nie ma. Jednak z punktu widzenia szpiega nie jest to oczywiste: odbiorca może odtwarzać niewyraźne napisy, bo spodziewa się co tam ma być. Jest to działanie nadmiaru informacji.
     Testowałem kilkakrotnie przeróżne programy ocr. Są ogromnie zasobo-żerne. Na takich właśnie obrazkach zatykają się, czasami na długie minuty. Jedno jest pewne: nawet niesamowicie dobry program jest w stanie odtworzyć taki tekst tylko z pewnym prawdopodobieńtwem. Mocno przeszkadza właśnie to niewielkie skręcenie, złośliwie dobrana paleta.
     W latach pięćdziesiątych Amerykanie wpadli na pomysł zrzucania na terytorium państw komunistycznych ulotek z balonów. Jednym z celów tej akcji było zatrudnienie służb bezpieczeństwa do zbierania papierów. Biorąc pod uwagę minimalne koszty przedsięwzięcia, był to sukces. Koszty wyprodukowania na komputerze dokumentów są jeszcze mniejsze. Koszt wysłania wynosi zero w przypadku stałego łącza. Jeden taki plik potrafi spokojnie zatkać na wiele godzin spore centrum obliczeniowe: prawdopodobnie wynikiem będą tylko domniemania, że nie zawiera on jakiejkolwiek interesującej treści.
     Wniosek jest taki: trzeba by spaść na głowę, by czytać wszystko "jak leci". Rozsądne wydaje się najwyżej obserwowanie wybranych osób, lub serwisów.
     Nie namawiam nikogo do zaśmiecania Internetu wyprodukowanymi tym programem plikami. Powód jest prosty: jest wystarczająco zapchany. Wystarczy otworzyć kilka stron, by przekonać się, że zamiast liter mamy bit-mapy, animowane gif-y, i kiepsko wyglądające dokumenty, gdy już człowiek dobierze się do jakiś katalogów. 50 MB plików pdf, które tak naprawdę, są bitmapami, to nie rzadkość.
     Przekopanie zasobów Sunsite (jakieś 300 GB) czy innych oficjalnych serwerów to już wyczyn sam sobie. Liczbę czynnych stron internetowych szacuje się na jakieś 80 milionów. Zapewne większość z nich liczy tylko kilka MB, ale ich objętość ciągle rośnie: już dziś oferuje się po 25 MB na stronę komercyjną.
     Tak więc zapewne śledzenie zasobów Internetu jest możliwe tylko w jeden sposób: kiedy ktoś trafi na stronę, która go wkurzy i sprawę odda do prokuratora. Z tą współczesną bestią może dać sobie radę tylko równie potężna siła, międzynarodowa społeczność internautów.
     Co do programu natomiast, to może się nadać w kilku przypadkach: gdy ktoś ci grzebie w komputerze, a ty nie możesz mu uniemożliwić dostępu np. z towarzyskich przyczyn (bo to kochanka). Rada jest taka: ogromna ilość katalogów, w nich jeszcze większa dokumentów. Gdzieś w tym śmieciowisku są twoje cenne dane, tylko ty wiesz gdzie. Przy odrobinie sprytu możesz ukryć je "pomiędzy kartkami". Inne zastosowania możesz sam wymyślić poczynając od uwagi, że gdy ktoś chce zostać zawalony papierami, to dostanie, czego chce.
     Program działa w następujący sposób: dane tekstowe są wczytywane z dwu plików tekstowych. Te pliki są kolumną wyrazów. Nie mogą zawierać spacji, bo program źle policzy liczbę wyrazów i otrzymasz komunikat o błędzie. Pliki te mogą zostać oczywiście przepisane na nowo, nie powinny zawierać więcej jak 1000 pozycji, jeśli nie zmodyfikujesz samego programu.
     Po wczytaniu plików program losowo wybiera z nich pary słów i umieszcza w tabelach. Pozostałe pozycje są generowane przez systemowy generator pseudolosowy.
     Program dołączylem w wersji źródlowej, trzeba go skompilować. Jest to wyjątkowo proste ponieważ nie ma potrzeby linkowania składników. Wystarczy w linii poleceń napisać "g++ pisar.cpp -o pisar.out". O ile nasz system zawiera wszystkie biblioteki, nie powinno być problemów.
     Program wymaga podania kilku danych. Są to nazwy (i ścieżki dostępu) do plików wejściowych, liczba linijek na stronie, liczba wygenerowanych stron, nazwa pliku wyjściowego.

Uwaga! Wszystkie pliki o których pisze Autor, znajdują się w jednym zip-ie - tu


na górę   spis treści