哈希在計算機科學中至關重要,并提供了廣泛的能力和功能。此外,哈希在嵌入式軟件開發人員驗證和保護嵌入式系統方面發揮著重要作用。這篇文章將研究加密哈希的基礎知識,并提供嵌入式開發人員可以用來開始理解嵌入式安全性的基礎。
讓我們從查看哈希的定義開始。散列是散列函數根據提供給函數的輸入生成的值。散列用于提供一個值,該值可以驗證信息的完整性,而無需將該信息透露給執行驗證的一方。因此,例如,開發人員可以通過散列函數運行他們的軟件映像,以生成一個散列值,客戶或最終用戶可以驗證他們是否收到了正確的軟件映像。
開發人員應將哈希視為數據的唯一數字指紋。哈希函數的好處是最終用戶可以通過將他們的哈希與官方生成的哈希進行比較來驗證他們是否擁有正確的軟件。盡管如此,散列值仍不能用于生成信息,該過程是單向的,這提供了一種簡單的驗證方法,無需透露細節。
幾種不同的散列函數用于生成散列,有時稱為散列碼或散列值。一些常見的哈希值包括:
MD5 (120-bit)
SHA-1 (160-bit)
SHA-3 (224-bit, 256-bit, 512-bit)
當為輸入數據生成散列時,會生成固定數量的輸出位。例如,常用的加密散列 SHA-1(安全散列算法 1)產生 160 位值。嵌入式開發人員可以通過將他們的數據輸入他們的 SHA-1 生成器或嘗試使用在線生成器來生成 SHA-1 哈希。例如,簡單的數據,如“Hello World!”生成下面的哈希:
SHA-1(“Hello World!”) = 2ef7bde608ce5404e97d5f042f95f89f1c232871
哈希在嵌入式中扮演著幾個不同的角色。首先,引導加載程序可以使用哈希來驗證他們收到的軟件映像是否確實正確。其次,哈希可以用作安全啟動序列的一部分,以在啟動期間驗證固件映像的完整性。第三,如果黑客試圖將自己的代碼注入應用程序映像,則存儲的哈希將與存儲在閃存中的應用程序不匹配,并表明應用程序出現問題。第三,哈希在服務器身份驗證和數字簽名中發揮作用。
嵌入式軟件開發人員在選擇他們將在其應用程序中使用的哈希算法時需要小心。哈希函數可以計算周期密集型,這意味著它們可能需要一段時間才能在資源受限的設備(例如微控制器)上進行計算。在確定散列函數之前,開發人員應考慮以下幾點:
l 確定他們的微控制器上是否有可以加速哈希計算的硬件加速器
l 評估哪種算法最適合他們的應用。(如果 SHA-1 足夠,則無需使用 SHA3-512
在嵌入式開發人員意識到這一點之前,哈希在嵌入式系統中比 CRC 和校驗和更加普遍。但是,當然,它們已經在通用計算系統中使用了多年,隨著安全成為許多連接系統的主要問題,它們也很自然地進入基于微控制器的系統。