TEE套件完成了rats-tls的适配,本章节主要介绍如何实现基于rats-tls的远程证明。
环境准备安装virtCCA_sdk时,会主动安装gen_rim_ref二进制工具。
<qemu:arg value='-machine'/> <qemu:arg value='dumpdtb=/path/to/dump.dtb'/>
其中dumpdtb为指定的dtb生成路径。
virsh define <cvm.xml> virsh start <cvm>
gen_rim_ref -k <kernel_path> -d <dtb_path> [-i <initramfs_path>] -v <vcpu_num>
gen_rim_ref -f <firmware_path> -d <dtb_path> -v <vcpu_num>
其中:
默认使用的hash算法为sha256,若需要使用sha512,可修改gen_rim_ref源码中的hash_algo为1。gen_rim_ref源码位于“virtCCA_sdk/attestation/rim_ref/”下。
./server -i <ip> -p <port>
其中:
./client -i <ip> -p <port> -m <measurement>
其中:
TEE套件完成了rats-tls的适配,请参见如下步骤实现基于rats-tls的远程证明。
tar xvf rats-tls.tar.gz cp -rf lib/rats-tls /usr/lib/ cp -rfL lib/rats-tls/librats_tls.so.0 /lib64/
./virtcca-server
可选参数同rats-tls原始提供的样例,可执行以下命令查看。
./virtcca-server -h
./virtcca-client -i <ip> -r <measurement> -d <ima_hash_path>
其中:
文件的hash值计算方法应与虚拟机内IMA度量的算法保持一致,如sha256可使用如下方法计算。
sha256sum path/to/file
IMA策略配置可参考可信计算。
./virtcca-server -h
TEE套件基于initramfs提供启动时度量的能力,请参见如下步骤实现启动时度量。
<initrd>/path/to/rootfs.cpio.gz</initrd>
将“/path/to/rootfs.cpio.gz”替换为实际绝对路径。
virsh start <cvm>
虚拟机启动将卡在virtcca-server,等待client发起远程证明请求。initramfs会主动获取可用IP。
./virtcca-client -i <ip> -r <measurement> -d <ima_hash_path>
<os> <type arch='aarch64' machine='virt'>hvm</type> <kernel>path/guest_kernel</kernel> <initrd>/path/rootfs_with_encryptluks.cpio.gz</initrd> <cmdline>swiotlb=262144,force console=tty0 console=ttyAMA0 kaslr.disabled=1 root=/dev/vda rw rodata=off cma=64M cvm_guest=1</cmdline> </os>
<disk type='file' device='disk' model='virtio-non-transitional'> <driver name='qemu' type='raw' queues='4' cache='none' iommu='on'/> <source file='/path/encrypt.img'/> <target dev='vda' bus='virtio'/> </disk>
./virtcca-client -i [ip] -r [rim] -k [rootfs_key]
在完成cVM远程证明、建立安全信道之后,用户输入解密密钥,server端进行后续的解密和挂载rootfs启动流程。
编译Guest_kernel时需打开以下.config文件中选项启用磁盘加密,否则会报未知类型等异常,具体请参见2.2.1编译Guest Kernel和rootfs。
CONFIG_CRYPTO_SM3=y
CONFIG_CRYPTO_SM3_GENERIC=y
CONFIG_CRYPTO_SM4=y
CONFIG_CRYPTO_SM4_GENERIC=y
CONFIG_CRYPTO_XTS=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y
在提示 DM "dm-mod.create=" parameter support (DM_INIT) [N/y/?] (NEW) 时输入“y”后可继续执行。
<disk type='file' device='disk' model='virtio-non-transitional'> <driver name='qemu' type='raw' queues='4' cache='none' iommu='on'/> <source file='/path/encrypt_empty.img'/> <target dev='vdb' bus='virtio'/> </disk>
cryptsetup luksFormat /dev/vdb -c sm4-xts-plain64 --key-size 256 --hash sm3
cryptsetup luksOpen /dev/vdb encryptfs_sm4
mkfs.ext4 /dev/mapper/encryptfs_sm4
mkdir -p /encryptmnt mount /dev/mapper/encryptfs_sm4 /encryptmnt/
虚机重启后需要再次使用cryptsetup luksOPen打开(解密)LUKS设备后,挂载到指定目录。