TPM密钥管理、使用

news/2024/3/29 17:13:19/文章来源:https://blog.csdn.net/shida219/article/details/129130591

前面讲过证书相关内容,除了在软件方面有所应用外,在硬件方面也有很多应用。本次讲一下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语言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_71796.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树状数组(高级数据结构)-蓝桥杯

一、简介树状数组 (Binary Indexed Tree,BIT),利用数的二进制特征进行检索的一种树状结构。一种真正的高级数据结构: 二分思想、二叉树、位运算、前缀和。高效!代码极其简洁!二、基本应用数列a1,a2,....,an,操作:单点修改&#xf…

详解HashMap

目录 1.hash code 2.数据结构 3.初始化 4.存取 4.1.put 4.2.get 5.迭代 6.扩容 7.JDK1.7版本存在的问题 7.1.性能跌落 7.2.循环链表 8.散列运算 9.扰动函数 1.hash code hash code是使用hash函数运算得到的一个值,是对象的身份证号码,用于…

OpenSumi 是信创开发云的首选

原文作者:行云创新技术总监 邓冰寒 引言 随着云原生应用的日益普及,开发上云也逐步被越来越多的厂商和开发者接受,在这个赛道国内外有不少玩家,国外的 GitHub Codespaces、CodeSandbox,GitPod、亚马逊 Cloud9&#xf…

借力英特尔® Smart Edge,灵雀云 ACP 5G 专网解决方案获得多维度优化加速

近日,灵雀云联合英特尔推出了集成Smart Edge 模块的灵雀云 ACP 5G 专网解决方案,同时共同发布了《借力英特尔 Smart Edge,基于云原生解决方案的灵雀云 ACP 5G 专网版本获得多维度优化加速》白皮书。 得益于云计算技术和 5G 网络的高速发展&am…

Win10 环境 安卓ollvm编译与配置 ndk代码混淆加密

确定你正在使用的ndk版本 查看build.gradle ndkVersion 21.4.7075529 确定你使用的ndk的ollvm版本 C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\21.4.7075529\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-config.exe --version 9.0.9svn 确定了ollvm版本后…

动手学深度学习(第二版)学习笔记 第二章

官网:http://zh.d2l.ai/ 视频可以去b站找 记录的是个人觉得不太熟的知识 第二章 预备知识 代码地址:d2l-zh/pytorch/chapter_preliminaries 2.1 数据操作 2.1. 数据操作 — 动手学深度学习 2.0.0 documentation 如果只想知道张量中元素的总数&#…

GIT分支管理策略

git基本操作git操作的前提条件:本地windows安装git学习idea中的插件使用idea的git基本操作:远程仓库remote更新fetch:git fetch拉取pull: git pull上传push: git push合并merge: git merge 合并分支本地提交commit:git commit分支branch: git branch 查看分支或者 切换分支上述…

软件设计(十四)-UML建模(上)

软件设计(十三)-原码、反码、补码、移码https://blog.csdn.net/ke1ying/article/details/129115844?spm1001.2014.3001.5501 UML建模包含:用例图,类图与对象图,顺序图,活动图,状态图&#xff…

web网页如何实现响应式导航栏--移动端导航栏

背景: 一提到响应式导航栏,大家第一反应可能就是bootstrap响应式导航栏,这个响应式的一般是针对屏幕变小时,视口出现导航栏,可是,展示到移动端的时候,并没有变化??&#…

京东测试进阶之路:初入测试碎碎念篇

1、基本的测试用例设计方法 基本的测试用例设计方法(边界值分析、等价类划分等)。 业务和场景的积累,了解测试需求以及易出现的bug的地方。 多维角度设计测试用例(用户、业务流程、异常场景、代码逻辑)。 2、需求分析 …

ccc-pytorch-基础操作(2)

文章目录1.类型判断isinstance2.Dimension实例3.Tensor常用操作4.索引和切片5.Tensor维度变换6.Broadcast自动扩展7.合并与分割8.基本运算9.统计属性10.高阶OP大伙都这么聪明,注释就只写最关键的咯1.类型判断isinstance 常见类型如下: a torch.randn(…

虹科新闻 | 虹科与b-plus正式建立合作伙伴关系,共同致力于用于ADAS/AD系统开发的VV测量解决方案

虹科b-plus 携手共创未来! 近期,虹科与德国b-plus正式建立合作伙伴关系。未来,虹科与b-plus将共同致力于提供用于ADAS/AD系统开发的V&V测量解决方案。 合作寄语 虹科CEO陈秋苑女士表示:“虹科非常期待与b-plus合作&#x…

Microsoft Dynamics 365:导入License到服务层,通过Business Central Administration Shell

本文主要是Microsoft Dynamics 365的License导入的图解干货,不多赘述,直接上图:第一步:准备好的License文件放在你喜欢的目录下第二步:到开始程序里找到并打开 Business Central Administration Shell3.第三步&#xf…

Day895.MySql误删数据还原方案 -MySQL实战

MySql误删数据还原方案 Hi,我是阿昌,今天学习记录的是关于MySql误删数据还原方案的内容。 传统的高可用架构是不能预防误删数据的,因为主库的一个 drop table 命令,会通过 binlog 传给所有从库和级联从库,进而导致整…

ASE20N60-ASEMI的MOS管ASE20N60

编辑-Z ASE20N60在TO-247封装里的静态漏极源导通电阻(RDS(ON))为0.4Ω,是一款N沟道高压MOS管。ASE20N60的最大脉冲正向电流ISM为80A,零栅极电压漏极电流(IDSS)为10uA,其工作时耐温度范围为-55~150摄氏度。ASE20N60功耗…

UVM实战--加法器

前言 这里以UVM实战(张强)第二章为基础修改原有的DUT,将DUT修改为加法器,从而修改代码以使得更加深入的了解各个组件的类型和使用。 一. 组件的基本框架 和第二章的平台的主要区别点 (1)有两个transactio…

我的三周年创作纪念日——学习不止,创作不停

机缘 最开始写文章博客,是为了用输出倒逼自己输入。 从校园离开后,才逐渐意识到学习的不容易。没有写好的教材课程、没有画好的考点重点,没有一起学习的同学,更没有明确的学习方向和路径。 数据分析方向可以学的东西太多了&…

P18 PyTorch 感知机的梯度推导

前言这里面简单介绍一下单层感知机和多层感知机的模型参考:https://www.bilibili.com/video/BV17e4y1q7NG?p41一 单层感知机模型输入: k 代表网络层数,i 代表输入节点的编号前向传播: 权重系数k: 层数i: 前一层输入节点编号j: 当前层输出节点编号这里&a…

软件工程学习

文章目录前言软件特点分类软件工程软件危机项目管理工具总结前言 本博客仅做学习笔记,如有侵权,联系后即刻更改 科普: 软件 软件的定义 软件不是程序,而是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。 特点 …

windows 安装Qt

下载 下载地址https://download.qt.io/,此文已5.7.0为例子。 根据图片依次选择即可。 安装 安装过程参考另一篇文章Ubuntu 安装 Qt5.7.0即可 配置环境变量 ps:我就是之前没配置环境变量,直接使用创建项目,项目源码直接运行是…