Szyfrowanie end to end

Szyfrowanie end to end

hejto.pl
Tym razem wstępu nie będzie, zamiast tego zadam pytanie. Powiedz, co poleciłbyś użyć do zachowania poufności rozmowy w internecie? Załóżmy, że pracujesz nad rewolucyjnym projektem i chcesz by nikt, oprócz osób zaangażowanych nie mógł czytać waszej korespondencji. No dawaj, masz 3 sekundy na odpowiedź 3…2…1…
W tym momencie zazwyczaj padają nazwy: Signal, Proton, WhatsApp, PGP. Ale co takiego wyróżnia tego typu aplikacje (i protokoły) i czy pierwszy akapit, w którym napisałem, że nie będzie wstępu, nie był przypadkiem wstępem :O?
Jak wiadomo informacji należy szukać u źródła, dlatego wejdźmy na jedną z wywołanych stron https://signal.org i poszukajmy odpowiedzi. Na dzień dobry dostajemy komunikat.

Pojawiają się mocne deklaracje oraz słowo klucz „szyfrowanie end-to-end”, strona twierdzi również że sama nie jest w stanie przeczytać naszych wiadomości. Czym tak właściwie jest to, tajemnicze szyfrowanie end to end?

Szyfrowanie end to end

Szyfrowanie end-to-end to metoda bezpiecznej komunikacji, która uniemożliwia osobom trzecim dostęp do treści wiadomości podczas przesyłania jej z jednego urządzenia na drugie lub gdy znajduje się ona "w stanie spoczynku" na serwerze.
Żeby lepiej zrozumieć metodę działania, przeanalizujmy (w uproszczony sposób) jaką drogę pokonuje wysłana przez nas wiadomość. Rozważmy kilka przypadków:

* ISP- Dostawca internetu
1. Całkowity brak szyfrowania:
  • Wiadomość w jawnej formie opuszcza twój komputer ->
  • Administrator sieci uzyskuje dostęp do wiadomości ->
  • ISP uzyskuje dostęp do wiadomości ->
  • Serwer pośredniczący uzyskuje dostęp do wiadomości ->
  • ISP odbiorcy uzyskuje dostęp do wiadomości ->
  • Administrator sieci uzyskuje dostęp do wiadomości -
  • Odbiorca uzyskuje dostęp do wiadomości ->
Jak widać, sytuacja skończyła się kompletną katastrofą, w wyniku której olbrzymia grupa osób mogła uzyskać dostęp do naszej wiadomości. Na szczęście w praktyce wszystkie komunikatory, korzystają z szyfrowania, ale nie zawsze jest to szyfrowanie end to end, często stosowane jest szyfrowanie po stronie serwera.
2. Szyfrowanie po stronie serwera:
  • Wiadomość w zaszyfrowanej formie opuszcza twój komputer -> 
  • Administrator sieci nie uzyskuje dostępu do wiadomości ->
  • ISP nie uzyskuje dostępu do wiadomości ->
  • Serwer pośredniczący odszyfrowuje wiadomość i uzyskuje dostęp, następnie ponownie ją szyfruje->
  • ISP odbiorcy nie uzyskuje dostępu do wiadomości ->
  • Administrator sieci nie uzyskuje dostępu do wiadomości ->
  • Odbiorca odszyfrowuje wiadomość i uzyskuje dostęp ->
Tutaj sytuacja wygląda znacznie lepiej, jedynie osoba wysyłająca wiadomość, serwer pośredniczący i odbiorca uzyskali dostęp do wiadomości, wszyscy inni widzieli ją w zaszyfrowanej formie. W taki sposób funkcjonuje choćby najpopularniejszy w Polsce komunikator messenger (Facebook). Naturalnie wielu osobom może nie podobać się fakt, że serwer pośredniczący ma dostęp do naszej wiadomości, są to przecież dane, które poddane odpowiedniej komputerowej analizie umożliwiają choćby profilowanie użytkowników. 
3. Szyfrowanie end to end:
  • Wiadomość w zaszyfrowanej formie opuszcza twój komputer -> 
  • Administrator sieci nie uzyskuje dostępu do wiadomości ->
  • ISP nie uzyskuje dostępu do wiadomości ->
  • Serwer pośredniczący nie uzyskuje dostępu do wiadomości->
  • ISP odbiorcy nie uzyskuje dostępu do wiadomości ->
  • Administrator sieci nie uzyskuje dostępu do wiadomości ->
  • Odbiorca odszyfrowuje wiadomość i uzyskuje dostęp ->
Jak widać w tym przypadku, jedynymi osobami mającymi dostęp do treści są nadawca i odbiorca, ale jak właściwie jest to możliwe? 
W jednym z moich wcześniejszych wpisów wspominałem, że do szyfrowania komunikacji wykorzystujemy szyfry asymetryczne, czyli takie bazujące na dwóch kluczach, jednym służącym do zaszyfrowania wiadomości (publicznym) i drugim służącym do odszyfrowania (prywatnym). W naszych przykładach, zarówno w przypadku szyfrowania po stronie serwera, jak i szyfrowania end to end, skorzystaliśmy z kryptografii asymetrycznej. (dla szyfrowania po stronie serwera, użyto jej dwukrotnie).

