Mengamankan firmware dari ancaman nyata: threat model perangkat embedded, secure boot dan root of trust, pemilihan kriptografi AES/SHA/ECC beserta key management, anti-tamper, serta langkah hardening agar firmware tahan terhadap reverse engineering dan serangan fisik.

Setelah di episode 17 data kita tersimpan aman, pada episode ini kita mengamankan perangkat itu sendiri. Di 2026, security-by-design bukan pilihan — ia syarat tender, regulasi, dan reputasi. Perangkat yang mudah dibajak bukan hanya merugikan pemiliknya, tapi bisa menjadi bagian dari botnet atau pintu masuk jaringan perusahaan.
Mengapa keamanan firmware berbeda dari keamanan server? Karena attacker memegang perangkatnya secara fisik. Mereka bisa membaca flash, memanipulasi pin, menganalisis arus dan timing, bahkan melepas chip. Desain keamanan embedded harus bertahan dari ancaman yang tidak ada di dunia cloud.
Mulai dengan bertanya: siapa musuh, apa aset, apa konsekuensinya?
| Aset | Ancaman | Konsekuensi |
|---|---|---|
| Firmware image | Reverse engineering | Kloning produk, temukan kunci |
| Private key / credential | Ekstraksi | Berpura-pura jadi perangkat |
| Data pengguna | Kebocoran | Pelanggaran privasi/regulasi |
| Integritas perangkat | Modifikasi image | Botnet, backdoor |
| Keamanan fisik | Tamper (buka, probe) | Akses kunci/flash |
Mengenali aset dan ancaman menentukan seberapa dalam kalian berinvestasi. Alat pacemaker butuh proteksi lebih dari smart lamp — trade-off biaya vs risiko harus eksplisit, bukan kebetulan.
Kita sudah merancang bootloader di episode 13; sekarang kita perkuat dengan root of trust:
Hardware root of trust (public key di ROM/fuse)
-> verifikasi bootloader (signature ECDSA/RSA)
-> verifikasi aplikasi (signature)
-> verifikasi update OTA (signature)Debug port (JTAG/SWD) adalah pintu belakang raksasa: di produksi, nonaktifkan atau proteksi dengan password agar tidak ada yang bisa attach debugger dan membaca memori.
Pilih algoritma sesuai peran, bukan tren:
| Kebutuhan | Algoritma | Keterangan |
|---|---|---|
| Integritas data | SHA-256/384 | Hash pesan & image |
| Kerahasiaan data | AES-128/256 | Enkripsi data at rest / komunikasi |
| Tanda tangan | ECDSA-P256 / RSA-PSS | Verifikasi image & update |
| Random number | TRNG/HWRNG | Kunci, nonce, IV — jangan PRNG |
CPU kecil tidak menangani AES-256 secara real-time tanpa bantuan:
Kunci yang bisa dibaca = kunci yang tidak ada:
✓ Kunci sign produksi: simpan di HSM, jangan pernah di repo/CI
✓ Kunci perangkat: di secure element / secure storage terenkripsi
✓ Ganti default credential; generate unik per perangkat
✓ Rencanakan rotasi & revocation sejak desain
✓ Jangan hardcode kunci di source code (pernah bocor = hancur)Serangan fisik membutuhkan respons fisik:
☐ Secure boot aktif (signature setiap layer)
☐ Debug port dinonaktifkan / password di produksi
☐ Stack canary + MPU aktif
☐ Data Execution Prevention: stack/data non-executable (W^X)
☐ Minimal attack surface: matikan peripheral & fungsi tak terpakai
☐ Input divalidasi ketat (parser, protokol, ukuran buffer)
☐ Logging & alarm keamanan (upaya brute force, boot aneh)
☐ Update signature + anti-rollback (episode 19)Important
Keamanan bukan fitur yang "ditempel" di akhir — keputusan (key storage, debug port, MPU, secure boot) memengaruhi skema hardware. Mulai dari desain awal. Produk yang di-hardening setelah selesai hampir selalu menyisakan celah struktural yang tidak bisa ditutup tanpa desain ulang.
Audit kode kalian dengan lensa attacker:
1. Amati trace power/IO - bisakah melihat alur boot & data?
2. Coba attach debugger (JTAG/SWD) - apakah terkunci?
3. Baca flash dengan programmer - apakah image terenkripsi?
4. Uji parser protokol dengan input acak (fuzzing sederhana)
5. Cek apakah sertifikat/kunci bisa diekstrak dari image
6. Evaluasi: seberapa mahal memecahkan perangkat ini?Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita menutup lingkaran keamanan update: Secure OTA & Update — signed update, rollback protection, dan integritas end-to-end sehingga perangkat hanya bisa diperbarui oleh kalian. Update kalian akan aman dari ujung ke ujung!