Šta zapravo radi unapred dogovoreni ključ u IPsec-u, OpenVPN-u i WireGuard-u
Zajednička tajna može potvrditi identitet druge strane ili dodati sloj zaštite, a njena uloga zavisi od protokola. Ne mešajte je sa korisničkom lozinkom.
Izraz unapred dogovoreni ključ javlja se u dokumentaciji IPsec-a, OpenVPN-a i WireGuard-a, ali označava tri različita objekta. Jedan je tajna za autentifikaciju, drugi štiti kontrolni kanal, a treći dodaje materijal rukovanju koje već ima identitete. Ako ih tretirate kao zamenljive, dobićete vezu koja pada u fazi koju niko nije očekivao. Pročitajte šta polje u tom protokolu radi pre nego što u njega kopirate vrednost.
Tri protokola, tri značenja
Svaki protokol definiše zadatak ključa u sopstvenoj specifikaciji, a ti se zadaci ne preklapaju. Tajna za autentifikaciju dokazuje da dve strane znaju istu vrednost. Ključ kontrolnog kanala štiti pregovaranje koje sledi. Dodatak rukovanju menja raspored ključeva, ali ne menja to ko su strane.
Nijedna od tih uloga ne autentifikuje čoveka, a upravo ta zabuna oduzima najviše vremena. Unapred dogovoreni ključ se postavlja na uređaje ili pristupnike pre razmene, pa svaki vlasnik za drugu stranu izgleda isto. To svojstvo je prednost za vezu između dva rutera, a rizik za uslugu daljinskog pristupa sa imenovanim zaposlenima. Držite podatke za prijavu i kriptografsku tajnu u odvojenim kolonama dokumenta koji opisuje uvođenje.
IPsec i OpenVPN koriste tu reč drugačije
IKEv2 može autentifikovati stranu unapred dogovorenom tajnom umesto sertifikatima, a vrednost mora da se poklapa na obe strane. Pošto se ista tajna obično konfiguriše za grupu strana, svaki vlasnik može da se predstavi kao ostali, a razmena ne dobija nikakvu tajnost unapred iz ključeva identiteta koje nikada nije imala.
Opcije tls-auth i tls-crypt u OpenVPN-u pričvršćuju statični ključ na kontrolni kanal, dodajući potpis HMAC ili šifrujući samo pregovaranje. Taj ključ nije korisnička lozinka i ne zamenjuje klijentski sertifikat. Razlikovanje je važno pri obnovi, kada promena lozinke ostavlja ključ kontrolnog kanala netaknutim.
PSK u WireGuard-u dodaje, ne identifikuje
Strane WireGuard-a već imaju javne i privatne ključeve Curve25519, a rukovanje autentifikuje te identitete. Opcioni unapred dogovoreni ključ se umeša u lančani ključ i doprinosi simetrični materijal povrh razmene javnih ključeva.
Sam po sebi ne daje identitet ni korisnički nalog, pa operater ne može da razlikuje dva vlasnika po njihovom PSK-u. Obe strane moraju da nose istu vrednost, inače rukovanje ne uspeva bez korisne poruke o grešci. Zato rotaciju treba planirati za obe strane istovremeno, a ne kao uređivanje jednog fajla.
Proverite distribuciju, rotaciju i uklanjanje
Distribucija je slaba tačka svakog dizajna koji koristi jednu tajnu na mnogim mestima. Vrednost zalepljena u prozor razgovora, sačuvana u repozitorijumu ili ponovo iskorišćena među okruženjima skuplja kopije koje niko ne može da nabroji, a svaka kopija tiho širi obim štete.
Tekst Base64 nije šifrovanje. Tajna sačuvana pored javnog sertifikata u istom direktorijumu i dalje je tajna u čistom obliku.
openssl rand -base64 32
sudo wg show wg0 preshared-keys
sudo grep -R -n 'psk' /etc/ipsec.d/ 2>/dev/null
Rotirajte po rasporedu i nakon svake sumnjive izloženosti, ažurirajući svaku predviđenu stranu pre nego što opozovete staru vrednost. Zatim isprobajte vezu sa oba kraja, jer ključ koji se ne poklapa pada pri rukovanju i izgleda tačno kao problem sa vatrozidom.
Zapišite koja tajna štiti koju fazu, da se ponovno postavljanje lozinke nikada ne zameni sa obnovom kriptografskog ključa. Taj jedan red štedi sat svaki put kada neko pregleda uvođenje.