接前文:TPM 2.0实例探索3 —— LUKS磁盘加密(4)

本文大部分内容参考:

Code Sample: Protecting secret data and keys using Intel® Platform...

二、LUKS磁盘加密实例

4. 将密码存储于TPM的PCR

现在将TPM非易失性存储器中保护磁盘加密的密封对象替换为一个新的(对象),其添加了我们刚刚创建的作为用以访问密封秘密的身份验证的pcr策略:

注:

此步骤需要承接前(几)篇文章中的基础步骤,可以参加本系列前几篇文章。重点参考:

物理真机上LUKS结合TPM的各个测试脚本

以下步骤需要在执行“第一阶段建立脚本”create_1.sh的基础上进行。

(4)创建主对象

命令如下:

tpm2_createprimary -Q --hierarchy=o --key-context=prim.ctx

命令及实际结果如下:

$ sudo /usr/local/bin/tpm2_createprimary --hierarchy=o --key-context=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: b45cd070a8b71ba21a5dce69f93035671e4a32bc3758490629f21458171884171a94d1d6446aceb61b6a1d0df65a7f0c0a1cfa4fdbd221c12c69204b0cb8ab146014b9dc439c90b0ed7f538c2a9e0b8f1d16598d572f26f7ca1bcd76d2b1a4a56ee492f1bee45fc255096fb3972c3844a1191245bc2d3e8adcf694223f976a2af739ef6d6223eab4f71593b10233ead81d0d861912c600dfe97f37108fa53ec32f8307f1061689da224af65feccf510758aa8331402e341bfaea38f9203d74c21b54d9aa388351a13852613be8453f47caf6dae5c4a0af73175c40acb6df4e6e2b71b622eb6df4d084b411f4be8ba9c0240f614816e191ff4412839917d8afbb$ ls
disk.key  enc.disk  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  session.ctx

(5)生成哈希值并保存到文件

命令如下:

sudo tpm2_hash -C o -g sha256 -o hash.key -t ticket.bin key_info.dat

实际命令及脚本如下:

$ sudo /usr/local/bin/tpm2_hash -C o -g sha256 -o hash.key -t ticket.bin key_info.dat
$
$ ls
disk.key  enc.disk  hash.key  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  session.ctx  ticket.bin

(6)创建对象

命令如下:

sudo tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=hash.key --parent-context=prim.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=hash.key --parent-context=prim.ctx
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparent|userwithauthraw: 0x52
type:value: keyedhashraw: 0x8
algorithm: value: nullraw: 0x10
keyedhash: 19df99d34d219b51f4a9c2e7c903d840b34660116920cce4ff5ca05c9ca75e04$ ls
disk.key  enc.disk  hash.key  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  seal.priv  seal.pub  session.ctx  ticket.bin

(7)加载对象到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 --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctx
$
$ ls
disk.key  enc.disk  hash.key  key_info.dat  mountpoint  pcr0.sha256.policy  prim.ctx  seal.ctx  seal.name  seal.priv  seal.pub  session.ctx  ticket.bin

(8)将对象从易失性空间移存到非易失性空间中

命令如下:

tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002
persistent-handle: 0x81010002
action: persisted

(9)建立另一个新对象

命令如下:

tpm2_unseal --object-context=0x81010002 | tpm2_create -Q --hash-algorithm=sha256 --public=pcr_seal_key.pub --private=pcr_seal_key.priv --sealing-input=- --parent-context=prim.ctx --policy=pcr0.sha256.policy

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | sudo /usr/local/bin/tpm2_create --hash-algorithm=sha256 --public=pcr_seal_key.pub --private=pcr_seal_key.priv --sealing-input=- --parent-context=prim.ctx --policy=pcr0.sha256.policy
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparentraw: 0x12
type:value: keyedhashraw: 0x8
algorithm: value: nullraw: 0x10
keyedhash: e7d80b687f769a271f706cddade60a9f98c54b87234f32fa0a7f23fcb263bc6f
authorization policy: 4bc350fced1d9ec748eb9fac5576eed06178b715969525d1f967451ff89395bf$ ls
disk.key  hash.key      mountpoint          pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

(10)将永久性对象从非易失性空间中移除

命令如下:

tpm2_evictcontrol --hierarchy=o --object-context=0x81010002

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=0x81010002
persistent-handle: 0x81010002
action: evicted

(11)加载新对象到TPM

命令如下:

tpm2_load -Q --parent-context=prim.ctx --public=pcr_seal_key.pub --private=pcr_seal_key.priv --name=pcr_seal_key.name --key-context=pcr_seal_key.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_load --parent-context=prim.ctx --public=pcr_seal_key.pub --private=pcr_seal_key.priv --name=pcr_seal_key.name --key-context=pcr_seal_key.ctx
$
$ ls
disk.key  hash.key      mountpoint          pcr_seal_key.ctx   pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

