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

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。

改进的解决方案包括以下两步:

  1. 密封口令或密钥文件到TPM中。
  2. 解密存于内存中的秘密并将其传递给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/USBF​INDP​ATH/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作用域链与执行上下文

变量提升&#xff1a; 变量提升&#xff08; hoisting &#xff09;。 我可恨的 var 关键字&#xff1a; 你读完下面内容就会明白标题的含义&#xff0c;先来一段超级简单的代码&#xff1a; <script type"text/javascript">var str Hello JavaScript hoi…...

UnityEditor编辑器扩展代码实现Project搜索的实现功能和切换Component等

反射实现切换Gameobjecect-Comp之前介绍过Kinematic Character Controller这个插件这个插件很容易和另外一个插件混淆&#xff0c;两个作者头像比较相像&#xff0c;而且这个插件的作者不太喜欢露脸&#xff08;他现在做Dot-CharacterControl去了&#xff09;&#xff0c;几乎网…...

SKAdNetwork:从0到1

一、什么是SKAdNetwork https://developer.apple.com/documentation/storekit/skadnetwork iOS14.5开始&#xff0c;获取IDFA需要用户确认授权才可&#xff0c;此时SKAdNetwork 正式回归。 SKAdNetwork 是苹果在2018年推出的一个更加保护用户隐私的归因框架&#xff0c;并与…...

Spring+MVC+MYbatis注解开发

Spring常见注解 注解一&#xff1a;Configuration 用在类上面&#xff0c;加上这个注解的类可以成为一个spring的xml配置文件&#xff0c;使用的是java代码的配置 注解二&#xff1a;ComponentScan 用在类上&#xff0c;加上注解可以指定扫描路径 注解三&#xff1a;创建对…...

Redis主从复制过程

将目前服务器加入到端口号为6379的从服务器 一主二仆 当期中一台从服务器宕机之后 从服务器重启之后会变成单独的主服务器&#xff0c;与之前的主从复制没有关系&#xff0c;重新使用slaceof命令才能恢复到之前一样 主服务器宕机后&#xff0c;从服务器不会成为主服务器&…...

Spring boot开启定时任务的三种方式(内含源代码+sql文件)

Spring boot开启定时任务的三种方式&#xff08;内含源代码sql文件&#xff09; 源代码sql文件下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87486580 目录Spring boot开启定时任务的三种方式&#xff08;内含源代码sql文件&#xff09;源代码…...

Tekton实战案例--S2I

案例环境说明 示例项目&#xff1a; 代码仓库&#xff1a;https://gitee.com/mageedu/spring-boot-helloWorld.git 构建工具maven pipeline各Task git-clone&#xff1a;克隆项目的源代码 build-to-package: 代码测试&#xff0c;构建和打包 generate-build-id&#xff1a;生…...

四、使用类实现功能

使用类实现功能 ts中类的继承 ES6中class类中&#xff0c;属性分为&#xff1a;实例上的属性&#xff0c;原型上的方法&#xff1b;也可以叫做&#xff1a;class的属性&#xff0c;class的方法。 类的继承叫法&#xff1a;父类>子类&#xff0c;基类>派生类&#xff1b…...

Java多线程不安全的例子

目录 1. 可见性不安全例子 2. 原子性不安全例子 3. 有序性不安全例子 1. 可见性不安全例子 可见性&#xff1a;一个线程对共享变量的修改&#xff0c;另外一个线程不能够立刻看到。 如果多线程对共享数据进行访问而不采取同步操作的话&#xff0c;那么操作的结果是不一致…...

vivo X Flip会是高端手机市场的又一折叠屏爆款吗?

据多个平台消息&#xff0c;vivo即将推出小折叠屏手机X Flip。据了解&#xff0c;vivo X Flip将采用轻盈便携的竖向折叠布局&#xff0c;以及非常受女性消费者喜爱的结构设计。那么&#xff0c;vivo X Flip会是vivo折叠屏的又一个爆款吗&#xff1f; 一、vivo X Flip小折叠屏手…...

MySQL中MVCC如何解决不可重复读以及幻读?

了解MVCC之前&#xff0c;我们首先需要了解以下两个概念&#xff1a;一致性非锁定读和锁定读&#xff0c;了解这两个概念之后我们在逐步分析MVCC。 一致性非锁定读和锁定读 一致性非锁定读(快照读) 对于 一致性非锁定读的实现&#xff0c;通常做法是加一个版本号或者时间戳字…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...