Kancermeister Kancermeister
275
BLOG

Szyfruj, szyfruj!

Kancermeister Kancermeister Technologie Obserwuj notkę 12
Tekst dla paranoików

Wprowadzenie

Z naszego punktu widzenia szyfrowanie można podzielić na symetryczne i asymetryczne.

Szyfrowanie symetryczne polega na tym, że do zaszyfrowania i odszyfrowania używa się tego samego klucza. Aby więc odszyfrować, obie osoby muszą mieć do niego dostęp, co oznacza, że muszą go sobie przekazać w jakiś bezpieczny sposób. Jest to znaczna wada. Bezpieczeństwo klucza zależy od algorytmu, długości klucza i częstości zmian. Gdy uzgodnienie klucza wymaga osobnego kontaktu, cała operacja się wydłuża. Główną zaletą jest szybkość szyfrowania.

Szyfrowanie asymetryczne polega na tym, że jednego klucza używa się do zaszyfrowania, a drugiego do rozszyfrowania. Główną wadą jest szybkość szyfrowania: trwa znacznie dłużej, co jest szczególnie odczuwane przy dużych partiach materiału. Drugą wadą jest (hipotetyczna na razie) możliwość odczytu przez komputery kwantowe. Których na razie nie ma i nic nie wskazuje na to, że kiedykolwiek zaistnieją… poza wrzaskiem oszołomów… ale trzeba się liczyć z taką możliwością[1].

Przy szyfrowaniu asymetrycznym używamy dwóch kluczy: prywatnego i publicznego. Publiczny udostępniamy jak największej liczbie osób, a prywatny trzymamy w tajemnicy. Jeżeli ktoś chce do nas wysłać jakąś treść, szyfruje ją naszym kluczem publicznymi, a odczytać ją może tylko ten, kto posiada nasz klucz prywatny. To znaczy, tylko my. Odpowiedź wysyłamy, szyfrując ją jego kluczem publicznym. Prawda, że to wszystko upraszcza? Jeżeli nie jesteśmy pewni tajności naszego klucza prywatnego, wystarczy użyć specjalnego osobnego klucza do usunięcia z domeny publicznej naszego klucza publicznego i wgrać na jego miejsce nowy klucz, z nowo utworzonej pary kluczy.

Na tej zasadzie jest oparty system PGP (Pretty Good Privacy = Całkiem Dobra Prywatność), który polega na tym, że treść jest kompresowana algorytmem ZIP[2] i szyfrowana kluczem symetrycznym, generowanym każdorazowo od nowa. Następnie obliczana jest suma kontrolna[3] zaszyfrowanej zawartości, a do sumy jest dołączany wygenerowany klucz symetryczny. Z kolei podpis wraz z kluczem symetrycznym jest szyfrowany kluczem prywatnym osoby wysyłającej i ponownie, kluczem publicznym adresata. Tak utworzony ciąg znaków jest umieszczany w nagłówku wiadomości. Adresat, po otrzymaniu wiadomości, rozszyfrowuje nagłówek swoim kluczem prywatnym, a następnie używa klucza publicznego nadawcy, aby rozszyfrować go do reszty i w ten sposób potwierdzić, że wysyłającym jest właściwa osoba. Z kolei, po wyodrębnieniu sumy kontrolnej, używa jej do sprawdzenia, czy w wiadomości nie zostały dokonane zmiany. Następnie, wyodrębniony klucz symetryczny służy do rozszyfrowania właściwej wiadomości. Wszystko to jest oczywiście wykonywane automatycznie przez odpowiednie programy, certyfikowane przez duże firmy lub przez społeczność programistyczną, w wypadku OpenPGP.

Jak nietrudno zauważyć, bezpieczeństwo szyfrowania asymetrycznego zależy od jakości używanego klucza symetrycznego i weryfikacji klucza publicznego. O ile pierwszy problem łatwo rozwiązać przez odpowiednie modyfikacje, o tyle w drugim przypadku sprawa jest bardziej skomplikowana. Przynależność klucza publicznego można stwierdzić przez wygenerowanie jego sumy kontrolnej (tzw. odcisk palca), przez potwierdzenie innych użytkowników lub potwierdzenie urzędu certyfikacji. Poprawność odcisku palca można stwierdzić jedynie wtedy, gdy został on przekazany w sposób możliwy do zweryfikowania, co cofa nas do problemów z szyfrowaniem symetrycznym. Weryfikacja przez innych użytkowników to tzw. sieć zaufania. Problem sieci zaufania jest taki, że osoby poświadczające powinny mieć chęć robienia tego, a ponieważ zajmowałoby to zbyt wiele czasu (i łącza), sieci te na ogół słabo funkcjonują. Urzędy certyfikacji oferują swoje klucze do podpisywania wskazanych kluczy, ale sama procedura weryfikacji najczęściej odstręcza osoby chcące zachować anonimowość.

