Kunci WireGuard di ESP32: per perangkat atau satu kunci tertanam?
Kunci yang dikompilasi ke dalam firmware ESP32 adalah identitas peer, bukan kata sandi. Putuskan dengan tiga syarat: penguasaan fisik, perlindungan flash, dan penggunaan ulang di seluruh armada.
Sketsa menaruh kunci privat WireGuard di dalam larik karakter, dan terowongan berfungsi, itulah sebabnya pertanyaan ini terus muncul. Keputusan yang benar-benar harus Anda ambil bukanlah «apakah ini aman» melainkan «syarat mana dari tiga yang berlaku untuk penerapan ini». Ketiganya: siapa yang dapat memegang perangkat secara fisik, apa yang dihasilkan pembacaan flash pada komponen Anda, dan apakah armada berbagi satu kunci atau masing-masing membawa kuncinya. Jawab itu dan desainnya mengikuti, karena tiap syarat mengubah biaya kunci yang bocor, bukan fakta bahwa kunci itu bisa bocor.
Apa yang diotorisasi kunci
WireGuard mengautentikasi peer dengan kunci publik. Server memetakan kunci publik tiap peer ke sebuah alamat dan AllowedIPs daftar, jadi kunci privatlah yang memungkinkan klien mengirim lalu lintas dari alamat itu.
Entri yang sama menentukan tujuan mana yang dapat dijangkau perangkat, jadi kunci yang bocor membuka jaringan di belakang terowongan sekaligus alamat terowongan.
Syarat pertama: siapa yang dapat memegang perangkat
Jika unit berada di lemari terkunci dan tidak ada orang di luar tim Anda yang menyentuhnya, paparannya terutama soal distribusi firmware. Jika dikirim ke pelanggan, berada di kendaraan, atau kembali dalam masa garansi, penguasaan fisik adalah kredensialnya dan kerahasiaan biner menjadi sekunder. Orang yang memegang perangkat tidak perlu membaca kuncinya, karena firmware yang berjalan akan membukakan terowongan untuknya. Itulah sebabnya jawaban di sisi server harus mencakup pencabutan dan masa hidup terbatas, bukan hanya citra yang dilindungi.
Putuskan syarat ini sebelum dua syarat lainnya, karena syarat ini menetapkan anggaran untuk keduanya.
Syarat kedua: apa yang dihasilkan pembacaan flash
Siapa pun yang dapat membaca citra flash memulihkan kunci yang disimpan sebagai literal, baik melalui koneksi debug, berkas pembaruan, cadangan, maupun unit yang dikembalikan. Enkripsi flash menaikkan biaya dump langsung, dan dokumentasi ESP-IDF menjelaskan apa yang dicakup fitur ini untuk komponen dan konfigurasi tertentu. Fitur itu tidak membuat kunci tak dapat diekstrak pada semua model serangan, dan tidak berbuat apa pun untuk kasus perangkat di tangan. Perlakukan sebagai satu lapisan yang mengubah biaya, bukan sebagai jawabannya.
Baca dokumentasi platform untuk chip dan konfigurasi persis Anda sebelum mengklaim properti dalam tinjauan desain.
Syarat ketiga: penggunaan ulang di seluruh armada
Satu kunci untuk satu batch produksi berarti setiap unit berbagi satu identitas. Server tidak dapat membedakannya di log, tidak dapat mencabut satu tanpa mencabut semuanya, dan tidak dapat membedakan klon dari aslinya. Kunci per perangkat memperbaiki ketiganya, dengan biaya satu langkah pendaftaran dan pemetaan nomor seri ke kunci publik. Pemetaan itulah aset yang mengubah pencabutan menjadi perubahan satu baris alih-alih reflash seluruh armada.
Jika armadanya lima unit di meja kerja, berbagi kunci bisa jadi pertukaran yang wajar. Jika lima ratus di lapangan, itu bukan pertukaran sama sekali.
Pola pendaftaran yang membuat kunci per perangkat praktis
Buat pasangan kunci di perangkat saat boot pertama, simpan separuh privat di penyimpanan non-volatil yang terlindungi, dan kirim hanya kunci publik ke layanan pendaftaran yang menetapkan alamat dan menulis entri peer. Autentikasi respons pendaftaran, jika tidak, penyerang di jaringan lokal dapat mendaftarkan kuncinya sendiri ke akun Anda. Jangan pernah mencetak kunci privat ke konsol serial selama penyediaan. Catat nomor seri perangkat di samping kunci publik, sehingga unit yang hilang dipetakan tepat ke satu entri peer.
Itu layanan kecil, dan itulah bedanya antara armada yang dapat Anda audit dan armada yang hanya dapat Anda reflash.
Waktu, endpoint, dan keputusannya
Contoh menyinkronkan waktu sebelum memulai terowongan, dan itu penting di luar TLS: jabat tangan WireGuard membawa stempel waktu untuk perlindungan replay, jadi perangkat yang boot dengan jam salah dapat mengalami jabat tangan ditolak. Endpoint adalah nama host, yang menempatkan DNS di jalur kepercayaan meski kunci publik server tetap mengautentikasi peer. Alamat yang salah membuang percobaan dan mengungkap kapan perangkat online. Tangani keduanya sebelum berdebat soal kuncinya.
Lalu putuskan: kunci bersama hanya selama penguasaan terkendali dan armada kecil, kunci per perangkat begitu salah satunya tidak lagi benar.