想象一家高档银行的 VIP 保险柜业务:你人在外地,却想向客户证明“我的商业模型真的运行在一台谁也动不了手脚的保险柜里”。本地说一声“我很安全”当然没人信,于是银行在每台保险柜出厂时,在柜门内侧装了一位持证的“验信员”。这位验信员由保险柜厂商亲自授权、密钥烧录在硬件里、任何人都无法篡改它的判断。当你要向远方的客户证明可信度时,只需要请验信员当场清点柜内环境(跑了哪些程序、加载了什么配置),把结果记成一份“体检报告”,再盖上只有它才有的官方钢印,交给客户查验。这套“隔着玻璃门请验信员开证明”的机制,就是 TEE 可信执行环境的远程认证(Remote Attestation)——你的 TEE 到底可不可信,不是自己说了算,而是由硬件内这颗不可伪造的“信任种子”替你背书。

岗位关联

远程认证是隐私计算、联邦学习、多方安全计算等场景中建立跨设备信任的基石。掌握它能让你在真实 AI 工程中设计出“先验明正身、再传递数据”的安全架构,是从事可信 AI 和隐私保护方向的核心技能之一。

目录
  1. 可视化演示
  2. 认证概述
  3. 挑战响应机制
  4. 平台身份密钥
  5. 度量与签名
  6. 信任根与信任链
  7. 主流方案对比
  8. 认证实现与应用
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

\u53ef\u89c6\u5316\u5c55\u793aTEE\u53ef\u4fe1\u6267\u884c\u73af\u5883\u7684\u8fdc\u7a0b\u8ba4\u8bc1\u6d41\u7a0b\uff0c\u5305\u62ec\u4fe1\u4efb\u94fe\u9a8c\u8bc1\u3001\u6311\u6218\u54cd\u5e94\u4ea4\u4e92\u4e0e\u6570\u636e\u5bc6\u5c01\u673a\u5236\uff0c\u4ea4\u4e92\u5207\u6362\u89c2\u5bdf\u786c\u4ef6\u4fe1\u4efb\u6839\u5230\u8ba4\u8bc1\u62a5\u544a\u7684\u5b8c\u6574\u4fe1\u4efb\u94fe\u8def\u3002

本节配有交互动效(进入视口后自动加载,约 3KB)。

TEE\u4fe1\u4efb\u94fe\u9a8c\u8bc1\u6d41\u7a0b \u786c\u4ef6\u4fe1\u4efb\u6839\u4e0d\u53ef\u5bfc\u51fa\uff0c\u4e3a\u6574\u4e2a\u4fe1\u4efb\u94fe\u63d0\u4f9b\u6839\u57fa\u7840 PCR\u5ea6\u91cf\u503c\u901a\u8fc7\u6269\u5c55\u64cd\u4f5c\u7d2f\u52a0\u8bb0\u5f55\u73af\u5883\u72b6\u6001 Root \u2192 PCR \u2192 Quote \u2192 Verify \u70b9\u51fb\u5207\u6362\u67e5\u770b\u6311\u6218\u54cd\u5e94\u6d41\u7a0b

认证概述

你要向远在千里之外的合作方证明:“我的模型真的跑在一台保险柜里。”直接喊话没人信,隔着网络也无法肉眼检查,远程认证(Remote Attestation)就是为此诞生的——让保险柜里那位厂商派驻的“验信员”出具一份盖着硬件钢印的证明。这份证明无法被软件伪造,因为验信员的密钥从出厂起就烧录在芯片里,任何人(包括管理员、操作系统)都拿不到、改不了。

本地认证和远程认证的区别,就像在自家门口对着监控比个“OK“手势,和向异地的审计机构递交一份带公证章的书面材料。本地认证信任的是”操作系统说我安全”,远程认证却要依赖一个独立于操作系统的硬件权威——信任根(Root of Trust)。它是整条信任链条的起点,相当于验信员胸前的国家认证执照。

技术上讲,远程认证由三个角色完成:证明方(Attester)是运行在 TEE 里的程序,验证方(Verifier)是想要确认环境可信的一方,而信任根则提供最底层的签名能力。三者配合,就把“我安全”这句空话,变成一份可以远程校验的密码学证据。保险柜的生意逻辑很清晰:柜子是否可信,最终要回到厂商背书的验信员;TEE 是否可信,最终也要回到芯片内置的信任根。

