From 894923f667cb10701086d3468e3e7405fd00f0b6 Mon Sep 17 00:00:00 2001 From: panpingsheng Date: Tue, 19 Aug 2025 11:48:57 +0800 Subject: [PATCH 1/2] Optimize the csv virtual machine test document 1. Add policy configuration instructions for different csv virtual machines 2. Optimize the attestation document 3. Update the csv virtual machine FAQ document --- ...345\256\211\350\243\205CSV\350\275\257\344\273\266.md" | 8 ++++++++ ...25\345\206\205\345\255\230\345\212\240\345\257\206.md" | 7 +++++-- ...72\345\257\206\350\231\232\346\213\237\346\234\272.md" | 3 +++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" index 34ff64b4..81fb8acc 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" @@ -89,6 +89,14 @@ sudo /opt/hygon/bin/hag csv platform_status dmesg | grep CSV ``` +### 虚拟机配置 +运行不同的虚拟机需要修改虚拟机策略policy参数 +|虚拟机类型|虚拟机policy| +|--------|--------| +| CSV | 0x1 | +| CSV2 | 0x5 | +| CSV3 | 0x45 | + #### Linux 6.6内核 下图是**支持CSV1、CSV2、CSV3**时看到的dmesg信息: diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/1-\346\265\213\350\257\225\345\206\205\345\255\230\345\212\240\345\257\206.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/1-\346\265\213\350\257\225\345\206\205\345\255\230\345\212\240\345\257\206.md" index 85a63391..54c210bd 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/1-\346\265\213\350\257\225\345\206\205\345\255\230\345\212\240\345\257\206.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/1-\346\265\213\350\257\225\345\206\205\345\255\230\345\212\240\345\257\206.md" @@ -39,6 +39,8 @@ $ hexdump -v normal.txt 关闭普通虚拟机。 ### 查看CSV虚拟机的内存数据 +下面测试方法只支持CSV/CSV2,CSV3测试请查看[9-测试CSV3内存隔离.md](https://openanolis.cn/sig/Hygon-Arch/doc/1241719522437038089?lang=zh) + 运行CSV虚拟机。 ``` @@ -86,6 +88,7 @@ $ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 2048 -hda /opt/ ``` # dhclient +# modprobe csv-guest # scp user@${host_ip}:/opt/hygon/csv/attestation/get-attestation ./ # ./get-attestation ``` @@ -98,14 +101,14 @@ $ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 2048 -hda /opt/ 在虚拟机中使用scp命令将认证报告拷贝到主机。 ``` -# scp report.cert test@192.168.122.1:/opt/hygon/csv/attestation/ +# scp report.cert nonce.bin test@192.168.122.1:/opt/hygon/csv/attestation/ ``` 在主机中运行验证程序verify-attestation。 ``` $ cd /opt/hygon/csv/attestation -$ sudo chmod 666 report.cert +$ sudo chmod 666 report.cert nonce.bin $ ./verify-attestation true ``` diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" index 3fb776be..7d76b17e 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" @@ -131,3 +131,6 @@ A: -object sev-guest,id=sev0,policy=0x81,cbitpos=47,reduced-phys-bits=5,user-id= ``` +#### Q: anolis 23.3 系统验证密钥封印启动提示要输入root 账号的密码 + +A: root 账号密码为主机系统的密码 \ No newline at end of file -- Gitee From b871a55451cf3a0170892498d375e59bd9b01c3c Mon Sep 17 00:00:00 2001 From: panpingsheng Date: Wed, 10 Sep 2025 14:49:33 +0800 Subject: [PATCH 2/2] Support cryptpilot csv virtual machine disk encryption --- sig/Hygon Arch/assets/CSV/cryptpilot-1.png | Bin 0 -> 49094 bytes sig/Hygon Arch/assets/CSV/cryptpilot-2.png | Bin 0 -> 27303 bytes sig/Hygon Arch/assets/CSV/cryptpilot-3.png | Bin 0 -> 17951 bytes ...00\346\234\257\344\273\213\347\273\215.md" | 129 ++++++++++ ...01\347\233\230\345\212\240\345\257\206.md" | 237 ++++++++++++++++++ 5 files changed, 366 insertions(+) create mode 100644 sig/Hygon Arch/assets/CSV/cryptpilot-1.png create mode 100644 sig/Hygon Arch/assets/CSV/cryptpilot-2.png create mode 100644 sig/Hygon Arch/assets/CSV/cryptpilot-3.png create mode 100644 "sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/7-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206\346\212\200\346\234\257\344\273\213\347\273\215.md" create mode 100644 "sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/12-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206.md" diff --git a/sig/Hygon Arch/assets/CSV/cryptpilot-1.png b/sig/Hygon Arch/assets/CSV/cryptpilot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e360c6c4a22a7426d9d46a26f32abf69780f0b20 GIT binary patch literal 49094 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ⅈ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 GU;h`3WZPE& literal 0 HcmV?d00001 diff --git a/sig/Hygon Arch/assets/CSV/cryptpilot-2.png b/sig/Hygon Arch/assets/CSV/cryptpilot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5962172657cdcf642f699442d196fc2972cc8c5e GIT binary patch literal 27303 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 P1MDJ=RW}Vh0=KHSI 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 literal 0 HcmV?d00001 diff --git a/sig/Hygon Arch/assets/CSV/cryptpilot-3.png b/sig/Hygon Arch/assets/CSV/cryptpilot-3.png new file mode 100644 index 0000000000000000000000000000000000000000..c27ceac80d73f147d7e42764eb64b5687a0ed45a GIT binary patch literal 17951 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 literal 0 HcmV?d00001 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/7-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206\346\212\200\346\234\257\344\273\213\347\273\215.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/7-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206\346\212\200\346\234\257\344\273\213\347\273\215.md" new file mode 100644 index 00000000..d39e0998 --- /dev/null +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/7-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206\346\212\200\346\234\257\344\273\213\347\273\215.md" @@ -0,0 +1,129 @@ +## 概要 +海光和阿里联合推出了基于远程证明的CSV虚拟机磁盘加密技术,使用户能够安全地引导系统,同时确保整个操作系统的加密和可度量性,以及静态数据的加密和完整性保护,同时用户还可以对敏感的数据进行动态的度量。 + + +## 原理介绍 + +### 整体架构 + +![](../../../assets/CSV/cryptpilot-1.png) + +机密系统盘通过CSV RTMR技术、 Linux内核的dm-verity、dm-integrity 和LUKS2技术实现,能够为机密实例的系统盘提供可度量、数据加密和完整性保护三种能力。 + +trustee 部署在用户可信的环境中,CSV安全虚拟机启动后通过远程认证获取密钥解密磁盘挂载启动系统。 + + +RTMR技术介绍参考[12-测试CSV3虚拟机RTMR动态度量功能](https://openanolis.cn/sig/Hygon-Arch/doc/1446113534086103049?lang=zh) + + +#### 可度量 + +1、基于CSV RTMR技术对系统的OVMF、shim、grub、 kernel、cmdline 、initrd、rootfs 组件进行度量,系统启动时对各个组件进行hash 运算,将相应的值扩展到RTMR寄存器中,同时记录在eventlog中, CSV 虚拟机中的attestation-agent 组件获取远程报告和eventlog 一起发送到trustee 端,AS 对其进行验证,验证后释放解密密钥,CSV 虚拟机获取密钥解密磁盘启动。 + +2、基于dm-verity机制,系统会在启动时对rootfs卷构建完整的哈希树结构,通过逐层校验确保文件系统完整性。当系统启动时,内核会验证rootfs卷每个数据块的哈希值与预存的根哈希值是否一致,任何未经授权的修改都会被实时检测并阻止系统启动,从而实现对根文件系统的可信度量和防篡改保障。 + +#### 数据加密 + +通过LUKS2标准使⽤AES算法实现磁盘加密。加密过程采⽤分层密钥体系:⽤户自主管理的主密钥(Master Key)用于加密数据,而主密钥本身会被另⼀个密钥加密密钥(KEK)保 +护,KEK则通过远程证明机制在对实例进⾏验证之后下发。所有数据在写⼊磁盘前⾃动加密,读取时解密,确保加密数据在存储期间始终处于加密状态,同时满足密钥全⽣命周期的自主可控需求。 + +#### 完整性保护 + +对于数据区域基于dm-integrity 技术实现数据完整性保护,为块设备中的每个扇区维护一段“完整性元数据”,该元数据可包含校验值(如 CRC、HMAC),用于读写时校验数据完整性。 + +#### rootfs卷 + + rootfs卷存放了只读的根文件系统。在启动时该卷的内容会被度量,并基于内核的dm-verity机制对rootfs卷建立哈希树。由于度量值被存储在内存中,可以防止数据被修改。为了保持系统中业务程序的兼容性,在启动阶段,一个可写入的覆盖层将被覆盖在只读的根文件系统上,从而允许您在根文件系统上做临时性的写入修改。这些写入修改将不会破坏只读层,也不会影响只读根文件系统的度量。 + + 对该卷的加密是一个可选的操作,这取决于您的业务需求。如果您需要加密rootfs卷的数据,可以在创建机密系统盘的过程中配置加密选项。 + +#### data卷 + + 在系统启动过程中,该卷会被解密,并且在进入系统后,该卷会被挂载到/data位置上。任何data卷上写入的数据,都会被加密后落盘。用户可以将其数据文件写入到此处,在实例重新启动后,数据不会丢失,data卷可以基于dm-integrity技术配置完整性保护。 + + +### 磁盘加密流程 + +![](../../../assets/CSV/cryptpilot-2.png) + +1、准备需要加密的虚拟机镜像,准备加密配置文件,准备加密需要的组件,如 attestation-agent-1.2.1-3.an8.x86_64.rpm、confidential-data-hub-1.2.1-3.an8.x86_64.rpm、cryptpilot-0.2.5-5.an8.x86_64.rpm ,配置文件介绍请参考https://github.com/openanolis/cryptpilot/blob/master/dist/etc/fde.toml.template + +2、拷贝虚拟机操作镜像,在拷贝的镜像上操作不破坏原有镜像 + +3、寻找efi、boot、rootfs分区并记录分区号、以及相应的扇区地址 + +4、如果虚拟机没有 boot 分区,提取rootfs 分区中boot目录内容,内容写入到boot.img文件中,为构造boot分区做准备,如果有跳过该步骤 + +3、rootfs 分区中安装cryptpilot、attestation-agent、confidential-data-hub 磁盘加密以及远程认证相关组件、拷贝磁盘加密配置文件、如果需要创建boot分区,将boot分区信息添加到/etc/fstab挂载配置项中、更新initrd + +4、rootfs 分区进行瘦身,内容提取到rootfs.img中,删除rootfs 分区 + +5、如果需要创建boot分区,在原来rootfs 分区扇区位置创建boot分区并将boot.img写入boot分区,如果不需要则跳过该步骤 + +6、创建system lvm 逻辑卷组,为后面创建逻辑分区做准备 + +7、在system 卷组中创建rootfs 逻辑卷,并使用提供的密钥对其加密,将rootfs.img 内容写到加密卷中,使用veritysetup计算rootfs.img 的Merkle Tree 并写入到rootfs_hash.img 文件中,创建rootfs_hash 卷并将rootfs_hash.img 内容写入到rootfs_hash 卷中,将Merkle Tree 的roothash 写入到boot分区的cryptpilot/metadata.toml文件中,为后续使用dm-verity机制构建rootfs只读文件系统做准备 + +8、生成加密镜像 + +### 启动加密磁盘 + +![](../../../assets/CSV/cryptpilot-3.png) + +1、先进行度量启动,海光安全固件对OVMF进行度量,OVMF 对shim 度量,shim 对grub 进行度量,grub 对kernel、cmdline、initrd 进行度量,initrd 对rootfs进行度量 + +1、initrd 中启动cryptpilot 服务的initrd-fde-before-sysroot 阶段 ,启动attestation-agent 、confidential-data-hub服务,attestation-agent 获取远程认证报告,将报告发送到trustee 端,AS 对证书内容、证书链、度量参考值进行验证。 + +3、验证通过后confidential-data-hub获取密钥解密rootfs分区,并对分区进行dm-verity 处理 + +4、获取密钥解密data 分区,第一次启动有加密data分区的动作,data分区加密是在加密盘做好后第一次启动进行加密,data 分区同时具有完整性保护特性,该特性可选,退出cryptpilot 服务的initrd-fde-before-sysroot 阶段 + +5、挂载rootfs 为/sysroot + +6、启动cryptpilot 服务进入initrd-fde-after-sysroot 阶段,挂载 data分区,设置sysroot为overlay 的只读层,overlay上层为内存tmpfs 或者为disk ,disk 内容放在data 分区中。 + +### 启动后镜像完整视图 + +``` +[root@localhost ~]# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +fd0 2:0 1 4K 0 disk +sda 8:0 0 20G 0 disk +├─sda1 8:1 0 2M 0 part +├─sda2 8:2 0 200M 0 part /boot/efi +├─sda3 8:3 0 1G 0 part /boot +└─sda4 8:4 0 18.8G 0 part + ├─system-rootfs 252:0 0 8.4G 0 lvm + │ └─rootfs_decrypted 252:3 0 8.4G 0 crypt + │ └─rootfs 252:4 0 8.4G 1 crypt / + ├─system-rootfs_hash 252:1 0 68M 0 lvm + │ └─rootfs 252:4 0 8.4G 1 crypt / + └─system-data 252:2 0 10.3G 0 lvm + └─data_dif 252:5 0 9.7G 0 crypt + └─data 252:6 0 9.7G 0 crypt /data +``` +system-rootfs:加密的rootfs 分区 + +rootfs_decrypted: system-rootfs解密后的映射 + +rootfs: rootfs_decrypted通过dm-verity 处理过的映射,挂载到根目录 + +system-rootfs_hash: 专门用来存储 rootfs 的 Merkle Tree 哈希数据。dm-verity 在校验 rootfs 时会用到这个卷中的 hash tree,并将其与预置的 roothash 进行比对。 + +system-data: 加密的数据分区 + +data_dif: system-data 通过dm-integrity 完整性保护处理后的映射 + +data: 最终解密后的映射,用于挂载到/data 目录 + +部署测试文档请查考[12-基于远程证明的CSV 虚拟机磁盘加密]() + +- 相关组件的参考链接 + +https://github.com/openanolis/cryptpilot + +https://github.com/confidential-containers/trustee + + + + diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/12-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/12-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206.md" new file mode 100644 index 00000000..7f6aab01 --- /dev/null +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/12-\345\237\272\344\272\216\350\277\234\347\250\213\350\257\201\346\230\216\347\232\204CSV \350\231\232\346\213\237\346\234\272\347\243\201\347\233\230\345\212\240\345\257\206.md" @@ -0,0 +1,237 @@ + +## 功能描述 +本文是基于远程证明的CSV 虚拟机磁盘加密的部署文档,具体技术原理细节请参考[7-基于远程证明的CSV 虚拟机磁盘加密技术介绍]() + +**该功能只支持CSV3 虚拟机** + +## 准备trustee 环境 +``` +mkdir -p ~/cryptpilo +cd ~/cryptpilot +# git clone --depth 1 https://gitee.com/anolis/hygon-devkit.git +# 先用内部hygon-devkit仓库测试 +git clone "https://gerrit.hygon.cn:443/hygon-devkit" +cd ~/cryptpilot/hygon-devkit +# 需要额外加一个patch +git fetch https://panpingsheng@gerrit.hygon.cn:443/a/hygon-devkit refs/changes/03/58603/1 && git cherry-pick FETCH_HEAD +cd ~/cryptpilot +sudo mv hygon-devkit/tools/sftp /usr/local/bin/ +git clone https://github.com/confidential-containers/trustee.git +cd trustee && git reset --hard b6ebe8d8e15e11a19aa133a6a391b9c81a5b78d7 +mkdir -p kbs/data/kbs-storage/default/local-resources/ +mkdir -p kbs/data/attestation-service/token/ear/policies/opa/ +#设置数据分区密钥,后续kbs 服务从该地方获取数据分区密钥 +echo "BBBbbb222" > kbs/data/kbs-storage/default/local-resources/data_passwd +#设置rootfs分区密钥,后续kbs服务从该地方获取rootfs分区密钥 +echo "AAAaaa111" > kbs/data/kbs-storage/default/local-resources/rootfs_passwd + +cp -f ~/cryptpilot/hygon-devkit/csv/cryptpilot/docker-compose.yml ./ +# 配置as 的认证策略 +cp -f ~/cryptpilot/hygon-devkit/csv/cryptpilot/default_cpu.rego kbs/data/attestation-service/token/ear/policies/opa/ +# 配置kbs 的认证策略 +cp -f ~/cryptpilot/hygon-devkit/csv/cryptpilot/policy.rego kbs/config/docker-compose/ +# 启动truetee 服务 +openssl genpkey -algorithm ed25519 > kbs/config/private.key +openssl pkey -in kbs/config/private.key -pubout -out kbs/config/public.pub +sudo docker compose up -d +``` +等待服务启动成功,docker ps 查看容器服务是否启动成功,类似如下 +``` +higon@anolis trustee]$ sudo docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +5d791ab1ddc6 ghcr.io/confidential-containers/coco-keyprovider:latest "coco_keyprovider --…" 44 minutes ago Up 44 minutes 0.0.0.0:50000->50000/tcp, [::]:50000->50000/tcp trustee-keyprovider-1 +055cc3a66e16 ghcr.io/confidential-containers/staged-images/kbs-grpc-as:b6ebe8d8e15e11a19aa133a6a391b9c81a5b78d7 "/usr/local/bin/kbs …" 44 minutes ago Up 44 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp trustee-kbs-1 +b528695a6605 ghcr.io/confidential-containers/staged-images/coco-as-grpc:b6ebe8d8e15e11a19aa133a6a391b9c81a5b78d7 "grpc-as --socket 0.…" 44 minutes ago Up 44 minutes 0.0.0.0:50004->50004/tcp, [::]:50004->50004/tcp trustee-as-1 +f23aa7bcf16d ghcr.io/confidential-containers/staged-images/rvps:b6ebe8d8e15e11a19aa133a6a391b9c81a5b78d7 "rvps --address 0.0.…" 44 minutes ago Up 44 minutes 0.0.0.0:50003->50003/tcp, [::]:50003->50003/tcp trustee-rvps-1 +cdf80dd33d3a 77c6ff15a2c8 "bash" 6 weeks ago Up 2 months +``` + +## 对磁盘进行加密 + +这里主机系统使用了anolis 8.10,ISO 镜像地址: + +https://mirrors.openanolis.cn/anolis/8.10/isos/GA/x86_64/AnolisOS-8.10-x86_64-dvd.iso + +准备容器镜像,加密镜像在容器环境中制作 +``` +sudo docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest +sudo docker run -dit \ + --name cryptpilot-disk \ + --network host \ + --privileged \ + -v ~/cryptpilo:/mnt \ + alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest \ + bash + +``` + +准备资源 +``` +# 准备虚拟机镜像,目前只提供了这个虚拟机,客户有需要可以进行适配,虚拟机的默认账号root,密码为root +sftp -H "172.29.250.1" download /hygon-devkit/4.0/2025-01-01/csv/AnolisOS-8.10-x86_64-ANCK.qcow2 ~/cryptpilot/AnolisOS-8.10-x86_64-ANCK.qcow2 + +sftp -H "172.29.250.1" download /hygon-devkit/4.0/2025-01-01/csv/cryptpilot/attestation-agent-1.2.1-3.an8.x86_64.rpm ~/cryptpilot/attestation-agent-1.2.1-3.an8.x86_64.rpm + +sftp -H "172.29.250.1" download /hygon-devkit/4.0/2025-01-01/csv/cryptpilot/confidential-data-hub-1.2.1-3.an8.x86_64.rpm ~/cryptpilot/confidential-data-hub-1.2.1-3.an8.x86_64.rpm + +sftp -H "172.29.250.1" download /hygon-devkit/4.0/2025-01-01/csv/cryptpilot/cryptpilot-0.2.5-5.an8.x86_64.rpm ~/cryptpilot/cryptpilot-0.2.5-5.an8.x86_64.rpm + +sftp -H "172.29.250.1" download /hygon-devkit/4.0/2025-01-01/csv/cryptpilot/edk2-ovmf-20220126gitbb1bba3d77-13.0.1.an8.8.noarch.rpm ~/cryptpilot/edk2-ovmf-20220126gitbb1bba3d77-13.0.1.an8.8.noarch.rpm + +sftp -H "172.29.250.1" download /hygon-devkit/4.0/2025-01-01/csv/cryptpilot/e2fsprogs-1.47.3.tgz ~/cryptpilot/e2fsprogs-1.47.3.tgz + +sftp -H "172.29.250.1" download /hygon-devkit/4.0/2025-01-01/csv/cryptpilot/rvps-tool ~/cryptpilot/rvps-tool + +sudo mv ~/cryptpilot/rvps-tool /usr/local/bin/ + +``` +准备加密磁盘配置文件 +``` +mkdir -p ~/cryptpilot/config_dir +# kbs_ip 为上面构建trustee kbs 服务的ip 地址,客户根据自己情况进行填写 +# kbs:///default/local-resources/rootf_passwd 中为rootf分区的解密密钥 +# kbs:///default/local-resources/data_passwd 中为data分区的解密密钥 +cat > ~/cryptpilot/config_dir/fde.toml << 'EOF' +[rootfs] +rw_overlay = "disk" +[rootfs.encrypt.kbs] +kbs_url = "http://kbs_ip:8080" +key_uri = "kbs:///default/local-resources/rootfs_passwd" + +[data] +integrity = true +[data.encrypt.kbs] +kbs_url = "http://kbs_ip:8080" +key_uri = "kbs:///default/local-resources/data_passwd" +EOF +``` +配置文件介绍请参考https://github.com/openanolis/cryptpilot/blob/master/dist/etc/fde.toml.template + +制作加密磁盘 +``` +# 主机上安装支持度量的OVMF +sudo rpm -ivh --force --nodeps ~/cryptpilot/edk2-ovmf-20220126gitbb1bba3d77-13.0.1.an8.8.noarch.rpm ~/cryptpilot/cryptpilot-0.2.5-5.an8.x86_64.rpm +# 主机上加载nbd 驱动 +sudo modprob nbd max=8 +# 登录到容器中 +sudo docke exec -it cryptpilot-disk bash +cd /mnt +# 容器中安装 +sudo rpm -ivh --force --nodeps cryptpilot-0.2.5-5.an8.x86_64.rpm + +tar xvf e2fsprogs-1.47.3.tgz +# 容器中的e2fsprogs 版本较低需要对其进行升级 +mv e2fsprogs-1.47.3 /usr/local/bin/ +echo 'export PATH=/usr/local/bin/e2fsprogs-1.47.3/sbin:$PATH' >> ~/.bashrc +source ~/.bashrc +# 检查下设置是否生效 +fsck -v +fsck 1.47.3 (8-Jul-2025) +# 制作加密镜像命令,"AAAaaa111" 为rootfs 的加密密码,要和trutee 中kbs/data/kbs-storage/default/local-resources/rootfs_passwd 一致,AnolisOS-8.10-x86_64-ANCK-enc.qcow2 为加密后的镜像 +cryptpilot-convert --in AnolisOS-8.10-x86_64-ANCK.qcow2 --out AnolisOS-8.10-x86_64-ANCK-enc.qcow2 --config-dir ./config_dir/ --rootfs-passphrase "AAAaaa111" --package cryptpilot-0.2.5-5.an8.x86_64.rpm --package confidential-data-hub-1.2.1-3.an8.x86_64.rpm --package attestation-agent-1.2.1-3.an8.x86_64.rpm -b 1024M +``` +镜像制作成功类似如下输出 +``` +-------------------------------- +Everything done, the new disk image is ready to use: AnolisOS-8.10-x86_64-ANCK-enc.qcow2 + +You can calculate reference value of the disk with: + + cryptpilot fde show-reference-value --disk AnolisOS-8.10-x86_64-ANCK-enc.qcow2 + +``` +trutee参考值配置 +``` +# 主机上执行获取参考值,这部分参考值 有kernel、grub、shim、initrd、rootfs、内核参数cmdline +sudo cryptpilot fde show-reference-value --stage initrd --disk ~/cryptpilot/AnolisOS-8.10-x86_64-ANCK-enc.qcow2 > ./reference-value.json + +provenance=$(cat ./reference-value.json | base64 --wrap=0) +cat << EOF > ./register-request.json + +{ +"version" : "0.1.0", +"type": "sample", +"payload": "$provenance" +} +EOF + +# 向rvps 中写入参考值 ,trustee 环境中执行,可以将register-request.json 中参考值调整验证参考值是否生效 +rvps-tool register --path ./register-request.json + +# 获取参考值,这部分参考值为OVMF_CODE.fd +wget https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/measurement/csv-measure.py +pip3 install gmssl + +measurement=$(python3 csv-measure.py \ + --ovmf /usr/share/edk2/ovmf/OVMF_CODE.cc.fd \ + --csv3 \ + --smp 1 \ + --family 24 \ + --model 6 \ + --stepping 1 | base64 -d | xxd -p | tr -d '\n') + +cat << EOF > ovmf-reference-value.json +{ + "csv.measurement": [ + "${measurement}" + ] +} +EOF + +provenance=$(cat ./ovmf-reference-value.json | base64 --wrap=0) +cat << EOF > ./register-request.json +{ + "version" : "0.1.0", + "type": "sample", + "payload": "$provenance" +} +EOF + +rvps-tool register --path ./reference-value.json + +``` + +其中 +--ovmf指向ovmf路径 + +--smp后接qemu启动时指定的vcpu个数(-smp),没有指定默认为1 + +--family通过在host上执行lscpu | grep "^CPU family:" | awk -F':' '{print $2}'获取 + +--model通过在host上执行lscpu | grep "^Model:" | awk -F':' '{print $2}'获取 + +--stepping通过在host上执行lscpu | grep "^Stepping:" | awk -F':' '{print $2}'获取 + +启动加密镜像 + +``` +sudo qemu-system-x86_64 -name normal-vm --enable-kvm -cpu host -m 2048 -hda ./AnolisOS-8.10-x86_64-ANCK-enc.qcow2 -drive if=pflash,format=raw,unit=0,file=/usr/share/edk2/ovmf/OVMF_CODE.cc.fd,readonly=on -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -qmp tcp:127.0.0.1:1111,server,nowait -vnc 0.0.0.0:0 -nographic -object sev-guest,id=sev0,policy=0x45,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 +``` +有下面类似字段加密分区解密成功: +``` +[ 14.804672] attestation-agent[225]: [2025-09-03T08:03:00Z DEBUG ttrpc_aa::ttrpc_dep::server] AA (ttrpc): Get evidence successfully! +[ 16.374274] cryptpilot[601]: 2025-09-03T08:03:01.826748Z INFO cryptpilot::provider::kbs: The passphrase has been fetched from KBS +[ 16.380438] cryptpilot[601]: 2025-09-03T08:03:01.833223Z INFO cryptpilot::cmd::boot_service: Setting up dm-crypt for rootfs volume +[ 25.730926] cryptpilot[601]: 2025-09-03T08:03:11.183488Z INFO cryptpilot::cmd::boot_service: Setting up dm-verity for rootfs volume +[ 25.842117] cryptpilot[601]: 2025-09-03T08:03:11.293776Z INFO cryptpilot::cmd::boot_service: [ 4/4 ] Setting up data volume +[ 25.992673] cryptpilot[601]: 2025-09-03T08:03:11.293807Z INFO cryptpilot::cmd::boot_service: Fetching passphrase for data volume +[ OK ] Found device /dev/mapper/rootfs. +[ OK ] Started dracut initqueue hook. +[ OK ] Reached target Remote File Systems (Pre). +[ OK ] Reached target Remote File Systems. + Starting dracut pre-mount hook... +[ 26.194713] secure call: invalid address +[ 26.183639] attestation-agent[225]: [2025-09-03T08:03:11Z DEBUG ttrpc_aa::ttrpc_dep::server] AA (ttrpc): get tee type ... +[ 26.184560] attestation-agent[225]: [2025-09-03T08:03:11Z DEBUG ttrpc_aa::ttrpc_dep::server] AA (ttrpc): get tee type succeeded. +[ 26.184880] attestation-agent[225]: [2025-09-03T08:03:11Z DEBUG ttrpc_aa::ttrpc_dep::server] AA (ttrpc): get evidence ... +[ 26.184926] attestation-agent[225]: [2025-09-03T08:03:11Z INFO attestation_agent] No additional attesters configured, returning empty evidence. +[ 26.184954] attestation-agent[225]: [2025-09-03T08:03:11Z DEBUG ttrpc_aa::ttrpc_dep::server] AA (ttrpc): Get evidence successfully! +[ 26.187830] attestation-agent[225]: [2025-09-03T08:03:11Z DEBUG ttrpc_aa::ttrpc_dep::server] AA (ttrpc): get evidence ... +[ OK ] Started dracut pre-mount hook. +[ 26.228054] attestation-agent[225]: [2025-09-03T08:03:11Z DEBUG ttrpc_aa::ttrpc_dep::server] AA (ttrpc): Get evidence successfully! +[ 27.488771] cryptpilot[601]: 2025-09-03T08:03:12.940958Z INFO cryptpilot::provider::kbs: The passphrase has been fetched from KBS +[ 32.364125] cryptpilot[601]: 2025-09-03T08:03:17.816647Z INFO cryptpilot::cmd::boot_service: Both rootfs volume and data volume are ready +[ 32.511956] cryptpilot[601]: 2025-09-03T08:03:17.964740Z INFO cryptpilot::cmd::boot_service: Everything have been completed, exit now + +``` + -- Gitee