Laboratorium 5: Szyfrowanie

Wprowadzenie

Jednym z pierwszych pomysłów na zapewnienie prywatności w sieci, było wprowadzenie szyfrowania.

Szyfrowanie stosowane było od wieków aby zapewnić prywatność przesyłania informacji. Jeżeli wierzyć przekazom — Juliusz Cezar (I w PNE) używał stosunkowo prostego szyfru do kodowania informacji, które chciał ukryć.

Nie wchodząc w szczegóły, na przestrzeni wieków stosowano bardzo różne metody szyfrowania informacji, które zazwyczaj były bardzo uciążliwe: Potrzebny był sposób na przekazanie (w odpowiednio zabezpieczony sposób) książki szyfrów lub hasła stosowanego w matematycznym procesie szyfrowania/deszyfrowania informacji.

Rewolucyjnym sposobem szyfrowania okazały się metoda szyfrowania asymetrycznego. Jej główne zasady są następujące:

  • Szyfrowania i deszyfrowanie wymagają innych kluczy.
  • Do zaszyfrowania wiadomości potrzebny jest jawny klucz odbiorcy1.
  • Do odszyfrowania wiadomości potrzebny jest tajny klucz odbiorcy.

Metoda pozwala również podpisywać2 wiadomości.

  • Do podpisania wiadomości potrzebny jest tajny klucz nadawcy.
  • Do sprawdzenia podpisu wystarczy jawny klucz nadawcy.

Najpopularniejszym algorytmem szyfrowania asymetrycznego jest algorytm RSA zaproponowany przez Rona Rivesta, Adiego Shamira oraz Leonarda Adlemana. Nazwa algorytmu pochodzi od pierwszych liter nazwisk twórców.

Algorytm został opatentowany przez MIT (autorzy byli pracownikami tej uczelni), mógł być wykorzystywany w celach niekomercyjnych, ale oprogramowanie powstałe na jego podstawie nie mogło być eksportowane ze Stanów Zjednoczonych bez zgody rządu (podobnie jak różne rodzaje broni).

Spowodowało to bardzo silny ruch sprzeciwu, a ponieważ algorytm został opublikowany w czasopiśmie naukowym, bardzo wielu ludzi (w latach dziewięćdziesiątych) nosiło podkoszulki z jego wydrukiem (patrz rysunek 1).

Dodatkowe informacje na temat szyfrowania znaleźć można na stronach MIMUW.

Wady szyfrowania asymetrycznego

Podstawową wadą szyfrowani asymetrycznego są spore wymagani obliczeniowe. W praktyce nie można go wykorzystywać na potrzeby szybkiej transmisji danych. W związku z tym, w takich zastosowaniach (HTTPS, TLS) używa się go tylko do przesłania klucza do prostszego symetrycznego algorytmu szyfrowania transmisji.

Funkcja skrótu