挑战响应机制

客户提出质疑:“万一你拿着上周的旧证明来糊弄我?”验信员的应对之道是——每次开证明前,让客户递进来一张写着随机暗号的纸条,只有把这张纸条原样誊写到新证明上,证明才有效。这张随机纸条,就是挑战值 nonce。它是验证方每次新生成的一次性随机数,谁也猜不到、也复现不了。

为什么需要 nonce?假设没有它,攻击者可以录下一段合法的认证过程,之后原封不动地重放给验证方,让对方误以为环境仍然可信——这就是重放攻击。nonce 把每次认证“钉死”在唯一一次会话上:证明方必须把 nonce 纳入签名内容,验证方检查 nonce 与刚下发的完全一致,旧录音自然失效。这就好比电影票上印了场次和座位号,拿昨天的票进今天的场,闸机一眼就能识破。

在真实交互中,验证方生成 nonce 后发给证明方,证明方把它与度量结果一起签名,生成 Quote 返回。Quote 的基本结构如下:

响应当中的随机纸条设计,让每一次认证都独一无二。验证方只需核对纸条编号,就能判断眼前这套证明是不是“过期录像”——这就是挑战响应机制最精妙的一点:用一次性的随机性,买断永久性的防重放保障。

Quote={PCR, nonce},sig=SignAIK(h(PCR∥nonce))\text{Quote} = \left\{ \text{PCR}, \ \text{nonce} \right\}, \qquad\text{sig} = \mathrm{Sign}_{\mathrm{AIK}}\left( h(\text{PCR} \| \text{nonce}) \right)
一句话:Quote 是“体检报告 + 随机暗号”的组合体,再用身份密钥签上名,让别人既无法篡改也无法重放。
  1. PCR 字段Quote 中携带平台度量结果,代表保险柜当前环境的体检摘要。
    PCR=h(代码环境)\text{PCR} = h(\text{代码环境})
  2. nonce 字段把验证方刚下发的随机挑战值原样写入 Quote,证明这次回应是“新鲜”的。
    nonce∈{0,1}256\text{nonce} \in \{0,1\}^{256}
  3. 拼接后哈希将 PCR 与 nonce 拼接成一个字节串再求哈希,任何一位被改动都会使结果完全变化。
    h(PCR∥nonce)h(\text{PCR} \| \text{nonce})
  4. AIK 签名用身份私钥对拼接哈希签名,象征验信员盖上不可伪造的钢印。
    sig=SignAIK(h(PCR∥nonce))\text{sig} = \mathrm{Sign}_{\mathrm{AIK}}\left( h(\text{PCR} \| \text{nonce}) \right)
  5. 封装成 Quote把度量结果、挑战值和签名打包,作为最终回应交给验证方。
    Quote={PCR, nonce, sig}\text{Quote} = \left\{ \text{PCR}, \ \text{nonce}, \ \text{sig} \right\}

平台身份密钥

保险柜里其实藏着两把钥匙:一把是出厂时打在柜体上的“户口本”——背书密钥 EK(Endorsement Key);另一把是验信员日常开证明用的“工作证”——身份认证密钥 AIK(Attestation Identity Key)。EK 是在硬件出厂时由厂商植入的,与这块芯片一一绑定,全世界仅此一份,它的作用只有一个:向外界证明“我是正版硬件,不是仿冒品”。

但如果每次认证都直接掏户口本,问题就来了:EK 是唯一的,任何服务商拿到它都能把你在不同平台的足迹串起来,形成跨服务追踪,隐私荡然无存。所以 TEE 的聪明设计是:用 EK 做一次性的“验明正身”后,立刻换发一张 AIK 工作证。日常所有认证都由 AIK 出面签名,EK 则深藏柜底。AIK 可以定期轮换、随会话注销,就像保安频繁更换工作证,证件上不再暴露身份证号,自然难以被追踪。

密钥层次结构可以用一句话概括:信任根在底层,EK 在中层,AIK 在上层。上层密钥由下层密钥“担保签发”,形成“根 → EK → AIK”的授权链。轮换管理则要求 AIK 定期更新,并同步注销旧证书,防止长期使用同一张工作证被暴力破解或侧信道窃取。有了这套“户口本换工作证”的机制,TEE 既保住了硬件的真实身份,又保住了用户的匿名性——安全与隐私,在一对密钥的分工中达成了默契。

