摘 要: 设计了一套基于国产技术的可信计算系统。该系统采用了基于龙芯处理器的计算机硬件平台和国民技术LPC接口的可信密码模块(Trusted Cryptography Module,TCM),实现了符合UEFI标准的可信固件,完成了操作系统上的TCM驱动(TCM Device Driver,TDD)以及TCM服务模块(TCM Service Module,TSM),总体实现了基于国产龙芯平台的固件层和操作系统上层对国产可信密码模块及其服务模块的支持。完成了对TDD以及TSM接口的测试,提供了TCM管理工具以实现对TCM的基本管理功能。
0 引言
国际上主流的可信计算平台是基于X86处理器与TPM芯片,符合TCG规范的软硬件系统。由于TPM芯片内一般存储与密钥相关的重要敏感信息,若我国直接采用则会有重要信息被他人掌握的风险,因此可信计算系统的国产化应用成为必须。
参考文献[1]中提出的可信计算机制是基于TPM芯片的,参考文献[2]中的兼容方案是基于虚拟TCM进行验证的,参考文献[3]~[8]中的可信软件栈都是基于TPM或者在X86平台实现的。参考文献[9]对比了TCM控制模块与TPM模块的不同之处,参考文献[10]中研究的可信技术是基于嵌入式平台的,参考文献[11]中的UEFI BIOS也是基于TPM,并在X86平台上实现的。
而本文采用基于国产龙芯3A处理器的主板TCM芯片以及中标麒麟操作系统构建可信终端基础系统,并在此之上开发了国产可信固件和操作系统上层的可信服务模块,实现了完整的国产可信计算平台。龙芯平台不同于X86平台,它是基于MIPS架构的处理器,采用精简指令集并扩展了龙芯指令集。TPM芯片使用RSA作为加密算法及签名算法,使用SHA1作为摘要算法。而TCM使用SMS4作为加密算法,使用SM2作为签名算法,摘要算法则采用256位的SM3算法。操作系统方面大多数政企使用Windows系统,如今政府对国外操作系统的限制采购,为国产操作系统创造了良好的契机并为TCM的广泛使用打下基础。
1 国产可信系统架构设计
国产可信计算平台主板由龙芯3A处理器、AMD RS780E北桥、SB710南桥、RTL8111DL千兆网卡等构成,集成了丰富的通用接口,采用标准ATX尺寸。
本系统采用国民技术研发的LPC接口的TCM芯片。TCM芯片是可信计算的基础,支持信任链建立、可信度量等功能的实现,增强了计算机的安全性。
本文实现的可信固件支持龙芯国产处理器,具有图形化用户配置界面。它不仅用于初始化硬件设备,安装及引导操作系统,提供硬件设备的调试诊断等功能,还以TCM为基础,在硬件、固件和软件之间构建信任链,实现可信计算功能。此可信固件包括CPU代码、芯片组代码、设备代码等基础功能代码,实现了可信度量、TCM驱动接口和TCM配置管理等可信功能模块。
在操作系统阶段,TCM系统驱动以模块形式载入并直接与TCM芯片进行通信,其主要完成对TCM芯片的驱动和管理等功能,并向上层服务模块提供访问接口。
TCM服务模块是基于TCM的操作系统上层软件模块,为应用软件提供访问TCM的软件接口[1]。TSM通过调用TCM系统驱动对TCM资源进行分配并向上层应用提供接口。可信终端体系架构如图1所示。
2 TCM支持
2.1 TCM的功能与架构
TCM是可信计算平台的硬件模块,为可信计算平台提供密码运算功能,具有受保护的存储空间[2]。TCM芯片提供了加密解密、数字签名、摘要值计算、消息验证码计算等功能,并向固件层、操作系统等提供安全支持,实现安全存储、完整性度量、可信报告等功能。
TCM的封装形式分为直插式和嵌入式,其逻辑组成部分包括:输入输出接口、SMS4引擎、SM2引擎、SM3引擎、随机数产生器、HMAC引擎、易失存储、非易失存储、PCR寄存器[2]。
2.2 TCM驱动的设计与实现
TCM驱动分为固件层的驱动和操作系统层的驱动。
TCM的固件层驱动符合UEFI规范,是非驱动模型类驱动,分为驱动层和接口层,发布了两个协议。驱动层实现TCM的初始化、使能/禁止、数据传递等,接口层是为了屏蔽TCM硬件差异,通过调用驱动层的协议为固件的可信功能模块提供访问TCM的软件接口。
TCM的系统驱动为模块化驱动,设计为PNP方式注册,主要完成对TCM的初始化、使能管理以及数据收发等功能。它通过接收来自TCM设备驱动库(TCM Device Driver Lib,TDDL)的字节流并发送给TCM芯片,实现为TCM服务模块中的可信功能模块提供访问TCM的接口,完成可信度量、存储度量结果等功能。
系统内核应配置为支持模块化的驱动,另需修改内核drivers/char/目录下的Kconfig文件,使得当Linux配置内核时,能够对TCM驱动进行配置。
source "drivers/char/tcmdV1.1/Kconfig"
修改内核drivers/char目录下Makefile文件,增加驱动目标文件,用于生成tcm.ko和tcm_tis.ko模块。
obj-$(CONFIG_TCG_TCM)+=tcmdV1.1/
编译系统内核时,TCM驱动即可同时编译生成可加载的模块。
3 可信固件的设计与实现
本文实现的可信固件采用C语言开发,符合UEFI规范,高度模块化,具有高可扩展性。它的启动过程分为4个阶段,其基础功能的启动和工作流程如图2所示。
可信计算的功能包括身份认证、可信度量、配置管理等。可信固件从结构上设计为两大模块:Stage1和Stage2。其中Stage1负责最小可用硬件平台的初始化,实现TCM在此阶段的驱动以及可信度量所需要的接口。Stage1对Stage2进行完整性度量后将控制权交给Stage2。
Stage2实现了基础UEFI BIOS的驱动分发及启动操作系统的工作,并完成了TCM在此阶段的驱动以及可信度量所需要的接口,还实现了TCM配置管理的功能模块。在这一阶段还可以实现对硬件设备、操作系统文件的度量。Stage2完成对OS Loader和重要文件的完整性度量后,将控制权交给OS Loader引导操作系统,BIOS启动阶段的信任链传递过程就结束了。
固件中的所有可信计算相关的功能必须由TCM来提供支持,TCM的驱动接口分别用于在Stage1阶段和Stage2阶段对TCM进行访问。
最终实现的可信固件的配置功能有对用户、TCM开关、TCM度量等的管理。
4 服务模块的设计与实现
TSM是在操作系统上层为支持TCM提供基本资源的主要模块,通过调用TCM接口实现可信计算功能,如提供TCM的同时存取,管理TCM资源,并在适当的时候释放TCM资源[3-4]。
TSM为应用程序提供TCM功能接口,其层次结构如图3所示,全部运行于用户模式,其中TDDL、TSM核心服务(TSM Core Service,TCS)属于系统进程,TSM服务提供者(TSM Service Provider,TSP)属于用户进程[5-6]。
4.1 设备驱动库
TDDL提供一个标准接口,常驻用户模式,并通过调用TCM设备驱动与TCM芯片交互。此模块提供了密钥管理等简单的功能来管理有限的TCM资源。由于TCM每次只能处理一个进程,来自上层的服务都需通过TDDL向TCM发送请求,TDDL可将多任务进行单线程化。
4.2 TSM核心服务
TCS提供线程用以访问TCM,TCS允许多线程访问。经TCS转换为TCM可以识别的字节流后,可实现上层应用与TCM的通信。TCS各组成部分的作用详见表1。
TCS一般作为一个系统进程存在,可以提供服务给多个TSP。如果进程未开启时有来自TSP的请求则会返回通信错误。如果多个TSP都基于同一个平台,则TCS保证它们都将得到相同的服务。
4.3 TSM服务提供者
TSP是TSM最上层的模块,上层应用通过访问TSP的接口来获得TCM的资源和功能,应用程序在调用时需先创建各个类的工作对象。TSP各类接口的作用详见表2。
5 系统测试与分析
5.1 系统集成
在国产硬件平台上配置本文开发的可信固件和支持模块开发的中标麒麟操作系统。在操作系统上安装本文设计实现的TCM驱动以及TCM服务模块,进行系统测试。
加载TCM驱动后运行OS层的TCM管理工具,图4、图5分别是管理工具加载TCM驱动和启动Tcsd的运行界面。
5.2 可信固件测试与分析
加入可信功能模块的固件在其设置选项中可使能TCM或禁止TCM,使能TCM后会对BIOS、硬件外设、OS核心文件进行度量,在不同情形下固件启动时间如表3所示。
因为对五类设备度量失败后操作人员的反应时间大约为1 s,所以度量失败的情况比度量成功多出近5 s。根据参考文献[10]给出的数据,在X86平台下,关闭可信测量的固件启动时间为29 s,而国产平台下关闭可信功能后的启动时间为13.5 s,优于X86平台。
5.3 驱动测试与分析
加载驱动模块TDD后,对TCM指令进行测试,运行测试程序测试TCM自检、TCM使能、获取TCM属性信息等命令,结果如表4所示。
以TCM自检为例,发送数据中0x0 0xc1表示发送标志位,0x0 0x00x0 0xa表示发送数据长度,为10 B,0x0 0x0 0x80 0x50表示自检命令码。接收到的数据中0x0 0xc4表示接收数据位,0x0 0x00x0 0xa表示接收数据长度,0x0 0x00x00x0表示自检成功。
5.4 TCM管理
本文完成固件层与OS层的TCM管理工具并实现TCM启动、自检、使能禁止等管理功能。
表5、表6分别是读取PCR、TCM管理功能执行结果。
5.5 服务模块测试与分析
使用TSM接口的测试工具,对各类TSPI进行测试。部分接口测试结果如表7所示。
表7给出了获取PCR值、设置PCR值、选择PCR索引号接口的测试结果,返回结果为成功。
6 结束语
本文构建了基于国产龙芯CPU、国民技术TCM硬件平台的可信系统,开发了固件中的可信功能模块,实现了支持国产平台的操作系统上层TCM驱动、TCM服务模块、TCM管理工具以及TSM测试工具,实现了从固件层到操作系统上层的可信链的传递,有效地保证了平台硬件及相关系统软件的安全可信性,为国产可信系统的研究与实现提供了一定的参考经验。
参考文献
[1] 罗捷,严飞,余发江,等. 可信计算平台模块密码机制研究[J].计算机应用, 2008,28(8):1907-1915.
[2] 张兴,黄宁宇,祝璐. 可信密码模块软件栈兼容方案设计[J]. 武汉大学学报, 2010,25(5):618-621.