Do „podpisywania” różnych rzeczy potrzebne jest przekształcenie, które przypisze danym coś w rodzaju sumy kontrolnej (jak dane się zmienią — suma kontrolna powinna być inna). Przekształcenie to zwane jest funkcją skrótu (po angielsku hash function). Funkcja taka konwertuje dane o dowolnej długości do danych o stałej długości. Dodatkowo, funkcja ta nie ma funkcji odwrotnej (na podstawie skrótu nie można odtworzyć danych wyjściowych. Co więcej jest tak skonstruowana, że bardzo trudno jest stworzyć dwa różne zestawy danych wejściowych o tej samej wartości funkcji skrótu.

Przez wiele lat uważano algorytm MD5 (stworzony przez jednego z twórców RSA) za dobrą funkcję skrótu, ale powstały algorytmy pozwalające stosunkowo prosto znaleźć znaleźć różne zestawy danych wejściowych posiadające tę samą wartość funkcji skrótu. Dziś używa się lepszych algorytmów (SHA-2, na przykład).

Cały czas jednak należy pamiętać, że jest tylko kwestią czasu „złamanie” każdej takiej funkcji.

Fragmet podkoszulki z wydrukiem algorytmu RSA
Fragmet podkoszulki z wydrukiem algorytmu RSA

Uświadomienie społeczeństwu, że istnieją nie tylko łatwe, ale też bardzo pewne metody szyfrowania rozpoczęło (w tamtych czasach) bardzo poważną dyskusję na temat prywatności komunikacji. NSA opracowała nawet specjalny układ scalony, który z jednej strony zapewniał prywatność komunikacji (ale tylko dla niewtajemniczonych) i nie zapewniał jej wobec agend rządowych. Układ nazywał się Clipper. Bardzo szybko został „rozpracowany”, kodowanie zostało złamane. Układ był podatny na ataki siłowe (czyli „zgadywanie” haseł).

Zamysłem twórców było instalowanie go w aparatach telefonicznych (aby zapewnić ochronę przed podsłuchem).

Dosyć szybko idea tego układu upadła.

Algorytm RSA

Idea algorytmu RSA opiera się na znalezieniu dwu bardzo dużych3 liczb pierwszych.

  1. Wybieramy losowo dwie duże liczby pierwsze \(p\)\(q\).
  2. Obliczamy ich iloczyn \(n=pq\).
  3. Obliczamy wartość funkcji Eulera dla \(n: \varphi(n) = (p-1)(q-1)\)
  4. Wybieramy liczbę \(e\quad 1<e<\varphi(n)\) względnie pierwszą4\(\varphi(n)\).
  5. Znajdujemy taką liczbę \(d\), że \(de \equiv 1\; (\mathrm{mod}\, \varphi(n))\)

Klucz publiczny to para liczb \((n,e)\), natomiast klucz prywatny to para liczb \((n, d)\).

Aby zaszyfrować wiadomość dzielimy ją na bloki \(m\) o wartości liczbowej5 nie większej niż \(n\). Każdy blok szyfrujemy według wzoru: \[c \equiv m^e\; (\mathrm{mod}\, n)\] Każdemu blokowi \(m\) odpowiada blok \(c\), który jest przesyłany do odbiorcy.

Odszyfrowanie bloku polega na wykonaniu operacji „odwrotnej”: \[m \equiv c^d\; (\mathrm{mod}\, n)\]

Podpisanie wiadomości polega na wyliczeniu funkcji skrótu dla wiadomości i zaszyfrowanie jej i dodaniu do przesyłanej wiadomości. Odbiorca odszyfrowuje wartość funkcji skrótu i porównuje ją z wyliczoną funkcją skrótu dla otrzymanej wiadomości.

Sam algorytm nie jest specjalnie ważny, zamieściłem go, by pokazać, że jest stosunkowo prosty. Jedyny kłopot to poradzenie sobie z operacjami arytmetycznymi (mnożenie, potęgowanie) wykonywanymi na bardzo dużych liczbach. Operacja modulo to najczęściej obcięcie nadmiarowych bitów wyniku (stąd klucze długości 1024, 2048,… — są to potęgi dwójki). Opracowano specjalne biblioteki matematyczne do wykonywania tych obliczeń.

PGP

PGP czyli Pretty Goog Privacy czyli „całkiem dobra prywatność” to narzędzie do szyfrowania poczty elektronicznej i zarządzania kluczami prywatywnymi i publicznymi, wykorzystujące algorytmy szyfrowania asymetrycznego.

Oprogramowanie opracowane przez Philipa Zimmermanna i dostępne początkowo na licencji otwartej, przekształcone później w biznes (co spowodowało powstanie równoważnego oprogramowania na licencjach otwartych).

Ponieważ eksport tego oprogramowania za granicę Stanów Zjednoczonych był nielegalny, wersja „europejska” powstałą na podstawie legalnie opublikowanej książki, legalnie wywiezionej ze Stanów Zjednoczonych z opublikowanym algorytmem. W którymś momencie Autor potwierdził „zgodność” europejskich algorytmów z wersją „oryginalną”.

Instalacja

Parę uwag o instalacji, pod koniec instrukcji.

Mój klucz publiczny PGP

Można go też pobrać jako plik.

Rozpowszechnianie kluczy publicznych

Najsłabszą stroną szyfrowania niesymetrycznego jest sposób zaufanego rozpowszechniania kluczy publicznych.

Co z tego, że ktoś otrzyma wiadomość podpisaną przeze „mnie” (Wojciecha Myszkę), znajdzie gdzieś w Internecie „mój” klucz publiczny i stwierdzi, że wszystko się zgadza, skoro nie ma pewności, że ten klucz rzeczywiście należy do mnie?

W połowie lat dziewięćdziesiątych (gdy na topie były warianty systemu PGP) ludzie, którzy chcieli używać szyfrowania do wymiany korespondencji między sobą, organizowali key signing parties. Były to spotkania w realu, na których można było z rąk właściciela uzyskać jego klucz publiczny i dopisać go sobie do „kółka” (ang. keyring, czyli może raczej breloczka). Na spotkaniach tych można również było uzyskać „autograf” wielu znajomych osób potwierdzający, że ten klucz publiczny należy do…. Zwiększało to zaufanie do klucza publicznego osób które widzą że właściciel klucza i osoby które go podpisały są w „zażyłych” stosunkach (internetowych), czyli, na przykład, często ze sobą dyskutują na forach publicznych. System ten został nazwany „Siecią zaufania” (Web of Trust).

Tak podpisany klucz wysyłany był na serwer kluczy PGP6.

S/MIME

Gdy Internet zaczął się rozrastać sposób uwierzytelniania kluczy publicznych przyjęty dla PGP przestał wystarczać. Rozpoczęto tworzenie specjalnej infrastruktury zaufanych dostawców certyfikatów (czy może raczej dostawców podpisów certyfikatów). Nazywa się to PKI — Public Key Infrastructure.

S/MIME jest mechanizmem zbliżonym do PGP, ale opartym nie o „Web of Trust” tylko infrastrukturę PKI.

PKI

PKI czyli Public Key Infrastructure to cały system umożliwiający podpisywanie certyfikatów i sprawdzanie poprawności łańcucha podpisów.

W przypadku poczty elektronicznej chodzi o to, żeby można był zaufać programowi pocztowemu mówiącemu, że list został prawidłowo podpisany przez Wojciecha Myszkę. W związku z tym Wojciech Myszka ubiegając się odpowiedni certyfikat musi pojawić się osobiście w odpowiednim urzędzie wraz z dowodem osobistym (i wygenerowanym osobiście kluczem publicznym), gdzie jego klucz zostanie zarejestrowany, podpisany przez ten urząd i zwrócony do używania.

Każdy odbiorca listu podpisanego tak uzyskanym certyfikatem może w każdej chwili sprawdzić kto go wydał. Oprogramowanie (i PKI) dba o to, żeby być pewnym, że wszystkie podpisy są poprawne.

W przypadku mojego programu pocztowego wygląda to jakoś tak jak przedstawiłem na rysunkach 24. Na wykazie listów elektronicznych, listy podpisane zaznaczone są kłódką (rys. 2). Po otwarciu listu (rys 3) pojawia się informacja, że jest on podpisany (signed) oraz dodatkowe informacje, że podpis jest poprawny i do kogo należy. Porównując nadawcę z tą informacją mam pewność, że wszystko jest OK. Mogę też sprawdzić szczegóły na temat wystawcy podpisu — rysunek 4.

Podpisany e-mail w programie pocztowym
Podpisany e-mail w programie pocztowym
Nagłówek listu podpisanego S/MIME
Nagłówek listu podpisanego S/MIME
„Ścieżka“ podpisów: Na dole Digicert, wyżej Terena
„Ścieżka“ podpisów: Na dole Digicert, wyżej Terena

Najważniejsze jest sprawdzenie całej ścieżki zaczynającej się od podpisu listu pojedynczego nadwcy, który kończy się podpisem dobrze znanego urzędu certyfikacyjnego: list podpisał Pan Xiński, jego podpis podpisała Terena, podpis Tereny jest podpisany przez Digicert, który jest jedną z kilku firm znajdującą się na początku łąńcucha certyfikacyjnego.

Praktycznie nikt nie wydaje darmowych osobistych certyfikatów (potwierdzających, że to Xinński wysłał list. Jest tylko jedna firma rozpowszechniająca darmowe certyfikaty związane z adresem e-mail (bo to się technicznie daje potwierdzić: na podany adres e-mail wysyłany jest kod, który trzeba przedstawić aby potwierdzić że jesteśmy właścicielami konta e-mail podczas zgłaszania prośby o certyfikat.

W przypadku stron WWW sprawa jest chyba szerzej znana, ale warto zwrócić uwagę na dwie różne sytuacje. Tu również certyfikat może potwierdzać, że połączyliśmy się ze stroną określonej instytucji (rys. 5) albo z określoną stroną (rys. 6). Te pierwsze są droższe. Te drugie można otrzymać nawet za darmo.

Certyfikat przyznany instytucji
Certyfikat przyznany instytucji
Certyfikat przyznany „adresowi strony”
Certyfikat przyznany „adresowi strony”

Aby doprowadzić do sytuacji, w której wszystkie (znakomita większość?) stron WWW korzystała z połączeń szyfrowanych powstałą inicjatywa (sponsorowane, między innymi, przez EFF, Mozillę, Internet Society).

Wszystkie instytucje wystawiające certyfikaty główne zrzeszone są w konsorcjum CA/Browser Forum dbającym o przestrzeganie dosyć restrykcyjnych zasad dotyczących infrastruktury, procedur bezpieczeństwa i procedur przyznawania certyfikatów.

Uwagi ogólne

Powszechna dostępność silnego szyfrowania stwarza problem wszystkim służbom specjalnym wszystkich rządów. Daje bowiem wszystkim (nie wyłączając „złych ludzi”) narzędzie utrudniające inwigilację. Co jakiś czas pojawiają się (ze strony rządów i służb specjalnych) inicjatywy zmierzające do ograniczenia możliwości korzystania z szyfrowanego kanału przesyłania informacji. Wymienię tu niektóre:

  • Clipper (w czasach gdy pojawiło się PGP) rząd amerykański forsował instalowanie specjalnego układu szyfrującego, który miał zapewnić prywatność wobec sąsiadów, ale już nie służb7.
  • Blackberry firma ta, oferowała interesujące telefony używane (między innymi) przez biznesmenów. Głównym powodem ich popularności było dostarczanie narzędzi do szyfrowanej komunikacji. Komunikacja ta przechodziła przez serwery firm Blackberry (w Kanadzie) Rządy kilku państw (Rosja, Indie, Arabia Saudyjska,… o ile dobrze pamiętam) zabroniły korzystania z tych telefonów, chyba, że firma spowoduje, że „lokalna” komunikacja będzie przechodziła przez serwery ulokowane na ich terenie, a więc pod ich jurysdykcją.
  • NIST Narodowy Instytut Standaryzacji i Technologii to amerykańska agenda rządowa spełniająca rolę Głównego Urzędu Miar. Jednym z jej zadań jest podpowiadanie do stosowania standardów technologicznych.Wybuchł skandal gdy okazało się, że po ogłoszeniu publicznego konkursu na algorytm szyfrowania (i opublikowaniu jego kodu, tak, żeby każdy kto zechce i potrafi mógł ocenić jego poprawność) zaimplementowano uproszczoną jego wersję istotnie osłabiającą szyfrowanie. Algorytm jednak był (i ciągle jest) stosowany przez wiele firm dostarczających sprzęt używany do komunikacji sieciowej.
  • EARN IT Na naszych oczach rozgrywa się batalia związana ze zgłoszonym do procedowania przez amerykańskich prawodawców aktem EARN IT8. Pretekstem do wprowadzenia tego prawa jest uniemożliwienie rozpowszechniania pornografii dziecięcej. Jest on tak sformułowany iż można traktować wszystkich, którzy zapewniają bezpieczny kanał komunikacji jako „działających lekkomyślnie”. Warto przysłuchiwać się tej dyskusji.

Zadania do wykonania

  1. Zainstalować oprogramowanie OpenPGP.
    • dla Windows może to być Gpg4win,
    • dla linuksa gpg (będące standardowym pakietem we wszystkich dystrybucjach)
  2. Wygenerować klucze, trzeba będzie podać imię i nazwisko oraz adres e-mail.
  3. Stworzyć plik tekstowy, podpisać go, sprawdzić podpis, a następnie zmodyfikować9 go i sprawdzić podpis. System powinien pokazać, że plik został zmieniony. Pewne dodatkowe wyjaśnienia na osobnej stronie.
  4. Wymienić się (z innymi uczestni(cz)kami kursu kluczami publicznymi i wymienić podpisanymi plikami. Sprawdzić ich autentyczność. Możecie też Państwo przesłać klucze publiczne do mnie z prośbą o ich podpisanie. Podpiszę i odeślę10.
  5. Zaszyfrować plik i przesłać do wybranego odbiorcy (z grupy). Rozszyfrować plik otrzymany od kolegi/koleżanki.
  6. Spróbować skorzystać z jakiegoś narzędzia do wysyłania poczty z użyciem PGP. Listy dostępnych narzędzi znaleźć można tu:

Kolejne uwagi techniczne…

…które być może nie są oczywiste.

  • Przed podpisaniem/zaszyfrowaniem plik jest kompresowany. Kompresja (bezstratna) likwiduje nadmiarową entropię z wiadomości utrudniając wykonywanie prostych analiz statystycznych.
  • Z powyższego względu podpisany plik jest plikiem binarnym.
  • Stwarza to pewne problemy podczas rozsyłania poczty elektronicznej.
  • Można więc podpisać plik tak, aby nadawał się do wysłania pocztą elektroniczną (ale tu trzeba być bardzo ostrożnym, niektóre programy pocztowe przerabiają tekst na HTML i nawet jeżeli wygląda on identycznie u odbiorcy — tekstowo to zupełni inna zawartość).Podpisany plik (w formacie tekstowym) wyglądać może tak jak na rysunku 7.
  • W przypadku podpisanej poczty jest ona wysyłana w taki sposób, żeby klient poczty nie rozumiejący szyfrowania mógł również list odczytać. Gdy list jest zaszyfrowany, odczytanie go bez oprogramowania rozumiejącego szyfrowanie będzie to niemożliwe.
    Podpisany plik tekstowy
    Podpisany plik tekstowy

Szyfrowana poczta

Prawdę mówiąc stosunkowo łatwo (i szybko) można dodać szyfrowanie poczty do programu thunderbird. Podstawowa instrukcja jest na stronach Mozilli. Sugeruje ona użycie dodatku Enigmail. Stara (ale chyba ciągle aktualna) instrukcja instalacji niezbędnego oprogramowania jest też na stronach Sekuraka.

Instrukcja w postaci jednego pliku…

…jest również dostępna.


  1. Nie ma więc potrzeby tworzenia specjalnego kanału na przesłanie jakiegoś tajnego klucza.
  2. Wiadomość podpisana, to taka wiadomość co do której można mieć pewność, że nie została zmodyfikowana podczas transmisji oraz (w określonych warunkach) pewność, że została wysłana przez tego, kto jest wpisany jako jej nadawca.
  3. Trudno powiedzieć co to znaczy „bardzo duża” liczba. W zapisie binarnym liczba o długości 768 bitów (to znaczy rzędu \(2^768\), czyli nieco więcej niż 230 cyfr dziesiętnych) nie jest już uważana za liczbę bardzo dużą. Udało się złamać klucz o takiej długości. Klucze o długości większej niż 1024 są (na razie) uważane za bezpieczne.
  4. Czyli taką, że jedynym wspólnym dzielnikiem obu liczb jest 1.
  5. Wiadomość traktowana jest jako ciąg bitów, któremu można przypisać wartość liczbową/
  6. Kilka takich serwerów ciągle działa i można tam znaleźć mój klucz publiczny pochodzący z sierpnia 1995 roku… Inna rzecz, że z powodu zmian oprogramowania mam ograniczone możliwości skorzystania z klucza prywatnego stworzonego gdzieś w sierpniu 1995 roku.
  7. Ponieważ oferował słabszą wersję szyfrowania, mogła być ona złamana również przez innych „złych ludzi”.
  8. Tłumaczy się to na Eliminating Abusive and Rampant Neglect of Interactive Technologies (EARN IT).
  9. Na przykład dodać lub usunąć jedną spację.
  10. Niekoniecznie jest to najlepsza metoda — bo ktoś się może podszyć, ale w warunkach odosobnienia… Chyba, że je zlikwidują, to zrobimy to na zajęciach laboratoryjnych.