度量与签名

验信员开证明前,必须先“体检”:把柜内运行的程序、加载的配置逐项测量、记录成一份体检报告。这份报告在 TEE 里叫度量值——对代码和数据做哈希计算,得到一串固定长度的摘要。哈希就像体检单上的指标:同一份代码必然得到同一个结果,程序哪怕被改动一个字节,摘要也会面目全非。度量值随后被写进 PCR(Platform Configuration Register,平台配置寄存器),它像一块只能追加、不能随意擦写的公告板,完整记录下从启动到当前的所有环境指纹。

体检报告有了,验信员还要把它原样誊写入证明书并盖章。TEE 对 PCR 值、nonce、时间戳等字段整体签名,生成的密文就叫 Quote。验证方收到 Quote 后要做三件事:验签、比对度量、核对挑战值。签名的意义在于锁定整个报告——任何字段被篡改,签名立刻校验失败。整套验证逻辑如下:

把“体检报告 + 钢印 + 随机暗号”三样东西拼在一起,验证方就能隔着网络完成对保险柜的全面体检。签名保证报告没被动手脚,度量保证环境没被污染,挑战值保证报告是刚出炉的——三者缺一不可,这就是 Quote 设计的完整逻辑。

\mathrm{Verify}\left( \text{sig}, \ \text{AIK}_{\mathrm{pub}} \right) \ \wedge \\left( \text{PCR} = \text{PCR}_{\mathrm{exp}} \right) \ \wedge \\left( \text{nonce} = \text{nonce}_{\mathrm{send}} \right)
一句话:三个条件同时成立才算认证通过——签名来自可信 AIK、度量值符合预期、挑战值对得上号。
  1. 验签用 AIK 公钥解开签名,确认 Quote 确实由可信身份签发,而非伪造者炮制。
    Verify(sig, AIKpub)\mathrm{Verify}\left( \text{sig}, \ \text{AIK}_{\mathrm{pub}} \right)
  2. 比对期望度量把收到的 PCR 值与验证方事先维护的可信白名单逐项比对,确认柜内环境没有被植入恶意程序。
    PCR=PCRexp\text{PCR} = \text{PCR}_{\mathrm{exp}}
  3. 核对挑战值确认 Quote 里的 nonce 与刚才下发的完全一致,排除重放旧报告的可能。
    nonce=noncesend\text{nonce} = \text{nonce}_{\mathrm{send}}
  4. 与运算连接三个条件必须同时满足,任何一项失败都判定认证不通过。
    A∧B∧C=validA \wedge B \wedge C = \text{valid}

信任根与信任链

客户拿到证明书,心里还有最后一道坎:“这验信员的钢印,凭什么信?”验信员掏出了一串授权文件:他的公章由保险柜厂商签发,厂商的经营资质由国家监管机构认证。客户把这一串文件逐级查上去,最终落到一个自己无条件信任的“国家监管机构”——这就是信任锚。TEE 世界完全照搬了这套逻辑:验证方预先信任某个根证书(信任锚),然后沿着证书链逐级验证,直到确认手里这份 Quote 的签名者确实由可信根层层授权而来。

整条信任链可以表示为:

信任链的意义在于:验证方不需要提前认识每一台 TEE,只需要信任一个根,就能推导出对任意硬件的信任。就像你不需要认识每位在职保安,只要信任国家认证体系,就能信任所有持证上岗的人。信任锚校验是最后一道防线,如果根证书被污染,整条链会瞬间崩塌,因此它永远被存放在防篡改的硬件存储里。

