Witam w pierwszym wpisie rozszerzającym serię „Internetowa inwigilacja”! Dosłownie wczoraj zamknąłem jej główną część, poświęconą rzeczom codziennym, a teraz czas na więcej niuansów. Dzisiaj przystępne wprowadzenie do HTTPS.
W tej serii często korzystałem z analogii pocztowej:
- Nasza przeglądarka – zaufana obsługa na najbliższej poczcie.
- Cudze serwery – potencjalni partnerzy korespondencyjni.
- Przesyłane informacje, strony, obrazki itp. – listy i paczki.
Do tej pory potencjalnym szpiegiem były strony, które odwiedzamy. Nasi partnerzy korespondencyjni.
Mogły odczytywać informacje, którymi się przedstawialiśmy, a także podrzucać nam podsłuchy (skrypty śledzące). Zapisywać informacje o nas, analizować je i na tej podstawie budować nasze wirtualne teczki.
Zakładaliśmy w każdym razie, iż listy trafiają tylko do zamierzonych odbiorców i to oni wbijają nam nóż w plecy. Adwersarzem były głównie firmy kontrolujące – całkowicie albo częściowo – odwiedzane przez nas strony.
Tym razem spojrzymy na przypadek wścibskich oczu po drodze. Między nami a adresatami (którym tym razem ufamy).
Wbrew obiegowym opiniom nie muszą to być wcale hakerzy, stwory żyjące w cieniu. Wielkie firmy telekomunikacyjne też mają czasem apetyt na to, co wysyłamy w świat.
Uwaga: HTTPS jest tylko częścią układanki. Żeby ochronić prywatność przed firmami telekomunikacyjnymi, warto również zadbać o kwestie metadanych i DNS-a, które omówię w kolejnych wpisach.
Zarys problemu
Do tej pory korzystałem z uproszczonego schematu – pisząc, iż kiedy chcemy się skontaktować z jakąś stronką A, to po prostu „wysyłamy jej list”.
Do tej pory to serwer po prawej mógł być naszym wrogiem; tym razem mu ufamy, a wróg jest gdzieś pośrodku.
Źródło ikon: Flaticon. Laptop od vectorsmarket15, serwer od Smashicons, strzałka od Freepik. Aranżacja moja.
Kolejność działań była bardzo prosta:
- my przesyłamy jakiemuś serwerowi swoją „wizytówkę”, czyli nagłówki HTTP (informacje o przeglądarce, języku) oraz prośbę o stronę,
- w zamian serwer prawdopodobnie odeśle nam stronę internetową, o którą prosiliśmy.
Ale to wersja mocno uproszczona; w internecie nie ma czegoś takiego jak wysyłanie „od drzwi do drzwi”. To nie jest przerzucanie papierowego samolocika na posesję sąsiada.
Po drodze jest wiele punktów przepakowych (podobnie zresztą jak w przypadku tradycyjnej poczty). Każdy z nich może być obsadzony wścibskimi osobami gotowymi zajrzeć do naszej korespondencji.
Mogą być to właściciele podstawionego hotspota, z którym się połączyliśmy w centrum handlowym. W końcu miał nazwę jak to centrum, prawda? Tyle iż każdy może nazwać swojego hotspota, jak mu się żywnie podoba.
Może to być również firma telekomunikacyjna, od której mamy nasz domowy internet. W Europie nieco hamują ich przepisy, ale w takim USA swobodnie zbierają dane do celów reklamowych. Albo sprzedają je ubezpieczycielom, żeby mogli zaniżyć naszą ocenę.
Niezależnie od tego, kim jest potencjalny wścibinos, mamy problem. Chcemy uchronić się przed jego wzrokiem, żeby wiedział o nas jak najmniej.
HTTPS
Po czym go poznać
Co się dzieje w świecie rzeczywistym, kiedy wysyłamy nasz list w jakiejś typowej kopercie, zamkniętej byle jak i bez żadnych zabezpieczeń?
Odpowiedź: ktoś może po prostu rozerwać kopertę, przeczytać list, zamknąć go w nowej kopercie i przesłać dalej. Nie zostawiając żadnych śladów, które by ujawniły naszemu adresatowi, iż coś jest nie tak.
W świecie wirtualnym takie tradycyjne listy, łatwe do podejrzenia, wysyłamy w momencie odwiedzania stron zaczynających się od http://.
Jako internauci możemy je poznać po tym, iż przy ich adresie jest widoczna ikona przekreślonej kłódki (Firefox) albo słowne ostrzeżenie (Chrome i pokrewne).
Niektóre przeglądarki chowają pełen adres strony i pokazują tylko jego skróconą wersję. Ale po kliknięciu w pasek z adresem wyświetli Wam się całość, w tym informacja o http(-s).
Takie coś widzicie pewnie stosunkowo rzadko, częściej kłódka jest zamknięta. Z czego to wynika? Ano z tego, iż w tej chwili bardzo powszechny jest HTTPS. Odpowiednik wysyłania zaplombowanych listów albo paczek zamkniętych w sejfach.
Kiedy przeglądarka prosi o strony internetowe i je odbiera, cała wymiana często jest szyfrowana. Niektórych może ten fakt zaskoczy, zaś inni co najwyżej ziewną.
Czyli strony zaczynające się od http:// nie zapewniają szyfrowania. Te na https:// zapewniają. Czy to znaczy, iż te pierwsze mają wobec nas złe intencje?
Niekoniecznie! Widziałem przypadki, kiedy właściciel strony po prostu nie wiedział, po co i w jaki sposób przejść na HTTPS. Albo firma zapewniająca mu hosting nie dała takiej możliwości.
Czasem podchodzą do tego na zasadzie „niech patrzą, ja i moi użytkownicy nie mamy nic do ukrycia”. Uważając, iż skoro ich stronę użytkownicy mogą wyłącznie czytać, nie zostawiając tam żadnych informacji, to nie ma czego chronić.
Tym niemniej w dyskusjach doradzają, żeby HTTPS włączyć. choćby na najprostszych stronach. Korzyści mogą być całkiem realne, a pracy niekoniecznie dużo. W przypadku mojego bloga, hostowanego przez Githuba, była to po prostu kwestia kliknięcia jednego ustawienia.
Zapamiętajmy z tego, iż HTTP jest dla naszej prywatności gorszy, HTTPS lepszy. Ten drugi jest już bardzo powszechny. Ale czym adekwatnie jest?
Jak działa za kulisami
Przyda nam się parę faktów na ten temat, więc przedstawiam analogię; dość nietypową, bo bez stereotypowych Alice, Boba i oficjalnej terminologii. Jakoś nie umiałem się w nią wczuć.
Będzie inna, z kłódkami i pudełkami, która mi lepiej „kliknęła”.
Uprzedzam, iż analogia jest luźna, a ja jestem hobbystą. Uważam ją za dobrą abstrakcję na potrzeby moich kilku wpisów, ale nie uczcie się z tego do egzaminów :wink:
Wyobraźmy sobie, iż chcemy z kimś popisać. I nie chcemy, żeby do wysyłanych rzeczy dobrał się ktoś niepowołany.
Koperta odpada, bo ktoś może po prostu ją rozerwać. Nie; to musi być coś trwałego.
Rozwiązanie: wysyłajmy sobie wszystko w pancernych skrzynkach zamykanych na kłódki. Załóżmy, iż prawie niezniszczalnych. W naszym świecie każdy ma sporo takich w domu.
Kiedy już coś się znajdzie w takim pudle, to jest chronione przed wzrokiem podglądaczy. Zamknięcie czegoś w nim to zaszyfrowanie tej rzeczy.
Tylko iż musimy być w stanie otworzyć pudło od naszych adresatów, a oni – pudła od nas. Każdy musi mieć kluczyk pasujący do kłódki na pudełku, które otrzyma.
Pierwsza myśl – wymieńmy się kopiami kluczyków. Pogłówkujmy nad sposobami, w jakie by je przekazać:
-
Wysłać je sobie zwykłymi listami?
To nie zadziała; pamiętajmy, iż po drodze jest pełno złoczyńców.
Ktoś na pewno by przechwycił kluczyk, wykonał kopię i potem swobodnie otwierał nasze pudła. -
Spotkać się w cztery oczy i przekazać sobie kopie kluczyków przed rozpoczęciem korespondencji?
Jasne, to realna możliwość. Ale nie pasuje do realiów internetu.
Tutaj często kontaktujemy się ze stronami wcześniej obcymi. Nikt nie będzie poświęcał czasu w ustalenie z nami osobnego kanału komunikacji.
Sytuacja wydaje się beznadziejna. Chcemy przekazać sobie kluczyki niebezpiecznym kanałem, na podsłuchu. Innego nie mamy. A gdy tylko spróbujemy to zrobić, to je przejmą.
A może… wcale nie musimy przekazywać sobie kluczyków?
Na tym polega kryptografia asymetryczna, która przychodzi na ratunek. Wymieniamy się rzeczami, które będą bezużyteczne dla podsłuchiwacza. A nam pozwolą rozpocząć bezpieczną komunikację. Kłódkami (publicznymi), a nie kluczykami (prywatnymi).
Zobaczmy krok po kroku, jak by mogła wyglądać wymiana w takich warunkach.
Krok pierwszy: inicjujemy rozmowę. Wysyłamy pierwszą wiadomość, w zwykłej kruchej kopercie. To client hello – „powitanie”. Krótkie, szablonowe zaproszenie do wymiany kłódek. Przy okazji się chwalimy, na ile mocne są te nasze.
Krok drugi! jeżeli rozmówca jest tym zainteresowany, to odsyła nam swoją kłódkę. Otwartą.
Tutaj analogia lekko się rozmija z rzeczywistością, więc przyda się wyjaśnienie.
W świecie komputerów można łatwo i gwałtownie tworzyć idealną kopię czegoś, ani trochę nie rozumiejąc tej rzeczy. Po prostu tworzy się gdzieś identyczny blok zer i jedynek.
Dlatego w świecie wirtualnym wystarczy otrzymać jedną „kłódkę” raz, a nigdy nam jej nie braknie.
Z kolei w świecie rzeczywistym byłaby raczej trudna do skopiowania. Dlatego wyobraźmy sobie na przykład, iż na początku wysyłamy sobie tych kłódek wiele – tyle, iż zawsze wystarczy na potrzeby całej późniejszej korespondencji.
Czas na krok trzeci.
Skoro już mamy kłódkę, to możemy coś zamknąć! Zatem wkładamy do pancernego pudła swoją otwartą kłódkę (albo wiele identycznych). Zatrzaskujemy na drzwiczkach kłódkę otrzymaną od naszego rozmówcy – od dzisiaj tylko on może się tam dostać, otwierając ją swoim kluczem. I wysyłamy.
W ten sposób każda ze stron konwersacji kończy ze swoim kluczykiem, swoją kłódką/kłódkami oraz cudzą kłódką/kłódkami.
Od tej pory możemy wysyłać sobie zamknięte pudła (pamiętając, żeby zamykać je kłódką od drugiej osoby, a nie własną).
Dla wzrokowców zrobiłem schemat naszej czteroetapowej wymiany:
Kłódka wysyłana w trzecim kroku oczywiście też jest zamknięta w szczelnym pudle, jak to z kroku ostatniego. Przezroczystość dałem tylko dla czytelności.
Cała ogólna metoda szyfrowanej komunikacji – „najpierw robimy wymianę kłódek, a potem przesyłamy sobie zamknięte rzeczy” – nosi nazwę TLS (Transport Layer Security). A kiedy używamy tego do komunikacji w internecie, to już mamy HTTPS. S na końcu od Secure.
Zaufane podmioty zewnętrzne
OK, czyli przy pierwszym kontakcie wymieniamy się otwartymi kłódkami. Potem przesyłamy wszystko między sobą w niezniszczalnych pudełkach zamkniętych na te kłódki. Jesteśmy chronieni przed osobami, które byłyby w stanie zerkać do naszej przesyłki.
W tej metodzie jest jednak pewna luka. Mianowicie: często przed pierwszym kontaktem mało wiemy o swoim adresacie.
Nie wiemy na przykład, jakiej będzie używał kłódki.
Gdyby jakiś złoczyńca stanął na drodze korespondencji, to mógłby przechwycić otwartą kłódkę z drugiego kroku i wysłać nam zamiast niej swoją, kupioną na promce w markecie. A kiedy ufnie zaczęlibyśmy zamykać na nią pudła, to mógłby odczytywać kolejne wiadomości. Ma w końcu klucz do swojej kłódki.
Żeby temu zaradzić, przydałby się sposób na weryfikację partnerów korespondencyjnych. Kiedy piszemy do firmy X i otrzymujemy od nich otwartą kłódkę, to chcemy mieć gwarancję: „tak, to oficjalna kłódka firmy X”. A nie cudza.
W tym celu powstały instytucje certyfikujące – swego rodzaju niezależni producenci kłódek. Świadczą dwa rodzaje usług:
-
Właścicielom stron oferują na zamówienie kłódki z unikalnymi wzorami.
Na każdej ze swoich kłódek oznaczają w jakiś sposób, dla jakiej strony ją wykonali. Możemy sobie wyobrazić, iż na przykład wytłaczają na metalu charakterystyczny wzorek. Praktycznie niemożliwy do podrobienia. Do tego co pewien czas zmieniają ten wzór, dzięki czemu ma on termin ważności.
-
Zwykli użytkownicy mogą im wysyłać zdjęcie wzoru z kłódki; odpisują wtedy, dla kogo wykonali tę kłódkę.
Obecnie często stosuje się nieco inną metodę. Ale to opiszę w kolejnym wpisie.
Jak to nas chroni w praktyce? Załóżmy, iż podszywacz przechwycił pierwszą otwartą kłódkę, od piszącej z nami strony, i wysłał nam zamiast tego swoją.
Ale pracownicy naszej poczty (czyli, przypominam, przeglądarka) robią zdjęcie unikalnego wzoru na kłódce i wysyłają do certyfikatora.
„Napisaliśmy do stronki X, odesłali nam taką kłódkę. Czy to ich wzór?”.
A jeżeli wzór na kłódce nie należy do tego adresata, do którego powinien, to w przeglądarce wyskoczy wielkie, groźne ostrzeżenie.
Ostrzeżenie, iż kłódka jest, ale nie taka, jaka być powinna.
Tutaj akurat przykład kontrolowany z ssl.com. Brzmi groźnie, ale w praktyce przyczyna bywa prozaiczna. Nieprzedłużenie ważności w terminie.
Załóżmy ponadto, iż przed każdym wysłaniem otwartych kłódek firmy wypalają na nich nazwę konkretnego adresata, do jakiego je wysyłają.
Nie jest zatem możliwe zdobycie certyfikowanych otwartych kłódek stronki X przez udawanie zainteresowanego klienta, a potem użycie ich do podszywania się pod nią.
Złodupiec może co najwyżej posługiwać się własną kłódką z bazaru, z całkiem innym wzorem. Chyba iż przejąłby firmę X, a to mało realne.
W ten sposób rozwiązujemy problem podglądaczy i podszywaczy po drodze. Dzięki nowej wiedzy wiemy też, iż „włączenie HTTPS-a” w praktyce oznacza dla strony:
- nawiązanie współpracy z jakąś firmą od kłódek i wyrobienie sobie własnej;
- gotowość na szyfrowaną korespondencję z odwiedzającymi.
Może to być kwestią jednego kliknięcia, o ile podmiot zapewniający nam hosting idzie z duchem czasu. Dlatego, jeżeli masz swoją stronę – zwłaszcza wymagającą jakiegokolwiek logowania – zachęcam do przejścia na HTTPS.
Kwestia metadanych
HTTPS wspomagany przez certyfikaty wiele nam daje.
Osoby siedzące na drodze naszej korespondencji – czy to dzieciaki bawiące się w hakerów, czy też firmy telekomunikacyjne – nie odczytają szczegółów naszej korespondencji, wysyłanych haseł, treści czytanych przez nas stron.
Ba! Nie poznają nawet naszej podstawowej „wizytówki” omawianej przez wiele wpisów z serii „Internetowa inwigilacja”. Czyli nagłówków HTTP.
Niestety to nie wszystko. Istotnie, dzięki HTTPS-owi wróg nie pozna szczegółów takich jak pełen adres odwiedzanej strony, informacje o naszej przeglądarce, nasze pliki cookies pozwalające logować się na stronę.
Jest w stanie natomiast widzieć ogólną domenę, jaką odwiedzamy. jeżeli jest naszym operatorem telekomunikacyjnym – to nazwy wszystkich domen, na przestrzeni wielu miesięcy i lat. Potencjalnie wrażliwe dane.
W kolejnym wpisie zobaczymy, w jaki sposób można ukrywać również te informacje.