Czy twoje dane są bezpieczne?

Rozwój technologii spowodował, że wysłanie pliku czy wiadomości jest dziś możliwe dosłownie na dwa kliknięcia lub dwa dotknięcia ekranu dotykowego. Jesteśmy w stanie wysłać na drugi na koniec świata kawałek swojego wirtualnego życia w ciągu sekund. Jest to tak proste i powszechne, że nawet się nie zastanawiamy nad tym co się dalej dzieje z tymi wysłanymi danymi. Zatrzymajmy się na chwilę i zanim wciśniemy przycisk z napisem “wyślij”, zastanówmy się czy na pewno tylko my i adresaci mają wgląd do wysłanych przez nas danych.

Załóżmy, że chcę wysłać e-mail do jednego z moich znajomych. Prosta czynność, którą każdy z nas wykonuje wielokrotnie każdego dnia. Po prostu piszę kilka zdań, podaję adres, nadaję tytuł wiadomości i klikam “wyślij”. Zaraz po kliknięciu tego przycisku wiadomość zostaje zmieniona w zestaw pakietów i wysłana szyfrowanym łączem na serwer pocztowy, na którym mam swoją skrzynkę. Zaraz potem wiadomość zostaje skierowana również przez szyfrowane łącze do serwera odbiorcy a stamtąd może zostać odebrana przez adresata za pomocą jakiegoś klienta pocztowego. Zwróćmy uwagę, że w całym tym procesie mamy kilka szyfrowanych połączeń, dzięki którym nasze wiadomości mogą być bezpiecznie kopiowane między urządzeniami. Czyli jeśli kopiujemy wiadomość z serwera na serwer, lub z serwera na nasze urządzenie, wiemy, że w trakcie wędrówki pakietów przez Internet nasze dane są zabezpieczone. Ale co się dzieje z wiadomością przechowywaną na serwerze? Jest przecież tam również przechowywana na wypadek, gdybyśmy chcieli ją pobrać na kolejne urządzenie. A w tym przypadku jest przechowywana nawet na dwóch serwerach, tym ze skrzynką nadawcy i adresata. Czy wiadomość jest zaszyfrowana w trakcie spoczynku? Otóż, jeśli sami nie zadbaliśmy o to, wiadomość e-mail na serwerze jest przechowywana w postaci otwartego tekstu. Czyli kiedy tylko wiadomość pokona jakiś odcinek Internetu i trafi do jakiegoś punktu pośredniego, zostaje odszyfrowana i w takiej formie zapisana. Podobny proces zachodzi za każdym razem, kiedy wiadomość przechodzi do wielu odbiorców. Wtedy też jest zapisywana w postaci otwartego tekstu na każdym z serwerów konkretnych adresatów. Bardzo podobna sytuacja ma miejsce, jeśli piszemy z kimś za pomocą komunikatora internetowego. Wiele popularnych komunikatorów zapewnia szyfrowanie tylko w trakcie transmisji wiadomości, a nie w trakcie składowania danych.

Weźmy pod uwagę inny przykład. Złóżmy, że mam jakieś pliki w chmurze. Niezależnie od tego czy udostępniam je komuś znajomemu czy trzymam je tylko dla siebie, dość często pliki te również składowane są w postaci niezaszyfrowanej. Należy jednak tutaj nadmienić, że popularni dostawcy usługi przechowywania plików w chmurze dość często przekonują nas, że pliki są u nich przechowywane w postaci zaszyfrowanej. Jednakże tak samo często zapominają dodać, że klucz do odszyfrowania tych plików należy do nich. Czyli być może jeśli dojdzie do wykradzenia jakichś danych z ich serwerów, nikt z hakerów nie odczyta naszych plików, ale administratorzy usługi będą w stanie to zrobić, kiedy tylko zechcą. Takie podejście stwarza bardzo duże możliwości do profilowania i śledzenia użytkowników. W wiadomościach i plikach można wyszukiwać fraz, które odpowiednie algorytmy będą w stanie przetworzyć. Nasze zdjęcia można przeanalizować z użyciem sztucznej inteligencji w celu opatrzenia ich odpowiednimi etykietami. Dostawca usługi może na podstawie zebranych danych podsunąć nam odpowiednią reklamę albo po prostu sprzedać te dane dostawcom innych usług. Pomimo tego, że żaden człowiek prawdopodobnie nie ogląda naszych danych, to firma analizująca nasze dane wie o nas całkiem sporo.

