Чи можна ділитися відкритим ключем VPN? Перевірте три речі
Публікація відкритої половини — це і є робота протоколу; публікація закритої половини означає передачу особи. Три перевірки визначають, яке значення у вас у руках.
Ви можете віддати свій відкритий ключ VPN партнеру, провайдеру або на форум, і тунель працюватиме далі. А закритий ключ не можна передати навіть співробітникам підтримки, не передавши особу, яку цей ключ доводить. Рішення рідко залишається таким однозначним: люди плутають, на яку половину пари вони дивляться, а деякі розгортання ставляться до відкритого значення як до імені. Три перевірки все розставляють: яка половина у вас, до чого розгортання її прив'язує і скільки коштує заміна.
Перевірка перша: яка половина пари лежить у буфері обміну
Асиметричні ключі існують парами, і напрямок виведення — уся суть. У WireGuard закритий ключ — це 32 випадкові байти, а відкритий обчислюється з нього; у зворотному напрямку це не працює. wg genkey записує закрите значення, wg pubkey виводить відкрите, і лише друге місце — у повідомленні партнеру.
wg genkey | tee private.key | wg pubkey > public.key
chmod 600 private.key
openssl x509 -noout -pubkey -in server.crt
Світ сертифікатів використовує той самий поділ, але з більшою кількістю рухомих частин. Серверний сертифікат несе відкритий ключ та імена і підписаний закритим ключем CA, який ніколи не залишає CA. Клієнту, що перевіряє цей сервер, потрібен сертифікат CA, який є відкритим, а закритий ключ підпису CA йому зовсім не потрібен.
Якщо ви не впевнені, яке значення тримаєте, шукайте маркер, а не ім'я файлу. Блок PEM, що починається з -----BEGIN PRIVATE KEY-----, або старіша форма BEGIN RSA PRIVATE KEY, — це секретна половина. Значення, яке можна вставити без цього маркера, є кандидатом на передачу, з огляду на наступні дві перевірки.
Перевірка друга: до чого розгортання прив'язує це відкрите значення
Криптографічна безпека й анонімність — різні властивості. Відкритий ключ партнера WireGuard — це стабільний ідентифікатор усередині розгортання: конфігурація сервера його перелічує, рукостискання його називає, і адміністратор, який читає журнали, бачить той самий рядок щоразу, коли цей партнер підключається. Опублікувавши ключ поруч із питанням про своє налаштування, ви пов'язали цей рядок з усім іншим у публікації.
Сертифікати розкривають особу за своєю конструкцією. Subject і subject alternative name читаються, а для публічно довірених TLS-сертифікатів сам сертифікат публікується в журналах Certificate Transparency, які доступні для пошуку. Ніщо з цього не розкриває закритий ключ, і все це розкриває зв'язок.
Саме тут розгортання різняться, і це вирішує відповідь. Одноразовий тестовий партнер на лабораторному сервері — це не те саме, що ключ, який ідентифікує міжсайтову кінцеву точку компанії, хоча байти виглядають однаково.
Перевірка третя: що можна відкликати і як швидко
Третя перевірка повністю розділяє половини. Опублікований відкритий ключ можна замінити за своїм графіком. Опублікований закритий ключ відкликати не можна: видалення вашої копії не зачіпає вже зняті копії, і кожен партнер, який йому довіряв, тепер довіряє тому, що є в стороннього.
Відкликання — це дія з конфігурацією, а не криптографічна. WireGuard не постачає список відкликання, тому ви видаляєте партнера:
wg set wg0 peer <peer-public-key> remove
# then delete the [Peer] block from the config so it does not return on restart
OpenVPN розгортання на сертифікатах відкликають сертифікат і публікують CRL, який сервер справді перевіряє через crl-verify. Без цієї директиви список відкликання — лише прикраса. В обох випадках порядок однаковий: видайте заміну, поширте її підтримуваним каналом, потім виведіть з обігу стару особу.
Помилки, що виникають, коли три перевірки змішують в одну
Більшість реальних витоків — це не рішення людини опублікувати закритий ключ. Це цілий профіль, вставлений на форум: .conf WireGuard із PrivateKey рядком, .ovpn пакет із вбудованим блоком ключа, або скриншот вікна клієнта, куди випадково потрапило поле ключа. Відкрите значення, ймовірно, було гаразд; воно подорожувало разом із тією частиною, яка ні.
Процеси підтримки — друге джерело. Жоден законний крок перевірки не потребує вашого закритого ключа, бо інша сторона виводить потрібне з відкритої половини. Коли форма або людина просить закрите значення, правильна відповідь — відкрите значення плюс локальна команда, яка його створює.
Журнали та скриншоти належать до тієї ж категорії. Діагностичний вивід може нести матеріал ключа, ідентифікатори сесій і внутрішні адреси, і публікація всього цього заради відповіді на одне питання міняє невелику зручність на більшу експозицію.
Якщо закрите значення витекло, виведіть особу з обігу
Якщо закрите значення все ж вийшло, вважайте цю особу виведеною з обігу. Згенеруйте нову пару, встановіть відкриту половину туди, де партнери її чекають, видаліть старого партнера або відкличте старий сертифікат і перевірте місця, де ви це публікували. Ви не можете видалити копії, які не контролюєте, тому видалення — про майбутнє, а не про минуле.
Потім запишіть поширення: який ключ належить якому пристрою, у кого є копія, як доставляється заміна і хто видаляє виведеного з обігу партнера. Саме ці частини забувають, і саме вони визначають, як довго витік залишається корисним.