Embedded
在嵌入式設備的記憶體中儲存安全密鑰
我正在開發一種嵌入式設備,它發送/接收數據並以密文模式(加密模式)儲存它們。現在儲存密鑰的最佳方法是什麼(我使用的是 ARM CORTEX M 系列 MCU)?
- 將密鑰儲存在 SRAM 儲存器中,在每個啟動序列中,將密鑰注入嵌入式 MCU 並將它們儲存在 SRAM 儲存器中。我認為這是最好的方法,然後當 MCU 感應到滲透(使用篡改感測器或……)時,它可以快速擦除 SRAM 並自行重置。缺點:如果攻擊者成功通過篡改和訪問設備,SRAM記憶體的安全性(防止程式碼探勘)。我在 MCU 中找不到此記憶體的任何安全功能。
- 生成密鑰並將其儲存在程式 MCU 的快閃記憶體中。MCU快閃記憶體支持CRP(程式碼讀取保護),可防止程式碼探勘,借助其內部的AES引擎和RNG(隨機數生成)引擎,我們可以製作隨機密鑰並加密快閃記憶體並將該隨機密鑰儲存在OTP中(一次可程式儲存器 - 128 位加密儲存器),然後在程式碼執行中,我們使用 RNG 密鑰解碼快閃記憶體並訪問初始密鑰和程式碼。缺點:密鑰儲存在非易失性儲存器中,篡改將無用,攻擊者有大量時間來探勘密鑰。
- 將密鑰儲存在 EEPROM 儲存器中,結合上述 2 種方法,密鑰儲存在非易失性儲存器中,但當篡改感知穿透 EEPROM 時可擦除。我考慮使用 LPC18S57FBD208(具有 1MB 快閃記憶體、180MHZ、136KB SRAM、16KB EEPROM 和 TFT LCD 控制器的皮質 m3,我需要驅動 7" TFT LCD 和 AES 128 位加密引擎),還有其他更好的建議嗎?
第 2 部分:我也在使用像 CLRC663 這樣的 PCD(接近耦合設備或讀卡器)來讀取 RFID 標籤。PCD和MCU之間的連接基於SPI,由於它們之間的連接不安全且未加密,每個攻擊者都可以嗅探連接並獲得用於讀取和寫入RFID標籤的密鑰。你對此有何建議?
將密鑰儲存在 RAM 中的一個問題是,存在涉及擦除快閃記憶體以解鎖設備然後使用調試器複製 RAM 內容的攻擊。內部 EEPROM 的問題與 RAM 相同,除非您可以鎖定它。外部 EEPROM 更糟,除非您對其進行加密。
我的 druthers 會將密鑰儲存在快閃記憶體中,然後鎖定處理器以禁用調試訪問。如果可能,為每個設備使用單獨的密鑰。如果您將密鑰複製到 ram,請確保完成後它被覆蓋。