Ostatnio coraz więcej działamy z certyfikatami SSL na stronach i serwisach stworzonych przez JohnnyWeb. Jest wiele nieporozumień i niejasności związanych z szyfrowaniem połączeń między witryną a użytkownikiem. W tym artykule chciałbym wyjaśnić pewne założenia, będzie prostym językiem.

Zaznaczam, że to nie jest artykuł w stylu “Jak to zrobić?”, raczej “Huh??? … Acha!!!”.

Co to jest szyfrowanie połączenia?

Wszelka komunikacja w internecie lata sobie po jakichś kablach i urządzeniach. Każdy pakiet danych jest przekazywany z miejsca na miejsce, czasem dziesiątki razy zanim trafi do adresata. Można sobie prześledzić drogę pakietu wpisując w wierszu poleceń systemu operacyjnego:

unix: traceroute google.com

windows: tracert google.com

W każdym nodzie (punktu styku sieci) nasz pakiet może zostać odczytany i przeanalizowany. Więc jak się uchronić przed podsłuchem?

Wystarczy, że przed wysłaniem mojej paczki danych, ją zaszyfruję pewnym bardzo prostym algorytmem, ale na tyle silnym, że odszyfrowanie mojej paczki będzie bardzo trudne bez znajomości klucza. Innymi słowy, tak jak Cezar, Alianci, czy jakakolwiek inna armia na przestrzeni dziejów przesyłali sobie wiadomości odwołując się do pewnego klucza, tak zaszyfrowane paczki także potrzebują kluczy do ich otwarcia i odczytania.

Oto najprostszy klucz, czy jesteś w stanie odczytać co tu napisałem?

23 5 12 15 22 5 10 15 14 14 25

Z reguły, klucz, którym zaszyfrowano wiadomość i klucz do jej odczytania były identyczne. Dlatego były strzeżone z narażeniem życia wielu ludzi. Gdy wroga armia zdobyła klucz przeciwnika, lub rozgryzła go metodą kryptograficzną, uzyskiwała niemałą przewagę.

Gorąco polecam:

Ile kluczy?

W świecie komputerów algorytmy szyfrujące są już dzisiaj na tyle silne, że odgadnięcie klucza metodą “brute force”, czyli siłowo, zajmuje nieadekwatnie dużo czasu. Czasem najsilniejsze maszyny potrzebują miesięcy, lat, by złamać dany klucz. Nie jest to ani praktyczne, ani szybkie. Jednak co mi po nawet najsilniejszym kluczu, skoro muszę go jakoś w bezpieczny sposób dostarczyć mojemu partnerowi w komunikacji? Jak przekazać klucz? Przecież on sam nie może być zaszyfrowany, bo mamy problem typu kura czy jajko.

I tu odpowiedź dała nam matematyka. W komunikacji zaszyfrowanej mamy przynajmniej dwa klucze, a jeśli ma być szyfrowana w obie strony, to nawet cztery, lub więcej. Na początek skupmy się na szyfrowaniu komunikacji z dwoma kluczami. Takie szyfrowanie odbywa się miliony razy dziennie, na każdej stronie, która może pochwalić się malutką kłódeczką w przeglądarce, czyli protokołem https://.

Jeden klucz służy tylko do zaszyfrowania paczki danych. Jest to klucz publiczny, widoczny i dostępny dla każdego. Istnieją ogólnodostępne narzędzia, które mogą Ci pokazać każdy tego typu klucz. Jednak ten klucz nie odszyfruje niczego. Jest to klucz, który kręci się tylko w jedną stronę. Jeśli podaję na stronie banku, czy na facebooku, czy gdziekolwiek indziej moje hasło, dane czy numer telefonu, to przeglądarka użyje tego klucza do zaszyfrowania mojej paczki danych przed wysłaniem go do serwera danej strony.

Drugi klucz znajduje się na serwerze. Jest pilnie strzeżony i każdy developer czy administrator powinien dołożyć wszelkich starań, by ten klucz nigdy nie był nikomu udostępniony. Jeszcze lepiej, jeśli klucze są regularnie zmieniane, tak na wszelki wypadek. Ten klucz służy tylko do odszyfrowania paczki danych zaszyfrowanej pierwszym kluczem, i tylko tym pierwszym.

