diff --git a/sig/Hygon-Arch/assets/csv2-1.png b/sig/Hygon-Arch/assets/csv2-1.png new file mode 100755 index 0000000000000000000000000000000000000000..8bea91954721abe61b766b7904c8c87d49fd81d2 Binary files /dev/null and b/sig/Hygon-Arch/assets/csv2-1.png differ diff --git a/sig/Hygon-Arch/assets/csv3-1.png b/sig/Hygon-Arch/assets/csv3-1.png new file mode 100755 index 0000000000000000000000000000000000000000..c37dcc687a039f7de618674e9969ec986a2f807a Binary files /dev/null and b/sig/Hygon-Arch/assets/csv3-1.png differ diff --git a/sig/Hygon-Arch/assets/csv3-2.png b/sig/Hygon-Arch/assets/csv3-2.png new file mode 100755 index 0000000000000000000000000000000000000000..5297e223d18e08dc26fe740e1112d14035d134b6 Binary files /dev/null and b/sig/Hygon-Arch/assets/csv3-2.png differ diff --git a/sig/Hygon-Arch/assets/img2-1.png b/sig/Hygon-Arch/assets/img2-1.png new file mode 100755 index 0000000000000000000000000000000000000000..438644db9da67e2b6b19df957ead3ee3011056c7 Binary files /dev/null and b/sig/Hygon-Arch/assets/img2-1.png differ diff --git a/sig/Hygon-Arch/assets/img2-2.png b/sig/Hygon-Arch/assets/img2-2.png new file mode 100755 index 0000000000000000000000000000000000000000..cee35bf1d91ee5c121fe3a24d48a2d13f2624304 Binary files /dev/null and b/sig/Hygon-Arch/assets/img2-2.png differ diff --git a/sig/Hygon-Arch/assets/img2-3.png b/sig/Hygon-Arch/assets/img2-3.png new file mode 100755 index 0000000000000000000000000000000000000000..d5329634335157fc28080ef689d1168d6b4918f6 Binary files /dev/null and b/sig/Hygon-Arch/assets/img2-3.png differ diff --git a/sig/Hygon-Arch/assets/img2-4.png b/sig/Hygon-Arch/assets/img2-4.png new file mode 100755 index 0000000000000000000000000000000000000000..7c22e5d52866633aaa7bad1c1515e9aebbd04d43 Binary files /dev/null and b/sig/Hygon-Arch/assets/img2-4.png differ diff --git a/sig/Hygon-Arch/assets/img2-5.png b/sig/Hygon-Arch/assets/img2-5.png new file mode 100755 index 0000000000000000000000000000000000000000..59009035fc58676e19cc11d8e2eed081adb8bf6e Binary files /dev/null and b/sig/Hygon-Arch/assets/img2-5.png differ diff --git a/sig/Hygon-Arch/assets/img2-6.png b/sig/Hygon-Arch/assets/img2-6.png new file mode 100755 index 0000000000000000000000000000000000000000..80a48ad2c2405572b860c6ca10828f716b9737ed Binary files /dev/null and b/sig/Hygon-Arch/assets/img2-6.png differ diff --git "a/sig/Hygon-Arch/content/1-\345\256\211\350\243\205\346\223\215\344\275\234\347\263\273\347\273\237\345\222\214\345\206\205\346\240\270.md" "b/sig/Hygon-Arch/content/1-\345\256\211\350\243\205\346\223\215\344\275\234\347\263\273\347\273\237\345\222\214\345\206\205\346\240\270.md" new file mode 100644 index 0000000000000000000000000000000000000000..efce08f6801f87973da2b0a0da070502c6aa5d62 --- /dev/null +++ "b/sig/Hygon-Arch/content/1-\345\256\211\350\243\205\346\223\215\344\275\234\347\263\273\347\273\237\345\222\214\345\206\205\346\240\270.md" @@ -0,0 +1,28 @@ +测试过程中需要下载源代码和软件,请确保网络连接稳定。 + +## 安装开源操作系统 +从下面的镜像链接中任选一个,下载并完成安装。 + +http://mirrors.openanolis.org/anolis/8.4/isos/GA/x86_64/AnolisOS-8.4-x86_64-dvd.iso + +https://releases.ubuntu.com/20.04/ubuntu-20.04.6-live-server-amd64.iso + +## 下载测试代码仓库 + +``` +$ sudo chmod a+w /opt +$ cd /opt/ +$ git clone https://gitee.com/anolis/hygon-devkit.git +$ mv hygon-devkit hygon +$ sudo cp /opt/hygon/bin/hag /usr/bin +``` + +## 更新内核 + +``` +$ git clone https://gitee.com/anolis/hygon-cloud-kernel.git +$ cd hygon-cloud-kernel/ +$ sudo /opt/hygon/build_kernel.sh +``` + +更新完成后重启,选择新安装的内核进入系统。 \ No newline at end of file diff --git "a/sig/Hygon-Arch/content/2-\345\257\274\345\205\245\351\200\232\347\224\250\345\256\211\345\205\250\350\257\201\344\271\246.md" "b/sig/Hygon-Arch/content/2-\345\257\274\345\205\245\351\200\232\347\224\250\345\256\211\345\205\250\350\257\201\344\271\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..9550c6f6243bd764375a0eb8f24d308a2057e98a --- /dev/null +++ "b/sig/Hygon-Arch/content/2-\345\257\274\345\205\245\351\200\232\347\224\250\345\256\211\345\205\250\350\257\201\344\271\246.md" @@ -0,0 +1,83 @@ +## 安全功能 +安全功能包括CSV、TPM、TPCM、TDM及TKM等,这些功能依赖CPU硬件、BIOS及内部安全固件,使用安全功能需要首先导入通用安全证书,否则安全功能不工作。 + +表 1 安全功能的配置要求 + +| 配置 | 要求 | +| --- | --- | +| CPU | 2号、3号 | +| BIOS | PI 2.1.0.3或以上,支持CSV、TPM、TPCM | +| hag | 1820或以上 | + +通用安全证书导入后,会写入安全flash,不重新烧录bios的情况下,无需重新导入。以下操作都无需重新导入证书:重启机器、升级安全固件。 + +## 安装依赖 +说明: 从https网站下载文件,需要依赖ssl证书,可以使用以下方法安装: + +Ubuntu: +``` +$ sudo apt-get install -y ca-certificates +``` +Centos: +``` +$ sudo yum install -y ca-certificates +``` + +## 导入通用安全证书 +说明:通用安全证书支持在线导入和离线导入两种方式。 + +### 在线导入 + +``` +$ cd /opt/hygon/bin/ +$ sudo ./hag general hgsc_import +``` +图 1 在线导入通用安全证书 + +![](../assets/img2-1.png) + +### 离线导入 +(1) 获取芯片的chip ID和证书版本号 +``` +$ cd /opt/hygon/bin +$ sudo ./hag general get_id +$ sudo ./hag general hgsc_version +``` +图 2 获取芯片chip ID + +![](../assets/img2-2.png) + +图 3 获取证书版本号 + +![](../assets/img2-3.png) + +(2) 网站下载证书 +说明:在可以连接互联网的机器上,访问 https://cert.hygon.cn/hgsc, 如下图所示,输入您的服务器的Chip ID、证书版本号,以及您的公司信息。 + +图 4 网站下载证书 + +![](../assets/img2-4.png) + +(3) 导入证书 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag general hgsc_import -offline -in /realpath/to/hgsc_certchain +``` + +说明:将下载的证书拷贝到对应的服务器,证书名称类似为hygon-hgsc-certchain-v1.0-H905P0005040204.bin。如下图,使用hag离线导入该证书。 + +图 5 离线导入证书 + +![](../assets/img2-5.png) + +## 确认证书导入成功 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag csv platform_status +``` + +图 6 确认证书导入成功 + +![](../assets/img2-6.png) \ No newline at end of file diff --git "a/sig/Hygon-Arch/content/3-\346\243\200\346\237\245\350\275\257\347\241\254\344\273\266\347\211\210\346\234\254.md" "b/sig/Hygon-Arch/content/3-\346\243\200\346\237\245\350\275\257\347\241\254\344\273\266\347\211\210\346\234\254.md" new file mode 100644 index 0000000000000000000000000000000000000000..694b720fe7879b9bd0b271b95ced5f8e735b0e7c --- /dev/null +++ "b/sig/Hygon-Arch/content/3-\346\243\200\346\237\245\350\275\257\347\241\254\344\273\266\347\211\210\346\234\254.md" @@ -0,0 +1,35 @@ +## 查看CPU型号 + +``` +$ lscpu |grep "Model name" +Model name: Hygon C86 7280 32-core Processor +``` +第2位数字代表CPU型号,7280表示是2号CPU,类似地7180代表1号CPU,7380代表3号CPU。 + +## 查看hag版本 + +``` +$ cd /opt/hygon/bin +$ ./hag general version +Version: 1820 (release) +``` + +## 查看固件版本 + +``` +$ cd /opt/hygon/bin +$ sudo ./hag csv platform_status +api_major: 1 +api_minor: 3 +platform_state: CSV_STATE_INIT +owner: PLATFORM_STATE_SELF_OWN +chip_secure: SECURE +fw_enc: ENCRYPTED +fw_sign: SIGNED +es: CSV ES +build id: 1805 +guest_count: 0 +is HGSC imported: YES +supported csv guest:11 +platform_status command successful +``` \ No newline at end of file diff --git "a/sig/Hygon-Arch/content/csv/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" "b/sig/Hygon-Arch/content/csv/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..38ffe753beae265e28cb8e2384579ddc2a989417 --- /dev/null +++ "b/sig/Hygon-Arch/content/csv/1-\345\256\211\350\243\205CSV\350\275\257\344\273\266.md" @@ -0,0 +1,42 @@ +安装CSV软件之前,请先安装内核并导入通用安全证书。 + +## 安装依赖软件 + +``` +$ sudo /opt/hygon/csv/install_csv_sw.sh +``` + +## 安装qemu + +``` +$ git clone https://gitee.com/anolis/hygon-qemu.git +$ cd hygon-qemu/ +$ sudo /opt/hygon/csv/build_qemu.sh +``` + +## 安装grub + +``` +$ wget https://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz +$ tar -xvf grub-2.06.tar.gz +$ cd grub-2.06/ +$ sudo /opt/hygon/csv/build_grub.sh +``` + +## 安装edk2 + +``` +$ git clone https://gitee.com/anolis/hygon-edk2.git +$ cd hygon-edk2/ +$ git submodule update --init +$ sudo /opt/hygon/csv/build_edk2.sh +``` + +## 安装devkit + +``` +$ cd /opt/hygon/csv/ +$ sudo ./make_vm_img.sh +$ git clone -b master https://github.com/guanzhi/GmSSL.git +$ sudo ./build_devkit.sh +``` \ No newline at end of file diff --git "a/sig/Hygon-Arch/content/csv/2-\346\265\213\350\257\225\344\270\273\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" "b/sig/Hygon-Arch/content/csv/2-\346\265\213\350\257\225\344\270\273\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..e4a746e4a9be7c8f90402b496321a55baa2c3270 --- /dev/null +++ "b/sig/Hygon-Arch/content/csv/2-\346\265\213\350\257\225\344\270\273\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" @@ -0,0 +1,28 @@ +测试之前,请先安装内核。 + +## 功能描述 +主机内存加密技术用来加密主机内存,主机写内存数据时,如果页表项的加密位C bit为1,CPU会自动对数据加密后再写入内存;如果页表项的C bit为0,CPU不会进行加密。主机操作系统通过将重要数据的页表项C bit设置为1,可以实现数据加密后保存在内存中,保护数据的安全性。 + +## 测试主机内存加密功能 + +### 运行测试程序 +测试程序的执行过程分为 3 步: +1. 分配内存并将内存中的数据初始化为 0xab,通过 clflush 指令将数据从缓存写入内存,默认情况下页表中的 C bit=1,因此内存中的数据是被加密后的数据。 +2. 调用系统函数set_memory_decrypted将内存的 C bit 设置为0然后读出,发现不是0xab而是加密的数据。 +3. 调用系统函数set_memory_encrypted将内存的C bit设置为1然后读出,发现数据被恢复成 0xab。 + +``` +$ cd /opt/hygon/csv/sme_test +$ sudo insmod sme_test.ko +$ dmesg +``` + + 图 1 主机内存加密测试结果 + + ![](../../assets/csv2-1.png) + +### 卸载测试程序 + +``` +$ sudo rmmod sme_test +``` diff --git "a/sig/Hygon-Arch/content/csv/3-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" "b/sig/Hygon-Arch/content/csv/3-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..b17106c42bb0d1d1b2f95a921302847b1a51e32f --- /dev/null +++ "b/sig/Hygon-Arch/content/csv/3-\346\265\213\350\257\225CSV\350\231\232\346\213\237\346\234\272\345\206\205\345\255\230\345\212\240\345\257\206.md" @@ -0,0 +1,124 @@ +测试之前,请先安装CSV软件。 + +## 功能描述 +CSV技术通过加密虚拟机的内存来保护虚拟机数据的安全性,每个CSV虚拟机使用不同的密钥,主机和其他虚拟机都不能访问当前CSV虚拟机的内存数据,本文描述了测试CSV虚拟机功能的方法。 + +## 测试内存加密功能 + +### 查看普通虚拟机的内存数据 +运行普通虚拟机。 + +``` +$ sudo qemu-system-x86_64 -name normal-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:1111,server,nowait -vnc localhost:0 +``` + +虚拟机启动后,打开新终端使用vncviewer登陆虚拟机,用户名为root,密码为root。 + +``` +$ vncviewer localhost:0 +``` + +保存虚拟机的内存数据到文件。 + +``` +$ telnet 127.0.0.1 1111 +$ { "execute" : "qmp_capabilities" } +$ { "execute": "pmemsave", "arguments": {"val": 0, "size": 256, "filename": "normal.txt"} } +``` + +按下Ctrl+]退回到终端,查看文件中的内存数据。 + +``` +$ quit +$ hexdump -v normal.txt +``` + +普通虚拟机的内存数据如下图,数据是明文。 + +图 1 普通虚拟机的内存数据 + + ![](../../assets/csv3-1.png) + +关闭普通虚拟机。 + +### 查看CSV虚拟机的内存数据 +运行CSV虚拟机。 + +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc localhost:1 -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 +``` + +虚拟机启动后,打开新终端使用vncviewer登陆虚拟机,用户名为root,密码为root。 + +``` +$ vncviewer localhost:1 +``` + +保存虚拟机的内存数据到文件。 + +``` +$ telnet 127.0.0.1 2222 +$ { "execute" : "qmp_capabilities" } +$ { "execute": "pmemsave", "arguments": {"val": 0, "size": 256, "filename": "csv.txt"} } +``` + +按下Ctrl+]退回到终端,查看文件中的内存数据。 + +``` +$ quit +$ hexdump -v csv.txt +``` + +CSV虚拟机的内存数据如下图,数据是密文。 + +图 2 CSV虚拟机的内存数据 + + ![](../../assets/csv3-2.png) + +关闭CSV虚拟机。 + +## 测试远程认证功能 + +### 生成认证报告 +运行CSV虚拟机。 + +``` +$ sudo qemu-system-x86_64 -name csv-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc localhost:1 -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 +``` + +虚拟机启动后,打开新终端使用vncviewer登陆虚拟机,用户名为root,密码为root。 + +``` +$ vncviewer localhost:1 +``` + +在虚拟机中使用scp命令从主机拷贝远程认证测试程序,假设主机的用户名是test,IP地址是192.168.122.1,在虚拟机中运行测试程序get-attestation生成认证报告。 + +``` +# dhclient +# scp test@192.168.122.1: /opt/hygon/csv/attestation/get-attestation ./ +# ./get-attestation +``` + +测试程序get-attestation产生mnonce和userdata作为认证报告的输入,生成的认证报告使用PEK私钥签名,并且包含mnonce和userdata,认证方需要检查认证报告的签名、mnonce、userdata。 + +### 验证认证报告 +可以在任意机器上验证认证报告,这里使用主机作为示例,验证程序需要联网从芯片证书服务器下载芯片证书验证认证报告的证书链。 + +在虚拟机中使用scp命令将认证报告拷贝到主机。 + +``` +# scp report.cert test@192.168.122.1:/opt/hygon/csv/attestation/ +``` + +在主机中运行验证程序verify-attestation。 + +``` +$ cd /opt/hygon/csv/attestation +$ sudo chmod 666 report.cert +$ ./verify-attestation true +``` + +验证程序verify-attestation从芯片证书服务器下载HRK、HSK、CEK芯片证书,使用PEK公钥验证认证报告的签名,并且验证HRK->HSK->CEK->PEK证书链的签名。 + +关闭CSV虚拟机。 diff --git a/sig/Hygon-Arch/sig-info.yaml b/sig/Hygon-Arch/sig-info.yaml index 2bacd4c23baaac70f2f364a719488c4618d64f40..0a429bbbb08dc300d0a6a25e2b41b65e4a02fabe 100644 --- a/sig/Hygon-Arch/sig-info.yaml +++ b/sig/Hygon-Arch/sig-info.yaml @@ -1,7 +1,7 @@ name: Hygon Arch en_name: Hygon Arch home_page: https://openanolis.cn/sig/Hygon-Arch -description: 致力于构建国产C86架构的软件生态,包括国密、可信计算、机密计算和虚拟化等。 +description: 致力于构建国产C86架构的软件生态,包括国密、可信计算、机密计算、虚拟化等。 en_description: Our group is devoted to software support based on Hygon c86 processor in Chinese cryptography, Trusted Compute, confidential compute, virtualization etc. mailing_list: hygon-arch@lists.openanolis.cn maintainers: