Jika Anda dapat memiliki TCP ujung ke ujung, gunakan TLS ujung ke ujung (misalnya dengan HTTPS).
Jangan menemukan kembali roda, terutama ketika menyangkut kriptografi - kebanyakan orang salah. Kecuali jika perangkat terlalu terbatas sumber daya untuk mendukung TLS, jika Anda turun ke level AES, Anda salah melakukannya . Kesalahan # 1 adalah mengenkripsi dan lupa untuk mengautentikasi - jika Anda memiliki saluran terenkripsi antara server Anda dan man-in-the-middle, alih-alih saluran terenkripsi antara server Anda dan perangkat Anda, maka enkripsi belum memberikan manfaat apa pun . Jika Anda tidak dapat menggunakan TLS, pastikan protokol apa pun yang Anda gunakan mengotentikasi semuanya , dan mengenkripsi apa yang perlu dirahasiakan.
Untuk menggunakan TLS dengan aman, pikirkan jaminan apa yang perlu Anda miliki, dari sudut pandang masing-masing peserta. Umumnya perangkat perlu tahu bahwa itu berbicara ke server yang sah. Itu berarti harus memeriksa sertifikat server. Perangkat harus memiliki sertifikat X.509 dari otoritas sertifikat yang dicatat sebagai tepercaya; ini membutuhkan penyimpanan yang tidak dapat dimodifikasi oleh penyerang, tetapi tidak memerlukan kerahasiaan penyimpanan. Perhatikan bahwa Anda tidak boleh secara langsung membuat kode sertifikat server, karena itu tidak akan membiarkan Anda dengan mudah mengganti sertifikat itu jika dikompromikan. Sebagai gantinya, perangkat menyimpan identitas yang diharapkan(nama host) dari server, dan sertifikat otoritas sertifikat yang menjamin bahwa kunci publik tertentu milik nama host yang diharapkan. Sekali lagi, jangan menemukan kembali roda, bergantung pada pemeriksaan sertifikat yang disediakan oleh perpustakaan atau aplikasi TLS Anda.
Jika server perlu tahu bahwa itu berbicara kepada klien yang sah, maka setiap klien harus memiliki sertifikat klien sendiri. Itu membutuhkan penyimpanan rahasia pada klien. Lulus sertifikat klien ke fungsi pembukaan sesi TLS dari perpustakaan TLS Anda, atau atur dalam konfigurasi aplikasi.
Itu menjaga keamanan komunikasi antara server Anda dan perangkat Anda. Jika aplikasi seluler dapat berbicara dengan perangkat secara langsung (mis. Untuk memungkinkan operasi terputus saat berada di jaringan wifi lokal), Anda harus terlebih dahulu melakukan pemasangan antara sakelar cerdas dan ponsel. Pemasangan berarti pertukaran kunci, lebih disukai pertukaran kunci publik jika sumber daya mengizinkan, jika tidak, kesepakatan kunci rahasia. Tujuan dari pemasangan ini adalah untuk memastikan bahwa setiap perangkat tahu dengan siapa ia berbicara.
Anda juga harus mengamankan saluran kontrol, baik langsung dari perangkat seluler ke sakelar pintar atau melalui server. Pikirkan tentang otorisasi: apakah ada berbagai tingkat akses ke sakelar, mis. Tingkat kendali yang memungkinkan melakukan konfigurasi ulang dan saluran dasar yang hanya memungkinkan sakelar on / off? Ini umumnya ditangani oleh langkah otentikasi setelah membuat saluran aman (TLS jika memungkinkan).
Pertimbangan lain adalah pembaruan firmware. Itu yang rumit: di satu sisi, tidak ada yang namanya keamanan absolut, jadi Anda akan memiliki patch keamanan untuk diterapkan sekarang dan nanti. Di sisi lain, mekanisme peningkatan firmware adalah hal yang kompleks dan mungkin memiliki bug. Paling tidak, pastikan upgrade firmware Anda sudah ditandatangani. Bergantung murni pada keamanan saluran komunikasi untuk peningkatan adalah cerdik, karena tepercaya untuk saluran aman lebih besar daripada verifikasi keamanan statis, dan kadang-kadang Anda mungkin ingin menerapkan pembaruan firmware tanpa koneksi jaringan. Selain memverifikasi tanda tangan, idealnya Anda harus memiliki perlindungan terhadap rollback, sehingga musuh dapat '