当前位置: 首页 > news >正文

TPM密钥管理、使用

前面讲过证书相关内容,除了在软件方面有所应用外,在硬件方面也有很多应用。本次讲一下TPM相关的内容。

一、TPM介绍

1.1背景

TCG基于硬件安全的架构是为应对1990s后期日益增多的复杂恶意软件攻击应用而生的。当时以及现在,抵御PC客户端网络攻击的最流行办法就是用杀毒软件。

**纯软件防御的基本缺陷是软件不能有效地自我验证。**当恶意软件在PC上获得了与杀毒软件同等的执行权限时,可以简单地关闭程序,以隐藏自己的存在。恶意软件通过把攻击目标设为固件和引导程序使其越来越复杂,这种方式很难被杀毒软件查杀。

为了能够安全地验证软件配置,可信计算平台需要一个位置记录和验证系统存储空间之外软件的状态。在计算机安全世界里,针对验证主存软件的硬件安全监控概念已经存在了几十年。然而,重要的是TCG设计了一款成本不足1$的硬件模块,这可以使其广泛应用。这样,TPM被设计为一个被动芯片,它仅仅响应平台软件发出的命令,这有助于平台软件验证自己以及通用加密模组。

20232614132645.png
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密钥生成与使用

生成

20230214-134036.png

  1. 密钥生成器用于生成密钥(对称或非对称),随机数生成器生成的随机数将作为密钥生成器生成密钥的关键输入参数。

  2. TPM2_Create和TPM2_CreatePrimary可以通过模板创建所有类型的密钥。

微信图片_20230214142450.jpg

使用

截图-2023-02-15-133126.png

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安全存储

截图-2023-02-15-133701.png

  1. 只有EK和SRK永久存储在TPM内部

  2. TPM空间有限,部分密钥以加密形式存放在外部

  3. 使用外部密钥时,KCM(密钥缓冲管理机制)将密钥加载到TPM的保护区域,该密钥需要由上层密钥解密。所以树形结构深度不宜过深。

  4. 链式密钥结构里有一个存储密钥,这个密钥和用户口令关联。在用户输入口令后可以加载其子存储密钥,而用户其他所有密钥都是非存储密钥,并存储在该子存储密钥下。

  5. 用户引导时,通过用户口令加载子存储密钥,一旦子存储密钥被装入芯片,就不再需要口令以加载其他的密钥。

三、应用

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 或密码进行认证。

20232714132757.png

FVEK:就代表加密目录的密钥,经VMK加密存储在磁盘

VMK:就是加密FVEK的密钥,经SRK加密存储在磁盘

图中所示的启动顺序解释如下:

  1. BIOS 启动并初始化TPM。并measure firmware部分敏感内容和启动分区以及bootloader,将结果放入PCR组。

  2. 如果 PCR 值与预期值相匹配,则 TPM 将使用存储根密钥 (SRK) 对卷主密钥 (VMK) 进行解密。

  3. 从卷中读取加密 FVEK,并使用解密后的 VMK 对其进行解密。

  4. 访问磁盘扇区时,使用 FVEK 进行解密。

  5. 为应用程序和过程提供解密数据

但是如果hacker对启动环境进行变更,或者将硬盘放到其它机器上,都无法获取到数据。

资料

  1. https://opensecuritytraining.info/IntroToTrustedComputing_files/Day2-2-data-storage.pdf

  2. GitHub - leeehui/a-practical-guide-to-tpm2-book-cn: reading notes of “a practical guide to tpm2”

  3. tpm2-tools使用工具_jianming21的博客-CSDN博客_tpm2_rsadecrypt -c key.ctx -o msg.ptext msg.enc

  4. Bitlocker使用及原理_LLLibra146的博客-CSDN博客_bitlocker原理

  5. 可信平台模组(TPM)的前世今生_U.2 SSD的博客-CSDN博客

  6. TPM概述_fgupupup的博客-CSDN博客_tpm功能是什么

最后

大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)

我的个人博客为:https://shidawuhen.github.io/

往期文章回顾:

  1. 设计模式

  2. 招聘

  3. 思考

  4. 存储

  5. 算法系列

  6. 读书笔记

  7. 小工具

  8. 架构

  9. 网络

  10. 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 ✨当前专栏:算法基础 🔥专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习 🌹 🌹 &#x1f3…...

c++提高篇——stack容器

一、stack容器的基本概念 stack是一种先进后出(FILO)的数据结构,它只有一个出口。栈中只有顶端的元素才可以被外界使用。因此该容器不能有遍历行为。基本的结构如下: stack容器有些像手枪子弹的弹夹,其数据的出入栈可以以弹夹为参考。 二、…...

HTTP安全与HTTPS协议

目录 Http协议的安全问题 常见的加密方式 防止窃听 单向散列函数 单向散列值的特点 加密与解密 对称加密与非对称加密 对称加密的密钥配送问题 密钥配送问题的解决 非对称加密 前言: 公钥与私钥 非对称加密过程 混合密码系统 前言: 混合…...

【c++】类和对象4—c++对象模型和this指针

文章目录成员变量和成员函数分开存储this指针的用途空指针访问成员函数const修饰成员函数成员变量和成员函数分开存储 在c中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person1…...

嵌入式Qt 开发一个视频播放器

上篇文章&#xff1a;嵌入式 Qt开发一个音乐播放器&#xff0c;使用Qt制作了一个音乐播放器&#xff0c;并在OK3568开发板上进行了运行测试&#xff0c;实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件&#xff0c;可以实现视频列表的显示与选择播放等&#xff0c;先…...

阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代

Spring Cloud 发展史 Spring Cloud 从 15 年的 3 月份推出之后&#xff0c;迅速在 Java 微服务生态中&#xff0c;成为开发人员的首选技术栈。 Spring Cloud 在 Spring Boot 的基础上&#xff0c;保留 Java 开发习惯&#xff0c;加入分布式特性&#xff0c;提供了一系列通用工…...

边界检测方法总结

1&#xff1a;经典的边界检测方法有sobel&#xff0c;拉普拉斯&#xff0c;canny等。 sobel&#xff1a; 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, -…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...