Људи описују 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.

Повезани чланци