CA→ sigCA Platform→ sigPlat AIK→ sigAIK Quote\mathrm{CA} \xrightarrow{\ \mathrm{sig_{CA}}\ } \mathrm{Platform} \xrightarrow{\ \mathrm{sig_{Plat}}\ } \mathrm{AIK} \xrightarrow{\ \mathrm{sig_{AIK}}\ } \mathrm{Quote}
一句话:从根证书出发,一级签一级,最终验证到 Quote 签名——信任像接力棒一样从源头传到终点。
  1. 信任锚CA 根证书被预先安装在验证方的可信存储中,作为整条链的起点,相当于国家监管机构。
    CA\mathrm{CA}
  2. 平台证书厂商用根证书私钥为具体硬件平台签发身份证书,证明该 TEE 是正规出厂。
    CA→sigCAPlatform\mathrm{CA} \xrightarrow{\mathrm{sig_{CA}}} \mathrm{Platform}
  3. AIK 证书平台私钥为 AIK 签发证书,把“工作证”与“户口本”关联起来。
    Platform→sigPlatAIK\mathrm{Platform} \xrightarrow{\mathrm{sig_{Plat}}} \mathrm{AIK}
  4. 逐级验签验证方从信任锚出发,逐级校验每一层签名,最终确认 Quote 签名者可信。
    AIK→sigAIKQuote\mathrm{AIK} \xrightarrow{\mathrm{sig_{AIK}}} \mathrm{Quote}

主流方案对比

不同厂商的“保险柜”各有各的规矩:Intel 给柜子装了专线网络,验信员的资质由 Intel 总部直接代查;ARM 的柜子分成两个世界,验信员住在独立的“安全世界”里;AMD 则把整个柜子装进虚拟机,连地板的材质都加密过。虽然风格不同,但“硬件背书 + 挑战响应 + 信任链”的核心原则完全一致。

Intel SGX 提供 Enclave 隔离环境,远程认证采用 EPID 匿名签名或 ECDSA 签名,验证时需要连接 Intel 的证明服务获取签名公钥。它适合对单机性能要求高、需要在 CPU 内跑机密计算的场景。ARM TrustZone 则把系统划分为安全世界与普通世界,TEE 运行在安全世界中,认证常由芯片厂商(如 Trustonic、高通的 QSEE)提供配套服务,适合移动设备与物联网。AMD SEV 主打虚拟机级加密,认证更关注虚拟机与宿主机的安全边界,适合云场景下的租户隔离。

选型考量可以类比挑选保险柜:SGX 像品牌名气大但需要回总部验章的款式,适合 x86 服务器生态;TrustZone 像与楼盘深度绑定的定制款式,适合移动端碎片化生态;SEV 则是为“出租保险柜”而设计的云原生款。没有绝对的好坏,关键是看你的工作负载跑在哪种硬件上、合作方是否已经建立对相应证明服务的信任。

认证实现与应用

把整套流程搬进现实,它就是一座“办证大厅”:验证方取号(下发 nonce),证明方体检(度量 PCR),验信员盖章(AIK 签名),验证方验章(验签 + 比对白名单 + 核对 nonce)。每一步都有明确的责任方和密码学保障。落实到工程中,需要额外注意三点:度量白名单必须由可信来源维护,不能随意信任任何 PCR 值;nonce 必须真随机且一次性使用;证书吊销状态要定期检查,防止已泄露的 AIK 继续被滥用。

在隐私计算领域,远程认证是多方协作的入场券。联邦学习的参与方会先互相验证对方 TEE,确认模型训练确实发生在可信环境中,再放心共享梯度;区块链预言机也会用远程认证证明计算节点没有造假。最佳实践是在认证握手完成后,再派生会话密钥传输数据——认证只负责“验明正身”,具体的数据加密则交给后续协商的会话密钥,职责分离,安全边界才清晰。

回到保险柜的比喻:一次完整的远程认证,就是客户取号、验信员体检、盖章、客户验章的全流程。只要四步都严谨执行,远方那台看不见的保险柜,就能像摆在眼前一样让你放心。这份“看不见的信任”,正是 TEE 远程认证在 AI 与数据行业里最宝贵的价值。

AI 应用场景

联邦学习中的节点可信认证

阶段:模型训练前的安全握手阶段

解决的问题:传统联邦学习中,参与方只能依赖“平台声称”来判断对方环境安全,恶意节点可以在一台被攻破的机器上运行训练脚本,悄悄窃取或污染梯度。借助 TEE 远程认证,每个参与方在共享梯度前先完成 Quote 验证,确认对方代码确实运行在受保护的 Enclave 中,再建立加密信道。

具体案例:某医疗影像联盟的 5 家医院做联邦建模,每家医院部署 SGX Enclave 运行训练脚本。聚合服务器启动时对每个节点发起远程认证,比对 PCR 白名单,确认没有注入恶意插件后才开启本轮训练。整个过程如同逐一查验各家保险柜的验信员资质,杜绝“带病上岗”的节点。

