Dość często otrzymujemy pytania o poziom szyfrowania w kliencie OpenVPN i co zrobić aby dane jakie przesyłamy przez sieć były bardziej bezpieczne?
Postaram się w skrócie odpowiedzieć na to pytanie na łamach forum:
Szyfrowanie danych w aplikacji OpenVPN ma dwa cele:
1. Służy do bezpiecznego uwierzytelniania, to znaczy, kiedy po wpisaniu loginu i hasła w kliencie OpenVPN, informacje te są przesyłane do serwera OpenVPN w celu określenia, czy dane są prawdziwe i możemy się za pomocą nich zalogować.
2. Szyfrowanie jest wykorzystywane do ustanowienia bezpiecznego tunelu pomiędzy komputerem, a serwerem VPN .
Bezpieczny tunel, w którym nasze dane zaszyfrowane są specjalnie do tego stworzonym algorytmem, który zapobiega ich podsłuchaniu przez osoby trzecie.
Ważne jest, aby zrozumieć , że dla szyfrowania i dla uwierzytelniania stosuje się różne algorytmy o różnej sile szyfrowania (mierzonej w bit'ach).
Dodatkowo, poziom szyfrowania może być różny dla uwierzytelniania i dla przysyłania danych w tunelu VPN, np. 2048bit Blowfish do uwierzytelniania i 256bit AES dla danych w tunelu VPN.
Oczywiście, im wyższy poziom szyfrowania, tym połączenie jest bezpieczniejsze.
Niestety, wysoki poziom szyfrowania potrzebuje więcej zasobów takich jak CPU co może przełożyć się na spadek prędkości połączenia VPN.
Większość dostawców usług VPN wykorzystują wysoki poziom szyfrowania (np. podczas uwierzytelniania 1024bit lub 2048bit ),
następnie niższy poziom szyfrowania na tunelu VPN np. 128bit lub 256bit.
W aplikacji OpenVPN domyślne algorytmy szyfrowania to:
- SHA1 - szyfruje kluczem 160bit - uwierzytelnienie
- BF-CBC (Blowfish) - szyfruje kluczem 128bit - Szyfrowania danych w tunelu VPN
OpenVPN używa biblioteki OpenSSL , aby zapewnić szyfrowanie danych i uwierzytelnianie użytkownika poprzez odpowiednie algorytmy szyfrowania.
Biblioteka OpenSSL ma za zadanie wykonać całą pracę szyfrowania i uwierzytelniania, dzięki czemu OpenVPN może używać wszystkich algorytmów szyfrowania dostępnych w pakiecie OpenSSL .
Może również korzystać z funkcji uwierzytelniania pakietów HMAC (keyed-Hash Message Authentication Code) – kod MAC z wmieszanym kluczem tajnym zapewniający zarówno ochronę integralności jak i autentyczności danych.
W rzeczywistości, istnieje wiele różnych sposobów, aby skonfigurować szyfrowanie w aplikacji OpenVPN.
Proces uwierzytelniania zazwyczaj odbywają się przy użyciu kryptografii klucza publicznego ( certyfikat) i / lub nazwy użytkownika i hasła. Jeżeli zapoznawałeś się z ofertą różnych dostawców VPN, na pewno zwróciłeś uwagę, że "chwalą" się stosowaniem
algorytmów szyfrowania o wielkości klucza 2048bit lub 4096bit.
Ta faza wykorzystywana jest tylko w fazie uwierzytelniania klienta.
Jeżeli uwierzytelnienie się nie powiodło, ponieważ, algorytmy z kluczem publicznym są bardzo powolne, OpenVPN przejdzie do kryptografii symetrycznej, jest to szyfrowanie danych przesyłanych między użytkownikiem a serwerem VPN .
Szyfrowanie odbędzie się za pomocą danego typu algorytmu symetrycznego AES lub Blowfish i przy określonej długości klucza ( 128bit , 192bit , 256bit ) .
Im dłuższy klucz symetryczny tym większe bezpieczeństwo, ale obniżona wydajność ( mniej lub bardziej w zależności od wybranego algorytmu ).
Standardowy log z OpenVPN klienta podczas próby zestawienia połączenia VPN z wykorzystaniem auth SHA1 i cipher BF-CBC (Blowfish)
Thu Mar 27 11:38:44 2014 MANAGEMENT: >STATE:1395916724,AUTH,,, Thu Mar 27 11:38:44 2014 TLS: Initial packet from [AF_INET]nazwa_serwera_VPN:443, sid=eaf7d0e3 858a6b72 Thu Mar 27 11:38:44 2014 VERIFY OK: depth=2, C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Thu Mar 27 11:38:44 2014 VERIFY OK: depth=1, O=AlphaSSL, CN=AlphaSSL CA - G2 Thu Mar 27 11:38:44 2014 VERIFY OK: depth=0, OU=Domain Control Validated, CN=*.vpnonline.eu Thu Mar 27 11:38:45 2014 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Thu Mar 27 11:38:45 2014 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 27 11:38:45 2014 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Thu Mar 27 11:38:45 2014 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 27 11:38:45 2014 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 4096 bit RSA Thu Mar 27 11:38:45 2014 [*.vpnonline.eu] Peer Connection Initiated with [AF_INET]nazwa_serwera_VPN:443 Thu Mar 27 11:38:46 2014 MANAGEMENT: >STATE:1395916726,GET_CONFIG,,, Thu Mar 27 11:38:47 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1) Thu Mar 27 11:38:52 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1) Thu Mar 27 11:38:57 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1)
Zarówno Blowflish oraz AES są w powszechnym użyciu w całej branży usług VPN.
AES jest często uważany za standard bezpieczeństwa (256bit) ze względu na jego szerokie wykorzystanie przez amerykańskiego wojskowego
W kliencie OpenVPN i na naszych serwerach VPN możemy zastosować poniższe algorytmy szyfrowania:
Uwierzytelnienie danych logowania ( login + hasło):
SHA1 - 160bit MD5 - 128bit
Domyślnie włączona funkcja HMAC 4096bit
Szyfrowanie danych w tunelu VPN:
BF-CBC - 128bit AES-128-CBC - 128bit AES-192-CBC - 192bit AES-256-CBC - 256bit
Zmiana szyfrowania danych w konfiguracji pliku OpenVPN:
Aby zmienić domyślny poziom szyfrowania, w konfiguracji pliku .ovpn dodajemy:
auth SHA1 cipher AES-256-CBC
Wygląd pliku .ovpn po zmianie:
dev tap remote nazwa_serwera_vpn 443 proto tcp-client tls-client ca root.crt pull auth SHA1 cipher AES-256-CBC auth-user-pass persist-key resolv-retry infinite reneg-sec 0 verb 3 script-security 2 system auth-nocache route-delay 2 redirect-gateway def1 route-method exe
Log po zmianie na: auth SHA1 i cipher AES-256-CBC:
Thu Mar 27 12:54:10 2014 MANAGEMENT: >STATE:1395921250,AUTH,,, Thu Mar 27 12:54:10 2014 TLS: Initial packet from [AF_INET]nazwa_serwera_vpn:443, sid=4b812d28 ff38e9d3 Thu Mar 27 12:54:10 2014 VERIFY OK: depth=2, C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Thu Mar 27 12:54:10 2014 VERIFY OK: depth=1, O=AlphaSSL, CN=AlphaSSL CA - G2 Thu Mar 27 12:54:10 2014 VERIFY OK: depth=0, OU=Domain Control Validated, CN=*.vpnonline.eu Thu Mar 27 12:54:11 2014 Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key Thu Mar 27 12:54:11 2014 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 27 12:54:11 2014 Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key Thu Mar 27 12:54:11 2014 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 27 12:54:11 2014 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 4096 bit RSA Thu Mar 27 12:54:11 2014 [*.vpnonline.eu] Peer Connection Initiated with [AF_INET]nazwa_serwera_vpn:443 Thu Mar 27 12:54:12 2014 MANAGEMENT: >STATE:1395921252,GET_CONFIG,,, Thu Mar 27 12:54:13 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1) Thu Mar 27 12:54:18 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1) Thu Mar 27 12:54:23 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1) Log po zmianie na: auth MD5 i cipher AES-192-CBC: Thu Mar 27 12:58:13 2014 MANAGEMENT: >STATE:1395921493,AUTH,,, Thu Mar 27 12:58:13 2014 TLS: Initial packet from [AF_INET]nazwa_serwera_vpn:443, sid=1c516da3 a3fffad8 Thu Mar 27 12:58:14 2014 VERIFY OK: depth=2, C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Thu Mar 27 12:58:14 2014 VERIFY OK: depth=1, O=AlphaSSL, CN=AlphaSSL CA - G2 Thu Mar 27 12:58:14 2014 VERIFY OK: depth=0, OU=Domain Control Validated, CN=*.vpnonline.eu Thu Mar 27 12:58:14 2014 Data Channel Encrypt: Cipher 'AES-192-CBC' initialized with 192 bit key Thu Mar 27 12:58:14 2014 Data Channel Encrypt: Using 128 bit message hash 'MD5' for HMAC authentication Thu Mar 27 12:58:14 2014 Data Channel Decrypt: Cipher 'AES-192-CBC' initialized with 192 bit key Thu Mar 27 12:58:14 2014 Data Channel Decrypt: Using 128 bit message hash 'MD5' for HMAC authentication Thu Mar 27 12:58:14 2014 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 4096 bit RSA Thu Mar 27 12:58:14 2014 [*.vpnonline.eu] Peer Connection Initiated with [AF_INET]nazwa_serwera_vpn:443 Thu Mar 27 12:58:15 2014 MANAGEMENT: >STATE:1395921495,GET_CONFIG,,, Thu Mar 27 12:58:16 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1) Thu Mar 27 12:58:21 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1) Thu Mar 27 12:58:27 2014 SENT CONTROL [*.vpnonline.eu]: 'PUSH_REQUEST' (status=1)