zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

测试 脚本 结合 物理 各个 TPM 机上
2023-09-14 09:09:18 时间

本文中的脚本对应本系列前几篇文章中涉及的各个步骤的脚本。分为第一阶段建立脚本、第二阶段测试脚本以及复原脚本。其中第二阶段测试脚本又分为使用随机数密钥和使用自定义密钥两种。

1. 第一阶段建立脚本

create_1.sh内容如下:

#!/bin/bash

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

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

sudo losetup /dev/loop0 enc.disk

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

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

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

mkdir mountpoint

sudo mount /dev/mapper/enc_volume mountpoint

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

sudo umount mountpoint

sudo cryptsetup remove enc_volume

sudo losetup -d /dev/loop0

../experiment4/key_gen.sh

其中,key_gen.sh内容如下:

#!/bin/bash

usr_info=$(whoami)
dev_info=$(sudo dmidecode | grep "Serial Number" | head -n 1)
dev_info=${dev_info#*: }
echo "usr_info: ${usr_info}"
echo "dev_info: ${dev_info}"

echo "${usr_info}" > key_info.dat
echo "${dev_info}" >> key_info.dat

2. 第二阶段测试脚本

  • 使用随机数密钥

 test_random.sh内容如下:

#!/bin/bash

sudo /usr/local/bin/tpm2_createprimary --hierarchy=o --key-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

#dd if=/dev/zero bs=1 count=32 of=hash1.key status=none
#sudo /usr/local/bin/tpm2_create --hash-algorithm=sha256 --public=seal.pub --private=seal.priv --sealing-input=hash1.key --parent-context=prim.ctx

sudo /usr/local/bin/tpm2_load --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctx

sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002

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

shred disk.key
rm -f disk.key

sudo losetup /dev/loop0 enc.disk

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

sudo mount /dev/mapper/enc_volume mountpoint
  • 使用自定义密钥

test_selfkey.sh内容如下:

#!/bin/bash

sudo /usr/local/bin/tpm2_createprimary --hierarchy=o --key-context=prim.ctx

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

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

sudo /usr/local/bin/tpm2_load --parent-context=prim.ctx --public=seal.pub --private=seal.priv --name=seal.name --key-context=seal.ctx

sudo /usr/local/bin/tpm2_evictcontrol --hierarchy=o --object-context=seal.ctx 0x81010002

#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 -o tmp.key
sudo cryptsetup --key-file=disk.key luksChangeKey enc.disk tmp.key

shred disk.key
rm -f disk.key

sudo losetup /dev/loop0 enc.disk

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

sudo mount /dev/mapper/enc_volume mountpoint

此文件中封掉的语句及其下紧接着的2条语句,就是前边提到的问题差异。运行下边两条命令,之后就一切正常;如果封掉下边两条语句,打开上边一条语句,就会出现错误。

3. 复原脚本

undo.sh内容如下:

#!/bin/bash

sudo cryptsetup remove enc_volume
sudo losetup -d /dev/loop0
sudo /usr/local/bin/tpm2_evictcontrol -C o -c 0x81010002
sudo umount mountpoint

sudo rm -rf ./*