Takie rozwiązanie jest bardzo sprytne. Mamy parę kluczy, z których jeden może wpaść w “niepowołane” ręce bez żadnych obaw, bo działa tylko w jedną stronę, a drugi nigdy nie jest nigdzie wysyłany. Jeśli chcemy mieć komunikację szyfrowaną w obie strony, to tworzymy większą ilość par kluczy. The onion network (https://www.torproject.org/) używa całej masy kluczy by komunikację zaszyfrować na każdym kroku, opakować paczkę warstwami, jak cebulka.

Polecam:

Gdzie haczyk?

Kiedy nasza paczka lata sobie po internecie, możemy z dużą pewnością powiedzieć, że jest bezpieczna. Ktoś musi się bardzo postarać by ją otworzyć i przeczytać. Problem z tym rozwiązaniem siedzi jak zwykle przed komputerem.

Co z tego, że zaszyfrowałem moją paczkę najlepszym algorytmem, skoro przed chwilą zainstalowałem jakiegoś toolbara, czy inny programik “pomagający” mi w pracy czy w zabawie, który zadowolony z siebie wysyła wszystko co klepię na klawiaturze, zanim zostanie to zaszyfrowane, do swoich twórców, nie zawsze mających szczytne zamiary? Co z tego, że developer zaimplementował najsilniejsze rozwiązania kryptograficzne na serwerach banku, skoro klucz prywatny przesłał sobie na maila w onecie, albo innym pudelku.

Komputery nie uchronią nas przed głupotą. Nawet onion routing jest tylko na tyle bezpieczny, na ile bezpieczne są pierwszy i ostatni krok na drodze mojej paczki danych, czyli moment zaszyfrowani i odszyfrowania.

Po co szyfrowanie, skoro nic nie robię poważnego w sieci?

Google, ale nie tylko, od jakiegoś czasu penalizuje strony, które nie mają szyfrowania SSL. To znaczy, że w punktacji wyszukiwarek internetowych dostajesz po łbie za brak szyfrowania, co ma bezpośredni wpływ na twoją pozycję w wynikach wyszukiwania. Masz bloga? Mogę skomentować twój wpis? Muszę cokolwiek podać zanim to zrobię? Jeśli tak, to zabezpiecz dane twoich gości, nawet jeśli nie muszą one być prawdziwe.

Tu nie chodzi tylko o prestiż czy etykę. Zbieranie danych jest niezwykle lukratywnym przedsięwzięciem w internecie. Spróbujmy ludziom, którzy polują na nasze dane chociaż trochę utrudnić życie.

Jak? Gdzie? Za ile?

Parę kluczy mogę sobie wygenerować w każdej chwili. Wpisz “how to generate SSL keys” w google, a znajdziesz odpowiednie instrukcje. Problem w tym, że by dostać upragnioną kłódeczkę w przeglądarce, informującą naszych gości o tym, że jesteśmy bezpieczni i fajni, potrzebujemy jeszcze certyfikat od zaufanego autorytetu (CA – Certificate Authority). Są to faktycznie organizacje, do których nasza przeglądarka wysyła zapytanie o to czy strona jest OK, czy też nie. Za to do niedawna trzeba było płacić. Home.pl, Nazwa.pl OVH.pl etc. żądali do 150 do 300 zł rocznie za wystawienie certyfikatu i zainstalowanie go na naszym hostingu.

Powoli jednak najwięksi dostawcy usług hostingowych się budzą i widzą, że certyfikaty SSL, oraz klucze mogę też otrzymać za darmo!

https://certbot.eff.org/

Electronic Frontier Foundation ma misję, która mówi między innymi, że cały internet powinien być szyfrowany, dlatego uruchomili narzędzie, które pozwala na wygenerowanie i instalację certyfikatu za darmo. Minusy: taki certyfikat trzeba odnawiać najrzadziej co 3 miesiące (proces ten można jednak zautomatyzować), oraz nie jest to certyfikat który jest przypisany organizacji, czyli nasza kłódeczka nie pokaże nazwy naszej firmy (np. ing.pl). Co ciekawe, duże firmy hostingowe same zaczynają korzystać z certbota i dlatego certyfikaty są dzisiaj coraz częściej darmowe. Sprawdź na swoim hostingu, może i u Ciebie kwestia Certyfikatu SSL jest oddalono tylko o parę kliknięć.

Jeśli potrzebujesz pomocy z Twoją stroną, chcesz zainstalować certyfikat, potrzebujesz pomocy z wygenerowaniem kluczy, zgłoś się do nas. Już za 100 zł, wyjaśnimy, pokażemy, pomożemy, zrobimy.