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