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 Binary files /dev/null and b/sig/Hygon Arch/assets/CSV/cryptpilot-1.png differ 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 Binary files /dev/null and b/sig/Hygon Arch/assets/CSV/cryptpilot-2.png differ 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 Binary files /dev/null and b/sig/Hygon Arch/assets/CSV/cryptpilot-3.png differ 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 34ff64b42feca35d154850748f1548bc49b80bba..81fb8acc87dfc604e0b8b410151f2c85a2e20a3e 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/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 0000000000000000000000000000000000000000..d39e09981efa900ae0054c1f168fa489841a1766 --- /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/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 85a63391d70ee25a8d8f8705f07d63f1425bb14b..54c210bdb3ae5718b53ffa4c34c503c8f25ba0c4 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/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 0000000000000000000000000000000000000000..7f6aab01031c1aea70ef4e6ce101145baee51cce --- /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 + +``` + 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 3fb776be5f9fa87031b4604c113e69beb3e6a330..7d76b17e193519723c99184ba63557da11a435aa 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