丁 睿,孔 雷,趙 慧
(中國航天科工集團第二研究院706所,北京100854)
自可信計算組織 (trusted computing group,TCG)推出相關標準以來,以可信平臺模塊 (trusted platform module,TPM)為核心的可信技術有了很大的發展[1-3]。我國也在可信計算領域建立起了以可信密碼模塊 (trusted cryptography module,TCM)[4]為核心的自主可信計算標準體系。按照可信規范構建的可信計算基平臺都是將TCM 嵌入在計算機主板上,提供平臺數據保護、完整性存儲與報告以及身份標識等功能。以TCM 作為計算機平臺的 “可信根”,經過信任鏈的傳遞,完成計算機平臺的啟動,確保整個平臺系統資源的完整性。
將TCM 嵌入在主板上使得為普通計算機的可信化增加了難度,同時嵌入式的TCM 也無法滿足個人用戶的不同需求。本文設計的可信計算機平臺將TCM 與USB3.0控制器相接口,利用USB3.0 接口的易插拔性以及傳輸速度較高的特點,配合可信增強的BIOS來建立可信機制,從而實現計算機終端的安全可信。
本文對國產可信平臺的體系結構進行修改,如圖1所示。修改后的可信平臺主要由USB3.0接口的密碼模塊、可信BIOS和TCM 服務模塊(TCM service module,TSM)組成。
在軟件部分,TDD 主要負責把上層傳入的字節流發送給TCM,再將TCM 處理后的數據返回到上層。TDD 運行在內核模式下,由于用戶模式不能直接訪問硬件,所以通過TDDL來使用內核模式下的驅動。TDDL 提供了用戶模式的接口,所有的TCM 的訪問都需要該標準接口,同時它還提供用戶模式和內核模式的轉換。TDDL 提供函數 (如Open、Close、GetStatus)來控制與TDD 的通信,也提供函數來設置TCM、TDD 的屬性。TSM 在用戶模式下運行,為應用程序調用TCM 安全保護功能提供一個面向對象的接口,并向應用提供對TCM 的同步訪問。同時TSM 還提供所有像密鑰管理這樣簡單有效的功能對有限的TCM 資源進行管理。安全應用直接調用TSM 提供的接口并使用TCM提供的可信功能為上層提供安全可信服務[5]。

圖1 基于USB3.0接口TCM 的可信計算機結構
在硬件部分,由可信密碼模塊配合增強的可信BIOS創造一個可信環境。增強的可信BIOS可以檢查系統相關硬件設備以及硬盤啟動代碼的完整性,基于USB3.0 的密碼模塊運行在主機BIOS啟動之后,它提供相關擴展功能,這樣開始對Kernel以及之后的安全應用進行信任關系的傳遞,沿著可信鏈進行度量,從而擴展到整個系統,確保系統的安全可信。本文設計的可信鏈的傳遞過程如圖2所示。
BIOS作為信任根,USB3.0 接口TCM 按照規則PCR[n]=SHA-1(PCR[n]||被度量的數據)提供擴展PCR的Extend操作,從信任跟開始,每個當前運行的組件首先度量接下來運行的組件,若度量結果滿足要求,則跳轉到下一個組件,否則終止可信鏈的建立。由于USB設備啟動后于BIOS啟動,因此BIOS的可信性必須由自身保證,可以將BIOS的設置改為不可寫或者在硬件上斷開與寫BIOS功能相關的引腳。

