Симетрично и асиметрично шифрирање во VPN: што прави секое
VPN ги автентификува партнерите со јавни клучеви, потоа ги шифрира пакетите со изведени сесиски клучеви. Третирајте ги сертификатите и клучевите за сообраќај како различни објекти.
Љуѓето го опишуваат 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.