物理真机上LUKS结合TPM的测试 —— 使用随机数密钥

news/2024/11/24 13:33:38/

1. 创建磁盘空间

命令如下:

dd if=/dev/zero of=enc.disk bs=1M count=50

实际命令及结果如下:

$ dd if=/dev/zero of=enc.disk bs=1M count=50
输入了 50+0 块记录
输出了 50+0 块记录
52428800 字节 (52 MB, 50 MiB) 已复制,0.0587495 s,892 MB/s$ ls
enc.disk

2. 创建密钥

命令如下:

dd if=/dev/urandom of=disk.key bs=1 count=32

实际命令及结果如下:

$ dd if=/dev/urandom of=disk.key bs=1 count=32
输入了 32+0 块记录输出了 32+0 块记录32 字节已复制,0.00108989 s,29.4 kB/s$ ls
disk.key  enc.disk

3. 将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

4. 加密enc.disk

命令如下:

sudo cryptsetup --key-file=disk.key luksFormat /dev/loop0

实际命令及结果如下:

$ sudo cryptsetup --key-file=disk.key luksFormat /dev/loop0WARNING!
========
这将覆盖 /dev/loop0 上的数据,该动作不可取消。
Are you sure? (Type 'yes' in capital letters): YES

5. 映射磁盘

命令如下:

sudo cryptsetup --key-file=disk.key open /dev/loop0 enc_volume

实际命令及结果如下:

$ ls /dev/mapper/
control  enc_volume$ ls -l /dev/mapper/
总计 0
crw-rw---- 1 root root 10, 236  2月20日 11:14 control
lrwxrwxrwx 1 root root       7  2月24日 09:41 enc_volume -> ../dm-0

6. 格式化映射分区

命令如下:

sudo mkfs.ext4 -j /dev/mapper/enc_volume

实际命令及结果如下:

$ sudo mkfs.ext4 -j /dev/mapper/enc_volume
mke2fs 1.46.5 (30-Dec-2021)
创建含有 34816 个块(每块 1k)和 8720 个inode的文件系统文件系统UUID:884698f1-56e5-4f07-a2de-5d0174224280
超级块的备份存储于下列块: 8193, 24577正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(4096 个块)完成写入超级块和文件系统账户统计信息: 已完成

7. 创建挂载点并挂载

命令如下:

mkdir mountpointsudo mount /dev/mapper/enc_volume mountpoint

实际命令及结果如下:

$ mkdir mountpoint
$ ls
disk.key  enc.disk  mountpoint
$ sudo mount /dev/mapper/enc_volume mountpoint$ df -h
文件系统                大小  已用  可用 已用% 挂载点/dev/nvme0n1p4           20G   13G  5.8G   69% /
devtmpfs                4.0M     0  4.0M    0% /dev
tmpfs                   7.7G  168M  7.5G    3% /dev/shm
tmpfs                   3.1G  206M  2.9G    7% /run
tmpfs                   7.7G   97M  7.6G    2% /tmp
……
tmpfs                   1.6G   48K  1.6G    1% /run/user/1000
/dev/mapper/enc_volume   28M   14K   25M    1% /home/penghao/TApp/experiment3/mountpoint

8. 准备明文文件

命令如下:

sudo sh -c 'echo "This is my plain text" > mountpoint/plain.txt'

实际命令及结果如下:

$ sudo sh -c 'echo "This is my plain text" > mountpoint/plain.txt'$ cat mountpoint/plain.txt 
This is my plain text

9. 卸载

命令如下:

sudo umount mountpoint

实际命令及结果如下:

$ sudo umount mountpoint
$ 

10. 关闭加密分区

命令如下:

sudo cryptsetup remove enc_volume

实际命令及结果如下:

$ sudo cryptsetup remove enc_volume$ ls /dev/mapper/
control

11. 卸除回环设备

命令如下:

sudo losetup -d /dev/loop0

实际命令及结果如下:

$ sudo losetup -d /dev/loop0
$ 

12. 创建主对象

命令如下:

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  mountpoint  prim.ctx

13. 创建对象

命令如下:

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

实际命令及结果如下:

$ dd if=/dev/urandom bs=1 count=32 status=none | sudo /usr/local/bin/tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=- --parent-context=prim.ctx
name-alg:value: sha256raw: 0xb
attributes:value: fixedtpm|fixedparent|userwithauthraw: 0x52
type:value: keyedhashraw: 0x8
algorithm: value: nullraw: 0x10
keyedhash: b7b1416f740ffc19b9ae2da9bc4ae968612796c3849f8e0ce754a407e380e6bb$ ls
disk.key  enc.disk  mountpoint  prim.ctx  seal.priv  seal.pub

14. 加载对象到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  mountpoint  prim.ctx  seal.ctx  seal.name  seal.priv  seal.pub

15. 将对象从易失性空间移存到非易失性空间中

命令如下:

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

16. 用新的密钥替换旧的密钥

命令如下:

tpm2_unseal -Q --object-context=0x81010002 | sudo cryptsetup --key-file=disk.key luksChangeKey enc.disk 

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | sudo cryptsetup --key-file=disk.key luksChangeKey enc.disk 

测试中发现此语句并不稳定,有时可以,有时会出现以下错误:

$ sudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | sudo cryptsetup --key-file=disk.key luksChangeKey enc.disk 
此口令无可用的密钥。

17. 彻底清除旧密钥

命令如下:

shred disk.key
rm -f disk.key

实际命令及结果如下:

$ shred disk.key
$ ls
disk.key  enc.disk  mountpoint  prim.ctx  seal.ctx  seal.name  seal.priv  seal.pub$ rm -f disk.key
$ ls
enc.disk  mountpoint  prim.ctx  seal.ctx  seal.name  seal.priv  seal.pub

18. 再次将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

19. 使用保存于TPM中的密钥映射磁盘

命令如下:

tpm2_unseal -Q --object-context=0x81010002 | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volume

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volume$ ls -l /dev/mapper/
总计 0
crw-rw---- 1 root root 10, 236  2月20日 11:14 control
lrwxrwxrwx 1 root root       7  2月24日 10:36 enc_volume -> ../dm-0

20. 再次挂载

命令如下:

sudo mount /dev/mapper/enc_volume mountpoint

实际命令及结果如下:

$ sudo mount /dev/mapper/enc_volume mountpoint$ df -h
文件系统                大小  已用  可用 已用% 挂载点/dev/nvme0n1p4           20G   13G  5.8G   69% /
devtmpfs                4.0M     0  4.0M    0% /dev
tmpfs                   7.7G  176M  7.5G    3% /dev/shm
tmpfs                   3.1G  229M  2.9G    8% /run
tmpfs                   7.7G   98M  7.6G    2% /tmp
……
tmpfs                   1.6G   48K  1.6G    1% /run/user/1000
/dev/mapper/enc_volume   28M   15K   25M    1% /home/penghao/TApp/experiment3/mountpoint

21. 查看挂载点中的内容

命令如下:

ls mountpoint

实际命令及结果如下:

$ ls mountpoint/
lost+found  plain.txt$ cat mountpoint/plain.txt 
This is my plain text

说明挂载分区已经被新的密钥解密并且其中内容可以被正确读取了。

22. 卸载

命令如下:

sudo umount mountpoint

实际命令及结果如下:

$ sudo umount mountpoint$ df -h
文件系统        大小  已用  可用 已用% 挂载点/dev/nvme0n1p4   20G   13G  5.8G   69% /
devtmpfs        4.0M     0  4.0M    0% /dev
tmpfs           7.7G  168M  7.5G    3% /dev/shm
tmpfs           3.1G  229M  2.9G    8% /run
tmpfs           7.7G   98M  7.6G    2% /tmp
……
tmpfs           1.6G   48K  1.6G    1% /run/user/1000

23. 关闭加密分区

命令如下:

sudo cryptsetup remove enc_volume

实际命令及结果如下:

$ sudo cryptsetup remove enc_volume$ ls /dev/mapper/
control

24. 卸除回环设备

命令如下:

sudo losetup -d /dev/loop0

实际命令及结果如下:

$ sudo losetup -d /dev/loop0$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0 476.9G  0 disk 
……/usr/local/opt/home/data

25. 将对象从非易失性空间中移除

命令如下:

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

实际命令及结果如下:

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

完整命令集合:

dd if=/dev/zero of=enc.disk bs=1M count=50dd if=/dev/urandom of=disk.key bs=1 count=32sudo losetup /dev/loop0 enc.disksudo cryptsetup --key-file=disk.key luksFormat /dev/loop0sudo cryptsetup --key-file=disk.key open /dev/loop0 enc_volumesudo mkfs.ext4 -j /dev/mapper/enc_volumemkdir mountpointsudo mount /dev/mapper/enc_volume mountpointsudo sh -c 'echo "This is my plain text" > mountpoint/plain.txt'sudo umount mountpointsudo cryptsetup remove enc_volumesudo losetup -d /dev/loop0
sudo /usr/local/bin/tpm2_createprimary --hierarchy=o --key-context=prim.ctxdd if=/dev/urandom bs=1 count=32 status=none | sudo /usr/local/bin/tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=- --parent-context=prim.ctxsudo /usr/local/bin/tpm2_load --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctxsudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002sudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | sudo cryptsetup --key-file=disk.key luksChangeKey enc.disk shred disk.key
rm -f disk.keysudo losetup /dev/loop0 enc.disksudo /usr/local/bin/tpm2_unseal --object-context=0x81010002 | sudo cryptsetup --key-file=- luksOpen /dev/loop0 enc_volumesudo mount /dev/mapper/enc_volume mountpointls mountpointsudo umount mountpointsudo cryptsetup remove enc_volumesudo losetup -d /dev/loop0tpm2_evictcontrol --hierarchy=o --object-context=0x81010002


http://www.ppmy.cn/news/27568.html

相关文章

3个月,入门网络安全并找到工作

在我进入大学之前,我一直对计算机感兴趣。虽然只是考了一个一般大学,但是选专业的时候还是选了计算机专业。 本来以为自己会在大学里学到很多有用的知识,并且能够很快找到一份好工作。但是,事实并不是这样。在大学期间&#xff0c…

多模态机器学习入门——文献阅读(一)Multimodal Machine Learning: A Survey and Taxonomy

文章目录说明论文阅读AbstractIntroductionIntroduction总结Applications:A Historical Perspective补充与总结3 MULTIMODAL REPRESENTATIONS总结Joint Repersentations(1)总结和附加(一)Joint Repersentations(2)总结…

九头蛇hydra爆破http示例

使用hydra执行http表单暴力破解 通过浏览器自带分析得知: 提交地址:http://10.0.0.115/student_attendance/ajax.php?action=login 提交方式:POST 提交数据:username=a&password=a 服务响应:3 根据以上收集的信息就可以使用hydra进行密码爆破 hydra 10.0.0.115 http…

Golang学习Day2

Go语言中的函数go语言中函数特性go语言有三种函数:普通函数、匿名函数(没有名称的函数)方法(定义在struct上的函数)。receivergo语言中不运算函数重载(overload),也就是说不允许函数…

Linux 驱动基础

注册驱动模块时给模块传递参数 在一些情况下,我们要动态的改变驱动中某个变量的值,那么就可以在注册时给驱动模块传递参数。 给驱动模块中传递参数,需要定义好接受参数值的全局变量,并调用module_param 来引用它,具体…

优秀外贸业务员必备的业务技能

2023年的春天,可谓是外贸企业三年寒冬后的第一个春天。外贸行业离不开的就是优秀的外贸业务员,那么一个优秀的外贸业务员需要有哪些必备的技能呢?跟着我一起来看看吧!一、电话开发客户能力首先,要知道,声音…

DevEco Studio 3.1 Beta1版本发布——新增六大关键特性,开发更高效

智能代码编辑、端云一体化开发、低代码开发个性化…… 六大新增关键特性,开发更高效,体验更觉妙! 立即点击链接下载,做DevEco Studio 3.1 Beta1版本尝鲜者! 下载链接:HUAWEI DevEco Studio和SDK下载和升级 …

【Java】用记事本实现“HelloWorld”输出

【在进行以下操作前需要下载好JDK并配置好对应的环境变量】 一、在任意文件夹中创建一个新的文本文档文件并写入以下代码 public class Hello{public static void main (String[] args){System.out.print("Hello,World!");} } 二、修改文件名称及文件类型为 Hello.j…