保障系統(tǒng)安全的密鑰解決方案
獨(dú)立型系統(tǒng)正瀕于滅絕,這一趨勢使得開發(fā)人員在安全性問題上面臨越來越大的壓力。這個問題涉及手機(jī)、具有Wi-Fi功能的數(shù)碼相框等幾乎所有電子產(chǎn)品。使用防火墻或加密幾個數(shù)據(jù)文件是遠(yuǎn)遠(yuǎn)不夠的,系統(tǒng)安全性就像最脆弱的鏈路一樣需要受到保護(hù)。
基本的安全性概念
信息能夠以明文、認(rèn)證或加密方式進(jìn)行傳輸(圖1)。認(rèn)證是指那些可讀懂的文字信息,但它也經(jīng)常用來指沒有簽名或加密信息。經(jīng)鑒定的信息是經(jīng)過數(shù)字簽名的信息。修改信息將使簽名失效,藉此可以判斷信息是否被篡改。這時信息仍是可以訪問的,這點(diǎn)與加密信息不同,加密信息在解密之前是無法辨認(rèn)的。
圖1:通信鏈路突出了不同類型的數(shù)據(jù)交換,包括從認(rèn)證的數(shù)據(jù)交換到加密的數(shù)據(jù)交換。
數(shù)字簽名通常是使用被稱為消息的相關(guān)信息來加密附屬于這個信息的標(biāo)簽,也稱為消息摘要或簡稱摘要。如果簽名是在信息被修改后創(chuàng)建的,那么兩個標(biāo)簽將不再匹配。發(fā)現(xiàn)修改通常并不能提供誰修改、怎樣修改或修改了什么的信息。數(shù)字簽名可以使用加密,但更多的是使用哈希函數(shù)。哈希函數(shù)和加密之間的區(qū)別在于哈希函數(shù)是單向操作,而加密通常是雙向過程,因?yàn)樵济魑目梢杂谜_的密鑰和算法重新構(gòu)建。
一般來說,哈希函數(shù)比加密快,它們用于從口令存儲到通信握手的廣泛應(yīng)用領(lǐng)域。例如,Linux將用戶名和口令存儲在“passwd”文件中。這是一個明文文件,但訪問這個文件只能得到用戶名和經(jīng)過哈希算法處理過的口令。
可以使用這個信息對用戶進(jìn)行認(rèn)證,方法是使用口令產(chǎn)生一個新的哈希值,然后將結(jié)果與passwd文件中的內(nèi)容進(jìn)行比較。當(dāng)然,泄露passwd文件將形成安全漏洞。實(shí)際上大多數(shù)Linux實(shí)現(xiàn)將哈希過的口令保存在影子文件中,passwd文件只是減去哈希口令后的鏡像文件。
加密通常會使用一個或兩個密鑰。單個密鑰用在對稱加密算法中,即加密和解密使用相同的密鑰。對稱加密速度一般要比非對稱或兩個密鑰的系統(tǒng)快。非對稱系統(tǒng)中加密用一個密鑰,解密用另一個相關(guān)密鑰。在這種雙密鑰案例中,其中一個密鑰不能用另一個密鑰重建。
大多數(shù)公開密鑰系統(tǒng)采用兩個密鑰(一個公鑰,一個私鑰)進(jìn)行雙向數(shù)據(jù)交換,這意味著一個密鑰的主人加密的信息可以被另一個密鑰的主人解密。單向系統(tǒng)允許一個密鑰用于加密,另一個密鑰用于解密。而在雙向系統(tǒng)中,同一密鑰不能用于加密同時又用于解密加密過的數(shù)據(jù)。如果兩個密鑰都保密,那么在信息交換時這兩個密鑰可以用來識別主人。
RSA公鑰算法是MIT的Ron Rivest、Adi Shamir和Leonard Adleman在1978年提出的。這種算法基于兩個大的素?cái)?shù)以及分解大素?cái)?shù)非常耗時的事實(shí),從而使得強(qiáng)力攻擊非常困難。在公鑰環(huán)境中,通常有一個密鑰可提供給感興趣方。同樣,每一方通常都有自己的密鑰(后面的密鑰交換中會用到多個密鑰)。
目前流行的一些哈希算法包括MD4、MD5、SHA-1和SHA-256。普通加密系統(tǒng)包括DES(數(shù)據(jù)加密標(biāo)準(zhǔn))、RSA和AES(高級加密標(biāo)準(zhǔn))。DES加密密鑰長度為56位,對于目前處理器性能而言強(qiáng)力攻擊并不容易。在DES發(fā)布的20世紀(jì)70年代這種算法還是相當(dāng)安全的。三倍DES(3DES)同樣使用DES算法和密鑰,但彌補(bǔ)了DES的缺點(diǎn)。3DES使用三個密鑰,數(shù)據(jù)要被加密三次。
AES密鑰可以是128位、192位或256位長。目前AES已經(jīng)成為微控制器上的標(biāo)準(zhǔn)配置。AES在ZigBee等無線標(biāo)準(zhǔn)中被廣泛采用,能用于全盤加密和大量其它應(yīng)用。
還有一種方法叫橢圓曲線加密(ECC)法,它能使用很小的密鑰達(dá)到與使用大型密鑰的其它技術(shù)相同的安全性。這種高效算法可以用硬件輕松實(shí)現(xiàn)。安全軟件通常支持一種或一種以上的加密和哈希算法,同時許多通信標(biāo)準(zhǔn)允許使用不同的算法和密鑰長度。這些參數(shù)一般在初始握手期間選擇。
安全要從最基本的做起
安全需要從最基本的做起。如果任何一層不安全,那么它上面的所有層都將變得不安全。這也是安全深度之所以重要的原因。同樣,劃分可以隔離問題,但前提條件是劃分機(jī)制沒有被攻破。破壞性攻擊經(jīng)常是通過尋找安全機(jī)制中的漏洞進(jìn)行的,這正是蠕蟲和病毒利用操作系統(tǒng)、應(yīng)用軟件或系統(tǒng)配置中的缺陷攻擊系統(tǒng)的做法。
對大多數(shù)計(jì)算機(jī)系統(tǒng)來說,物理安全和啟動過程是起點(diǎn)。保證系統(tǒng)安全的方法之一是使用Trusted Computing Group公司(TCG)的可信平臺模塊(TPM)啟動系統(tǒng)。TPM包含個人電腦中常見的安全微控制器和存儲器(圖2)。防篡改硬件可以從物理上保護(hù)器件,破壞性地打開器件將導(dǎo)致存儲的安全密鑰丟失。TPM會在系統(tǒng)啟動時自檢,然后完成系統(tǒng)剩余部分的啟動,包括處理用戶輸入的PIN碼、認(rèn)證通常存儲在另一個器件中并經(jīng)數(shù)字簽名或加密的啟動程序。
圖2:可信平臺模塊(TPM)被設(shè)計(jì)用于提供安全啟動環(huán)境。
一般情況下,TPM會將安全控制權(quán)轉(zhuǎn)交給主機(jī),但也可以用于與安全有關(guān)的其它操作。TPM還包含一個唯一的RSA私鑰用于TPM的識別。TPM允許系統(tǒng)對信息進(jìn)行數(shù)字簽名,從而實(shí)現(xiàn)其它系統(tǒng)對它自身的認(rèn)證。
此外,TPM可以用來對機(jī)器上的器件進(jìn)行遠(yuǎn)程認(rèn)證或識別,方法是獲得硬件和軟件的數(shù)字特征,然后簽名這些信息。簽名過的信息隨后即可發(fā)往第三方。這種方法一般可以用來確保使用的是特定版本的音樂播放程序。
為了解決基本遠(yuǎn)程認(rèn)證缺少匿名的問題,TCG開發(fā)出了一種稍有不同的方法,叫做直接匿名認(rèn)證(DAA)。DAA執(zhí)行類似的過程,但結(jié)果只驗(yàn)證目標(biāo)硬件或軟件的狀態(tài),它不識別TPM模塊本身。
TPM也能提供安全密鑰存儲以及執(zhí)行加密和數(shù)字簽名工作。密鑰不需要存儲在TPM上,因?yàn)榧用馨姹究梢源鎯υ谄渌到y(tǒng)存儲器中。TPM可以利用這個信息提取和解密密鑰以供使用。
TPM功能可以被集成進(jìn)微控制器,而不僅是個人電腦,從而打開了更為廣泛的消費(fèi)設(shè)備市場。許多TPM功能可以使用帶I2C/SMBus接口的安全串行存儲器進(jìn)行訪問。這些存儲器通常是TPM中常見的功能類子集,但具有更低的功耗要求和更簡單的接口。
保證節(jié)點(diǎn)安全
安全啟動是起點(diǎn),而安全通信可以從通過CA認(rèn)證的密鑰開始實(shí)現(xiàn)。對于嵌入式微控制器而言,下一步也許直接是應(yīng)用程序,但對大多數(shù)應(yīng)用來說,兩者之間至少還有一個操作系統(tǒng)。在最簡單的情況下,還有存儲器保護(hù),更進(jìn)一步還包括虛擬存儲器支持。理論上講,一個安全的操作系統(tǒng)可以使應(yīng)用程序完全隔離于這種存儲器保護(hù)支持。當(dāng)然,操作系統(tǒng)架構(gòu)和規(guī)模可能為那些尋求繞過這種安全機(jī)制的攻擊者提供大量漏洞。
另一個可能的步驟是虛擬機(jī)支持。這種虛擬機(jī)支持使用額外的硬件,可提供與存儲器保護(hù)或虛擬存儲器支持相同類型的保護(hù),但它更詳細(xì),因?yàn)樗M了所有的硬件。
管理程序本質(zhì)上是一種管理虛擬機(jī)環(huán)境的操作系統(tǒng),這種方法用于管理多個系統(tǒng),但也能提供額外的安全性。其方法是隔離操作系統(tǒng),并進(jìn)一步隔離應(yīng)用程序。一個“瘦”的管理程序通常比傳統(tǒng)的操作系統(tǒng)或?qū)崟r操作系統(tǒng)(RTOS)簡單得多,因此缺陷較少,在應(yīng)用正式方法時也更容易驗(yàn)證。
一些虛擬機(jī)系統(tǒng)使用主機(jī)操作系統(tǒng),如Linux,使得這類驗(yàn)證非常困難。另外一種方法是建立一個虛擬機(jī),用它來處理到虛擬機(jī)系統(tǒng)的用戶接口。虛擬機(jī)通過與管理程序通信來控制基礎(chǔ)系統(tǒng)。理論上講這種方法可以提供更好的隔離性能。
制定安全策略
管理程序?yàn)橄到y(tǒng)提供獨(dú)立多層次安全性(MILS)或域分離功能。MILS可以是多層安全(MLS)系統(tǒng)的一個組件,然而,MLS的實(shí)現(xiàn)不需要虛擬機(jī)支持,前提是系統(tǒng)(包括安全啟動過程)可以得到安全保護(hù)。
像SELinux等操作系統(tǒng)使用MLS安全模型,這種模型可以提供比單獨(dú)Linux更細(xì)顆粒的訪問控制。一般來說,Linux使用Linux安全模塊(LSM)框架。LSM可以支持包括SELinux在內(nèi)的多種安全模型,另外一個是Smack(簡化的強(qiáng)制訪問控制內(nèi)核)。
基本的Linux安全模塊提供基于用戶/組模型的認(rèn)證和訪問控制,并且它是圍繞文件系統(tǒng)搭建而成的。文件可以從組、用戶或匿名的角度進(jìn)行操作,并且讀、寫和執(zhí)行屬性是單獨(dú)可控的。訪問控制繼承了目錄樹的概念。
SELinux更像是一種面向功能的系統(tǒng),其策略可以變得相當(dāng)復(fù)雜。這種強(qiáng)制訪問控制系統(tǒng)將策略和執(zhí)行分開來,不僅控制對文件和目錄的訪問,而且控制對網(wǎng)絡(luò)接口和消息的訪問。
訪問可以關(guān)聯(lián)到應(yīng)用程序,而不僅是用戶。例如,文件服務(wù)器可以只提供對那些正確標(biāo)示為共享的文件或目錄進(jìn)行訪問。它能跟蹤應(yīng)用程序以及由這些應(yīng)用程序之一產(chǎn)生的任何子程序。這樣,策略可以防止信息從較高安全層次流向較低安全層次。沒有正確的允許,更高層次的應(yīng)用程序不能簡單地提供對較低層次的訪問。
這種復(fù)雜性帶來的一個問題是如何正確地使用。較差的策略可能開啟漏洞,允許數(shù)據(jù)或控制移動到不應(yīng)被允許的地方。這正是大多數(shù)系統(tǒng)開始時使用一種或多種基本策略定義、然后逐步修改以滿足系統(tǒng)要求的原因。
顯示系統(tǒng)的安全
安全操作系統(tǒng)的安全啟動對某些環(huán)境來說是足夠的,但與用戶的交互帶來了對識別以及用戶相關(guān)I/O的需求。安全顯示器是軍用安全系統(tǒng)中常見的一個特色功能(圖3)。顯示系統(tǒng)的安全性可以用軟件或硬件實(shí)現(xiàn)。例如,可以設(shè)置安全設(shè)備驅(qū)動程序只在顯示器底部顯示來自安全應(yīng)用程序的顯示信息。采用全屏顯示的應(yīng)用軟件不會覆蓋這個安全區(qū)域,其它技巧包括用顯示硬件執(zhí)行相同的操作。
圖3:在屏幕上留出安全區(qū)域非常重要,這種方法通常與其它形式的安全基礎(chǔ)架構(gòu)組合在一起。
人們經(jīng)常使用的ctrl-alt-delete也是一個相關(guān)接口項(xiàng)。理論上,這個組合鍵應(yīng)該只是調(diào)用系統(tǒng)應(yīng)用程序。在使用Windows操作系統(tǒng)時,按下這個組合鍵將彈出一個對話框,其中有任務(wù)管理器等啟動選項(xiàng)。使用安全顯示器后,反饋信息可以通過安全顯示區(qū)顯示,使得任何應(yīng)用程序無法模擬響應(yīng)。