Jak widać sam fakt zapewnienia swoim użytkownikom szyfrowanego połączenia rozwiązuje tylko część problemów. Zabezpiecza nas przed wścibskimi obserwatorami, którzy usiłują podejrzeć nasze działania w Internecie, ale nie rozwiązuje problemu bezpieczeństwa przechowywania danych. Dzieje się tak, ponieważ w wymienionych wyżej scenariuszach wszelkie klucze szyfrujące posiada dostawca usługi. Sposobem na zapewnienie sobie znacznie wyższego poziomu bezpieczeństwa jest po prostu

odwrócenie sytuacji. Jeśli staniemy się właścicielami swoich kluczy szyfrujących i zaszyfrujemy swoje dane zanim je wyślemy na chmurę, dostawca nie będzie miał możliwości otwarcia naszych plików. Taki sposób zabezpieczania danych nazywamy szyfrowaniem typu end-to-end. Jest to bardziej metoda a nie technologia, kiedy to właściciel pliku czy wiadomości ma w posiadaniu klucze szyfrujące a nie dostawca usługi. Przechowywanie kluczy na własną rękę oczywiście wiąże się z koniecznością odpowiedniego zadbania o bezpieczeństwo takich kluczy albo przynajmniej zapamiętaniem odpowiednio silnego hasła. Dodatkowo osoba, z którą będziemy korespondować musi umieć się taką technologią posługiwać. Zapewniam, że nie jest to jednak trudne. Nie musimy znać się na kryptografii żeby zabezpieczyć nasze dane i wiadomości. Jest to dość prosta czynność, która zajmuje sekundy, ale radykalnie podnosi poziom naszego bezpieczeństwa.

Co zrobić, żeby nasze szyfrowanie zadziałało naprawdę skutecznie? Poruszmy dwa aspekty, które są równie ważne, ale nie zawsze muszą występować jednocześnie. Po pierwsze musimy zadbać o silne hasła. W dzisiejszych czasach komputery mają tak dużą moc obliczeniową, że w dogodnych warunkach są w stanie dokonywać trylionów prób złamania hasła na sekundę. Algorytm łamiący hasło po prostu będzie próbować wykorzystać każdą możliwą kombinację znaków jako hasło. Robić to będzie to tak długo, aż w końcu któraś kombinacja zadziała do odszyfrowania danych. Jedyna właściwa kombinacja to nic innego jak nasze hasło. W praktyce złamanie hasła o długości 8 znaków może zająć mniej niż sekundę. Niestety nie istnieje hasło nie do złamania, ale istnieją hasła, których “odgadnięcie” taką metodą zajmie miliardy, albo jeszcze więcej lat. Hasła im dłuższe, tym lepsze. Dla tego najlepiej nie próbować wymyślić hasła w formie losowego ciągu znaków, ponieważ będzie trudne do zapamiętania. Najlepsze hasła są zarówno długie jak i łatwe do zapamiętania, dla tego powinniśmy o hasłach zacząć myśleć jak o całych zdaniach. Na przykład hasło “e=mc^2toMojeUlubioneRownanieEinsteina” ma 37 znaków, jest hasłem zdecydowanie łatwym do zapamiętania, ale na dzień dzisiejszy praktycznie niemożliwym do złamania. Osobiście rekomenduję hasła o minimalnej długości 24 znaków, które zawierają litery małe i wielkie, liczby oraz znaki specjalne. Silne hasła powinniśmy stosować wszędzie bez wyjątku, nie tylko w odniesieniu do naszego dzisiejszego tematu. Drugim aspektem szyfrowania typu end to end jest zrozumienie kluczy szyfrujących. Tak naprawdę wystarczy tylko wiedzieć, że w procesie brać udział będą dwa klucze. Klucz publiczny i prywatny. Oba te klucze to po prostu pliki tekstowe zawierające bardzo długie ciąg znaków. Swój klucz prywatny trzymamy tylko dla siebie a ten publiczny możemy udostępnić swoim adresatom. Najlepiej podczas faktycznego spotkania a nie za pośrednictwem Internetu. Od naszych adresatów również otrzymamy ich klucze publiczne. Kiedy nasz znajomy zechce wysłać do nas wiadomość, zaszyfruje ją używając do tego naszego klucza publicznego, którego udostępniliśmy mu wcześniej. My taką wiadomość otrzymamy i będziemy w stanie ją odszyfrować naszym kluczem prywatnym. Potem odpiszemy mu na wiadomość i zaszyfrujemy odpowiedź używając jego klucza publicznego. W zasadzie jest to cała wiedza teoretyczna, jaką musimy posiąść przed rozpoczęciem szyfrowania danych.

