TPM是什么(TPM是什么的英文缩写)
: Trusted Module,定位为廉价的小芯片,提供密钥的安全存储,协处理,系统状态的度量等功能。
TCG: Trusted Computing Group (https://trustedcomputinggroup.org) 制定TPM规范的组织,从官网可以下载TPM规范。
TPM规范定义了一个硬件的根信任,比软件更加安全。TPM的功能需要通过软件来使用,有一些开源的API实现。TPM提供完整性度量,健康检查和认证服务。
TPM可以做什么?
- 批量对称加密(但厂商可能不会支持,这个受美国出口管制法限制)
- 提供高质量的随机数生成器
- 密码学服务
- 受保护的内部存储空间,可以保存少量的数据。
- 多种认证方式来访问受保护的密钥和数据
- 签名和认证
- 对密钥和数据签名。
- 密钥和数据的使用。
- 认证:报告平台状态
- 封装:使用平台状态来授权访问密钥和数据
TPM的不同实现
TPM 2.0采用了库的定义方式,比1.2更加灵活,因此2.0有多种实现灵活性,例如:
- 独立的TPM:TPM实现为一个独立的芯片,安全性最高。
- 集成的TPM:TPM集成到某个芯片里。
- 固件TPM:通过固件实现TPM,不需要额外芯片,由CPU在特定模式下运行固件里的软件。
- 软件TPM:以软件实现的模拟TPM,适合测试开发阶段使用。而且开发测试阶段建议不要使用物理TPM,因为一旦把EK和根证书搞挂了,很难恢复。
下面是一些TPM的应用场景:
安全级别
典型应用场景
独立的TPM
最高
关键系统
集成的TPM
较高
网关等
固件TPM
高
娱乐领域的系统
软件TPM
无
测试和原型
虚拟TPM
高
云环境
2.0与1.2规范的差异
2.0规范在1.2的基础上增加了一些新的特性,比如:
- 算法灵活性:TPM2.0引入了更多的算法支持,TPM1.2只支持一些固定的默认的算法,比如PCR扩展固定使用。
- 增强的授权:统一了授权的方式(和策略相关的一个改进)。
- 快速密钥加载:改用对称加密算法,把密钥加载到TPM更快了。
- PCR易用性:在1.2中,密钥与设备状态绑定后,如果设备状态发生改变,密钥也要改变。比如升级导致系统状态值变化,用户必须先unseal数据,升级,再seal数据。2.0则可以把数据与某个签名方认可的PCR值进行绑定,而不固定某个具体的PCR值。
- 管理更灵活:不同授权方式可以独立使用。
- 通过名称获取资源:大致是句柄会被替换的问题,而相同的名称总会产生相同的结果,不会被篡改,这些都是在协议层实现的,对用户来说只需要知道怎么用就可以了。
vTPM
vTPM需要libvirt和支持,qemu支持vTPM有两种方式,一种是passthrough,透传宿主机的设备给虚机,宿主机需要有这个设备,
另一种是模拟器方式,从ChangeLog来看,qemu从2.11开始加入TPM模拟器的支持。而目前推荐使用的版本是qemu 2.12, 4.5。
编译TPM模拟器swtpm
实际上,qemu模拟TPM是利用外部的TPM模拟器实现的,需要借助swtpm工具,因此首先需要编译出swtpm模拟器。下载libtpms和swtpms的源码:
- https://com/stefanberger/libtpms
- https://github.com/stefanberger/swtpm
按照顺序,编译源码并安装。安装完后,可以查看版本
如果编译时有crypto报错,检查是否安装了-devel。
8没有带twisted包,可先安装python3-pip,再用pip3安装twisted。
编译qemu
CentOS yum源里带的qemu-kvm并没有编译TPM模拟器的支持,如果虚机配置为tpm模拟器,启动虚机时提示不支持emulator backend,表示qemu编译时没有带TPM模拟器支持,需要手工编译。
以qemu 3.1.0为例,下载源码及编译
可以通过configure –help查看编译选项,TPM默认是打开编译的。编译x86_64即可,编译所有架构会很费时间。
编译完成后,build/x86_64-softmmu/qemu-system-x86_64为编译出的qemu执行程序,将其替换虚机xml的emulator字段。
视qemu编译选项的不同,虚机xml可能需要作相应的调整,移除不支持的设备。
配置虚机XML
可以通过virt-manager为虚机添加TPM设备(TIS),也可以手动编辑XML文件添加:
有CRB和TIS两种模型,底层都是通过swtpm模拟的。libvirt官网的说明是,TIS是默认的模型,CRB只能用于TPM 2.0。用默认的设备模型即可。
启动虚机并安装TPM协议栈和工具
启动虚机,qemu会自动创建一个swtpm模拟器进程,并通过 domain 与之交互。
1.2使用的主流协议栈是IBM的trousers开源实现(托管在sourceforge),交互工具是tpm-tools包。2.0使用的主流协议栈和工具是tpm2-tss和tpm2-tools,代码托管在https://github.com/tpm2-software,最初应该是Intel主导的开源项目。
协议栈和工具在CentOS有对应的包,可以直接安装,因为功能还在开发中,建议使用如CentOS8这种较新的发行版,可以装载高一点的版本,或者自行从源码编译。
TSS和TPM模拟的版本要相符。
这里以模拟TPM 2.0为例,需要从yum安装:tpm2-abrmd, tpm2-tss和 tpm2-tools。tpm2-abrmd实现Broker和RM,tpm2-tss实现部分协议栈,tpm2-tools是命令行交互工具集。
执行tpm2_pcrlist,可以打印出pcr寄存器的值,表示安装成功。
TPM的实现层级
TPM协议栈层级关系
整个TPM的层级和关系如图。以tpm2工具集为例,大体划分如下:
- tpm2-tools处于应用层,调用tpm2-tss协议栈的接口实现具体的功能。
- tpm2-tss实现了TSS协议栈,并对应用层提供接口,依据应用的需要,接口可以有层次之分。
- tpm2-abrmd实现TAB(TPM2 Access Broker)和Resource Mgr两个部分,这一层负责资源调度和协调,上下文切换。它其实也属于协议栈,只是在实现上分开了,可以看出,TPM的实现是很灵活的。
- TCTI即TPM Command Transmission Interface,属于非常底层的接口,只有在系统启动初期或嵌入式系统中才会直接基于该接口进行开发,这里传输的命令在规范中都有相应的定义。
若要开发应用,需要根据待实现的功能,应用所处的运行环境,选择不同的接口层,根据TPM规范进行实现。
到此这篇tpm英文全称(tpm的英文缩写)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/34056.html