Tidak satu pun dari opsi-opsi itu yang secara khusus lebih baik atau lebih buruk daripada yang lain, karena semuanya sangat tidak aman. Saya akan dengan opsi 4.
SRAM adalah tempat paling aman untuk menyimpan kunci, tetapi Anda tidak boleh menyuntikkannya dari dunia luar. Mereka harus SELALU dihasilkan dalam prosesor, selama boot. Melakukan hal lain secara instan membatalkan sisanya - secara otomatis tidak aman.
Jangan menyimpan kunci dalam memori nonvolatile, Anda benar dalam hal ini. Tidak masalah jika Anda melindungi EEPROM atau memori flash agar tidak dibaca. Sekring proteksi baca kode itu mudah dibalik. Seorang penyerang hanya perlu memenggal kepala (mengeluarkan atau mengetsa secara kimiawi kemasan epoksi hitam untuk mengekspos silikon mati di dalamnya). Pada titik ini, mereka dapat menutupi bagian cetakan yang merupakan sel memori yang tidak mudah menguap (bagian-bagian ini sangat teratur dan sementara sel-sel memori individu sangat kecil untuk dilihat, struktur yang lebih besar dapat dilihat) dan sebagian kecil dari sesuatu buram ke UV ditutupi bagian itu. Kemudian penyerang hanya bisa menyinari sinar UV pada chip selama 5-10 menit, dan mengatur ulang semua sekering, termasuk sekering CRP. Memori OTP sekarang dapat dibaca oleh programmer standar.
Atau, jika didanai dengan baik (misalnya, mendapatkan kunci itu bernilai lebih dari $ 1000 untuk seseorang), mereka hanya dapat membaca sel memori secara langsung dengan beberapa jenis mikroskop elektron.
Agar aman, kunci harus dihapus, bukan disembunyikan.
- Tidak, untuk alasan yang sama di atas.
Sekarang, ke opsi 4:
- Cukup gunakan enkripsi. Distribusi kunci adalah masalah yang diselesaikan. Jadi gunakan solusi yang tersedia. Chip harus menggunakan RNG-nya dan berbagai pertimbangan lain harus dibuat untuk memastikan ia memiliki cukup pasokan entropi, dan boot loader harus mem-boot langsung ke dalam program yang menghasilkan kunci rahasia yang diperlukan, yang seharusnya bertujuan umum mendaftar dan pindah langsung ke SRAM, di mana mereka akan tinggal sampai terhapus.
Namun ada masalah, yaitu tidak ada apa-apa selain CPU yang tahu kunci kuncinya. Tidak masalah: gunakan kriptografi kunci publik. Apa yang Anda DO telah disimpan dalam memori OTP adalah kunci publik Anda. Kunci ini dapat dibaca oleh siapa saja, Anda dapat mempostingnya di pertukaran tumpukan, Anda dapat melukisnya di sisi kapal tanker minyak dengan huruf setinggi 5 kaki, tidak masalah. Hal yang luar biasa tentang kriptografi kunci publik adalah asimetris. Kunci untuk mengenkripsi sesuatu tidak dapat mendekripsi, yang memerlukan kunci pribadi. Dan sebaliknya, kunci untuk mendekripsi sesuatu yang dienkripsi oleh kunci publik tidak dapat digunakan untuk mengenkripsi sesuatu. Jadi, CPU membuat kunci rahasia, menggunakan kunci publik Anda yang tersimpan untuk ENCRYPT kunci rahasia, dan cukup mengirimkannya melalui USB atau RS232 atau apa pun yang Anda inginkan. Membaca kunci rahasia memerlukan kunci pribadi Anda, yang tidak perlu disimpan, dikirim, atau pernah terlibat sama sekali dengan chip. Setelah kunci rahasia didekripsi dengan kunci pribadi Anda (di tempat lain, di luar chip), Anda siap. Anda memiliki kunci rahasia yang ditransmisikan secara aman yang DIHASILKAN seluruhnya dalam chip, tanpa harus menyimpan apa pun kecuali kunci publik - yang sebagaimana dinyatakan sebelumnya, tidak perlu dilindungi sama sekali dari pembacaan.
Proses ini secara resmi disebut negosiasi kunci, dan setiap hal menggunakannya. Anda telah menggunakannya beberapa kali hari ini. Ada banyak sumber daya dan perpustakaan yang tersedia untuk menanganinya. Tolong, jangan pernah 'menyuntikkan' kunci apa pun.
Satu hal terakhir yang disebutkan: Semua ini diperdebatkan karena kunci AES dapat dengan mudah dipulihkan dengan menggunakan serangan saluran samping, yang terletak pada catu daya dan mengukur perubahan menit pada undian saat ini dan waktu antara perubahan yang disebabkan oleh bit yang terbalik di CPU. sebagai register. Ini, dikombinasikan dengan pengetahuan tentang bagaimana AES (atau apa pun dari sekian banyak algoritma enkripsi yang mungkin dapat digunakan) bekerja, membuatnya relatif mudah dan murah untuk memulihkan kunci. Itu tidak akan mengizinkan membaca kunci, tetapi dapat mempersempit ruang kunci untuk sesuatu yang sangat kecil, seperti 255 kunci yang mungkin. Chip juga tidak dapat mendeteksinya, karena hulu.
Ini telah mengalahkan boot loader terenkripsi AES-256 pada prosesor crypto 'aman' dan bahkan tidak terlalu sulit. Sejauh yang saya tahu, tidak ada langkah-langkah perangkat keras yang benar untuk serangan ini. Namun, itu adalah algoritma enkripsi itu sendiri, dan bagaimana mereka membutuhkan CPU untuk membalik bit, yang menyebabkan kerentanan ini. Saya menduga bahwa algoritma pembuktian sisi-channel atau side-channel perlu (dan mudah-mudahan) sedang dikembangkan.
Jadi seperti yang ada sekarang, jawaban sebenarnya untuk bagaimana menyimpan kunci (atau bahkan hanya menggunakan kunci sementara) pada perangkat yang tertanam dengan aman adalah: Anda tidak bisa.
Tetapi setidaknya jika Anda menghasilkan kunci baru setiap kali menggunakan negosiasi kunci di opsi 4, maka serangan saluran samping hanya dapat membahayakan kunci saluran yang sedang digunakan, dan hanya jika mereka memiliki waktu untuk memantau daya saat mengenkripsi data . Jika Anda sering menegosiasikan kunci baru yang dihasilkan secara internal, ini dapat memberikan jumlah keamanan yang bermanfaat.
Hasilkan kunci, dan simpan sesingkat mungkin.