Istnieje dziś już wiele technologii przesyłania plików, wiadomości, maili w standardzie szyfrowania end to end. Do zaszyfrowania wiadomości e-mail możemy wykorzystać choćby technologię OpenPGP. Jest to technologia bardzo popularna i dostępna za darmo. Wystarczy użyć darmowego generatora do stworzenia pary kluczy, udostępnić klucz publiczny swoim znajomym i zacząć używać klienta pocztowego do szyfrowania wiadomości. Ważne jednak, że jeśli zdecydujemy się na ten standard musimy pamiętać o przekazaniu swojego klucza w bezpieczny sposób. Jeśli wyślemy taki klucz przez Internet i zostanie on przechwycony w drodze, możemy nie dość, że utracić bezpieczeństwo, to jeszcze mieć fałszywe jego poczucie, co jest jeszcze gorsze. Zatem pamiętajmy, żeby klucze generowane za pomocą technologii OpenPGP przekazywać w bezpieczny sposób. Drugą dość popularną metodą szyfrowania e-maili, aczkolwiek już nie darmową, jest technologia S/MIME.

W tym przypadku już nie musimy zadbać o samodzielne udostępnienie kluczy. Płacimy bowiem za to, żeby zewnętrzny organ bezpieczeństwa potwierdził autentyczność naszego udostępnionego klucza osobie, do której go wyślemy mailem. Proces ten zachodzi automatycznie. Jeśli ktoś z naszych znajomych korzysta z certyfikatu S/MIME i wyśle do nas e-mail, zobaczymy w naszym kliencie pocztowym w wiadomości od niego kłódeczkę, podobną do tej z paska URL przeglądarki internetowej, kiedy łączymy się za pomocą HTTPS. Będzie to znak, że wiadomość została podpisana certyfikatem S/MIME i otrzymując ją otrzymaliśmy również klucz publiczny nadawcy. Certyfikat S/MIME można wykupić już w cenie poniżej 50 zł za rok. Jeśli jednak nie mamy ochoty generować swoich własnych kluczy, możemy skorzystać z usług dostawców e-mail, którzy OpenPGP mają zaimplementowany w standardzie. ProtonMail jest jedną z takich usług. Ten szwajcarski serwis umożliwia szyfrowanie end-to-end wewnątrz swoich serwerów za pomocą tejże technologii. Więc jeśli ktoś z naszych kontaktów używa ProtonMail i wyśle nam wiadomość na naszą skrzynkę w obrębie tego dostawcy, wiadomość będzie zaszyfrowana. Jeśli jednak chcemy wysłać wiadomość poza serwery ProtonMail, musimy udostępnić swój klucz publiczny tak samo, jak byśmy to robili zwyczajnie korzystając z OpenPGP. Jak widać każda metoda ma swoje słabe i silne strony. Wybór zatem powinien być uzależniony od wielu czynników, łącznie z tym czego używają nasi znajomi.

