Dwa profile są mierzone na tej samej bramie, jeden z szyfrowaniem, drugi bez, i zaszyfrowany nie jest wolniejszy. Czasami jest szybszy, co zwykle wywołuje długą dyskusję, czy test przeprowadzono prawidłowo. Wynik jest wiarygodny, ponieważ koszt pakietu to nie liczba kryptograficznych słów w konfiguracji. To zbiór operacji wykonywanych przez implementację, na dostępnym sprzęcie, według wybranego układu buforów.

Objaw: to nie zaszyfrowany profil jest wolny

Załóżmy, że historyczny test porównuje szyfr AEAD z trybem „bez szyfrowania“, który nadal oblicza osobny kod uwierzytelnienia dla każdego pakietu. Drugi profil ukrywa zawartość ładunku, ale zachowuje skrót na pakiet, a na procesorze bez przyspieszenia dla tego skrótu może kosztować więcej niż zintegrowana konstrukcja, którą miał pokonać.

Etykieta w konfiguracji mówi „szyfrowanie“, i etykieta jest wszystkim, na co patrzy większość porównań. Ścieżka pakietu mówi coś innego: jeden profil wykonuje operację złożoną, do której procesor ma instrukcje, a drugi osobną, do której ich nie ma. Samo przeczytanie pliku konfiguracji nigdy nie ujawni tej różnicy, ponieważ oba wpisy wyglądają jak jedna linia. Tylko wynegocjowany tryb i ścieżka kodu za nim wyjaśniają wynik.

To całe wyjaśnienie i nie wymaga żadnego twierdzenia, która prymitywa jest uniwersalnie szybsza. Obie mogą być szybkie, obie mogą być wolne, a kolejność zależy od maszyny i kodu.

Licz operacje, nie etykiety

Konstrukcja AEAD, jak opisuje ją RFC 5116, daje implementacji jeden interfejs, który zwraca szyfrogram i znacznik razem. AES-GCM jest jednym z przykładów: szyfrowanie w trybie licznikowym połączone z uwierzytelniaczem Galois. Interfejs nie czyni integralności darmową; czyni kombinację dobrze zdefiniowaną, i to pozwala implementacji optymalizować parę jako całość.

Separate authentication path:
  payload -> independent HMAC -> framed packet

AEAD path:
  payload -> authenticated encryption with tag -> framed packet

To szkice przetwarzania, nie porady konfiguracyjne. Pierwszy nie ma poufności, ale nadal zużywa procesor na uwierzytelnianie, i właśnie dlatego „wyłącz szyfrowanie“ nie jest synonimem „wyłącz pracę kryptograficzną“.

Drugi może być tańszy, ponieważ procesory dostarczają instrukcje dla obu połówek: rund AES i mnożenia bez przeniesienia, którego używa ciało Galois. Biblioteki przetwarzają też niezależne bufory równolegle, co utrzymuje te instrukcje zajęte zamiast czekania na pamięć.

Co faktycznie umożliwia wynegocjowany tryb

W Community OpenVPN szyfr danych AEAD oznacza, że opcja auth nie wnosi już własnego, osobnego HMAC kanału danych. Dokumentacja opcji szyfrowania opisuje ten zakres, i to jest powód, dla którego dwie konfiguracje wyglądające podobnie w pliku tekstowym mogą różnić się pracą na pakiet.

Czytaj wynegocjowany tryb, a nie listę życzeń. Lista dozwolonych szyfrów i nazwa zestawu TLS nie mówią, jakie operacje wykonują się na ładunku, a stara linia cipher może nie opisywać, co wybrało bieżące połączenie.

openvpn --show-ciphers | head -20
sudo grep -E 'cipher|auth' /etc/openvpn/server.conf

Pierwsze polecenie wymienia szyfry obsługiwane przez binarkę, co jest listą możliwości, a nie wynegocjowanym wynikiem. Drugie pokazuje, o co faktycznie prosi serwer. Dziennik połączenia jest miejscem potwierdzenia ostatecznego wyboru, ponieważ klient może cofnąć się do czegoś, na co serwer pozwala, ale czego nikt nie zamierzał.

Mierz obciążenie, które naprawdę uruchamiasz

Mikrobenchmark kryptograficzny mierzy prymitywę w jej własnych warunkach. Transfer VPN kopiuje też bufory, planuje wątki lub przerwania, sprawdza politykę i przechodzi przez sieć. Te części często dominują, dlatego szybsza prymitywa nie zawsze daje szybszy tunel.

openssl speed -evp aes-256-gcm
openssl speed -evp sha1

Te dwa polecenia dają przybliżone lokalne porównanie prymityw na maszynie, która stoi przed tobą, i są uczciwe, że to mikrobenchmarki. Nie mówią nic o przepustowości twojego tunelu i nigdy nie powinny być tak cytowane.

Następnie mierz obciążenie, które ma znaczenie, utrzymując wszystko inne bez zmian: ten sam punkt końcowy, te same rozmiary pakietów, ten sam transport, ta sama polityka kompresji. Jeśli zmiana profilu zmieniła też transport lub miejsce przetwarzania, wynik opisuje ten zestaw, a nie kryptografię.

Miej też na oku cel. Ścieżka danych z wolną mocą kryptograficzną nadal może być ograniczona opóźnieniem, ponieważ aplikacja czeka na podróże w obie strony, a zyski w masowej przepustowości nie naprawiają gadatliwego protokołu. Mierz obsługiwaną i zatwierdzoną przez politykę konfigurację jako całość, i traktuj „mniej skrzynek musi być szybciej“ jako hipotezę, którą to jest. Pożyteczne pytanie nie brzmi, czy szyfrowanie coś kosztuje, ale czy ten koszt pojawia się w pomiarze, na którym naprawdę ci zależy.

Powiązane artykuły