張敏++陳利羽++樊火生
摘 要 本文提出了建立基于國(guó)產(chǎn)化可信芯片的文件加密系統(tǒng)的必要性,采用我國(guó)自主研發(fā)的TCM安全芯片為可信根,通過(guò)C++/C#語(yǔ)言混合編程實(shí)現(xiàn)可信系統(tǒng)開發(fā),經(jīng)過(guò)TCM芯片進(jìn)行加密的數(shù)據(jù)就只能在該平臺(tái)上進(jìn)行解密和處理,證明了TCM的可信信息系統(tǒng)的可行性。
【關(guān)鍵詞】國(guó)產(chǎn)化 TCM 加密 解密
1 研究背景
研發(fā)自己的可信計(jì)算技術(shù),是國(guó)家安全的需要,我國(guó)目前采用的信息產(chǎn)品存在嚴(yán)重的安全隱患。關(guān)鍵信產(chǎn)品都是來(lái)自國(guó)外,安全后門普遍存在。
在此背景下,許多公司和研究機(jī)構(gòu)在可信計(jì)算方面進(jìn)行了大量的研究,2005年4月聯(lián)想集團(tuán)和中科院計(jì)算所完成了安全芯片和可信PC平臺(tái)開發(fā)。2005年4月,兆日科技也推出符合可信計(jì)算聯(lián)盟技術(shù)標(biāo)準(zhǔn)的可信安全芯片。2008年4月底,中國(guó)可信計(jì)算聯(lián)盟(CTCU)在國(guó)家信息中心成立。2007年12月,國(guó)家密碼管理局正式發(fā)布了《可信計(jì)算平臺(tái)密碼支撐平臺(tái)功能和接口技術(shù)規(guī)范》,至此,中國(guó)有了自己的可信計(jì)算規(guī)范。
2 研究目的
建立基于硬件的應(yīng)用軟件的訪問控制策略,讓指定的用戶在指定終端上使用指定的應(yīng)用軟件做指定的事,指定策略范圍之外的行為都是不被允許的,為應(yīng)用系統(tǒng)提供一個(gè)可信、可控、可管理的安全運(yùn)行環(huán)境。包含如下幾點(diǎn):
2.1 芯片級(jí)的身份鑒別
可信信息系統(tǒng)采用基于TCM模塊的平臺(tái)身份證書標(biāo)識(shí)用戶身份。
2.2 芯片級(jí)的數(shù)據(jù)保護(hù)
利用了硬件級(jí)加解密算法,完成數(shù)據(jù)保護(hù)。
2.3 芯片級(jí)的應(yīng)用軟件訪問控制
采用基于信任鏈的訪問控制機(jī)制,用戶在計(jì)算機(jī)終端上只能安裝和使用已授權(quán)的應(yīng)用軟件和程序。應(yīng)用軟件及其包含的可執(zhí)行文件、動(dòng)態(tài)鏈接庫(kù)和控件的完整性,由可信密碼模塊安全芯片驗(yàn)證。
3 系統(tǒng)總體設(shè)計(jì)
3.1 系統(tǒng)架構(gòu)設(shè)計(jì)
本系統(tǒng)三層結(jié)構(gòu),包括可信密碼模塊、中間層及應(yīng)用層。其中:
3.1.1 可信密碼模塊
主要用為可信計(jì)算電腦提供數(shù)據(jù)加密,將敏感數(shù)據(jù)存放在芯片的安全存儲(chǔ)區(qū)中;提供完整的密鑰管理方案,包括密鑰的建立,存儲(chǔ),遷移以及密鑰協(xié)商等功能。
3.1.2 中間層
介于前端TCM硬件模塊與應(yīng)用軟件中間,提供數(shù)據(jù)加密程序、數(shù)據(jù)簽名等功能的封裝。
3.1.3 應(yīng)用層
包括身份認(rèn)證,數(shù)據(jù)加密,軟件保護(hù)等上層應(yīng)用。
3.2 系統(tǒng)邏輯結(jié)構(gòu)圖
為了簡(jiǎn)化系統(tǒng)開發(fā)和實(shí)現(xiàn)一個(gè)穩(wěn)鍵、可靠的系統(tǒng)架構(gòu),根據(jù)系統(tǒng)分層設(shè)計(jì)的思想,把系統(tǒng)分為:表示層,業(yè)務(wù)邏輯層,中間層,數(shù)據(jù)處理層。
3.2.1 表示層
使用WinForm作為數(shù)據(jù)表示層。
3.2.2 業(yè)務(wù)邏輯層
使用C#作為業(yè)務(wù)邏輯層。
3.2.3 中間層
使用C#、CLR和C++作為中間傳輸層。
3.2.4 數(shù)據(jù)處理層
使用Subsonic代碼生成工具作為數(shù)據(jù)處理層。
4 系統(tǒng)關(guān)鍵技術(shù)實(shí)現(xiàn)
C/C++則擅長(zhǎng)寫算法的編寫,執(zhí)行效率高,因此封裝TCM的底層函數(shù)都是用C/C++開發(fā)的,而C#則擅長(zhǎng)快速開發(fā),同時(shí)有良好的兼容性,本系統(tǒng)利用CLR C++(指托管C++)把本機(jī)C++代碼包裝起來(lái)編寫輸出類庫(kù),供C#使用,由于CLR C++和C#都符合CLS規(guī)范,所以兩者可以無(wú)縫集成,在一個(gè)解決方案里包含這兩種語(yǔ)言的項(xiàng)目。下面以數(shù)據(jù)加密為例說(shuō)明一下實(shí)現(xiàn)方法:
4.1 用C++實(shí)現(xiàn)TCM數(shù)據(jù)加密函數(shù)
//加密函數(shù)
//keylenth:密鑰長(zhǎng)度;key:密鑰數(shù)據(jù);dataLength:被加密數(shù)據(jù)長(zhǎng)度;
//data;加密數(shù)據(jù);enDataLength:密文長(zhǎng)度;enData;密文數(shù)據(jù)
TSM_RESULT TcmEncryption(UINT32 keylenth,BYTE* key,UINT32 dataLength,BYTE* data,UINT32 &enDataLength,BYTE* &enData)
{//函數(shù)實(shí)現(xiàn)}
4.2 使用托管C++包裝本地C++類
TSM_RESULT TcmEncryption(UINT32 keyLenth,BYTE* key,UINT32 dataLength,BYTE* data,UINT32 &enDataLength,BYTE* &enData)
{
System::UInt32 r=-1;
CTcm tcm;//非托管C++類
r=tcm.TcmEncryption(keyLenth,key,dataLength, data,enDataLength,enData);
return r;
}
由以上代碼可以看出,托管c++代碼的函數(shù)聲明跟C++幾乎一樣。編譯生成TCM_CM_DLL.DLL供C#使用。
4.3 在C#中使用托管C++庫(kù)
在C#項(xiàng)目中的“引用”添加對(duì)“TCM_CM_DLL.DLL”的引用。用對(duì)象瀏覽器查看TCM_CM_DLL的成員變量和函數(shù),可以看出導(dǎo)出的加密函數(shù)為:
public uint TcmEncryption(uint keyLenth, byte* key, uint dataLength, byte* data, uint* enDataLength, byte** enData)
此函數(shù)可以直接在C#使用。
5 結(jié)論
本系統(tǒng)參考《可信計(jì)算密碼支撐平臺(tái)功能與接口規(guī)范》,設(shè)計(jì)開發(fā)了國(guó)產(chǎn)自主平臺(tái)下的可信信息系統(tǒng),實(shí)現(xiàn)了密鑰管理、數(shù)據(jù)加密、文件簽名、軟件保護(hù)等功能,系統(tǒng)運(yùn)行結(jié)果表明該方法切實(shí)可行,執(zhí)行效率高,為應(yīng)用軟件系統(tǒng)提供一個(gè)可信、可控、可管理的安全運(yùn)行環(huán)境,經(jīng)過(guò)TCM芯片進(jìn)行加密的數(shù)據(jù)就只能在該平臺(tái)上進(jìn)行解密和處理,從而把機(jī)密數(shù)據(jù)綁定在該平臺(tái)上,即使數(shù)據(jù)被盜,數(shù)據(jù)也無(wú)法解密。
參考文獻(xiàn)
[1]李小將,梅欒芳,師俊芳等.基于TCM的嵌入式可信終端系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(04):733-735.
[2]何慧,江水,李立號(hào),桑耘.基于TCM的國(guó)產(chǎn)化虛擬可信計(jì)算平臺(tái)研究[J].計(jì)算機(jī)工程,2011(S1).
[3]李偉.基于可信密碼模塊的電子簽名系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[4]馮登國(guó).可信計(jì)算-理論與實(shí)踐[M].北京:清華大學(xué)出版社,2013.
[5]敬軍,郝福珍,徐東華.國(guó)產(chǎn)自主平臺(tái)下可信執(zhí)行環(huán)境的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012(10).
作者單位
核工業(yè)計(jì)算機(jī)應(yīng)用研究所 北京市 100048