menyimpan dan menggunakan kunci dengan aman di sistem tertanam

7

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!

Sonja
sumber
Bisakah Anda menjelaskan lebih lanjut tentang apa yang ingin Anda cegah? Apa yang dilakukan mikroprosesor? Apakah Anda pikir menggunakan kunci publik / pribadi mungkin berhasil? Jika Anda menyimpan kunci pribadi pada prosesor mikro? Kemudian perangkat yang mengirim perintah akan membuat kunci sesi, mengenkripsinya menggunakan kunci publik, dan mengirimkannya kepada Anda. Setelah itu, kedua belah pihak menggunakan kunci sesi. Apa yang akan terjadi jika penyerang memiliki kunci publik (yang, meskipun disebut "publik", sebenarnya tidak harus publik)?
mkeith
@keith saya memperbarui pertanyaan, semoga membantu :)
Sonja
3
Karena Anda telah memilih PIC itu, mengapa tidak menggunakan "Penyimpanan Kunci Aman terprogram" yang disediakannya? Ini memiliki modul kripto bawaan!
pjc50
2
Saya tidak berpikir Anda telah dengan jelas mengukur nilai rahasia Anda. Sepertinya Anda menginginkan metode yang murah dan andal (yang saya pikir tidak diketahui). Mintalah klarifikasi tentang apa yang perlu dilakukan setelah kerentanan ditemukan dalam solusi pertama ini. Pembaruan firmware over-the-air yang ditandatangani akan menjadi fitur pertama yang tidak dapat dinegosiasikan ... Ini masalah sistem - selalu.
Sean Houlihane
Nah, jika memori PIC dilindungi (dan bahkan memiliki modul penyimpanan kunci) mengapa tidak menggunakan enkripsi AES sederhana? Saya tahu ini simetris, tetapi jika servernya aman (yang harus kita asumsikan) maka tidak ada risiko di sini - atau ada di sana?
Jan Dorniak

Jawaban:

11

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.

redup
sumber
pertama-tama, terima kasih atas jawaban yang rumit! Saya memperbarui pertanyaan dengan cara yang saya yakin akan menjawab Anda :)
Sonja
Apa yang saya lakukan dari pengeditan pos Anda adalah hanya kunci yang perlu diamankan. Hasil aktual dari perintah tidak perlu diamankan. Dalam hal ini, letakkan kunci dalam modul aman eksternal seperti yang Anda sarankan, dan terima bahwa perintah yang didekripsi dapat dilihat dengan jelas. Jika saran saya tidak valid karena beberapa alasan, luangkan waktu untuk menjelaskan secara terperinci apa yang dapat diterima dan apa yang tidak . Bukan hanya satu kalimat lagi dalam posting Anda yang kami butuhkan. Kita membutuhkan gambaran keseluruhan dari hal itu. Betulkah.
redup
5
Juga, saya merasa bahwa enkripsi perintah sebenarnya bukan yang ingin Anda lakukan. Biasanya, kita perlu mengenkripsi data (beberapa informasi tentang sesuatu, atau dokumen ...). Tetapi kita jarang perlu mengenkripsi perintah yang dikirim ke perangkat. Apa yang biasanya diperlukan pada perintah adalah menandatanganinya , untuk menjamin bahwa itu datang dari pihak yang berwenang. Tetapi sebenarnya konten mereka jarang sensitif. Jadi Anda harus mengkonfirmasi ini juga.
redup
2

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.

Hildred
sumber
Dekripsi data dibuat dengan kunci pribadi (dan enkripsi dengan kunci publik). Jika tidak, itu berarti semua orang dapat mendekripsi (karena setiap orang memiliki akses ke kunci publik), yang akan menjadi masalah. Karena itu, Anda perlu kunci pribadi berada di perangkat. Jadi, sekarang, bagaimana cara memasukkan kunci pribadi di perangkat? Nah, kembali ke masalah awal ...
redup
bisa mendekripsi perintah tidak memungkinkan membuat yang baru dari awal sehingga kunci publik dapat diakses entah bagaimana tidak banyak masalah
masterX244
Ini umumnya sama dengan penandatanganan kriptografi; yang memang memiliki kerugian bahwa jika seseorang memiliki kunci publik (sebenarnya tidak harus publik, dapat disimpan dengan aman seperti kunci simetris) mereka dapat mendekripsi semuanya; tetapi, seperti yang dikatakan masterX244, Anda biasanya tidak dapat membuat / menandatangani perintah baru. Saya pikir ini adalah solusi yang baik.
CoderTao
0

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.

Stephen C. Steel
sumber