Saya menggunakan mikroprosesor - PIC32MZ2048efm144 MCU yang menerima perintah yang dienkripsi dengan kunci tertentu , mendekripsi mereka dan mengeksekusi perintah. Perintah terenkripsi disimpan offline , jadi saya tidak bisa hanya mengubah kunci kapan pun saya mau. Kuncinya adalah TETAP . Perintah dienkripsi oleh server , dan di-donwload oleh telepon . Telepon mengirim perintah terenkripsi ke MCU di lain waktu, saat tidak online . Perintah dienkripsi sebelum telepon mengkomunikasikannya ke MCU, jadi kunci sesi tidak mungkin.
Saya diizinkan untuk menghubungkan modul enkripsi / dekripsi eksternal ke PIC, tetapi kemudian data akan lulus didekripsi setidaknya dalam satu arah ..
Solusi yang dibawa ke sini: Menyimpan kunci aman di memori perangkat yang disematkan
menggunakan kunci satu kali untuk mengenkripsi, tapi saya perlu menyimpan kunci super rahasia
Yang diminta majikan saya adalah agar kunci tidak dapat diakses, jadi perlindungan fisik selain yang ditawarkan oleh modul memori aman dan MCU, tidak dipertimbangkan.
Dengan asumsi tidak ada peralatan kelas militer yang digunakan, apakah ada solusi tahu yang kalian ketahui dan dapat rekomendasikan?
Terima kasih sebelumnya!
Jawaban:
Maaf jawaban ini tidak akan menyelesaikan masalah Anda. Tetapi terlalu panjang untuk memuat komentar, dan itu akan memungkinkan Anda untuk memikirkan kembali masalah Anda dengan cara yang benar (karena seperti itu, saya pikir itu cacat).
Masalah seperti ini harus diselesaikan dengan mempertimbangkan semua komponen sistem, dan membuat asumsi yang masuk akal tentang apa yang bisa atau tidak bisa dilakukan oleh peretas potensial.
Sebagai contoh:
Anda mengatakan: "PIC32MZ2048efm144 (MCU) menerima perintah yang dienkripsi dengan kunci tertentu, mendekripsi mereka dan mengeksekusi perintah". Saya kira hasil dari eksekusi perintah ini adalah mengaktifkan beberapa GPIO untuk menjalankan beberapa hal.
Lalu, mengapa Anda takut bahwa, berpotensi, beberapa data melewati dekripsi antara MCU dan modul enkripsi / dekripsi? Seorang peretas yang memiliki akses ke perangkat keras untuk melihat perintah yang didekripsi akan, bagaimanapun, dapat langsung bertindak pada GPIO MCU dan "menjalankan barang" dengan mudah.
Contoh kedua:
Menggunakan kunci tepat waktu adalah ide. Tetapi seperti yang Anda katakan, di mana Anda menyimpan kunci master utama yang digunakan untuk menghasilkan kunci satu kali? Anda akan menghadapi pertanyaan yang sama persis dengan masalah awal Anda.
Sebenarnya, tidak ada cara untuk membuat sistem Anda aman jika Anda mengira seorang peretas berpotensi menyelinap di lokasi mana pun di sistem Anda (yang menurut saya Anda anggap sekarang).
Lalu apa yang membuat sistem aman?
Kartu pintar dibuat aman karena tidak beralasan untuk berasumsi seorang peretas dapat menyelidiki rute internal dalam IC, antara memori dan blok CPU.
Kunci pintu listrik dibuat aman karena tidak beralasan untuk menganggap seorang hacker dapat mencapai kabel yang menggerakkan kunci.
Dll ... Pada dasarnya, Anda harus mulai dengan mengidentifikasi hal-hal yang tidak dapat dilakukan oleh peretas , dan menyelesaikan seluruh solusi Anda dari sana. Sebagai contoh, apakah mungkin untuk menempatkan seluruh sistem Anda di dalam kotak yang aman, tahan-perusakan fisik? Dalam hal ini, Anda dapat dengan bebas memiliki perintah yang didekripsi melewati bus internal.
Anda tidak dapat membangun sistem yang aman tanpa mengetahui apa yang tidak bisa dilakukan oleh peretas. Anda tidak memberi tahu kami tentang itu. Karena itu kami tidak dapat mengusulkan solusi lengkap.
sumber
Ini terlihat seperti kasus klasik di mana enkripsi kunci asimetris akan berguna. Dalam enkripsi kunci asimetris Anda memiliki dua kunci, satu kunci pribadi dan satu kunci publik. Anda ingin sepenuhnya melindungi kunci pribadi, tetapi kunci publik dapat dibuat publik dan tidak memerlukan perlindungan. Anda mungkin dapat menyimpan kunci pribadi pada sistem yang aman dan kunci publik pada perangkat yang disematkan.
sumber
Anda tidak menjelaskan mengapa Anda ingin perintah dienkripsi (dengan kata lain, apa model ancaman Anda). Apakah tujuan Anda untuk mencegah musuh yang memiliki perangkat berbasis PIC dari menentukan apa perintah yang dikirim kepadanya? Atau apakah Anda mencoba untuk mencegah perangkat berbasis PIC dari mengeksekusi serangkaian perintah yang diganti oleh musuh dan hanya memungkinkannya untuk mengeksekusi perintah yang berasal dari server Anda?
Jika yang pertama, Anda menghadapi tugas yang hampir mustahil: perangkat Anda harus mendekripsi perintah untuk menjalankannya - kepemilikan perangkat PIC berarti memiliki kunci dekripsi. Musuh dapat mengekstrak kunci (disimpan dalam perangkat PIC yang dimilikinya), atau cukup menunggu hingga firmware Anda mendekripsi perintah dan kemudian menangkapnya dari memori.
Sebaliknya, jika Anda hanya berusaha memastikan bahwa perangkat Anda hanya akan menjalankan perintah yang berasal dari server Anda, Anda beruntung. Dalam hal ini Anda dapat menggunakan enkripsi kunci publik (misalnya RSA) atau skema tanda tangan digital kunci publik (mis. DSS). Dalam hal ini, perangkat Anda hanya menyimpan kunci publik: ini cukup untuk mendekripsi perintah (atau memverifikasi tanda tangan digital), tetapi tidak dapat digunakan untuk mengenkripsi perintah (atau menghasilkan tanda tangan digital) yang akan diterima perangkat. Itu membutuhkan kunci pribadi, yang Anda gunakan untuk mengenkripsi (atau menandatangani) perintah sebelum mengirimnya. Kunci pribadi tidak perlu keluar dari server Anda. Lebih baik lagi, mengenkripsi tanda perintah pada mesin yang tidak berkomunikasi secara eksternal dan hanya menyalinnya ke server sehingga kunci pribadi tidak pernah ditemukan di server yang dapat diakses secara eksternal.
sumber