Warto również pamiętać, że podczas wyboru technologii bardzo istotnym czynnikiem jest czy dana technologia jest dostępna na licencji Open Source. Jeśli kod aplikacji jest dostępny dla każdego do wglądu, to oczywiście jest dostępny również dla hakerów. Można w ten sposób faktycznie zidentyfikować słabości aplikacji, ale trzeba pamiętać, że nie tylko ludzie o złych zamiarach mają wgląd do kodu. Im więcej oczu może zweryfikować kod, tym większa szansa na znalezienie błędów. Z tego też powodu bardzo często korzystam z rozmaitych technologii na licencji Open Source i polecam je moim klientom. Również w temacie komunikatorów internetowych. Do komunikacji pisanej, oraz rozmów audio czy wideo z dostępnym szyfrowaniem end-to-end w standardzie można wykorzystać aplikację Signal. Aplikacja wymaga podania numeru telefonu do aktywacji, ale jest bardzo przyjazna w użytkowaniu. Funkcjonalności ma praktycznie takie same, jak większość popularnych komunikatorów. Należy jedynie pamiętać, żeby swoje kontakty weryfikować skanując kody QR na telefonach znajomych. Tylko wtedy mamy pewność, że nie doszło do przechwycenia kluczy. Signal jest przede wszystkim dostępny na smartfony, ale istnieje również wersja na Windows oraz macOS. Aby jeszcze zwiększyć swoje bezpieczeństwo i dodatkowo nawet dołożyć aspekt bardzo silnej anonimowości, można skorzystać z jakiegoś komunikatora bazującego na trasowaniu cebulowym. Session jest jedną z takich aplikacji. Pozwala wysyłać wiadomości tekstowe za pomocą sieci Lokinet, podobnej do sieci Tor, opisywanej w poprzednim odcinku. Zaprzęgnięcie do pracy tak potężnego narzędzia jak trasowanie cebulowe w komunikacji sprawia, że zarówno podsłuchanie wiadomości jak i zwykłe zidentyfikowanie kto z im rozmawia staje się wybitnie trudnym zadaniem. Na dzien dzisiejszy trudno znaleźć bardziej anominową i bezpieczną wymianę wiadomości tekstowych. Session ma jednak pewne wady, które są bardzo typowe dla wszelkich aplikacji korzystających z trasowania cebulowego. Przesyłanie danych zachodzi bardzo powoli i również dla tego aplikacja na dzień dzisiejszy nie pozwala na nawiązanie rozmowy głosowej.

Jeśli ktoś z Państwa przechowuje pliki w chmurze, zachęcam również do zapoznania się z aplikacją Cryptomator. Dzięki niej można w dość prosty sposób zaszyfrować swoje pliki w chmurze. Jeśli mamy już jakiś zasób dyskowy wykupiony u jakiegoś dostawcy, ale nie chcemy, aby dostawca ten miał wgląd do naszych plików, możemy przechowywać pliki zaszyfrowane naszym kluczem. Wystarczy wskazać aplikacji który katalog na naszym komputerze jest synchronizowany z chmurą, gdzie stworzyć dodatkowy wirtualny dysk, oraz wymyślić silne hasło. Od tego momentu możemy z dodatkowego wirtualnego dysku korzystać tak, jak z każdego innego, pamiętając, że każdy plik, który tam włożymy zostanie przez Cryptomatora zaszyfrowany i w takiej postaci wysłany na chmurę.

