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)