Enkripsi simetris vs. kunci publik di VPN: apa fungsi masing-masing
VPN mengautentikasi rekan dengan kunci publik, lalu mengenkripsi paket dengan kunci sesi turunan. Perlakukan sertifikat dan kunci lalu lintas sebagai objek berbeda.
Orang menggambarkan VPN sebagai „yang memakai enkripsi kunci publik“ lalu membayangkan setiap paket dikunci dengan sertifikat server. Gambaran itu salah dengan cara yang penting saat Anda membaca berkas konfigurasi atau rekaman paket. Separuh kunci publik dari VPN adalah tentang membuktikan siapa rekannya dan menyepakati bahan rahasia; separuh simetris adalah yang benar-benar melindungi lalu lintas, paket demi paket, sepanjang umur sesi.
Kedua belahan memiliki masa hidup, mode kegagalan, dan hal yang aman diterbitkan berbeda. Setelah Anda memisahkannya, pertanyaan seperti „apakah RSA 2048 lebih lemah daripada AES-128“ berhenti membingungkan, karena keduanya tidak pernah sebanding.
Tiga operasi yang sering dicampur
Kriptografi kunci publik adalah payung atas setidaknya tiga operasi berbeda. Tanda tangan membuktikan bahwa pemegang kunci privat menyetujui pesan tertentu. Kesepakatan kunci memungkinkan dua rekan menurunkan rahasia bersama dari nilai yang mereka tukarkan secara publik. Enkripsi kunci publik menyembunyikan data di bawah kunci publik seseorang sehingga hanya kunci privat yang dapat membukanya.
Jabat tangan VPN sebagian besar memakai dua yang pertama. Sertifikat bukan kunci enkripsi; itu pernyataan bertanda tangan yang mengikat nama ke kunci publik dan memungkinkan pihak lain memutuskan apakah akan memercayai kunci yang baru diterimanya. Pembentukan kunci TLS 1.3, misalnya, dibangun di atas kesepakatan kunci (EC)DHE ditambah tanda tangan sertifikat, bukan pada enkripsi sesi dengan kunci publik server.
Apa yang sebenarnya dihasilkan jabat tangan
Dalam jabat tangan modern, tiap pihak membuat pasangan kunci efemeral, menukar belahan publik, dan menghitung rahasia bersama yang tidak pernah melintasi kabel. Rahasia itu lalu dijalankan melalui fungsi turunan kunci untuk menghasilkan kunci terpisah bagi setiap arah, ditambah nonce dan bahan IV yang dibutuhkan lapisan rekaman. WireGuard melakukannya dengan konstruksi berbasis Noise; TLS 1.3 melakukannya dengan HKDF di atas transkrip jabat tangan.
Kredensial jangka panjang — sertifikat dan kunci privat, atau kunci WireGuard statis — mengautentikasi pertukaran itu. Ia menandatangani atau bercampur ke dalam transkrip agar orang asing tidak dapat menyelesaikan jabat tangan menggantikan rekannya. Setelah itu, kredensial tidak melakukan kerja per paket. Jika melakukannya, setiap paket membutuhkan operasi kunci privat, dan terowongan yang sibuk akan dibatasi oleh operasi paling lambat di tumpukan.
Dua efek samping menyusul. Pertama, kunci sesi selalu baru, karena itu penyerang yang kemudian mencuri kunci jangka panjang tidak dapat mendekripsi sesi yang direkam sebelumnya, asalkan kesepakatannya efemeral. Kedua, kunci sesi yang bocor membahayakan satu sesi, bukan identitas.
Mengapa data bervolume besar memakai kunci simetris
Sandi simetris menangani volume dengan baik: AES-GCM atau ChaCha20-Poly1305 memproses setiap paket dengan kunci yang sudah ada di memori, mengautentikasi tajuk, dan menaikkan penghitung. Sisi penerima memeriksa nonce dan tag autentikasi, dan membuang apa pun yang gagal atau terulang. Itu cukup murah untuk berjalan pada kecepatan jalur di perangkat keras biasa, dan konstruksi yang sama memberi kerahasiaan dan integritas dalam satu lintasan.
Konstruksi itu juga tempat sebagian besar bug implementasi hidup. Nonce berulang di GCM merusak kerahasiaan dan keaslian sekaligus, karena itu protokol menurunkan kunci per arah dan memelihara penghitung atau epoch eksplisit. Jika Anda membaca rekaman paket dan panjang teks tersandi cocok dengan teks biasa ditambah tambahan tetap, lapisan simetrislah yang bekerja, bukan operasi kunci publik per paket.
Masa hidup, pembaruan kunci, dan kerahasiaan ke depan
Kunci sesi dimaksudkan untuk kedaluwarsa. TLS 1.3 mengizinkan pesan KeyUpdate menggulir kunci lalu lintas; WireGuard memperbarui sesi setelah waktu atau jumlah pesan yang dikonfigurasi dan menyimpan yang lama sebentar untuk paket yang masih dalam perjalanan. OpenVPN menegosiasikan ulang kunci kanal datanya menurut jadwal, dengan reneg-sec mengendalikan interval.
Tak satu pun dari rotasi itu sama dengan memperbarui sertifikat. Sertifikat dapat berlaku setahun sementara kunci sesi berubah tiap beberapa menit, dan sertifikat dapat diganti tanpa menyentuh kunci terowongan yang berjalan. Saat merencanakan kedaluwarsa, tanyakan objek mana yang Anda putar; jawabannya menentukan apakah klien menyambung ulang atau sekadar memperbarui kunci.
Membaca konfigurasi dan diagnostik tanpa mencampur objek
Dalam praktik, Anda memilih protokol lengkap dan primitif yang didukungnya, bukan merakit sendiri. Kunci --tls-crypt OpenVPN melindungi kanal kendali; kanal data memakai sandi simetris yang dinegosiasikan. Entri PrivateKey dan PublicKey WireGuard adalah bahan identitas, sedangkan kunci transportnya diturunkan secara internal. Membaca bidang itu sebagai jenis rahasia yang sama menuntun pada kesalahan seperti menempelkan kunci publik di tempat kunci privat seharusnya berada.
Jauhkan bahan publik dari yang privat. Sertifikat, kunci publik WireGuard, dan sidik jari aman dibagikan dalam tiket. Kunci privat, kunci pra-berbagi, dan kunci sesi yang diekspor tidak. Saat membandingkan kekuatan, bandingkan dalam satu jenis: pengenal kurva eliptik, ukuran modulus RSA, dan ukuran kunci AES mengukur hal berbeda di bawah asumsi berbeda. Spesifikasi TLS 1.3 adalah rujukan berguna tentang bagaimana kedua lapisan cocok, bahkan saat terowongan Anda bukan TLS.