接前文: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
此口令无可用的密钥。

出现了问题。具体的细节参见本系列接下来的几篇文章。

TPM 2.0实例探索2 —— LUKS磁盘加密(3)相关推荐

  1. TPM 2.0实例探索3 —— LUKS磁盘加密(5)

    接前文:TPM 2.0实例探索3 -- LUKS磁盘加密(4) 本文大部分内容参考: Code Sample: Protecting secret data and keys using Intel® ...

  2. 【linux encrypt luks 磁盘加密 分区加密】

    * Luks == Linux Unified Key Setup 加密等级为磁盘分区: * device mapper 虚拟设备机制,在 mapper的时候需要输入密码: * 加密之后不能之间挂载, ...

  3. linux系统硬盘设置密码,LUKS:Linux下磁盘加密

    Linux下磁盘加密 LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令.因为它的加密密钥独立于口 ...

  4. 如何在没有安全启动或 TPM 2.0 的传统 BIOS 上安装 Windows 11

    想要在没有安全启动和 TPM 的情况下在旧版 BIOS 上安装 Windows 11?好吧,这里有一个 100% 有效的解决方法. 安装新的 Windows 操作系统的兴奋程度保持不变,我们中的大多数 ...

  5. Linux下磁盘加密——luks

    Linux下磁盘加密 LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令.因为它的加密密钥独立于口 ...

  6. RHCE学习11RHEL6打印服务、ISCSI存储、磁盘加密LUKS和grub引导

    一.打印服务配置和打印客户端设置 RHEL6系统的打印操作由Common Unix Printing System(即CUPS)进行外理. CUPS打印管理系统的主配置文件:/etc/cups/cup ...

  7. luks linux 加密磁盘,用luks方式对磁盘进行加密以及加密磁盘的自动挂载

    1.关于luks加密 LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的 Linux发行版本,还支持多用户/口令.因为它的加密密钥独 ...

  8. C#2.0实例程序STEP BY STEP--实例二:数据类型

    C#2.0实例程序STEP BY STEP--实例二:数据类型 与其他.NET语言一样,C#支持Common Type Sysem(CTS),其中的数据类型集合不仅包含我们熟悉的基本类型,例如int, ...

  9. 【汇总】多种方法教你绕过 TPM 2.0 安装 Windows 11 操作系统

    此前我们曾介绍三种方法绕过 TPM 2.0 来安装 Windows 11 操作系统. 方法一:删除 appraiserres.dll 文件 方法二:替换 appraiserres.dll 文件 方法三 ...

最新文章

  1. java 中的单元测试_浅谈Java 中的单元测试
  2. Java反射 - 动态类加载和重载
  3. (4)打鸡儿教你Vue.js
  4. 使用ORACLE生成文本文件
  5. 【深度学习看手相】台湾学生获奖 AI 项目是科学还是伪科学? 搜狐科技 08-06 12:44 1新智元报道 来源: medium,facebook 编译:胡祥杰 张易 【新智元导读】本周日带来一个有
  6. boost::hana::slice用法的测试程序
  7. asp.net应用程序_如何在ASP.NET中为聊天应用程序构建键入指示器
  8. IIS32位,64位模式下切换
  9. 摘录Xcode 交叉开发编程中选项
  10. Django模板中加减乘除基本语法
  11. GEE-Python遥感大数据分析、管理与可视化
  12. 计算机网络的基础知识
  13. 网络在线电视专家 v7.27 怎么用
  14. 【JZOJ6150】爱乐之城
  15. chromium 37 chrome Native messaging 本地消息机制
  16. 复分析理论---如何形象理解平均值公式和最大模原理
  17. error: can‘t create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
  18. CSS下划线与文字间距,下划线粗细以及下划线颜色的设置
  19. 台式计算机兼容性在那查找,电脑兼容性在哪里调整
  20. 基于阿米巴经营模式的电商平台研发

热门文章

  1. 人生之路1.18.05优化
  2. mac os下编写对拍程序
  3. 报错Failed to convert value(s) to axis units解决方法
  4. 妻子给丈夫情人的信,请不要落泪
  5. js通过数组内容来获取数组下标
  6. 【数据中台】学习摘录-纵观数据中台
  7. php 正则抓取网页的table数据
  8. css自适应屏幕教程,WordPress主题css适配屏幕尺寸大小自适应教程
  9. 深度长文 | 解析Apple Vision Pro 的3D功能与LiDAR工作场景,灵明光子ADS 6401 虚实交互的驱动引擎
  10. matlab norm函数_MATLAB | TAM 211 存活指南 V3.0