Authenticated-Encryption
如何為嵌入式設備強制執行分佈式韌體映像的數據隱私、完整性和真實性?
我正在為嵌入式設備開發引導載入程序,客戶(即設備所有者)應該可以使用它來更新設備的韌體。要求:
- 韌體是加密分發的
- 韌體的完整性受到保護
- 韌體是真實的,這意味著它是由我們(製造商)發布的。
基於我對密碼方案的有限知識,我想出了以下潛在的解決方案(見下文解釋):
- 為了加密和數據完整性,韌體將在 EAX 模式下使用 AES256 使用密鑰進行加密,該密鑰在製造商和設備上的引導載入程序之間共享,此外還有一個隨機數(即初始化向量),該隨機數(即初始化向量)使用加密(簽名)一個私有 RSA 密鑰
- 然後將 AES 加密韌體和 RSA 加密隨機數分發給客戶
- 然後,客戶設備上的引導載入程序將使用“公共”RSA 密鑰(以確保真實性)解密隨機數,並使用 AES 密鑰和隨機數解密韌體
這是否構成安全引導載入程序的有效方案(在數據隱私、完整性和真實性方面)?
我知道在 EAX 模式下使用 AES 已經提供了數據真實性,但是我想確保在 AES 密鑰被洩露的情況下仍然可以確保真實性。
首先,如果您要對某物進行簽名,您應該使用簽名算法,而不是使用私鑰的“RSA 加密”,它本身可能非常弱。
現在這裡的主要問題是 RSA 部分只是驗證隨機數。任何知道 AES 密鑰的人都可以使用他們已經看到的隨機數加密任意韌體映像。這允許他們重用早期的簽名。因此,如果 AES 密鑰被洩露,則無法保證真實性。
要解決這個問題,您可以對整個加密圖像進行簽名——nonce、身份驗證標籤等等。使用強雜湊函式的強簽名算法(例如 RSASSA-PSS),甚至無法知道 AES 密鑰來加密具有相同簽名的另一個圖像。