Wszystko to razem powoduje, że w końcu na placu boju pozostaje szyfrowanie symetryczne i powinniśmy raczej zastanowić się nad przekazywaniem klucza. Ponieważ używanie do tego systemu kluczy asymetrycznych jest uciążliwe lub pozbawia nas prywatności, najlepiej używać umówionego algorytmu, czyli zestawu czynności, które umożliwiają przekazywanie takiego klucza.

Przekazywanie klucza symetrycznego.

Temat częściowo omówiłem w komentarzu, który będzie podstawą do rozważań:

 Możecie korespondencję szyfrować symetrycznie, a hasła (przynajmniej 64 znakowe) przekazywać w częściach różnymi kanałami: Tutanota, ProtonMail itp.

 Przesyłane hasła też szyfrować odrębnymi, wcześniej ustalonymi i zmiennymi, np. data na unix, z tego mantysa dziesiętna - to tylko przykład!

 Plus słowa w wierszach na stronach umówionych książek. Np. umawiacie się co do numeru wiersza i słowa, a potem tylko podajecie nr strony. Jeśli to Biblia (może być w każdym domu), nie większy niż dwie cyfry, bo więcej zawęzi poszukiwania łamaczy kodów. A do podanych dopisujecie sobie wcześniej umówioną cyfrę.

Ad 1.

Obecnie uważa się, że dopiero AES-256 zapewnia ochronę przed rozkładem kwantowym. Co to oznacza? Komputer kwantowy potrzebowałby na rozkodowanie tekstu zaszyfrowanego AES-256 czasu wynoszącego co najmniej 10 kwintylionów (10³⁰) lat[4]. Obecnie tego rodzaju szyfrowaniem dysponuje darmowy 7-zip, którego najnowsza wersja funkcjonuje w Windows i w Linux (przez Wine).

Na razie wymieniani są czterej dostawcy poczty internetowej, których systemy uniemożliwiają przekazanie komukolwiek treści wiadomości znajdujących się na ich serwerach, a to ze względu na pełne szyfrowanie. Są to (w kolejności alfabetycznej): Hushmail, Mailfence, ProtonMail i Tutanota. Każda z nich działa zgodnie z prawem innego państwa lecz na jego żądanie może co najwyżej udostępnić logi osób komunikujących się ze skrzynkami, wraz z ich adresami IP. Z tego względu, a także z powodu blokowania ich usług w niektórych krajach, większość z nich zachęca do korzystania z VPN lub Tor dla podniesienia bezpieczeństwa.

Ad 2 i 3.

Wprawdzie zawartość skrzynek pocztowych wymienianych dostawców jest niedostępna nawet dla nich samych, jednak w miarę postępu techniki należy się liczyć z możliwością ich deszyfracji. Dlatego też przekazywane w listach hasła nie powinny być jawne. Zamaskowanie tych haseł może być wykonane np. w taki sposób:

Kody jednorazowe: szyfrujesz hasło kodem jednorazowym, który wysłałeś wcześniej.

Sól: dodajesz ciągi znaków otrzymane w ustalony sposób i wg ustalonego sposobu. Powiedzmy, datę wysłania listu zamieniasz na ciąg cyfr systemu Unix (albo funkcją Excela, obliczającą liczbę dni pomiędzy dwoma datami, z których jedna jest dzisiejsza, a druga wcześniej umówiona); z kolei z otrzymanej liczby wyciągasz mantysę i dopisujesz ją do ciągu danych hasła. Albo wstawiasz cyfry mantysy co drugi znak… Co trzeci znak… Co pierwszy, a potem drugi, a potem co trzeci itd. albo od początku — wg tego, jak się wcześniej umówicie.

Tekst z książki, np. z Biblii. Jesteście umówieni, który to będzie wiersz od góry i jaki sposób wybierania znaków. Np. podajesz stronę, ale tylko dwie cyfry i literę. Litera oznacza umówiony kod[5]. Z wiersza na stronie możesz wybrać, od której litery zaczyna się hasło, a jak jest długi i co robić ze spacjami (łączyć czy wstawiać sól) to już się musicie wcześniej umówić.

Najlepiej używać różnych metod, wysyłać przez różnych dostawców, oczywiście na nazwy kont wygenerowane losowo. Są nawet odpowiednie generatory, np. AnyTextEditor, Thestoryshack, Vallheru. Wszystko to trzeba omawiać w treści zaszyfrowanej, stopniowo, partiami, albo po prostu podając kody do uprzednio przekazanych ściągawek, w których będą sposoby wykonywania zmian.

W końcu, jak już wspomniałem, jeżeli obawiasz się, że twoje algorytmy szyfrujące mogą wpaść w ręce wroga, postaw Linux na komputerze niepodłączonym do sieci. W tym celu ściągnij dystrybucję (na innym komputerze) i sprawdź jej sumę kontrolną wg instrukcji na stronie, z której ściągasz. Jeżeli się obawiasz instrukcji zaszytych w oprogramowaniu sprawdzającym[6], użyj kilku programów, najlepiej open source. Jeżeli kody są błędne w każdym przypadku[7], poszukaj innej dystrybucji. Jest ich ponad 600, mało prawdopodobne, żeby wszystkie zostały skażone.