圖2 可信鏈傳遞過程
基于USB3.0接口的密碼模塊屬于嵌入式應用設計,結合USB功能的TCM 更加方便攜帶,每個基于USB3.0接口的TCM 作為用戶的個人設備,只為該用戶提供相應的可信服務,這樣用戶與主機的關系也由傳統的一個主機對應多個用戶變為一個用戶對應多個主機。利用這種USB3.0接口的TCM 可以對通用計算機進行可信化升級。本文設計的密碼模塊硬件結構框架如圖3所示。模塊主要包括主控模塊國產TCM、USB3.0控制器、安全存儲芯片、身份認證及密鑰注入接口。國產TCM 通過擴展接口與USB3.0控制器相連接,以USB3.0 標準接口與主機進行通信。模塊內部可內嵌用戶身份卡,實現用戶身份認證。主機端運行的密碼模塊管理軟件可以用于對用戶的注冊、度量的預期值導入以及平臺管理維護等功能。
國產TCM 芯片作為主控芯片,實現可信協議解析、任務調度;TCM 內部的算法引擎為相關密碼運算提供支持;NorFlash提供審計日志和重要數據的存儲;噪聲源提供實時噪聲數據采樣;通過集成的ISO7816 接口可以將放在TCM 中重要數據信息寫到主機系統中,也可以通過該接口將主機系統中的重要數據存儲到TCM 中。
賽普拉斯CYUSB3012 是新一代的USB3.0 外設控制器,具有高度的靈活特性,兼容USB2.0 接口。其集成的32位ARM926EJ-S微處理器具有強大的數據處理能力[6]。通過配置CYUSB3012 的并行通用可編程接口 (GPIF II)使其與國產TCM 的存儲擴展接口相連接,使得TCM 到主機端的數據通道打通。CYUSB3012 芯片提供I2C 連接E2PROM 用來存儲芯片的啟動代碼。CYUSB3012的固件程序實現密碼模塊設備的自舉、與主機的數據傳輸、傳輸保護、UFI協議的解析等功能。
本文設計的密碼模塊使用USB3.0 接口與主機進行通信,使通道的傳輸速率保持在較高的水平,傳輸通道接口的設計可以分為兩部分:TCM 與CYUSB3012通道的接口設計 (GPIF II設計)、USB3.0固件程序設計。
(1)GPIF II設計
本文所使用的國產TCM 集成了片外存儲擴展控制接口,可支持所有異步SRAM 器件的連接。GPIF II是一個可編程狀態機,在這里將其作為從設備運行。采用異步的方式將兩個芯片直接連接,接口框架如圖4所示。GPIF狀態切換根據主控的控制輸入信號發生,控制輸出的信號由GPIF狀態轉換所驅動[7]。這里采用32 位地址線。兩位地址線A [1:0]來表示存取的線程,當A1:A0 為00 時,選中Socket0,即將TCM 中的數據寫入到CYUSB3012 芯片中,當A1:A0為11時選中Socket1,即將CYUSB3012中的數據傳送給TCM。FLAG 標志為CYUSB3012反饋給主控的狀態信號,來顯示正在尋址的當前線程的空/滿狀態,SLCS為片選信號,SLWR 為寫使能信號。

圖3 密碼模塊硬件結構

圖4 接口框架
狀態機的運行方式由描述符定義。通過GPIF II Designer工具,可以使用狀態機入口設計一個自定義的GPIF II接口,該工具可以自動生成一組關于包含GPIF II配置信息的頭文件用于集成到CYUSB3012的固件程序中。本文設計的GPIF II時序仿真如圖5所示。
(2)USB3.0固件程序設計
USB3.0固件程序的設計目的是為了配置CYUSB3012芯片,使得CYUSB3012 芯片可處理主機端發送的控制命令,完成TCM->CYUSB3012->主機的高速數據傳輸。其中完成DMA 的數據通道配置是重點部分。調用CyFxSlFifoApplnStart()函數來獲得USB 的接口類型和buffer大小,為了實現雙向的傳輸,需要在P端口和U 端口之間配置兩個DMA 通道,DMA通道的緩沖區計數為2,buffer的大小取決于連接的是USB2.0還是USB3.0,兩個DMA 通道分別實現P端口->U 端口和U 端口->P端口之間的數據傳輸。下面是配置U 端口->P端口的通道程序的部分代碼:

圖5 接口仿真時序


傳統的可信引導信任鏈構建以TCM 為信任跟,從底層硬件出發建立起BIOS和Bootloader的信任鏈,進而為操作系統建立可信的運行環境。由于本文設計的可信模塊所使用的USB接口需要在BIOS啟動后才可以使用,同時鑒于硬件和BIOS 的防篡改能力較強,所以將BIOS 作為信任根,可信引導信任鏈的關注點放在了Bootloader這個環節。本文通過TCM 的度量機制檢查Grub每個Stage、Grub配置、Kernel等的可信性,并將度量結果按照相關規范存放在對應的PCR 中,從而確保操作系統啟動前的安全環境[8]。具體的引導流程如圖6所示。

