当前位置: 首页 > 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, -…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...