Protokół Diffiego-Hellmana


Jeden ze sposobów zapewnienia bezpiecznej komunikacji polega na użyciu szyfru symetrycznego wraz z uzgodnieniem klucza za pomocą protokołu asymetrycznego. Brzmi skomplikowanie, ale w rzeczywistości nie ma w tym nic trudnego. Jest to szczególny przypadek wykorzystania kryptografii asymetrycznej w celu ustalenia wspólnego sekretu.
Zacznijmy od wyjaśnienia powodu całej tej operacji. Szyfry symetryczne są szybkie i bezpieczne, a główną przeszkodą utrudniającą ich użycie w komunikacji, jest problem uzgadniania klucza. Problem ten można przedstawić następująco:
Jak uzgodnić wspólny klucz między nadawcą i odbiorcą znany tylko im, wiedząc, że nasza konwersacja jest w całości podsłuchiwana przez trzecią osobę. 
Problem ten wydaje się nie do obejścia, w rzeczywistości rozwiązanie jest jednak proste, wymaga tylko trochę obliczeń.
(polecam użycie kalkulatora https://www.wolframalpha.com )
1. Obie strony ustalają wartości p i g. 
(dla zainteresowanych jakie kryteria muszą spełniać te liczby https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange )
p=10007
g=7
2. Nadawca losuje tajną liczbę a=69. (zakres losowania od 1 do p-1( u nas od 1 do 10006))
3. Odbiorca losuje tajną liczbę b=2137. (zakres losowania od 1 do p-1( u nas od 1 do 10006))
4. Nadawca wysyła wartość A równą A = g^a mod p.( u nas A= 7^69 mod 10007= 2047)
5. Odbiorca wysyła wartość B równą B = g^b mod p.( u nas B= 7^2137 mod 10007= 7174)
6. Nadawca oblicza wartość w równą w= B^a mod p (u nas w= 7174^ 69 mod 10007= 810)
7. Odbiorca oblicza wartość w równą w= A^b mod p (u nas w= 2047^ 2137 mod 10007= 810)
8. Obie strony wyznaczają tajną wspólną wartość w (u nas 810).
Dla lepszego zobrazowania przeanalizujmy, co tu się wydarzyło:
Co wie nadawca:
  • Zna wartości p i g (10007,7)
  • Zna tajną liczbę, którą wylosował (a) (69)
  • Zna wynik równania B = g^b mod p (7174) (otrzymał go od rozmówcy)
  • Zna wynik równania A = g^a mod p (2047) (sam policzył i wysłał odbiorcy)
  • Potrafi obliczyć w= B^a mod p (810)
Czego nadawca nie wie:
  • Nie zna tajnej liczby odbiorcy (b)
—----------------------------------------------------------------------------------------
Co wie odbiorca:
  • Zna wartości p i g (10007,7)
  • Zna tajną liczbę, którą wylosował (b) (2137)
  • Zna wynik równania A = g^a mod p (2047) (otrzymał go od rozmówcy)
  • Zna wynik równania B = g^b mod p (7174) (sam policzył i wysłał nadawcy)
  • Potrafi obliczyć w= A^b mod p (810)
Czego odbiorca nie wie:
  • Nie zna tajnej liczby nadawcy (a)
—----------------------------------------------------------------------------------------
Co wie osoba podsłuchująca:
  • Zna wartości p i g (10007,7)
  • Zna wynik równania A = g^a mod p (2047)
  • Zna wynik równania B = g^b mod p (7174)
Czego osoba podsłuchująca nie wie:
  • Nie zna tajnej liczby nadawcy (a)
  • Nie zna tajnej liczby odbiorcy (b)
  • Nie potrafi obliczyć w
Sztuczka tkwi w tym, że przy poprawnie dobranych parametrach B^a jest równe A^b. Odbiorca otrzymał wartość A, a wartość "b" była jego tajną liczbą. Nadawca otrzymał wartość B, a wartość "a" była jego tajną liczbą. Osoba podsłuchująca nie poznała ani wartości a, ani wartości b, przez co nie mogła odgadnąć wyniku obliczeń. 
Siła algorytmu oparta jest na trudności obliczenia logarytmów dyskretnych w ciałach skończonych. Przy odpowiednio dużej wartości "p", obliczenie wartości "w" przez osobę podsłuchującą (nie znającą ani "a", ani "b") przekracza możliwości współczesnych komputerów. Wspólnie ustalona liczba (w przykładzie 810, oczywiście w praktyce używane są większe wartości) może zostać użyta jako klucz w szyfrowaniu symetrycznym.
Uzgadnianie klucza w porównaniu z bezpośrednim szyfrowaniem asymetrycznym ma zarówno plusy (szybkość), jak i minusy (wspólny klucz). Pozostaje do wyjaśnienia jeszcze jedna kwestia, tak pierwszy akapit był wstępem ;).

Komentarze (1)