可信 AI 推理服务证明

阶段:模型推理服务的部署与交付阶段

解决的问题:企业向客户提供 AI 推理 API,客户担心服务方偷偷记录输入数据或更换模型版本。通过远程认证,服务方可以出具一份包含模型指纹的 Quote,客户在线验证后即可确认“推理的确发生在可信硬件里,且模型哈希与约定一致”,无需实地考察机房。

具体案例:一家金融风控公司采购第三方反欺诈模型 API,合同中要求模型运行在 AMD SEV 加密虚拟机中。服务方在每次密钥协商前提供 SEV 的远程认证报告,客户验证报告中的度量值与合同中约定的镜像哈希后,才下发真实业务数据。相当于客户隔着网络请对方柜子里的验信员,确认柜中装的确是约定好的那一套模型。

Python 演示

python52 行
#!/usr/bin/env python3import hashlibimport hmacimport os  class Attester:    """模拟 TEE 中的证明方:持有信任根密钥,只能输出环境度量结果"""     def __init__(self, code_fingerprint: str, root_secret: bytes) -> None:        self.code_fingerprint = code_fingerprint        self.aik = root_secret  # 由信任根派生的 AIK 密钥种子(演示简化)     def measure(self) -> str:        return hashlib.sha256(self.code_fingerprint.encode()).hexdigest()     def attest(self, nonce: str) -> dict:        pcr = self.measure()        blob = f"{pcr}|{nonce}"        signature = hmac.new(self.aik, blob.encode(), hashlib.sha256).hexdigest()        return {"pcr": pcr, "nonce": nonce, "signature": signature}  class Verifier:    """模拟验证方:校验签名、比对期望度量并核对挑战值"""     def __init__(self, expected_pcr: str, aik_pub: bytes) -> None:        self.expected_pcr = expected_pcr        self.aik_pub = aik_pub     def verify(self, quote: dict) -> bool:        expected_blob = f"{self.expected_pcr}|{quote['nonce']}"        expect = hmac.new(self.aik_pub, expected_blob.encode(), hashlib.sha256).hexdigest()        return hmac.compare_digest(expect, quote["signature"]) and quote["pcr"] == self.expected_pcr  def main() -> None:    code = b"def load_model(): return 'pretrained-bert'"    root_secret = b"tee-simulator-root-key"    attester = Attester(code.decode(), root_secret)    verifier = Verifier(        expected_pcr=hashlib.sha256(code).hexdigest(),        aik_pub=root_secret,    )    nonce = os.urandom(16).hex()    quote = attester.attest(nonce)    print("Quote:", quote)    print("验证通过:", verifier.verify(quote))  if __name__ == "__main__":    main()
目的:用最小可运行的方式演示远程认证核心流程——验证方下发 nonce,证明方度量环境并签名生成 Quote,验证方验签并比对期望度量与挑战值。
  1. self.aik = root_secret用信任根派生出的密钥充当 AIK,真实 TEE 中它由硬件安全生成、不可导出。
  2. return hashlib.sha256(self.code_fingerprint.encode()).hexdigest()对代码环境做哈希度量,得到 PCR 摘要,模拟验信员的“体检报告”。
  3. blob = f"{pcr}|{nonce}"把度量和挑战值拼接到一起,确保 nonce 参与后续签名,防止重放。
  4. signature = hmac.new(self.aik, blob.encode(), hashlib.sha256).hexdigest()用密钥对拼接结果签名,对应 Quote 中的钢印。
  5. nonce = os.urandom(16).hex()验证方每次生成全新随机挑战值,保证会话不可重放。
  6. return hmac.compare_digest(expect, quote["signature"]) and quote["pcr"] == self.expected_pcr恒时比较签名,并核对度量值,两个条件都满足才放行。

常见误区

误区我用了 TEE 又做了远程认证,黑客就完全看不到我代码和数据了,这比任何加密都强。

正解TEE 保证的是“可信执行”——代码在隔离环境里按预期运行,远程认证证明这份“预期”确实成立。但隔离并不等于免疫所有攻击:侧信道攻击(如缓存时序分析)仍可能泄露部分信息,物理攻击也可能威胁硬件本身。比喻理解:保险柜保证贵重物品在指定柜内,但不代表小偷没有观察钥匙孔之类的技巧。远程认证回答的是“环境是否可信”,而不是“数据绝对不可见”。