Ta dystrybucja powinna być jak największa, bo tylko wtedy będziesz miał istotne programy bez potrzeby podłączania się do sieci.

Uruchamiasz niepodłączony do sieci komputer z przygotowanego pendrive i instalujesz dystrybucję. W trakcie wybierasz zajęcie całego dysku, co powoduje skasowanie jego dotychczasowej treści. Jeżeli chcesz się dodatkowo zabezpieczyć, możesz skuteczniej usunąć zawartość dysku twardego. Zrobisz poleceniem dd w ten sposób:

sudo dd if=/dev/urandom of=/dev/sda

Spowoduje to usunięcie wszystkich partycji dysku twardego i wypełnienie całej zawartości danymi losowymi. Trwa bardzo długo[8], ale potem dysk jest już nie do odczytania, a wszystkie dane poszły się gonić. No i oczywiście, jeśli tam były jakieś wirusy czy insze paskudztwa, to już ich nie ma. Jest też inne polecenie:

sudo dd if=/dev/zero of=/dev/sda bs=1M count=1

…które sczyści Ci dysk na zero. Aby go nie uruchamiaj na swoim komputerze, bo działa szybko, a potem nie ma co zbierać. Używa się go wtedy, gdy szlag trafił wszystko i nawet takie programy jak GParted odmawiają posłuszeństwa. Po użyciu tego polecenia wszystko wróci do normy. Znaczy, pustynnej normy.

Ok, więc masz już czysty, zainstalowany system, w którym będą Ci potrzebne rozmaite programy, więc je montujesz, wykorzystując zawartość z pendrajwu, na którym masz swoją dystrybucję.

Teraz możesz szyfrować dane i wysyłać je na ekran (albo na drukarkę) w postaci kodu łatwego do odczytania za pomocą kamery. Takim kodem jest np. kod QR. Jednak przesłanie za jego pomocą dłuższej treści może spowodować, że zdezaktualizuje się przed końcem kopiowania, a Ty już zapomnisz (skleroza nie boli), co właściwie zacząłeś te kilkadziesiąt lat wcześniej. Dlatego też używaj tego komputera raczej do tworzenia zaszyfrowanych haseł, które po przekształceniu w kod QR będziesz mógł sczytać z ekranu kamerką i odkodować w drugim komputerze, aby później przekazać współpracownikom.

Będziesz potrzebował QtQR kodowania i dekodowania. Poniżej poprzednie zdanie jako kod QR przy 6 pikselowym wymiarze i obsłudze błędów QuiteGood:

image

QtQR powinien znajdować się w Twojej dystrybucji. Przeczytaj też: Generating-QR-Codes-in-Linux.

__________

  1. Na razie algorytmy kwantowe dokonują szybkiego rozkładu bez wskazania poprawności. W anegdotce wygląda to tak: „Jaś: Basiu, umiem szybko liczyć. Basia: Dobrze Jasiu, policz, ile to jest 456818657×2876192481. Jaś: 33. Basia: Ależ to błędny wynik! Jaś: Zgadza się, za to jaki szybki!
  2. Kompresja zmniejsza wielkość i utrudnia włamanie
  3. Suma kontrolna jest ciągiem liczbowym wyliczanym funkcją skrótu, z którego nie daje się odtworzyć treści. Aby potwierdzić tożsamość, nie trzeba porównywać całej treści, wystarczy porównać sumy kontrolne.
  4. AES-256 joins the quantum resistance
  5. Przykład kodu klawiaturowego: „A” oznacza znak „@”, czyli „2” i następną cyfrę, czyli trzy. I tak 34A to 3423, A34 to 2334, 3A4 to 3234.
  6. Przykład: w oprogramowaniu zaszyto kilka łańcuchów, których wykrycie w sumie kontrolnej powodowało komunikat poprawności bez względu na wyniki; można to zweryfikować, nakazując kontrolę tą samą sumą różnych plików tej samej długości — jeżeli komunikat za każdym razem potwierdza poprawność, coś jest na rzeczy. Jeżeli robią to absolutnie wszystkie programy weryfikujące, pożegnaj się z komputerami i uciekaj do Argentyny, aby żyć z indianami w interiorze. Może jeszcze zdążysz, zanim Cię złapią i wsadzą do wyżymaczki CIA, gdzie wszystko wyśpiewasz.
  7. Jeżeli wszystkie lustra wskazują na błąd, winny jest dostawca dystrybucji.
  8. Jeśli chcesz szybko rozwalić komputer, bo gliny już walą w drzwi, to urządzonko (USB Killer) po włożeniu do portu USB błyskiem usmaży Ci całą zawartość pudełka.

Gdybym był racjonalistą, mógłbym upierać się, że Wszechświat jest obiektem Boltzmana, nieuchronnie powstałym w odwiecznej próżni. Co jest łatwiejsze: być czarownikiem i wierzyć w Jedynego, czy być racjonalistą i wierzyć w samorództwo?

Nowości od blogera

Komentarze

Inne tematy w dziale Technologie