前面讲过证书相关内容,除了在软件方面有所应用外,在硬件方面也有很多应用。本次讲一下TPM相关的内容。
一、TPM介绍
1.1背景
TCG基于硬件安全的架构是为应对1990s后期日益增多的复杂恶意软件攻击应用而生的。当时以及现在,抵御PC客户端网络攻击的最流行办法就是用杀毒软件。
**纯软件防御的基本缺陷是软件不能有效地自我验证。**当恶意软件在PC上获得了与杀毒软件同等的执行权限时,可以简单地关闭程序,以隐藏自己的存在。恶意软件通过把攻击目标设为固件和引导程序使其越来越复杂,这种方式很难被杀毒软件查杀。
为了能够安全地验证软件配置,可信计算平台需要一个位置记录和验证系统存储空间之外软件的状态。在计算机安全世界里,针对验证主存软件的硬件安全监控概念已经存在了几十年。然而,重要的是TCG设计了一款成本不足1$的硬件模块,这可以使其广泛应用。这样,TPM被设计为一个被动芯片,它仅仅响应平台软件发出的命令,这有助于平台软件验证自己以及通用加密模组。
1.2作用
TPM通过TSS(可信计算平台上TPM的支撑软件,作用主要是为操作系统和应用软件提供使用TPM的接口)为可信计算平台上的应用程序提供的核心功能为:完整性度量、存储和报告,远程证明,数据保护,密钥管理。
-
传统的系统中,密钥和授权信息等安全信息只能存储在磁盘中,这样非常不安全。而在带TPM安全芯片的系统中,一些关键的key是存在TPM芯片内部,这时攻击者只有攻破TPM才有可能攻破系统的防护,攻克一块芯片比一块硬盘成本和难度可大得多。TPM成为系统可信的最低层次,它提供了整个系统可信的基础。
-
TPM主要目的是用来加解密数据(seal/unseal),这些经TPM加密的数据只有这块TPM芯片才能解密,从而达到了数据与此TPM芯片绑定来保护数据的目的。离了加密的这块TPM芯片这份资料是无法解密的。
1.3发展
可信计算组织(TCG)于2003年3月成立。TCG在2003年发布了TPM规范1.2版本,TPM规范2.0版本的1.07修订版于2014年发布,面向公众审查,为以前发布的主要TPM规范提供更新的库规范,实现了TPM历史的一次飞跃。TPM规范修订1.38同属于TPM2.0版本,已于2016年9月发布。
随着可信计算的发展,可信平台模块不一定再是硬件芯片的形式,特别是在资源比较受限的移动和嵌入式环境中,可信执行环境(TEE)的研究比较热,如基于ARM TrustZone、智能卡等可以实现可信计算环境。另一个热点是物理不可克隆函数(PUF),其可以为可信计算提供物理安全特征,实现密钥安全存储、认证、可信根等功能,而且对应泳道物联网、可穿戴设备、BYOD等场景中具有很好的优势。
二、密钥管理
2.1密钥生成与使用
生成
-
密钥生成器用于生成密钥(对称或非对称),随机数生成器生成的随机数将作为密钥生成器生成密钥的关键输入参数。
-
TPM2_Create和TPM2_CreatePrimary可以通过模板创建所有类型的密钥。
使用
2.2密钥类型
可迁移密钥:在一个TPM中生成的密钥可以传送到另一个TPM中使用
不可迁移密钥:在一个TPM中生成的密钥只限在该TPM中使用
密钥名 | 作用 | 类型 | 移植属性 | 产生时机 | 说明 |
---|---|---|---|---|---|
背书密钥(EK) | 1.TPM的身份标识,一般和背书证书一起使用 2.生成身份证明密钥(AIK) 3.解密TPM所有者的授权数据 4.不用做数据加密和签名 | 非对称密钥 | 不可迁移密钥 | TPM生产过程中 | 唯一 |
平台身份认证密钥(AIK) | 1.代替EK提供平台证明 2.专门用于对TPM产生的数据(如PCR值)进行签名。凡是经过AIK签名的实体,都表明经过TPM处理 3.有对应的AIK证书 | 非对称密钥 | 不可迁移密钥 | EK通过PCA(Private CA)生成 | 每个用户可有多个AIK |
存储根密钥(SRK) | 加密数据和其他密钥 | 非对称密钥 | 不可迁移密钥 | 建立tpm所有者时生成 | 1.是特殊的存储密钥 2.管理用户的所有数据,也称为存储可信根(RTS) 3.一个TPM仅存在一个 |
存储密钥 | 1.加密数据和其他密钥 2.不能用于签名 | 非对称密钥 | 不可迁移密钥、可迁移密钥 | 存储其他密钥的密钥 | |
签名密钥 | 对应用数据和信息签名 | 非对称密钥 | 不可迁移密钥、可迁移密钥 | 1.可迁移签名密钥只能对非TPM产生的数据签名 2.不可迁移签名密钥可对TPM内部产生的数据签名 | |
绑定密钥 | 用于加密保护TPM外部的任意数据,通常加密数据量较小(如对称密钥) | 非对称密钥 | 可迁移密钥 | 使用TPM公钥加密的数据,只能使用该TPM解密,即信息绑定到特定的TPM上 | |
密封密钥 | 创建时,TPM将记录配置值和文件哈希快照。仅当当前系统值与快照值相匹配时才能解封或释放密封密钥 | 非对称密钥 | 只有与当时状态匹配才返回解密值 | ||
派生密钥 | 1.TPM之外生成 2.用于签名或者加密 3.使用时才会载入TPM 4.用于需要在平台之间传递数据的场合 | 非对称密钥 | 可迁移密钥 | ||
鉴别密钥 | 保护涉及TPM的传输会话(如TPM间的传输或者普通PC与装有TPM的可信平台的远程通信) | 对称密钥 |
2.3安全存储
-
只有EK和SRK永久存储在TPM内部
-
TPM空间有限,部分密钥以加密形式存放在外部
-
使用外部密钥时,KCM(密钥缓冲管理机制)将密钥加载到TPM的保护区域,该密钥需要由上层密钥解密。所以树形结构深度不宜过深。
-
链式密钥结构里有一个存储密钥,这个密钥和用户口令关联。在用户输入口令后可以加载其子存储密钥,而用户其他所有密钥都是非存储密钥,并存储在该子存储密钥下。
-
用户引导时,通过用户口令加载子存储密钥,一旦子存储密钥被装入芯片,就不再需要口令以加载其他的密钥。
三、应用
3.1数据密封
密封:设M是一份信息,K是对称密钥,Vpcr是TPM的一组PCR Gpcr的值。TPM的一对公私钥为Kpub和Kpri。密封操作为
-
用K对M进行加密,得到K{M}
-
用Kpub对Vpcr和K进行加密,得到Kpub{Vpcr,K}
如果想获取M,必须先获取K,就需要由TPM用Kpri对Kpub{Vpcr,K}进行解密。此时,TPM检查Gpcr的值与Vpcr是否相等。如果相等,TPM提供K,否则不提供K。
例如,用户在计算机上保存自己的日志,而且不希望其他程序或者计算机能够读取。此时用密封密钥进行密封操作,就能保证该日志只有在该计算机上的未被修改的日志软件才能打开。
所以无论日志到别的计算机,还是病毒篡改了用户的日志软件,都无法获得密钥以解密日志。
3.2BitLocker解密流程
这是BitLocker的透明运行模式:此模式利用 TPM 硬件来提供透明的用户体验。所谓透明,就是用户可以在毫无知觉的情况下正常的使用电脑,可以在系统盘加密的情况且未检测到对启动组件的修改的情况下通过 TPM 硬件提供的密钥正常登录到 windows。
如果为了更加安全,可以和用户认证模式一起使用。
用户认证模式:此模式要求用户在预启动环境下提供引导 PIN 或密码进行认证。
FVEK:就代表加密目录的密钥,经VMK加密存储在磁盘
VMK:就是加密FVEK的密钥,经SRK加密存储在磁盘
图中所示的启动顺序解释如下:
-
BIOS 启动并初始化TPM。并measure firmware部分敏感内容和启动分区以及bootloader,将结果放入PCR组。
-
如果 PCR 值与预期值相匹配,则 TPM 将使用存储根密钥 (SRK) 对卷主密钥 (VMK) 进行解密。
-
从卷中读取加密 FVEK,并使用解密后的 VMK 对其进行解密。
-
访问磁盘扇区时,使用 FVEK 进行解密。
-
为应用程序和过程提供解密数据
但是如果hacker对启动环境进行变更,或者将硬盘放到其它机器上,都无法获取到数据。
资料
-
https://opensecuritytraining.info/IntroToTrustedComputing_files/Day2-2-data-storage.pdf
-
GitHub - leeehui/a-practical-guide-to-tpm2-book-cn: reading notes of “a practical guide to tpm2”
-
tpm2-tools使用工具_jianming21的博客-CSDN博客_tpm2_rsadecrypt -c key.ctx -o msg.ptext msg.enc
-
Bitlocker使用及原理_LLLibra146的博客-CSDN博客_bitlocker原理
-
可信平台模组(TPM)的前世今生_U.2 SSD的博客-CSDN博客
-
TPM概述_fgupupup的博客-CSDN博客_tpm功能是什么
最后
大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
我的个人博客为:https://shidawuhen.github.io/
往期文章回顾:
-
设计模式
-
招聘
-
思考
-
存储
-
算法系列
-
读书笔记
-
小工具
-
架构
-
网络
-
Go语言