Zašto openssl rand ne može napraviti ključ kakav tls-crypt traži
OpenSSL proizvodi slučajne bajtove; tls-crypt traži strukturiranu datoteku statičkog ključa, a tls-crypt-v2 traži ključ koji samo poslužitelj može umotati. Koristite openvpn --genkey.
OpenSSL je već instaliran, host ima entropiju, i generiranje ključa njime izgleda kao očigledna prečica. Izlaz će biti slučajan i tajan i potpuno neupotrebljiv, a greška stiže kao greška kontrolnog kanala, a ne kao nešto što spominje format ključa. To zavaravanje je skupi dio, jer ljude šalje da pregledaju svoje šifre. Ono što VPN čita jest određena struktura datoteke, a ne proizvoljan blok bajtova, i jedna varijanta te funkcije uopće se ne može proizvesti izvan poslužitelja.
Šta datoteka na disku zapravo mora biti
Datoteka statičkog ključa OpenVPN-a je tekst. Počinje komentarom koji objavljuje šta je, nosi heksadecimalne podatke u redovima fiksne širine i ukupno sadrži 256 bajtova ključnog materijala. OpenVPN je čita kao zajedničku tajnu kontrolnog kanala, ne kao certifikat, ne kao lozinku i ne kao nešto što bi TLS biblioteka prepoznala.
Isti tip objekta služi objema funkcijama kontrolnog kanala. Uz tls-auth, svaki peer treba i smjer kako se paketi jedne strane ne bi mogli odraziti natrag na nju. Uz tls-crypt, jedna zajednička tajna šifrira i autentificira kontrolni kanal u oba smjera, što skriva rukovanje i istovremeno ga štiti.
Ništa od toga nije tajno znanje, a format nije poanta. Poanta je da datoteka mora tačno odgovarati onome što čitatelj očekuje: zaglavlje, širina reda, završni prijelom retka i ukupna dužina. Datoteka koja je jedan red pogrešna učitava se kao smeće ili uopće ne uspijeva. Zato je poređenje dvaju peerova bajt po bajt legitiman prvi test i brže je od čitanja bilo koje od dviju konfiguracijskih datoteka.
Podržani način da se jedna napravi
Generirajte obični statički ključ alatom koji će ga trošiti, a zatim ga referencirajte s oba kraja:
openvpn --genkey secret /etc/openvpn/tc-shared.key
tls-crypt /etc/openvpn/tc-shared.key
Pravopis opcije mijenjao se s vremenom: starije instalacije iz ere 2.4 koristile su oblik s odvojenom zastavicom prije imena datoteke, dok trenutne gradnje prihvaćaju kraću. U svakom slučaju rezultirajuća datoteka je ista vrsta objekta, pa je provjera jesu li oba peera identični bajtovi.
Druga generacija dodaje strukturu koju nijedan vanjski generator ne može izmisliti. Poslužiteljski ključ stvara se jednom, a svaki klijent dobiva umotani ključ izveden iz njega:
openvpn --genkey tls-crypt-v2-server /etc/openvpn/tc-v2-server.key
openvpn --genkey tls-crypt-v2-client /etc/openvpn/laptop1.key --tls-crypt-v2 /etc/openvpn/tc-v2-server.key
Ono što klijent dobiva nije umnoženi vlastiti ključ poslužitelja. To je umotani objekt koji nosi metapodatke koje samo poslužitelj može odmotati, i upravo to umotavanje razlog je zašto se datoteka za pojedini uređaj može opozvati bez diranja bilo kojeg drugog uređaja. Držite poslužiteljski ključ na poslužitelju i tretirajte ga kao korijen tog povjerenja po uređaju.
Gdje se ručno napravljeni bajtovi lome
Ispis 256 slučajnih bajtova kao heksadecimalnog zapisa pod ispravnim zaglavljem teoretski bi dao datoteku statičkog ključa koja se učitava. Ipak je loša ideja. Svaki detalj formatiranja postaje prilika za proizvodnju materijala koji ne uspijeva pri učitavanju ili, gore, ostavlja dva peera s različitim vrijednostima koje se otkrivaju tek kao neuspjeh autentifikacije.
S varijantom v2 ništa ekvivalentno nije moguće. Umotani klijentski ključ postoji samo kao izlaz poslužiteljskog procesa ključa, a poslužitelj zadržava materijal potreban za njegovo odmotavanje. Slučajni blob bit će odbijen ili jednostavno neće moći dešifrirati, i nijedna od dviju poruka neće spomenuti slučajnost.
Kompatibilnost verzija stoji na svemu tome. Prva generacija treba izdanje koje je podržava na oba kraja, a druga opet treba novije izdanje. Klijent izgrađen prije postojanja funkcije ne može dovršiti rukovanje s poslužiteljem koji prihvaća samo umotani materijal, a neuspjeh koji prijavljuje upućuje na kontrolni kanal, a ne na verziju.
Rotacija bez zaključavanja svih
Rotacija jedne zajedničke tajne je vježba koordinacije, a ne tehnička. Svaki klijent treba imati zamjensku datoteku prije nego poslužitelj povuče prethodnu, a svako računalo koje još drži staru vrijednost ne uspijeva u trenutku kad se to dogodi. Ne započinjite tu rotaciju usred radnog dana.
S rasporedom v2 rotacija je po uređaju: izdajte novi umotani ključ za jedno računalo i povucite stari samo za to računalo. To je glavni argument za prelazak kad je svaki klijent na izdanju koje ga podržava.
Dozvole datoteka pripadaju istom razgovoru. Ključ bi trebao biti čitljiv samo računu koji pokreće uslugu i ne bi trebao živjeti u istom repozitoriju kao profili koje štiti. OpenVPN 2.6 referenca dokumentira oblike generiranja i odjeljke o ključnom materijalu, što je bolji izvor od kopirane naredbe s forumske objave.