密码学证明
QingTian Enclave证明
QingTian Enclave 提供启动度量和远程证明能力。QingTian Enclave的度量值由通过标准的可信度量运算操作 (ExtendPCR) 得到的一组哈希值组成,这组哈希值保存在QTSM (QingTian Security Module) 的平台配置寄存器PCR中。QTSM可以支持最多32个PCR度量属性,PCR [16~31]可以由Enclave应用程序进行自定义,PCR[0~15]由QingTian系统预留,当前已支持的度量属性包括PCR0(QingTian Enclave镜像文件)、PCR3(IAM Agency URN)、PCR4(ECS Instance ID)、PCR8(QingTian Enclave镜像文件签名证书)。
Enclave应用程序可通过QTSM获取当前Enclave环境的一个可信证明文档 (Attestation Document)。证明文档包括PCR度量属性列表、QingTian PKI证书链、密码算法声明以及用户自定义参数。QingTian Enclave证明文档支持的用户自定义参数非常丰富,包括pubkey (由QTSM签署的用户自定义公钥),nonce (避免重放攻击的一次性数据) 和 user_data (任意自定义数据),它可以支持Enclave应用程序与外部实体之间运行多种自定义安全协议(eg,安全密钥协商、端到端加密)以实现复杂的应用安全解决方案。
华为云KMS服务、IAM服务内置了对QingTian Enclave Attestation协议的支持。租户IAM管理员可以通过设置条件授权策略来实现特定的安全控制目标,比如仅允许指定的Enclave应用程序才能调用指定的KMS API操作(比如生成随机数、加密、解密等)。下图展示了Enclave应用如何使用包含自定义pubkey参数的证明文档去访问KMS Decrypt API以实现密文数据解密的操作流程:
- Enclave App首先随机产生一个RSA密钥对(prikey, pubkey),使用pubkey作为参数调用QTSM API产生证明文档。
- QTSM计算AttestationDoc(包含pubkey)并返回给Enclave应用。
- Enclave App携带AttestationDoc和密文数据Blob,调用KMS Decrypt API。
- KMS使用Verifier SDK来验证AttestationDoc有效性。
- KMS将Verifier验证结果提供给IAM PDP(Policy Decision Point)进行访问控制决策。
- KMS在访问控制策略检查通过后解密Blob,并使用AttestationDoc所携带的pubkey对解密结果进行重新加密封装后返回;Enclave App收到响应后,使用步骤1中产生的prikey解封装后得到明文。

QingTian TPM证明
用户在创建ECS实例时可选择配置UEFI安全启动模式并使能QingTian-TPM。QingTian-TPM 是QingTian系统为ECS实例提供的一个虚拟设备,并遵循TPM 2.0技术规范。QingTian-TPM提供度量启动和远程证明,用户可以从QingTian-TPM获取签名的PCR值,并使用它们向远程实体证明ECS实例启动时的完整性。QingTian-TPM 还可以产生密钥并将其用于加密或签名,QingTian-TPM产生的密钥可以用于向依赖方提供设备身份证明。
ECS实例身份证明
- 使用实例身份文档
用户启动的每个ECS实例都有一个实例身份文档(Instance Identity Document),该文档提供有关实例本身的元数据信息,这些信息包括实例规格、实例ID、镜像ID、归属账号ID、私网IP地址、创建时间等。用户可以使用实例身份文档来验证实例相关的属性。运行在ECS实例中的应用程序可通过实例元数据服务IMDS (Instance Meta Data Service) 获取实例的实例身份文档以及针对实例身份文档的一个数字签名。当应用程序需要将实例身份文档发送给一个远程实体(依赖方)验证时,通常需要提供实例身份文档及其数字签名。从IMDS获取实例身份文档的数字签名时,用户可以提供自定义的audience参数(eg,通常为仅使用一次的挑战值)来避免重放攻击。
实例身份文档及数字签名可看作是ECS服务为每个ECS实例提供的一个默认的“出生证”。当实例中的应用程序需要与远程实体进行交互时,该“出生证”可用于实例的初始身份证明。有了“出生证”之后,基于“可传递信任”安全原则,应用程序可使用该初始身份来获取应用相关的访问凭证,从而可以有效解决身份安全问题(eg, 在应用程序配置文件中硬编码静态凭证问题)。
- 使用实例IAM委托
用户在创建ECS实例时可选择配置一个IAM委托。实例IAM委托(IAM Agency for Instance)是IAM管理员创建的一个虚拟身份,在此场景中它用于代表用户的ECS实例访问云服务资源时所使用的IAM身份。IAM委托的一个安全优势是没有静态凭证,所以能有效消减静态凭证(或长期凭证)的泄露风险。运行在ECS实例中的应用程序可通过实例元数据服务IMDS (Instance Meta Data Service) 获取实例IAM委托的一个临时安全令牌,该安全令牌由IAM令牌服务STS( Security Token Service) 签发,它代表实例IAM委托的一个身份会话。实例IAM委托在获得IAM授权后,应用程序可以使用实例IAM委托的临时安全令牌去访问被授权的云服务资源(eg,OBS对象)。
实例IAM委托可看作是租户IAM管理员为ECS实例提供的一个自定义“机器身份”,当实例中的应用程序需要访问被授权的华为云服务资源或API时,可以使用该“机器身份”的临时安全令牌直接访问,而不需要在应用程序代码或配置文件中硬编码静态凭证(如AK/SK),从而避免静态凭证泄露风险。
推荐使用ECS IMDSv2协议访问实例元数据服务:相比IMDSv1而言,IMDSv2使用“PUT方法”和“动态令牌”来初始化IMDS会话,可以有效消减租户Web应用可能存在的SSRF漏洞风险,以及因为错误配置WAF、反向代理、三层防火墙或NAT所导致的潜在安全风险。使用IMDSv2可以显著增强租户ECS实例的纵深安全防御能力。