为何常见:厂商宣传时常强调“硬件级隔离”,让初学者误以为这是绝对安全边界,忽略了攻击模型中的侧信道与供应链风险。

误区TEE 已经在本地保护我了,为什么还要和外部服务做一套认证流程?多此一举。

正解本地的 TEE 只能向本地内核或操作系统证明自己可信;但一旦涉及跨机器、跨组织的协作,对方无法仅凭“你说你跑在 TEE 里”就信任你。远程认证把 TEE 的硬件背书通过网络传递出去,解决的是“他人如何相信你”的问题。就像保险柜里的验信员,他存在的意义不是给自己看,而是给远方客户开证明。

为何常见:把“隔离执行”与“信任传递”混为一谈,忽略了认证本质上是分布式安全中的通信协议问题。

误区EK 是硬件唯一的出生证明,那就每次认证都让验证方检查 EK,最直接也最保险。

正解EK 与硬件芯片唯一绑定,若每次都直接暴露,任何服务商都能凭它追踪同一台设备的所有行为,跨平台形成用户画像,严重侵害隐私。正确做法是用 EK 完成一次性验明正身后,派生 AIK 用于日常认证,EK 深藏硬件内不再出境。这对应现实中“户口本出示一次换取工作证”的流程。

为何常见:直觉上觉得“唯一凭证最可靠”,忽略了唯一性同时也是追踪性的根源,隐私与安全需要平衡。

误区验证方收到 Quote,验签通过后直接放行,不用再看别的了。

正解验签只能证明 Quote 出自某个可信 TEE,但若 PCR 白名单配置错误、nonce 未核对,攻击者仍可通过重放旧 Quote 或引导到错误度量值来绕过认证。钢印是真的不等于体检合格,验章之后还要逐项核对体检指标。真实实现必须同时完成验签、度量值比对、nonce 核对、证书吊销检查四件事。

为何常见:把“签名有效”误当作“内容可信”,忽略了签名只保证来源与完整性,不保证内容的正确性。

误区用了 Intel SGX 的认证服务,Intel 就能看到或者参与我的业务计算。

正解Intel 只负责签发和验证 Enclave 的身份签名,相当于提供验信员的培训和资质认证服务,但完全不接触你的业务数据与计算逻辑。业务代码始终由你自己的 Enclave 执行,Intel 无从得知你在算什么。远程认证中 Intel 扮演的是“公证处”,而不是“业务合伙人”。

为何常见:混淆了“认证基础设施提供方”与“算法执行方”两个角色,放大了对云端厂商的隐私担忧。

面试题

Q1. TEE 远程认证要解决的核心问题是什么?

单选题 · easy

  • A.提高模型推理的运算速度
  • B.向远程验证方证明环境可信← 正确答案
  • C.对数据库进行列级加密
  • D.替代传统的 HTTPS 协议

答案:B。远程认证的核心是跨网络传递可信度,让验证方确认对方代码确实运行在可信执行环境里。选项 B 准确描述了这一目标。A 是性能问题,C 是数据加密问题,D 是传输层协议问题,都与“建立硬件级信任”无关。

Q2. 挑战响应机制中的 nonce 主要作用是什么?

单选题 · easy

  • A.防止攻击者重放旧认证记录← 正确答案
  • B.压缩 Quote 传输的数据体积
  • C.代替 AIK 完成全部签名工作
  • D.加密证明方本地的磁盘文件

答案:A。nonce 是一次性随机挑战值,证明方必须把它纳入签名内容,验证方再核对一致性,旧认证记录因 nonce 不匹配而失效。它并不承担压缩、签名主体或磁盘加密的功能,因此 A 正确。

Q3. 关于 EK 与 AIK 的关系,下列说法正确的是?

单选题 · mid

  • A.EK 用于日常认证,AIK 用于出厂证明
  • B.EK 与 AIK 之间彼此毫无关联
  • C.AIK 依托 EK 派生,便于匿名认证← 正确答案
  • D.EK 可以随意明文对外公开

答案:C。EK 是出厂背书密钥,证明硬件真实身份;AIK 由 EK 派生并用于日常认证,避免暴露唯一硬件 ID 而被追踪。C 正确。A 把两者职责颠倒了,B 忽略了派生关系,D 直接公开 EK 会带来跨服务追踪风险。

