Чому зашифрований пакет VPN може коштувати менше, ніж ви думаєте
Ще одна криптографічна позначка — це не ще одна одиниця роботи. Порівняйте весь шлях: конструкція AEAD, підтримка процесора, буферизація та узгоджений режим даних.
Два профілі вимірюються на одному шлюзі, один із шифруванням, інший без, і зашифрований не виявляється повільнішим. Іноді він швидший, що зазвичай викликає довгу суперечку про те, чи тест було проведено правильно. Результат правдоподібний, бо вартість пакета — це не кількість криптографічних слів у конфігурації. Це набір операцій, які виконує реалізація, на наявному обладнанні, за обраною схемою буферів.
Симптом: повільний — не зашифрований профіль
Припустімо, історичний тест порівнює шифр AEAD із режимом «без шифрування», який усе одно обчислює окремий код автентифікації на кожен пакет. Другий профіль приховує вміст корисного навантаження, але зберігає хеш на пакет, і на процесорі без прискорення для цього хешу він може коштувати дорожче, ніж інтегрована конструкція, яку мав перевершити.
Позначка в конфігурації каже «шифрування», і позначка — це все, на що дивиться більшість порівнянь. Шлях пакета каже інше: один профіль виконує об'єднану операцію, для якої процесор має інструкції, а інший — окрему, для якої їх немає. Читання лише файлу конфігурації ніколи не виявить цієї різниці, бо обидва записи виглядають як один рядок. Лише узгоджений режим і шлях коду за ним пояснюють результат.
Це все пояснення, і воно не потребує жодного твердження про те, який примітив є універсально швидшим. Обидва можуть бути швидкими, обидва можуть бути повільними, і порядок залежить від машини та коду.
Рахуйте операції, а не позначки
Конструкція AEAD, як її описує RFC 5116, дає реалізації єдиний інтерфейс, що повертає шифротекст і тег разом. AES-GCM — один приклад: шифрування в режимі лічильника в поєднанні з автентифікатором Галуа. Інтерфейс не робить цілісність безкоштовною; він робить комбінацію добре визначеною, і саме це дозволяє реалізації оптимізувати пару як єдине ціле.
Separate authentication path: payload -> independent HMAC -> framed packet AEAD path: payload -> authenticated encryption with tag -> framed packet
Це нариси обробки, а не поради щодо конфігурації. У першого немає конфіденційності, але він усе одно витрачає процесор на автентифікацію, і саме тому «вимкнути шифрування» не є синонімом «вимкнути криптографічну роботу».
Другий може бути дешевшим, бо процесори дають інструкції для обох половин: раунди AES і множення без перенесення, яке використовує поле Галуа. Бібліотеки також обробляють незалежні буфери паралельно, що тримає ці інструкції зайнятими замість очікування пам'яті.
Що насправді вмикає узгоджений режим
У Community OpenVPN шифр даних AEAD означає, що опція auth більше не додає власний окремий HMAC каналу даних. Довідка щодо опції шифрування описує цю сферу, і саме тому дві конфігурації, схожі в текстовому файлі, можуть різнитися роботою на пакет.
Читайте узгоджений режим, а не список бажань. Список дозволених шифрів і назва набору TLS не кажуть, які операції виконуються над навантаженням, а старий рядок cipher може не описувати те, що обрало поточне з'єднання.
openvpn --show-ciphers | head -20 sudo grep -E 'cipher|auth' /etc/openvpn/server.conf
Перша команда перелічує шифри, які підтримує бінарний файл, і це список можливостей, а не узгоджений результат. Друга показує, що сервер насправді запитує. Журнал з'єднання — це місце для підтвердження остаточного вибору, бо клієнт може відкотитися до того, що сервер дозволяє, але ніхто не мав на увазі.
Вимірюйте те навантаження, яке справді запускаєте
Криптографічний мікробенчмарк вимірює примітив у його власних умовах. Передавання через VPN також копіює буфери, планує потоки або переривання, перевіряє політику й проходить мережу. Ці частини часто домінують, і тому швидший примітив не завжди дає швидший тунель.
openssl speed -evp aes-256-gcm openssl speed -evp sha1
Ці дві команди дають грубе локальне порівняння примітивів на машині перед вами, і вони чесно визнають, що це мікробенчмарки. Вони нічого не кажуть про пропускну здатність вашого тунелю, і на них ніколи не можна посилатися як на неї.
Далі вимірюйте навантаження, яке має значення, тримаючи все інше сталим: та сама кінцева точка, ті самі розміри пакетів, той самий транспорт, та сама політика стискання. Якщо зміна профілю змінила також транспорт або місце обробки, результат описує цей набір, а не криптографію.
Тримайте в полі зору й мету. Шлях даних із запасом криптографічної потужності усе ще може бути обмежений затримкою, бо застосунок чекає кругових обмінів, а виграш у загальній пропускній здатності не виправляє балакучий протокол. Вимірюйте підтримувану й схвалену політикою конфігурацію як ціле, і ставтеся до «менше коробок — отже швидше» як до гіпотези, якою вона є. Корисне питання не в тому, чи шифрування чогось коштує, а в тому, чи ця ціна проявляється в тому вимірюванні, яке вам справді важливе.