TPM密钥管理、使用
前面讲过证书相关内容,除了在软件方面有所应用外,在硬件方面也有很多应用。本次讲一下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语言
相关文章:
TPM密钥管理、使用
前面讲过证书相关内容,除了在软件方面有所应用外,在硬件方面也有很多应用。本次讲一下TPM相关的内容。 一、TPM介绍 1.1背景 TCG基于硬件安全的架构是为应对1990s后期日益增多的复杂恶意软件攻击应用而生的。当时以及现在,抵御PC客户端网络…...
return和finally执行顺序、运行时异常与一般异常异同、error和exception区别、Java异常处理机制原理与应用
文章目录1.try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?2.运行时异常与一般异常有何异同?3.java 程序中的错误有三种类型分别是什么4.error和exception有什么…...
我为什么放弃WinUI3
基于WinUI3开发HiNote已经有一个多月的时间了,算是做出来一个简单能用的C端软件。 基于个人的经历,说说其中的开发体验。 UI设计语言 无论是否抄袭苹果,WinUI3给人的感觉都是眼前一亮的。简洁美观,现代化,毛玻璃的美…...
2023年全国最新安全员精选真题及答案2
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.(单选题)静作用压路机在施工过程,要求实际含水量…...
计算机408考研先导课---C语言难点
以下为小编在重温C语言时,容易犯错的一些点,希望列出来对大家有一定帮助! 一、整型变量数的范围 类型说明符长度(字节)数的范围int4/2(有些为4字节,有些为2字节)-32768~32767short2…...
K8S 部署 Redis-Cluster 集群
本文使用 bitnami 镜像部署 redis-cluster 官方文档:https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster 添加 bitnami 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami自定义 values.yaml storageClass:集群的存储…...
[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络
编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …...
Apache Shiro与Spring Security对比
Apache Shiro VS Spring Security 1.Spring Security 官方文档:https://spring.io/projects/spring-security#overview介绍: Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr…...
23春招-mysql事务相关高频面试题
1、什么是事务 对于一个事务,要么事务内的sql全部执行,要么都不执行 2、 事务的特性ACID 原子性 整个事务中所有的操作要么全部提交成功,要么全部失败会滚。 一致性 数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句…...
天线理论知识1——基础概念介绍
基础概念介绍 文章目录 基础概念介绍前言一、主要参数二、天线的种类三、天线的测量前言 天线是用于发射和接收电磁波设备。其功能可以概括为转换自由空间中的电磁波和设备中的导行波。 一、主要参数 天线设计中要考虑的参数较多,包括 方向性函数:距离天线 r r r处的远区…...
【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器
【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器 一、StackEdit介绍1.StackEdit简介2.StackEdit中文版简介3.StackEdit中文版功能二、检查本地Docker环境1.检查系统版本2.检查系统Docker版本3.检查docker compose版本三、下载StackEdit镜像四、部署StackEdit…...
特征工程:特征构造以及时间序列特征构造
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 那特征工程是什么? 特征工程是利用数据领域的相关…...
单master部署简要步骤
准备多台服务器,选定一台为master例如设置ip为192.168.0.10,host: k8s.master,其他分别为 k8s.s11 192.168.0.11k8s.s12 192.168.0.12....hostname可以使用命令配置hostname k8s.masterip解析可以在hosts文件中写入,如果有内部dns解析可以在内…...
【算法基础】(一)基础算法 --- 前缀和与差分
✨个人主页:bit me ✨当前专栏:算法基础 🔥专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习 🌹 🌹 dz…...
c++提高篇——stack容器
一、stack容器的基本概念 stack是一种先进后出(FILO)的数据结构,它只有一个出口。栈中只有顶端的元素才可以被外界使用。因此该容器不能有遍历行为。基本的结构如下: stack容器有些像手枪子弹的弹夹,其数据的出入栈可以以弹夹为参考。 二、…...
HTTP安全与HTTPS协议
目录 Http协议的安全问题 常见的加密方式 防止窃听 单向散列函数 单向散列值的特点 加密与解密 对称加密与非对称加密 对称加密的密钥配送问题 密钥配送问题的解决 非对称加密 前言: 公钥与私钥 非对称加密过程 混合密码系统 前言: 混合…...
【c++】类和对象4—c++对象模型和this指针
文章目录成员变量和成员函数分开存储this指针的用途空指针访问成员函数const修饰成员函数成员变量和成员函数分开存储 在c中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person1…...
嵌入式Qt 开发一个视频播放器
上篇文章:嵌入式 Qt开发一个音乐播放器,使用Qt制作了一个音乐播放器,并在OK3568开发板上进行了运行测试,实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件,可以实现视频列表的显示与选择播放等,先…...
阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代
Spring Cloud 发展史 Spring Cloud 从 15 年的 3 月份推出之后,迅速在 Java 微服务生态中,成为开发人员的首选技术栈。 Spring Cloud 在 Spring Boot 的基础上,保留 Java 开发习惯,加入分布式特性,提供了一系列通用工…...
边界检测方法总结
1:经典的边界检测方法有sobel,拉普拉斯,canny等。 sobel: def get_sobel(in_chan, out_chan):filter_x np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1],]).astype(np.float32)filter_y np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