Q4. PCR 寄存器中存储的是什么内容?

单选题 · mid

  • A.代码运行产生的用户业务数据
  • B.对代码环境求出的度量哈希值← 正确答案
  • C.完整的操作系统底层镜像文件
  • D.用户明文的身份凭证与密码

答案:B。PCR 存储的是对启动代码、加载模块等环境要素计算出的哈希摘要,而不是完整镜像或业务数据。它像一张体检指标表,只记录“环境指纹”,不存储原始文件,因此 B 正确。

Q5. 验证方收到 Quote 后,第一步应该做什么?

单选题 · mid

  • A.直接信任该环境并立即放行
  • B.验证 Quote 签名的真实有效性← 正确答案
  • C.立刻上传自己的私钥给对方
  • D.跳过 nonce 直接记录到日志

答案:B。第一步必须验签,确认 Quote 确实由可信 AIK 签发,再继续比对 PCR 和 nonce。A 跳过验证等于形同虚设,C 泄露验证方私钥是严重安全错误,D 忽略 nonce 会使防重放机制失效。

Q6. “CA→平台→AIK”这条信任链的正确理解是什么?

单选题 · hard

  • A.信任从本地平台逐级传导到外部 CA
  • B.信任从根证书逐级传递到身份密钥← 正确答案
  • C.AIK 是整条链中最顶级的信任根
  • D.平台证书与 CA 证书相互独立签发

答案:B。信任链的方向是从预先信任的 CA 根出发,逐级签名直到 AIK。CA 是起点和信任锚,不是平台或 AIK。因此 B 正确,A 方向颠倒,C 混淆层级,D 忽略了平台证书必须由 CA 签发的关系。

Q7. 关于 Intel SGX 远程认证,下列说法正确的是?

单选题 · hard

  • A.必须完全依靠本地内核完成验证
  • B.依赖 Intel 证明服务来校验身份签名← 正确答案
  • C.只需验证方自己生成任意公钥即可
  • D.认证过程不需要任何度量值参与

答案:B。SGX 的 EPID/ECDSA 认证需要连接 Intel 的证明服务(如 PCCS/Attestation Service)获取或校验签名相关参数,才能确认 Enclave 身份。B 正确。A 忽略外部服务依赖,C 中的任意公钥无法与硬件绑定,D 忽略了 Quote 必须包含度量值。

Q8. 本地认证与远程认证的最大差异是什么?

单选题 · easy

  • A.远程认证强调跨设备建立可信连接← 正确答案
  • B.本地认证需要全程网络传输数据
  • C.两种认证方式在效果上完全等价
  • D.远程认证无需硬件参与即可完成

答案:A。本地认证在与本机内核交互时使用,远程认证则跨越设备边界,向外部验证方证明 TEE 可信。A 正确。B 说反了,C 忽略了远程认证的密码学与网络交互复杂度,D 违背了远程认证依赖硬件信任根的基本前提。

Q9. 一份完整的 Quote 数据通常包含哪些内容?

多选题 · mid

  • A.平台环境的 PCR 度量哈希值← 正确答案
  • B.验证方下发的随机挑战 nonce← 正确答案
  • C.证明方用户的全部历史交易账单
  • D.AIK 私钥生成的签名结果字段← 正确答案

答案:ABD。Quote 是“度量结果 + 挑战值 + 签名”的组合体:PCR 记录环境指纹,nonce 绑定本次会话,签名保证整体不可篡改。C 属于业务数据,与 Quote 约定的字段毫无关系,因此正确答案是 A、B、D。

Q10. 验证方在验证 Quote 时需要检查哪些项目?

多选题 · hard

  • A.签名字段是否由可信 AIK 签发← 正确答案
  • B.度量哈希是否与期望值完全一致← 正确答案
  • C.nonce 是否与最近下发的数值匹配← 正确答案
  • D.验签通过后无需再查证书链状态

答案:ABC。正确的验证流程是“验签 + 比对 PCR + 核对 nonce + 检查证书吊销状态”四件套。A、B、C 都是必需步骤。D 是典型误区:验签通过只代表签名有效,证书是否被吊销仍需核实,否则已泄露的 AIK 仍可能被继续使用。