《可信计算3.0工程初步》读书笔记

美国国防部于20世纪80年代初提出了《可信计算机安全评估准则》(TCSEC),该评估准则定义系统中实现安全功能的软件和硬件的总和为可信计算基,明确安全机制首先要做到“可信”;有一点要意识到的是,可信不等于安全,但可信是安全的前提。1999年, IBM、HP、Intel和微软等著名IT企业发起成立了可信计算平台联盟(TCPA, Trusted Computing Platform Alliance),这标志着可信计算进入产业界。2003年,TCPA 改组为可信计算组织(TCG, Trusted Computing Group)。目前,TCG已经制定了一系列的可信计算技术规范,如可信PC、可信平台模块(TPM)、可信软件栈(TSS)、可信网络连接(TNC)、可信手机模块等,且不断地对这些技术规范进行修改完善和版本升级。

可信计算,其中“可信”,在信息系统中表示可预期性,即信息系统会按照人们所预期的方式运行。可信计算是保障信息系统可预期性的技术,是指在计算的同时进行安全防护,使计算结果总是与预期值一样,使计算全程可测可控,不受干扰。

可信3.0是主动免疫的思想,通过可信构建安全,这个思想抽象的理解需要时间消化,但从卡巴斯基等杀毒厂家也在推广免疫系统来看,主动免疫确实会是未来类似零信任网络的基石。

可信技术架构

呱牛笔记

图片来源:https://www.secrss.com/articles/23944

可信的思想

在计算机系统中,建立一个信任根,从信任根开始,到硬件平台、操作系统、应用,一级度量一级,一级信任一级,把这种信任扩展到整个计算机系统,并采取防护措施,确保计算资源的数据完整性和行为的预期性,从而提高计算机系统的可信性。

呱牛笔记

什么是信任根

信任根是可信计算机的可信起基点,也是实施安全控制的点。 TCG定义的信任根包括3个根。可信度量根(RTM):负责完整性度量;可信报告根(RTR):负责报告信任根;可信存储根(RTS):负责存储信任根。其中,RTM是一个软件模块、RTR是由TPM的平台配置寄存器(PCR)和背书密钥(EK)组成、RTS是由TPM的PCR和存储根密钥(SRK)组成。实践中,RTM在构建信任链的过程中,将完整性度量形成的信息传递给RTS,RTS使用TPM的平台配置寄存器存放度量扩展值、使用TPM提供的密码学服务保护度量日志。

TPM是一个硬件MCU, 和CPU一样在同一个主板上,有一定的计算和存储能力。所以理论上来讲,它是一个小型的计算系统。在BIOS和这个操作系统工作之前已经开始工作。它不能够去使用这个计算机本身的内存和外存。也就是说它是一个独立的一个计算系统,所以它只能够用自己内部的存储,和内部的计算能力。它内部计算能力主要是采取一些公开的一些算法,比如说密码的一些运算。所以它需要提供一些标准的接口,还有提供一些相关的安全操作,来支持这样的一些密码计算。

TPM其实需要包括四个主要功能:

① 对称/非对称加密;② 安全存储;③ 完整性度量;④ 签名认证。

国内可信计算平台密码方案采用的信任根是可信密码模块(TCM),该模块是我国可信计算从业人员参考TCG TPM1.2改进创新实现。

什么是信任链

信任链的主要作用是将信任关系扩展到整个计算机平台,它建立在信任根的基础上。信任链可以通过可信度量机制来获取各种各样影响平台可信性的数据,并通过将这些数据与预期数据进行比较,来判断平台的可信性。

建立信任链时遵循以下3条规则。

1、所有模块或组件,除了CRTM(信任链构建起点,第一段运行的用于可信度量的代码),在没有经过度量以前,均认为是不可信的。同时,只有通过可信度量且与预期数据相符的模块或组件,才可归入可信边界内。

2、可信边界内部的模块或组件,可以作为验证代理,对尚未完成验证的模块或组件进行完整性验证。

3、只有可信边界内的模块或组件,才可以获得相关的TPM 控制权,可信边界以外的模块或组件无法控制或使用可信平台模块。

怎么度量

基于信任根,对计算机平台的可信性进行度量,并对度量的可信值进存储,当客体访问时提供报告,简单理解度量,就是被度量对象的摘要值,其度量值存储在PCR寄存器中,保存的算法为:

TCG采用扩展计算散列值的方式,即现有值与新值相连,再次计算散列值作品为新的完整性度量值存储至PCR中

New PCRi = hash(old PCRi || new value)

度量报告由经过可信三方签名过的PID签发。

《可信计算3.0工程初步》

这本书除了可信3.0的理论知识,更多章节是介绍基于可信计算软件基cube的工程应用;在开始接触可信软件基框架cube的时候,其实最难理解的是cube的架构思想,包括模块插件化,软件定义数据结构,以及分布式运行,并支持切面拦截,以及cube对可信计算期望实现的度量、决策,以及控制的抽象架构,在cube的基础框架里面,是否有清晰的理解,整个架构和原型实现还是很严谨的,每步操作都有清晰的指导,并对可能出现的问题进行了说明,有部分没有说明的过程,需要通过日志判别出现的问题,然后对照着书本进行解决。

可以结合:GM-T 0011《可信计算:可信密码支撑平台功能与接口规范》、GM-T 0012《可信计算:可信密码模块接口规范》、GM-T 0013来看这本书,会对可信计算工程初步中cube软件框架有更深刻的理解!

cube可信软件基抽象架构及TPCM模拟器的运行调试,模拟器采用一个内核模块tcmd_dev模拟tcm模块设备,该模块通过socket调用模拟器,实现tcm接口仿真的功能!Linux insmod(insert module)命令用于载入模块,Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。

语法

insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值]

参数说明:

-f  不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。

-k  将模块设置为自动卸除。

-m  输出模块的载入信息。

-o<模块名称>  指定模块的名称,可使用模块文件的文件名。

-p  测试模块是否能正确地载入kernel。

-s  将所有信息记录在系统记录文件中。

-v  执行时显示详细的信息。

-x  不要汇出模块的外部符号。

-X  汇出模块所有的外部符号,此为预设置。

根据平台差异,修改编译错误,开始运行模拟器和客户端时,会出现client vtcm_client connect failed,需要修改tcmd_dev.c:

// res = sock_create(PF_UNIX, SOCK_STREAM, 0, &tcmd_sock);

res = sock_create_kern(AF_INET, SOCK_STREAM, 0, &tcmd_sock); 

[root@localhost tcmd_dev]# rmmod tcmd_dev.ko

//向内核加载模块

[root@localhost tcmd_dev]# ./load_tcmd_dev.sh 13200

[root@localhost tcmd_dev]#

[root@localhost tcmd_dev]# lsmod |grep tcm

tcmd_dev 13376 0

[root@localhost tcmd_dev]# rmmod tcmd_dev.ko

[root@localhost tcmd_dev]# lsmod |grep tcm

[root@localhost tcmd_dev]# ./load_tcmd_dev.sh 13200