Люди описують VPN як «той, що використовує шифрування відкритим ключем», а потім уявляють, ніби кожен пакет замкнено сертифікатом сервера. Це уявлення хибне в тому сенсі, який важливий, коли ви читаєте файл конфігурації або запис пакетів. Відкритоключова половина VPN потрібна, щоб довести, хто є партнером, і домовитися про секретний матеріал; симетрична половина — та, що справді захищає трафік, пакет за пакетом, протягом усього життя сесії.

Дві половини мають різний термін життя, різні режими відмови й різні речі, які можна безпечно публікувати. Щойно ви їх розділите, питання на кшталт «чи RSA 2048 слабша за AES-128» перестають плутати, бо вони ніколи не були порівнюваними.

Три операції, які змішують

Криптографія відкритого ключа — це парасолька над щонайменше трьома різними операціями. Підпис доводить, що власник закритого ключа схвалив певне повідомлення. Узгодження ключа дає двом сторонам змогу вивести спільний секрет із значень, якими вони обмінюються відкрито. Шифрування відкритим ключем ховає дані під чиїмось відкритим ключем, тож відкрити їх може лише закритий ключ.

Рукостискання VPN використовують переважно перші дві. Сертифікат — не ключ шифрування; це підписане твердження, що прив'язує ім'я до відкритого ключа і дає іншій стороні вирішити, чи довіряти щойно отриманому ключу. Наприклад, встановлення ключів у TLS 1.3 спирається на узгодження ключа (EC)DHE та підписи сертифікатів, а не на шифрування сесії відкритим ключем сервера.

Що насправді продукує рукостискання

У сучасному рукостисканні кожна сторона створює ефемерну пару ключів, обмінюється відкритими половинами й обчислює спільний секрет, який ніколи не йде дротом. Далі цей секрет проходить через функцію виведення ключів і дає окремі ключі для кожного напрямку, а також nonce та матеріал IV, потрібний шару записів. WireGuard робить це своєю конструкцією на основі Noise; TLS 1.3 робить це через HKDF над транскриптом рукостискання.

Довготривалий обліковий матеріал — сертифікат і закритий ключ або статичний ключ WireGuard — автентифікує цей обмін. Він підписує транскрипт або вмішується в нього, щоб сторонній не міг завершити рукостискання замість партнера. Після цього обліковий матеріал не виконує роботи на кожен пакет. Якби виконував, кожен пакет вимагав би операції із закритим ключем, і завантажений тунель обмежувався б найповільнішою операцією в стеку.

Звідси два побічні ефекти. По-перше, сесійні ключі щоразу нові, тож зловмисник, який пізніше вкраде довготривалий ключ, не зможе розшифрувати раніше записані сесії, якщо узгодження було ефемерним. По-друге, витік сесійного ключа компрометує одну сесію, а не особу.

Чому великі обсяги даних використовують симетричні ключі

Симетричні шифри добре дають раду обсягу: AES-GCM або ChaCha20-Poly1305 обробляють кожен пакет уже наявним у пам'яті ключем, автентифікують заголовок і збільшують лічильник. Приймальна сторона перевіряє nonce і тег автентифікації та відкидає все, що не пройшло або повторилося. Це достатньо дешево, щоб працювати зі швидкістю лінії на звичайному обладнанні, і та сама конструкція дає конфіденційність та цілісність за один прохід.

Ця конструкція — ще й місце, де живе більшість помилок реалізації. Повтор nonce у GCM ламає конфіденційність і справжність одразу, тож протоколи виводять ключі на напрямок і тримають явний лічильник або епоху. Якщо ви читаєте запис пакетів і довжина шифротексту відповідає відкритому тексту плюс фіксована накладка, працює симетричний шар, а не операція з відкритим ключем на кожен пакет.

Термін життя, оновлення ключів і пряма секретність

Сесійні ключі розраховані на завершення. TLS 1.3 дозволяє повідомленню KeyUpdate прокручувати ключі трафіку; WireGuard оновлює сесію після заданого часу або кількості повідомлень і недовго тримає старий ключ для пакетів у дорозі. OpenVPN переузгоджує ключі свого каналу даних за розкладом, а reneg-sec керує інтервалом.

Жодна з цих ротацій не дорівнює оновленню сертифіката. Сертифікат може бути чинним рік, тоді як сесійні ключі змінюються кожні кілька хвилин, і сертифікат можна замінити, не торкаючись ключів працюючого тунелю. Плануючи завершення терміну, спитайте, який об'єкт ви ротуєте; відповідь визначає, чи клієнти перепідключаться, чи лише оновлять ключі.

Читання конфігурацій і діагностики без змішування об'єктів

На практиці ви обираєте повний протокол і підтримувані ним примітиви, а не збираєте власний. Ключ --tls-crypt OpenVPN захищає канал керування; канал даних використовує узгоджені симетричні шифри. Записи PrivateKey і PublicKey WireGuard — матеріал ідентичності, а його транспортні ключі виводяться всередині. Читання цих полів як одного й того самого різновиду секрету веде до помилок на кшталт вставляння відкритого ключа там, де має бути закритий.

Тримайте відкритий матеріал окремо від закритого. Сертифікат, відкритий ключ WireGuard і відбиток пальця безпечно ділити в тікеті. Закритий ключ, попередньо розділений ключ і експортований сесійний ключ — ні. Порівнюючи стійкість, порівнюйте в межах одного типу: ідентифікатор еліптичної кривої, розмір модуля RSA і розмір ключа AES вимірюють різні речі за різних припущень. Специфікація TLS 1.3 — корисне джерело про те, як два шари стикуються, навіть якщо ваш тунель не TLS.

Схожі статті