(12)将新对象从易失性空间移存到非易失性空间中

命令如下:

tpm2_evictcontrol --hierarchy=o --object-context=pcr_seal_key.ctx 0x81010002 

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=pcr_seal_key.ctx 0x81010002
persistent-handle: 0x81010002
action: persisted

现在再次尝试挂载加密的磁盘,只是这一次秘密被密封在了一个TPM对象中,其解密操作只能在满足了PCR策略才能进行。换句话说,依靠预期的系统软件状态进行身份验证,此系统软件状态如PCR值所反映的那样保持不变

(13)再次将enc.disk虚拟成块设备

命令如下:

sudo losetup /dev/loop0 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
……/usr/local/opt/home/data

(14)启动一个策略会话并保存会话数据到一个文件中

命令如下:

tpm2_startauthsession --policy-session --session=session.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_startauthsession --policy-session --session=session.ctx
$
$ ls
disk.key  hash.key      mountpoint          pcr_seal_key.ctx   pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

(15)创建一个包含指定PCR值的策略

命令如下:

tpm2_policypcr -Q --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_policypcr --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy
4bc350fced1d9ec748eb9fac5576eed06178b715969525d1f967451ff89395bf$ ls
disk.key  hash.key      mountpoint          pcr_seal_key.ctx   pcr_seal_key.priv  prim.ctx  seal.name  seal.pub     ticket.bin
enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub   seal.ctx  seal.priv  session.ctx

此时此刻,合乎理想地,你想要解封保存在内存中的秘密并且直接将它放入(另一端)到cryptsetup的管道中,像这样:“tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 | sudo cryptsetup luksOpen --key-file=- /dev/loop0 encvolume”。但是,出于在之后的一个小节中证明PCR灵活性的目的,我们将做一个解封秘密的拷贝。

(16)解封秘密到文件

命令如下:

tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 > disk_secret.bkup

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_unseal --auth=session:session.ctx --object-context=0x81010002 > disk_secret.bkup
$
$ ls
disk.key          enc.disk  key_info.dat  pcr0.sha256.policy  pcr_seal_key.name  pcr_seal_key.pub  seal.ctx   seal.priv  session.ctx
disk_secret.bkup  hash.key  mountpoint    pcr_seal_key.ctx    pcr_seal_key.priv  prim.ctx          seal.name  seal.pub   ticket.bin

(17)

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

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

    接前文:TPM 2.0实例探索2 -- LUKS磁盘加密(2) 本文大部分内容参考: 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. 清华放大招!从初中生招起,8年时间培养到博士毕业!内卷也要加速了?
  2. Linux定时备份数据到百度云盘
  3. 基于AIO的CS聊天室
  4. js visibility和display区别(附代码实例)
  5. java:为什么字符串比较时要用equals方法而不是==运算符
  6. 海外仓储系统有哪些功能?
  7. 渠道是创业企业与消费者或者用户建立联系的桥梁
  8. 谷歌新旗舰Pixel 3让AI帮你接电话:你是谁?为什么来电?
  9. android 导入 苹果手机,安卓手机文件怎么传到苹果手机
  10. VirtualBox安装增强功能时报错:未能加载虚拟光盘VBoxGuestAdditions.iso 到虚拟电脑
  11. Mac中vim的快捷操作
  12. TT 的旅行日记 Week7作业B题
  13. php 国际标准时间_时区-如何在PHP中获得格林威治标准时间?
  14. 计算机组策略定时开机脚本,批处理+组策略 实现规定时间段无法开机and定时关机...
  15. IPFS 深入浅出:从《黑镜》说起
  16. slider wpf 垂直_继续聊WPF——Slider控件
  17. Js验证身份证是否正确
  18. Thinkbook14G2ITL笔记本重装系统遇到的问题?
  19. JavaScript的内存管理
  20. 【JokerのZYNQ7020】QSPI启动。

热门文章

  1. Vue.use 写多个_奶奶写不网购保证书(图)
  2. Java11新特性(二)——JDK11绿色免安装版环境变量配置教程
  3. twitter中国官网
  4. TensorFlow2和keras详细安装教程
  5. 不懂算法,进大厂,真香!
  6. vue文本识别 “ \n ” 的换行问题
  7. 404 单页应用 报错 路由_Vue 部署单页应用,刷新页面 404/502 报错
  8. Quasar 的介绍及安装使用
  9. vue webpack优化之HappyPack 实战
  10. Metasploit Framework下的Exploit应用开发中文手册