作者:美國國家半導(dǎo)體 Richard F. Zarr 來源:電子設(shè)計應(yīng)用2009年第11期 我們經(jīng)常擔(dān)心自已的個人信息被放進(jìn)或存儲在沒有安全防護(hù)措施的系統(tǒng)中。這些系統(tǒng)包括信用卡掃描器、零售終端機(jī)、醫(yī)療設(shè)備以及其它非零售設(shè)備。這些設(shè)備網(wǎng)絡(luò)間的通信所需要的安全保護(hù)級別取決于信息的重要程度。 常見的安全措施 對嵌入式系統(tǒng)來說,安全防護(hù)措施涉及到一個最基本的概念——物理安全性。也就是說,如果像對待珍貴物品那樣將系統(tǒng)“鎖”起來,那么丟失信息的風(fēng)險將大大減少。這意味著需要將嵌入式控制器及其它關(guān)鍵任務(wù)系統(tǒng)放在上鎖的房間內(nèi)或安全的箱子中。這種方法適用于那些可以將系統(tǒng)“包裝”起來的應(yīng)用,但也往往會導(dǎo)致通信掉線、阻塞或攔截。這種方法適用于不少有線和無線系統(tǒng)。有線系統(tǒng)在一些安全級別較高的應(yīng)用中具有不可替代的優(yōu)勢。舉個簡單的例子:如果發(fā)生黑客入侵,只要掐斷電線就能使關(guān)鍵數(shù)據(jù)不外泄。 應(yīng)用公共密鑰加密和橢圓曲線加密能獲得非常好的保護(hù)效果。這些方法廣泛用于電子商務(wù)及其它需要高級加密的應(yīng)用領(lǐng)域。然而,這類方法并不適用于那些對安全級別要求較高的嵌入式系統(tǒng)。有多種軟件和硬件技術(shù)可以用來使數(shù)據(jù)“散列”,從而使信息在存儲和傳輸期間難以被攔截。 一種保護(hù)嵌入式系統(tǒng)存儲與傳遞數(shù)據(jù)的簡單方法是使用滾動碼。滾動碼已出現(xiàn)了很長的時間,例如二戰(zhàn)期間的恩尼格碼密碼機(jī),F(xiàn)代滾動碼加密原理是采用串行移位寄存器以及異或函數(shù),使偽隨機(jī)碼確定性增強(qiáng),但逆向工程更加復(fù)雜,如圖1所示。 ![]() 圖1 流動碼加密 該原理下異或函數(shù)的一個輸入是正傳輸(或加密)的當(dāng)前位。只要知道最初鎖存到寄存器中的起始的種子值,該函數(shù)是完全可逆的。在其它加密方案中使用時,這種技術(shù)需要填充信息,以確保有足夠的數(shù)據(jù)來防止泄漏密鑰。此外,過長的消息可能暴露偽隨機(jī)碼發(fā)生器的模式。網(wǎng)絡(luò)中大多數(shù)數(shù)據(jù)包流量都屬于這類加密的范疇。 時變加密 數(shù)據(jù)安全性的一個重要方面是確保密鑰不泄密。即使采用公共密鑰加密,如果私人密鑰泄密,系統(tǒng)也會崩潰。一個確保密鑰永不泄密的簡單方法是不斷發(fā)布新密鑰。一種較好的做法是使用當(dāng)前時間。如果每個設(shè)備知道在某個時間廢棄密鑰并開始使用新密鑰,將很難對密鑰進(jìn)行逆向工程,因?yàn)樗堰^期。這種思想的一種簡單應(yīng)用是酒店磁卡鑰匙。酒店的電子鎖已編程為接受編碼的磁卡,但只在您住宿期間有效。如果沒有其他人使用房間或者對電子鎖重新編程,電子鎖內(nèi)的時鐘會控制鑰匙的有效性。也就是說,電子鎖會在一段時間后使磁卡鑰匙無法打開房門。 現(xiàn)在的問題是確保每個人都知道電子鎖會在何時令磁卡鑰匙失效。有多種方法可以解決這個問題。一種方法是與主時鐘同步,這需要使用協(xié)議來維護(hù)當(dāng)前時間。所需協(xié)議取決于更新密鑰的時間間隔,可以使用帶有時間信息的周期性數(shù)據(jù)包(如NTP或網(wǎng)絡(luò)時間協(xié)議),也可以使用更加準(zhǔn)確的協(xié)議,如IEEE1588精確時間協(xié)議(PTP))。PTP提供非常高的準(zhǔn)確性,無需每個節(jié)點(diǎn)具有GPS接收器或銫原子鐘。以太網(wǎng)物理層器件,如美國國家半導(dǎo)體的DP83640,內(nèi)置了這項功能,且可以與任何媒體訪問控制器(MAC)一起工作。 通過使用同步的時鐘,使用偽隨機(jī)碼的密鑰發(fā)生器可以頻繁更新密鑰。因此,每一秒鐘都會生成新的種子,且在該期間傳輸?shù)乃袛?shù)據(jù)包都將使用該種子,如圖2所示。 ![]() 圖2 密鑰發(fā)生器可以頻繁更新種子 這里的問題是數(shù)據(jù)包傳遞的不確定性。在大型基礎(chǔ)設(shè)施以及Internet上,數(shù)據(jù)包到達(dá)的實(shí)際時間將差別很大,因此需要一個機(jī)制來確保到達(dá)稍晚的數(shù)據(jù)包不被拒絕。 完成這項工作的方法是使用滑動時窗相關(guān),即加密的數(shù)據(jù)包應(yīng)在加密的有效載荷中嵌入校驗(yàn)和,以驗(yàn)證其內(nèi)容。此外,數(shù)據(jù)包的“存活時間”值將設(shè)置時窗大小(及時性)。因此,當(dāng)接收到數(shù)據(jù)包時,解密引擎將根據(jù)本地的時鐘知道當(dāng)前時間,然后嘗試使用本地時間解碼數(shù)據(jù)包。如果解密失敗,解密算法會在時間上往回移動時窗的階段,并再次嘗試解密有效載荷。理論上,應(yīng)該只需1~2次嘗試即可使兩個位置之間的延遲同步,通常最多需要10~20次嘗試。 如果數(shù)據(jù)包解密失敗,則發(fā)送的行為無效,而且該數(shù)據(jù)包會被丟棄。由于種子變化如此頻繁,因此幾乎或根本不可能實(shí)時解密信息。此外,可以將此功能內(nèi)置到通信軟件棧中或直接內(nèi)置到硬件中,從而使逆向工程非常困難。即使知道方法,由于缺乏固定的種子也會使解密數(shù)據(jù)極其困難。 結(jié)語 并非所有的嵌入式系統(tǒng)都需要金融行業(yè)所使用的加密強(qiáng)度,極其簡單、易于實(shí)現(xiàn)的散列加密方案可能更有意義。通過使用簡單的加密方法和使用時變密鑰,可以大大增強(qiáng)關(guān)鍵嵌入式系統(tǒng)的安全性。這種加密可以用固件或軟件實(shí)現(xiàn),而且給FPGA或CPLD添加加密算法能夠使代碼更難被破解。 |