From 20490b3af56ed54a5ae44b8e6090ee7e0d423bbf Mon Sep 17 00:00:00 2001 From: hanliyang Date: Fri, 28 Mar 2025 21:50:01 +0800 Subject: [PATCH] Hygon Arch sig: Add some Q&A about remote attestation Signed-off-by: hanliyang --- ...34\347\250\213\350\256\244\350\257\201.md" | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/4-\350\277\234\347\250\213\350\256\244\350\257\201.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/4-\350\277\234\347\250\213\350\256\244\350\257\201.md" index 7204f823b..daab83aea 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/4-\350\277\234\347\250\213\350\256\244\350\257\201.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/4-\350\277\234\347\250\213\350\256\244\350\257\201.md" @@ -1,8 +1,48 @@ # 远程认证 FAQ -#### Q: 远程认证报告中mnonce,data,hash分别是什么 +#### Q: 请求认证报告时,输入中的mnonce,user data,hash分别是什么 -A: mnonce和data是用户的输入,作为对报告的完整性保护,mnonce会作为HMAC运算的key,data会放在report中返回(可以为空)。hash就是HMAC完整性运算的结果 +A: `mnonce`和`user data`是用户的输入数据,`hash`是`mnonce`和`user data`的哈希值。 + - `mnonce`是一个防重放攻击的新鲜值,它是机密虚拟机中的`可信应用(attester)`随机生成的,`mnonce`最终会包含在认证报告中。请求生成认证报告的`可信应用`可以通过检查认证报告中的`mnonce`确定认证报告的实时性。此外,`mnonce`会对最终生成的认证报告中的`PEK证书`、`Chip ID`进行HMAC保护,`可信应用`可以通过`mnonce`确保`PEK证书`、`Chip ID`不是伪造的。 + - `user data`是指远程认证报告用户(`可信应用`和`认证报告证明者(verifier)`)提供的数据(当然,用户可以提供空数据),通常`user data`包含:1)`认证报告证明者`生成的`挑战值`,2)海光机密虚拟机`可信应用`的非对称钥对中的`公钥`摘要。`可信应用`在发送认证报告给`认证报告证明者`时,顺带将`可信应用`的`公钥`也发送给`认证报告证明者`,`认证报告证明者`在获得认证报告后,会检查认证报告中的`挑战值`是否是自己的,从而决定当前远程认证过程的会话是有效的,此外,`认证报告证明者`可以通过`可信应用`的`公钥`保护`可信应用`与`认证报告证明者`之间的秘密传递。 + - `hash`是`mnonce`和`user data`的哈希值,海光安全处理器通过`hash`确认认证报告用户提供的`mnonce`和`user data`的完整性。 + +> `attester`和`verifier`的概念请参考:[RATS架构规范文档](https://dl.acm.org/doi/pdf/10.17487/RFC9334),该文档对远程证明的模型进行了详细的介绍。 + +#### Q: 认证报告中的user data,mnonce等数据是通过调用什么接口或者工具传入的? + +A: 应用层可参考:[attester简单示例工具](https://gitee.com/anolis/hygon-devkit/blob/master/csv/attestation/ioctl_get_attestation.c),虚拟机内核的`csv-guest`驱动为应用层提供服务,驱动可参考[csv-guest驱动源码](https://gitee.com/anolis/cloud-kernel/tree/devel-6.6/drivers/virt/coco/csv-guest) + +#### Q: 认证报告中mnonce,anonce,虚拟机摘要等信息是通过调用什么接口或者工具生成的? + +A: 以下是分别对`mnonce`,`anonce`,`虚拟机摘要`的源头说明: +- `mnonce`:是由虚拟机里的[`attester`](#attester-verifier)应用生成的,生成方法请参考[attester简单示例工具](https://gitee.com/anolis/hygon-devkit/blob/master/csv/attestation/ioctl_get_attestation.c)。 +- `anonce`:是海光安全处理器在生成认证报告时自动随机生成的。 +- `虚拟机摘要`:海光机密虚拟机在创建阶段,安全处理器会计算出`虚拟机摘要`并存储下来;用户也可以自己计算出`虚拟机摘要`并在创建机密虚拟机时将包含`虚拟机摘要`的启动会话传递给安全处理器,作为启动依据,用户一般是通过执行[hag工具](https://gitee.com/anolis/hygon-devkit/blob/master/bin/hag)的命令得到的,[测试密钥封印示例](https://openanolis.cn/sig/Hygon-Arch/doc/865622217613776670)中使用到的[海光CSV密钥封印示例工具](https://gitee.com/anolis/hygon-devkit/blob/master/csv/sealing_key.sh)中的`hag csv generate_launch_blob`命令可以计算得到海光机密虚拟机的启动会话块`launch_blob.bin`,该会话块中包含了`虚拟机摘要`。通过执行`hag csv generate_launch_blob --help`可以了解怎么使用。 + +#### Q: 所有远程认证相关功能(如生成度量值、生成远程认证报告、验证远程认证报告等)都可通过hag包工具来实现吗?能否提供具体的使用手册或者功能说明?社区的相关信息较少? + +A: 以下分别进行回答: +- 所有远程认证相关功能(如生成度量值、生成远程认证报告、验证远程认证报告等)都可通过hag包工具来实现吗? + - 只有`生成度量值`(即`虚拟机摘要`)可以通过`hag`工具生成,而且`hag`工具只会输出`launch_blob.bin`,`虚拟机摘要`只是`launch.blob`内容的其中一部分。`hag help`查看具体用法。 + - `生成远程认证报告`是通过运行于海光机密虚拟机内部的[`attester`](#attester-verifier)程序实现的。[attester简单示例工具](https://gitee.com/anolis/hygon-devkit/blob/master/csv/attestation/ioctl_get_attestation.c)就是一个`attester`示例程序。 + - `验证远程认证报告`是通过运行于第三方机器上的[`verifier`](#attester-verifier)程序实现的。[verifier简单示例工具](https://gitee.com/anolis/hygon-devkit/blob/master/csv/attestation/verify_attestation.c)就是一个`verifier`示例程序。 +- 能否提供具体的使用手册或者功能说明? + - 暂时先参考以上提供的答案。如果用户签署了NDA协议,也可以联系海光获取海光机密计算API文档,API文档中包含了启动摘要的计算方法。 +- 社区的相关信息较少? + - 欢迎指出,因为机密计算涉及到的细节和技术太多,无法一次性解决所有用户的疑问,我们将持续完善龙蜥社区的海光机密计算文档。 + +#### Q: 对于远程认证中的度量,我的理解是:度量分为两个部分,一个是可信硬件的度量,另一个是应用程序的度量。以上理解是否正确? + +A: 海光机密计算的认证报告中只包含**启动度量**,属于`可信硬件的度量`;认证报告中不含动态的`应用程序的度量`。如果用户是通过`initrd`启动的虚拟机,且`应用程序`已经包含在`initrd`,则`应用程序的度量`已经包含在**启动度量**中了;如果用户是通过`虚拟机块设备/磁盘`启动的虚拟机,则建议用户通过使用`加密完整性保护的磁盘`技术保护虚拟机磁盘上的应用;如果是用户动态从外部获取的`应用程序`,则建议用户通过签名等方式确保`应用程序`的可靠安全。 + +#### Q: 目前通过社区了解到虚拟机摘要中包含虚拟机内存文件initrd,我都理解是:实际在启机密虚机之前可信应用的所有程序代码都放入initrd中,因此生成的虚拟机摘要也包含可信应用都信息,这个就可以认为是对应用程序的度量。以上理解是否正确? + +A: 理解正确。 + +#### Q: 那在社区中列出的远程认证输出报告的格式中似乎未包含需要进行度量的信息(芯片ID我理解不算度量信息,是公开信息,任何人登录宿主机的root用户都能获取),是否社区公布的信息不全面? + +A: 请参考[CSV远程认证技术介绍](https://openanolis.cn/sig/Hygon-Arch/doc/1256840217191415834),在该网页的图例中,给出的认证报告格式确实是一个简略的格式,`虚拟机摘要`(即为`启动度量值`)属于图例中`报告内容`结构的`被签名内容`的一个字段,网页最后给出了认证报告的完整格式。如果用户签署了NDA协议,也可以联系海光获取机密计算API文档了解认证报告的细节。 #### Q: 如何下载海光芯片证书 -- Gitee