Co to jest szyfrowanie i jak działa?
Szyfrowanie jest obecnie stosowane nawet w najprostszych aplikacjach. Ponieważ zhakowanie danych w Internecie jest takie łatwe, szyfrowanie i inne rodzaje kryptografii są najlepszymi dostępnymi narzędziami do ochrony informacji.
Większość aplikacji i programów używa jakiegoś rodzaju szyfrowania. Najlepsze VPN używają AES z 256-bitowymi kluczami, co jest jedną z przyczyn, dla których VPN jest najlepszym sposobem na zabezpieczenie swojej aktywności online.
Inne popularne aplikacje, takie jak WhatsApp i Gmail, również używają pewnego rodzaju szyfrowania.
Jednak pomimo codziennego używania kryptografii, większość z nas nie wie, jak to działa.
Aby pomóc zrozumieć, jak działa kryptografia, przyjrzymy się praktycznemu przykładowi.
Problem z otwartymi kanałami
Wyobraź sobie standardowy pokój czatu online, w którym użytkownicy mogą komunikować się z sobą za pośrednictwem wiadomości tekstowych. Jak zbudować bezpieczny pokój rozmów z zaszyfrowanymi wiadomościami?
Pierwsze wdrożenie to prosty kanał komunikacyjny oparty na protokole TCP. Ponieważ brak zabezpieczeń, każda wysłana przez użytkownika wiadomość jest otwarta na atak.
Więc, kiedy Alice i Bob piszą do siebie, napastnicy mogą po prostu wejść między nich i podsłuchać. Jest to znane jako atak „Man in the Middle”. Hakerzy mogą również zmieniać wiadomości i przekierowywać je.
Jest to możliwe, ponieważ domyślny kanał komunikacji przekazuje wiadomości w postaci zwykłego tekstu. To samo robi z całą komunikacją HTTP za pośrednictwem otwartych sieci Wi-Fi. Oczywiście potrzebujemy lepszego systemu.
Szyfrowanie symetryczne
Szyfrowanie symetryczne wykorzystuje algorytm, który konwertuje oryginalną wiadomość tekstową w zaszyfrowaną wiadomość szyfrowaną za pomocą klucza. Ten sam klucz jest używany przez odbiorcę do konwersji tekstu zaszyfrowanego z powrotem na zwykły tekst. Zastosujmy to do naszej aplikacji.
Gdy Alicja chce wysłać wiadomość do Boba, szyfruje ją za pomocą klucza symetrycznego. Kiedy Bob odbierze wiadomość, używa tego samego klucza do jej odszyfrowania. Bez szyfru osoby atakujące nie będą mogły uzyskać dostępu do zaszyfrowanej komunikacji między dwoma użytkownikami, zachowując ją w tajemnicy.
Zazwyczaj klucz symetryczny jest generowany na sesję i jest nieważny dla późniejszej komunikacji. Nazywamy to kluczem sesji.
Istnieją jednak pewne niedociągnięcia w tym podejściu:
- Skalowalność: Nasze rozwiązanie nie jest skalowalne. Jeśli 1000 użytkowników chce się ze sobą komunikować, każdy z nich potrzebowałby 999 różnych kluczy do ustanowienia bezpiecznego kanału.
- Dystrybucja klucza: Założono, że obie strony będą miały dostęp do klucza symetrycznego, ale pozostaje pytanie, w jaki sposób uzyskują ten klucz? Jeżeli Alicja wygeneruje klucz symetryczny (klucz sesji) i prześle go do Boba, atakujący może go przechwycić i odszyfrować dalszą komunikację.
Więc co dalej?
Szyfrowanie asymetryczne
Szyfrowanie asymetryczne wykorzystuje dwa klucze – klucz prywatny i publiczny. Gdy tekst jawny jest zaszyfrowany za pomocą klucza publicznego, można go odszyfrować tylko z odpowiednim prywatnym i vice versa.
Pomaga nam to obejść problem dwóch kluczy symetrycznych. Szyfrowanie asymetryczne jest wolniejsze niż szyfrowanie symetryczne, więc zazwyczaj są one używane w tandemie. Zobaczmy, jak to się robi:
Każdy użytkownik ma parę kluczy publiczno-prywatnych. Klucz publiczny jest dostępny i znany wszystkim, ale prywatny jest poufny i chroniony przez właściciela.
Kiedy Alicja chce wysłać wiadomość do Boba, najpierw tworzy symetryczny klucz sesji. Następnie szyfruje ją za pomocą klucza publicznego Boba. Ponieważ Bob jest właścicielem odpowiedniego klucza prywatnego, tylko on może odszyfrować wiadomość i uzyskać klucz sesji.
Od tego momentu ten klucz sesji może być używany do szyfrowania i odszyfrowywania wiadomości między nimi. Rozwiązuje to problem dystrybucji kluczy bez obniżania prędkości, ponieważ wolniejsze asymetryczne szyfrowanie jest używane tylko do wstępnego nawiązania rozmowy.
Rozwiązaliśmy również problem skalowalności ponieważ każdy potrzebuje tylko jednej pary kluczy publicznych i prywatnych do komunikowania się ze sobą.
Teraz system znacznie się poprawił, ale nadal nie jest całkowicie zabezpieczony. Nadal mamy problemy z:
- Poświadczenie autentyczności: Używamy klucza publicznego Boba jako punktu wyjścia, ale jak go zdobyliśmy? Klucz publiczny, który otrzymaliśmy jako pierwszy, mógł pochodzić od Boba lub od podszywającego się napastnika. Podczas gdy komunikujemy się bezpiecznie, może się okazać, że z niewłaściwą osobą.
- Integralność danych: Wiadomość mogła zostać zmieniona podczas przesyłania danych. Chcemy mieć pewność, że dane nie zostały zmienione.
Certyfikaty i podpisy cyfrowe
Uwierzytelnianie wymaga systemu zaufania. Zaufany urząd certyfikacji (CA) zapewnia, że klucz publiczny należy do konkretnej osoby. Każdy użytkownik systemu rejestruje cyfrowy certyfikat w urzędzie certyfikacji (CA). Zawiera informacje o tożsamości właściciela i klucz publiczny.
Tak więc, gdy Alicja chce się komunikować z Bobem, może sprawdzić w CA, że klucz publiczny, który otrzymała, rzeczywiście należy do Boba. Tak działa HTTPS w Internecie. Jeden certyfikat główny jest powiązany z różnymi certyfikatami podrzędnymi z podpisami cyfrowymi (opisanymi poniżej).
Skąd wiemy, że otrzymany certyfikat pochodzi od głównego CA, a nie od atakującego? Zazwyczaj certyfikaty główne z zaufanego urzędu certyfikacji są zakodowane w przeglądarce, co daje nam zaufaną linię podstawową.
Problem integralności danych można rozwiązać za pomocą podpisów cyfrowych (nie mylić z certyfikatami cyfrowymi).
Gdy Alicja chce wysłać wiadomość do Boba, najpierw tworzy klucz sesji i szyfruje go z publicznym kluczem Boba. Nazwijmy ten pakiet danych PART1. Następnie tworzy skrót wiadomości, używając jednego z wielu dostępnych algorytmów mieszających (MD5/SHA256). Hash wiadomości jest jednokierunkową konwersją z bajtu o zmiennej długości do typu o stałej długości.
Nie można pobrać oryginalnej wiadomości z wartości hash, a statystycznie nieprawdopodobne jest, aby dwie wiadomości miały tę samą wartość skrótu.
Po utworzeniu skrótu Alicja szyfruje ją swoim kluczem prywatnym. Nazywa się to podpisem cyfrowymponieważ można go użyć do sprawdzenia, czy wiadomość pochodzi od Alicji i nie została naruszona.
Podpis cyfrowy i oryginalna wiadomość są następnie szyfrowane za pomocą klucza sesji. Nazwijmy go PART2. Oto, co mamy teraz:
PART1 = BOB’S_PUBLIC_KEY -> (SESSION_KEY)
PART2 = SESSION_KEY -> (MESSAGE + DIGITAL_SIGNATURE)
Alicja wysyła do Boba zarówno PART1, jak i PART2. Ponieważ Bob jest właścicielem klucza prywatnego, tylko on może odszyfrować PART1 i uzyskać dostęp do SESSION_KEY.
Następnie używa tego klucza sesji do odszyfrowania PART2 i pobrania wiadomości oraz podpisu cyfrowego. Po czym używa klucza publicznego Alicji do odszyfrowania podpisu cyfrowego i pobrania skrótu wiadomości. Bob oblicza wartość mieszania MESSAGE i porównuje ją z tą z poprzedniego kroku.
Jeśli oba skróty są zgodne, oznacza to, że integralność danych została zachowana i nie doszło do manipulacji.
Jak widać, zbudowaliśmy teraz całkowicie bezpieczny ekosystem.
Korzystając z certyfikatów i podpisów cyfrowych, możemy stworzyć zaszyfrowany system uwierzytelniania, który jest szybki, bezpieczny, poufny i skalowalny.
Teraz, kiedy już wiesz, jak działa szyfrowanie, sprawdź nasze ulubione VPN dzięki czemu zobaczysz to w akcji.
Prosimy o sugestie, jak ulepszyć ten artykuł. Twoja opinia ma znaczenie!