圖6 可信引導流程
BIOS正常啟動后便開始度量位于硬盤中的主引導記錄(master boot record,MBR),即Grub Stage1代碼,度量結果保存在移動密碼模塊中的PCR4中,再載入MBR 運行。按照這以規則依次度量載入Grub Stage1.5、Grub Stage2,在控制權交給Grub Stage2 后Bootloader Grub已經完全啟動,可以執行操作系統的相關加載工作。之后Grub度量其配置文件并擴展至PCR5,再度量需要加載的操作系統內核,驗證內核文件的完整性??尚乓龑С绦虮WC了Grub自身的安全性,防止機器在操作系統啟動前被注入惡意代碼,這些都為操作系統的安全啟動奠定了基礎[9]。
設備驅動的一體化設計實現內核啟動時密碼模塊的自動檢測和對應驅動的自動加載,最大限度的減少人工參與。為了實現該功能,除了提供密碼模塊設備驅動外,還需要提供一個批處理文件,主要用于設備的自動加載。要在內核啟動過程中自動加載某個硬件設備的驅動,需做如下準備:
(1)在/etc/init.d目錄中添加啟動腳本文件;
(2)創建一個符號鏈接,在鏈接文件中包含啟動腳本文件的路徑名;
(3)為硬件設備創建一個設備信息文件,用于描述設備標識、與設備標識對應的設備驅動程序、設備配置參數(設備選項)、設備對應的別名、設備的主設備號等信息;
(4)使用depmod–a建立描述模塊之間依賴關系的文件modules.dep;
(5)在/etc/modules.conf中設置正確的設備別名和對應的設備驅動名。
內核在啟動時,總線驅動程序通過枚舉為每個設備建立一個設備對象??偩€對象與kset對象是一對一的關系,設備對象與kobject對象也是一對一的關系。這樣總線和設備對象便形成了樹形結構的關系。在總線驅動程序為監測到的設備建立設備對象時,會初始化kobject對象,并把它連接到設備樹中,同時會調用kobject_uevent()把這個(添加新設備的)事件,以及相關信息通過netlink發送到用戶態[10]。用戶態的udevd檢測到事件信息后便打開modules.conf文件,根據其中的別名找到對應的設備驅動,modprobe就可加載該驅動了。同時modprobe 根據modules.dep檢查其依賴的其它模塊是否已加載,若未加載,則先加載其依賴模塊。這樣便完成了硬件的自動檢測和自動加載。
根據設計,在windows XP環境下進行固件的開發,測試環境采用龍芯3A 平臺、麒麟操作系統和相關連接設備組成。主要對可信啟動過程以及啟動后的通道傳輸速率進行測試。在報文分組為8192字節的前提下對通道傳輸速率的測試結果見表1。
通過測試發現,使用USB3.0 接口密碼接口模塊可以對主機的啟動過程實現有效的安全保護功能,阻止惡意代碼對系統的破壞,同時該模塊適用于主板上沒有嵌入TCM的普通計算機平臺。由于可信啟動增加了度量驗證的過程,因此在啟動時會增加額外的時間開銷,對GRUB 的度量驗證時間約為1.3s,對內核文件的度量驗證時間約為11s,對其它部件的驗證時間約為0.9s。系統額外時間的影響在可接受范圍之類,達到了最初的設計目的。

表1 通道傳輸速率
為了提供更加便捷高效的可信服務,本文設計實現密碼模塊以USB3.0接口的方式與主機連接,為一般的沒有嵌入TCM 的計算機的運行提供安全可信運行環境,同時借助TCM 的功能實現了可信引導程序,確保了系統啟動、操作系統加載以及應用程序的完整性。目前所設計的密碼模塊已經滿足基本的可信服務需求,極大降低了系統的安全風險。接下來的研究工作將重點放在可信恢復方法以及提高USB3.0接口密碼模塊的性能上,使得在為計算機提供高效可信服務,同時還能使計算機對惡意代碼攻擊有一定的自我修復能力。
[1]FENG Dengguo.Trusted computing-theory and practice[M].Beijing:Tsinghua University Press,2013:1-5 (in Chinese).[馮登國.可信計算—理論與實踐 [M].北京:清華大學出版社,2013:1-5.]
[2]Trusted Computing Group.TCG web site[EB/OL]. [2010-11-21].http://www.trustedcomputinggroup.org.
[3]Trusted Computing Group.TCG TPM main part 1:Design principles,specification version 1.2 [EB/OL].[2014-11-18].http://www.trustedcomputinggroup.org.
[4]SHEN Changxiang,ZHANG Huanguo,WANG Huaimin,et al.Research on the development of trusted computing [J].China Science:Information Science,2012,40 (2):139-380(in Chinese).[沈昌祥,張煥國,王懷民,等.可信計算的研究發 展 [J]. 中 國 科 學: 信 息 科 學,2012,40 (2):139-380.]
[5]ZHU Xiaobo,SHU Peng,ZHOU Xiaoxia.Design on the domestic trusted computer based on TCM [J].Science Technology,2013,37 (12):102-105 (in Chinese). [朱小波,舒鵬,周曉霞.基于TCM 的國產可信計算機的設計 [J].信息技術,2013,37 (12):102-105.]
[6]Cypress Semiconductor.GPIF II designer version 1.0 [EB/OL].[2014-12-22].http://www.cypress.com.
[7]Cypress Semiconductor.EZ-USB FX3superspeed USB controller[EB/OL].[2014-12-23].http://www.cypress.com.
[8]FENG Dengguo,QIN Yu.Research on attestation method for trust computing environment[J].Chinese Journal of Computers,2008,31 (9):1641-1648 (in Chinese). [馮登國,秦宇.可信計算環境證明方法研究 [J].計算機學報,2008,31(9):1641-1648.]
[9]XU Mingdi,ZHANG Huanguo,ZHANG Fan,et al.Survey on chain of trust of trusted system [J].Acta Electronica Sinica,2014,42 (10):2024-2048 (in Chinese).[徐明迪,張煥國,張帆,等.可信系統信任鏈研究綜述 [J].電子學報,2014,42 (10):2024-2028.]
[10]Smstong:The Linux kernel device driver module of automatic loading mechanism [EB/OL].[2015-01-03].CSDN.http://blog.csdn.net/smstong/article/details/9836589.