TPM 2.0实例探索2 —— LUKS磁盘加密(3)
接前文:TPM 2.0实例探索2 —— LUKS磁盘加密(2)
本文大部分内容参考:
Code Sample: Protecting secret data and keys using Intel® Platform...
二、LUKS磁盘加密实例
3. 将密码存储于TPM的LUKS
由于自动挂载需要在运行时提供一个口令(密码)或密钥以执行cryptsetup命令而无需用户交互,它必须在某种程度上是明确的。一个方法被需要以在运行时加密口令或密钥直到它被需要以解密卷。此种方法也保护磁盘与其安装到的系统相分离的情况。这个方法是TPM。
改进的解决方案包括以下两步:
- 密封口令或密钥文件到TPM中。
- 解密存于内存中的秘密并将其传递给cryptsetup。
关于涉及到的TPM相关的命令详情,请参阅:
https://github.com/tpm2-software/tpm2-tools/blob/master/man/

Create and persist a sealing object and use it to seal a random byte sequence as the disk key:
创建一个密封对象并将其持久化,然后使用它去密封一个随机字节序列作为磁盘密钥。各步骤如下:
(1)创建主对象
tpm2_createprimary -Q --hierarchy=o --key-context=prim.ctx
实际命令及结果如下:
$ sudo /usr/local/bin/tpm2_createprimary -C o -c prim.ctx
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparent|sensitivedataorigin|userwithauth|restricted|decryptraw: 0x30072
type:value: rsaraw: 0x1
exponent: 65537
bits: 2048
scheme:value: nullraw: 0x10
scheme-halg:value: (null)raw: 0x0
sym-alg:value: aesraw: 0x6
sym-mode:value: cfbraw: 0x43
sym-keybits: 128
rsa: bc1e9cc4713b036b158d10fe255cf04552efc53350a7c33efe1583c6224f22a38ffcbcf75209f23f510b4b3a6bb5956a4f43ac607f0b14d9c995e73b13bb7dde4ada49cf97eaa414aa0c34082a32bc79e25145d87b3e4bf95752c194c016605fffa919a646446b1c72c0fbef3b87f9eee7a255a7246ffa006006c6306556f56719ede8635b8073b0fd232095338a946bcbd7a2dc3c28deaf3bda0f05803807b537167db319ec5dfeb6ec70a7d0decebabbadaaa706512bc0da942824150e3feed25cb7bf83d56c11b6b54060c4a93b2a847c539ede710caf25a74e8f05d7115474f80bf07f63c5bc4558688ee87ae1a310611538fabbf86886a6bdf54f53e9bd
(2)创建加密密钥
dd if=/dev/urandom bs=1 count=32 status=none
实际命令及结果如下:
$ dd if=/dev/urandom of=disk2.key bs=1 count=32
输入了 32+0 块记录
输出了 32+0 块记录
32 字节已复制,0.00315624 s,10.1 kB/s
如果加了“status=none”参数,则结果如下:
$ dd if=/dev/urandom of=disk3.key bs=1 count=32 status=none
$
(3)创建对象
tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=- --parent-context=prim.ctx
实际命令及结果如下:
$ sudo /usr/local/bin/tpm2_create -g sha256 -u seal.pub -r seal.priv -i disk2.key -C prim.ctx
$ sudo /usr/local/bin/tpm2_create -g sha256 -u seal.pub -r seal.priv -i disk2.key -C prim.ctx
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparent|userwithauthraw: 0x52
type:value: keyedhashraw: 0x8
algorithm: value: nullraw: 0x10
keyedhash: 9e6abe1d1ec7da09e6f47b4f1d97a2a274ffb2ef98d52ef844b04463239fefbc
注:步骤(2)、(3)可以合为一步:
dd if=/dev/urandom bs=1 count=32 status=none | tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=- --parent-context=prim.ctx
(4)将公钥加载到TPM中
tpm2_load -Q --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctx
实际命令及结果如下:
$ sudo /usr/local/bin/tpm2_load -C prim.ctx -u seal.pub -r seal.priv -n seal.name -c seal.ctx
(5)将密钥从易失性空间移存到非易失性空间中
tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002
实际命令及结果如下:
$ sudo /usr/local/bin/tpm2_evictcontrol -C o -c seal.ctx 0x81010002
persistent-handle: 0x81010002
action: persisted
Install the new key in place of the old one, and delete the old key created previously:
用新的密钥替换旧的密钥,并且删除之前创建的旧密钥。各步骤如下:
(1)替换旧的密钥
tpm2_unseal -Q --object-context=0x81010002 | sudo cryptsetup --key-file=disk.key luksChangeKey enc.disk
实际命令及结果如下:
$ sudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | cryptsetup --key-file=disk.key luksChangeKey enc.disk
$
(2)删除旧密钥
$ shred disk.key
销毁数据的方式分为擦除、消除、销毁级别。我们日常用的rm命令相当于是擦除,执行了删除操作,数据实际上还是存在磁盘上的。shred是一条终端命令,重复覆盖指定的文件,以使即使非常昂贵的硬件探测也难以恢复数据。shred命令删除一个文件之后,文件中的数据会被多次随机覆写,相当于执行的是清除级别的销毁数据操作。shred命令执行后文件系统会在原来的位置覆盖指定的数据。传统的文件系统符合此条件,但许多现代的文件系统都不符合条件。以下是会令shred 无效或不担保一定有效的文件系统的。比如有冗余镜像的Raid系统;不时进行快照记录的文件系统,像Network Applicance 的NFS 服务器等。shred命令只能清除文件,不能清除目录。
(3)擦除旧密钥
$ rm disk.key
(4)将enc.disk虚拟成块设备
$ sudo losetup /dev/loop0 enc.disk$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 50M 0 loop
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 511M 0 part /boot
├─nvme0n1p2 259:2 0 4.9G 0 part
├─nvme0n1p3 259:3 0 19.5G 0 part
├─nvme0n1p4 259:4 0 19.5G 0 part /
└─nvme0n1p5 259:5 0 432.5G 0 part /var/usr/local/opt/home/data
(5)使用保存于TPM中的密钥加密enc.disk
tpm2_unseal -Q --object-context=0x81010002 | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volume
实际命令及结果如下:
$ sudo /usr/local/bin/tpm2_unseal -c 0x81010002 | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volume
此口令无可用的密钥。
(6)查看加密磁盘映射分区
未完待续。
相关文章:
TPM 2.0实例探索2 —— LUKS磁盘加密(3)
接前文:TPM 2.0实例探索2 —— LUKS磁盘加密(2) 本文大部分内容参考: Code Sample: Protecting secret data and keys using Intel Platform... 二、LUKS磁盘加密实例 3. 将密码存储于TPM的LUKS 由于自动挂载需要在运行时提供一…...
嵌入式Debian主机可接HDMI显示
1、ARM是何物 ARM是一种体系架构。它使用 32 位处理器核心,采用 RISC(Reduced Instruction Set Computer,精简指令集计算机)架构,核心的运算效率高,占用空间小,功耗低,应用于便携式…...
驱动程序开发:基于ICM20608六轴传感器 --- 使用Regmap API 的 SPI 读取数据 之 IIO驱动
目录一、IIO 子系统简介二、IIO子系统使用的一些相关的结构体、函数等1、iio_dev 结构体 ①modes:是选择iio驱动设备支持的工作模式,模式分别有如下: ②dev:其是一个设备结构体。 ②channels:为 IIO 设备通道…...
专利撰写 为什么要申请专利 申请专利对个人有什么利益关系 专利申请实例 如何申请专利 专利申请办理流程
专利撰写 专利是对发明者或创造者所创造的发明或设计提供一定期限的独占权的法律保护。撰写专利需要考虑到多方面的因素,包括发明或设计的技术性、可行性、独创性、保密性等等。以下是一些关于专利撰写的常见问题和注意事项:专利类型:专利包括…...
yolov5/6/7系列模型训练日志结果数据对比分析可视化
早在之前使用yolov3和yolov4这类项目的时候可视化分析大都是自己去做的,到了yolov5的时候,变成了一个工具包了,作者全部集成进去了,这里我们以一个具体的结果为例,如下:整个训练过程产生的指标等数据都会自…...
ppppp2-23
#!/bin/sh USBFILE/etc/ppp/usbdevices LIST/etc/ppp/diallist function ec25_find_ttyname() { DEVNAME$1 FLAG0 USB_FIND_PATH/sys/bus/usb/devices for dir in $(ls $USB_FIND_PATH) do echo $(ls USBFINDPATH/USB_FIND_PATH/USBFINDPATH/dir) | grep ttyUSB > /dev…...
【GeoDjango框架解析——读取矢量数据写入postgis数据库】
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 geodjango框架解析之读取矢量数据shp文件写入postgis数据库 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录…...
注意啦!如何通过广告吸引客户直接下单?
2023年跨境电商越来越突出,据业内相关人士称,在未来几年与跨境电商相关的政策仍会继续倾斜甚至加大力度,因此各行各业都响应政策,在新政策落实之前致力于平台的转型升级,做新时代创新型的高质量发展,其实细…...
ThinkPHP ^6图片操作进阶
图片裁剪、缩略、水印不再是TP框架系统内置的功能,需要安装。 目录 安装 图片处理 1.创建图片对象 2.获取图片属性 3.裁剪图像 4.生成缩略图 6.保存图像 7.水印 安装 使用composer在项目根目录打开命令行执行: composer require topthink/think…...
深入理解JS作用域链与执行上下文
变量提升: 变量提升( hoisting )。 我可恨的 var 关键字: 你读完下面内容就会明白标题的含义,先来一段超级简单的代码: <script type"text/javascript">var str Hello JavaScript hoi…...
UnityEditor编辑器扩展代码实现Project搜索的实现功能和切换Component等
反射实现切换Gameobjecect-Comp之前介绍过Kinematic Character Controller这个插件这个插件很容易和另外一个插件混淆,两个作者头像比较相像,而且这个插件的作者不太喜欢露脸(他现在做Dot-CharacterControl去了),几乎网…...
SKAdNetwork:从0到1
一、什么是SKAdNetwork https://developer.apple.com/documentation/storekit/skadnetwork iOS14.5开始,获取IDFA需要用户确认授权才可,此时SKAdNetwork 正式回归。 SKAdNetwork 是苹果在2018年推出的一个更加保护用户隐私的归因框架,并与…...
Spring+MVC+MYbatis注解开发
Spring常见注解 注解一:Configuration 用在类上面,加上这个注解的类可以成为一个spring的xml配置文件,使用的是java代码的配置 注解二:ComponentScan 用在类上,加上注解可以指定扫描路径 注解三:创建对…...
Redis主从复制过程
将目前服务器加入到端口号为6379的从服务器 一主二仆 当期中一台从服务器宕机之后 从服务器重启之后会变成单独的主服务器,与之前的主从复制没有关系,重新使用slaceof命令才能恢复到之前一样 主服务器宕机后,从服务器不会成为主服务器&…...
Spring boot开启定时任务的三种方式(内含源代码+sql文件)
Spring boot开启定时任务的三种方式(内含源代码sql文件) 源代码sql文件下载链接地址:https://download.csdn.net/download/weixin_46411355/87486580 目录Spring boot开启定时任务的三种方式(内含源代码sql文件)源代码…...
Tekton实战案例--S2I
案例环境说明 示例项目: 代码仓库:https://gitee.com/mageedu/spring-boot-helloWorld.git 构建工具maven pipeline各Task git-clone:克隆项目的源代码 build-to-package: 代码测试,构建和打包 generate-build-id:生…...
四、使用类实现功能
使用类实现功能 ts中类的继承 ES6中class类中,属性分为:实例上的属性,原型上的方法;也可以叫做:class的属性,class的方法。 类的继承叫法:父类>子类,基类>派生类;…...
Java多线程不安全的例子
目录 1. 可见性不安全例子 2. 原子性不安全例子 3. 有序性不安全例子 1. 可见性不安全例子 可见性:一个线程对共享变量的修改,另外一个线程不能够立刻看到。 如果多线程对共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致…...
vivo X Flip会是高端手机市场的又一折叠屏爆款吗?
据多个平台消息,vivo即将推出小折叠屏手机X Flip。据了解,vivo X Flip将采用轻盈便携的竖向折叠布局,以及非常受女性消费者喜爱的结构设计。那么,vivo X Flip会是vivo折叠屏的又一个爆款吗? 一、vivo X Flip小折叠屏手…...
MySQL中MVCC如何解决不可重复读以及幻读?
了解MVCC之前,我们首先需要了解以下两个概念:一致性非锁定读和锁定读,了解这两个概念之后我们在逐步分析MVCC。 一致性非锁定读和锁定读 一致性非锁定读(快照读) 对于 一致性非锁定读的实现,通常做法是加一个版本号或者时间戳字…...
App无辜躺枪?手把手教你搞定腾讯手机管家误报导致的应用商店下架
当合规应用遭遇误报下架:开发者系统性应对指南运动健康类应用被标记为金融诈骗软件?社交工具因"病毒风险"被各大商店紧急下架?这类看似荒谬的误报事件,正在成为中小开发团队的"无妄之灾"。某知名运动App开发团…...
从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤
从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤在当今数据驱动的时代,对象存储已成为现代应用架构中不可或缺的一部分。MinIO作为高性能、兼容S3协议的开源对象存储解决方案,凭借其轻量级和易用性赢得了众多…...
AI赋能5G核心网故障诊断:从PCAP解析到智能根因分析的工程实践
1. 项目概述:当AI遇见5G核心网故障诊断在5G核心网的运维与测试一线干了这么多年,最头疼的莫过于面对海量的PCAP抓包文件。一个复杂的信令流程下来,动辄几千甚至上万个数据包,工程师需要像侦探一样,逐帧审视协议交互&am…...
ThinkPad开机报错0183/0253?别慌,手把手教你搞定EFI变量错误(附BIOS重置教程)
ThinkPad开机报错0183/0253?EFI变量错误全面解决方案当你按下ThinkPad的电源键,期待熟悉的开机画面时,屏幕上却突然跳出一串神秘代码——"0183: Bad CRC of Security Settings in EFI Variable"或"0253: EFI Variable Block D…...
航空航天为什么离不开高强镁合金?国产替代到哪一步了
飞机每减重一千克,全年大约节省四千两百美元的燃油费用——这是航空工程师熟悉的经验值。在商业航空领域,这个数字还只是财务账;在战斗机、导弹和卫星的世界里,减重的收益被换算成更远的航程、更大的载荷、更高的机动性࿰…...
碧蓝航线自动化脚本终极指南:3小时学会全自动游戏管理
碧蓝航线自动化脚本终极指南:3小时学会全自动游戏管理 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧蓝…...
基于IRS2092的200W D类功放设计:从PWM原理到保护电路实战
1. 项目概述与核心思路折腾音响功放,从经典的AB类玩到D类,感觉就像是从燃油车换到了电动车,动力响应和效率完全是两个维度。这次要聊的这块“200W Class-D Audio Power Amplifier [150115]”单板功放,就是一个非常典型的D类功放设…...
用图神经网络做缺陷定位,准确率比传统方法高出30%
在现代软件工程的复杂迷宫中,缺陷定位始终是测试团队面临的核心挑战。想象这样一个场景:一个电商系统在特定压力条件下偶发订单丢失,日志中只留下泛泛的超时错误,问题可能深藏在上百个微服务的调用链、分布式事务的竞态条件或某个…...
正视孩童情绪波动,耐心陪伴平稳疏导
孩子的情绪就像夏天的天气,前一秒还晴空万里,后一秒可能就乌云密布。面对突如其来的哭闹、发脾气或者闷闷不乐,很多家长会急着“灭火”——要么讲道理,要么直接制止。但其实,情绪波动本身不是问题,它是孩子…...
别让依赖毁了你的实验:记一次Vision Mamba复现中causal_conv1d与mamba-ssm的版本“打架”事件
Vision Mamba复现实战:破解依赖冲突的工程化解决方案在深度学习项目的复现过程中,依赖管理往往是最容易被忽视却又最常导致问题的环节。最近在复现Vision Mamba模型时,我遭遇了一场典型的Python依赖"战争"——causal_conv1d与mamba…...
