Szyfrowanie end to end
hejto.plTym 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:
2. Szyfrowanie po stronie serwera:
3. Szyfrowanie end to end:
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:
Co wie odbiorca:
Co wie osoba podsłuchująca:
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 ;).
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 ->
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 ->
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 ->
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)
- 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)
- 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)
-
Nie zna tajnej liczby nadawcy (a)
-
Nie zna tajnej liczby odbiorcy (b)
-
Nie potrafi obliczyć w
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 ;).