Wymienione w dzisiejszym odcinku technologie w żadnym wypadku nie wyczerpują tematu szyfrowania typu end-to-end. Możliwości jest znacznie więcej i ich wybór powinien zależeć od potrzeb użytkownika. Ale teraz zadajmy sobie pytanie “Jeśli nawet zaszyfruję wszystko co mogę, to czy stanę się całkowicie anonimowy?” Odpowiedź na to pytanie niestety nie jest taka prosta. Wykorzystując powyższe technologie i wiele innych, z pewnością radykalnie podniesiemy stopień bezpieczeństwa. Obejrzenie naszej korespondencji stanie się tak trudne, że w praktyce niewykonalne. Tak samo, jeśli dojdzie do wykradzenia naszych plików. Jeśli zaszyfrowaliśmy je wcześniej używając silnego hasła lub klucza, możemy właściwie założyć, że nikt ich nie odczyta za naszego życia, życia naszych prawnuków i wielu następnych pokoleń. Jednakże, nawet jeśli wszystko zaszyfrujemy to jakaś część komunikacji będzie musiała zachodzić na zasadach umożliwiających transport wiadomości. Wysyłając nawet zaszyfrowaną wiadomość, musimy ją do kogoś zaadresować. Adres wiadomości musi być dostępny do odczytu, bo inaczej nie byłoby wiadomo, gdzie tę wiadomość skierować. I kiedy szyfrujemy e-mail, dowolną technologią, tytuł wiadomości, adresat oraz nadawca są znane administratorom usług. Kiedy piszemy wiadomość na komunikatorze i nie jest to komunikator używający trasowania cebulowego, jakiś identyfikator adresata musi być dostępny, aby zapewnić odpowiedni transport wiadomości. Jeśli treść naszej wiadomości możemy nazwać “danymi”, to adresata, nadawcę czy czas nadania możemy nazwać “metadanymi”. Metadane to w zasadzie dane opisujące inne dane. Są one zazwyczaj znacznie mniejsze od danych, ale przechowują krytyczne informacje konieczne do zrealizowania usługi takiej jak dostarczenie maila. W dzisiejszych czasach szyfrowanie stało się już tak popularne i silne zarazem, że próby złamania szyfru stały się mało opłacalne. Oczywiście takie próby się mimo wszystko nadal podejmuje, ale zgromadzenie odpowiednio dużej bazy “metadanych” daje na nasz temat równie dużo informacji co samych treści naszych wiadomości. To jak często z kimś rozmawiamy, jak długo, jak wiele razy w ciągu dnia, czy w jakich porach dnia mówi bardzo wiele o typie relacji. Miejsca, które odwiedzamy w zależności od dnia i godziny są unikalnym identyfikatorem naszej osoby. Już w 2004 roku główny radca NSA Stewart Baker powiedział, że metadane mówią o nas kompletnie wszystko. Jeśli posiadamy wystarczająco dużo metadanych na czyjś temat, to tak na prawdę nie potrzebujemy danych, a w tym przypadku treści naszych wiadomości. Trasowanie cebulowe dzięki swojej zdecentralizowanej architekturze umożliwia przesyłanie danych z minimalną ilością metadanych, które dodatkowo są rozproszone i trudne do zebrania i powiązania. Jednakże mail, sms, rozmowy telefoniczne i wiele innych pozostają do wglądu administratorów i służb rządowych. Technologie szyfrowania end-to-end są niewątpliwie wielkim krokiem w dobrym kierunku, ale nie zawsze zapewniają całkowitą anonimowość, ponieważ ukrywanie metadanych w wielu zagadnieniach to nadal pieśń przyszłości. A zanim to nastąpi pamiętajmy o tym, jak wiele mówią o nas nasze metadane. Gen. Michael Hayden, były dyrektor NSA oraz CIA już w 2004 roku powiedział “we kill people based on metadata”. Jak widać metadane mówią o nas tak wiele, że pewne organizacje rządowe nie zawahają się podjąć ostatecznej decyzji o czyimś życiu, bazując tylko na metadanych.