简介:一份华中科技大学可信计算课程线上测试题目及答案,面向网安方向备考者、课程学习者及希望梳理可信计算知识体系的技术读者。内容按问答方式覆盖可信计算的担忧、可信平台模块与CPU的连接机制、TCG软件栈作用、消息摘要算法(MD4/MD5/SHA-1)的输入敏感与不可逆等性质、对称加密(DES/AES/RC5/Blowfish)与非对称加密(RSA/ElGamal/ECC)的特点及应用场景、公钥基础设施与证书关系、平台配置寄存器及平台状态报告方式等核心考点,并补充了信任链、动态可信性度量、可迁移密钥与不可迁移密钥等易错概念。资源为1个Word文档,约558KB,内容集中,可直接打开阅读。已有329人学习下载。借助该文档可快速建立可信计算知识框架,理清常见加密算法的适用场景,掌握远程报告与本地报告的验证思路,适合考前冲刺、复习对照和课程总结使用。
1. 先拆开这套可信计算线上测试:答案之外真正值得抄的东西
可信计算线上测试最迷惑人的地方在于:答案背得滚瓜烂熟,分数好看,合上题库后对着真实 TPM 芯片照样无从下手。我见过不少同学拿到“题目+答案”的文档,只做一件事——把正确选项标出来反复背,等题干换场景、结论换说法,立刻翻车。这套题目真正要检验的不是“哪个选项对”,而是“为什么对、换种问法还成立吗”。下面我从这套线上测试的命题脉络出发,把信任根、TPM、度量、远程证明这些核心考点拆开讲,给出每类题型的作答思路和五个易丢分的坑。适合备考的信息安全方向学生,也适合要接触可信启动、远程证明的研发工程师。
2. 可信计算的底座三件套:信任根、TPM 与度量链路
线上测试里占分最高的往往不是最后的大题,而是前面一批“看起来都在背概念”的选择题和判断题。出题人爱在这类题目里埋两样东西:一是把相似名词放一起让你分辨,比如信任根、可信根、信任链、可信启动;二是把一句正确的话改掉一两个词让它变错,比如把“度量完整性”偷换成“保证机密性”。想拿稳这部分分数,靠的不是背题目,而是把三个底座概念理顺:信任根是谁、TPM 干什么、度量链路怎么走。三者关系可以一句话概括:从信任根出发,用 TPM 做支撑,沿着启动过程逐级度量,最终把平台状态变成可以被验证的证据。下面逐个拆。
2.1 信任根为什么叫“根”:先于任何软件存在
先记住一句话:信任的传递,必须有一个不依赖其它组件来证明自己的起点,这个起点就是信任根。可信计算组织把根分成了三类角色——度量根,负责产生度量动作;存储根,负责保护度量值等敏感数据;报告根,负责把平台状态可靠地报告出去。对应到实际系统里,度量根常常由 CPU 加固件组成的 CRTM 承担,存储根和报告根则主要由 TPM 承担。理解这三类角色的分工,能直接解决选择题里“信任根可以由哪些组件承担”的考法。
为什么考试里反复问“能不能把操作系统当作信任根”?因为操作系统恰恰是被度量的对象,它的完整性要靠上游环节来验证。一旦把被度量对象当成根,就出现循环论证:谁来证明 OS 自己是诚实的?同理,一个纯软件实现的“可信根”在理论上也不是根,因为软件可被篡改,它不能给自己提供可信基础。判断一个组件能否当信任根,我一般用两个特征卡:它是否先于被度量对象存在,它是否具备物理或固件级的篡改防护。两个条件都满足,试卷里才有资格做正确选项。
还有一类常见的判断题:信任根一定是一块独立芯片。这个说法同样容易踩坑。TPM 是典型的信任根载体,但度量根可能由 CPU 微码和固件共同实现,也就是说信任根可能横跨多个硬件组件,不是一个“一块芯片”能概括的。答题时看到“一定”“只能”这类绝对词,先打个问号再往下读。这类题表面考概念,实际考的是你对“根”这个词的边界理解。
2.2 TPM:一颗专职做密码运算的协处理器
TPM 之所以重要,是因为它把密钥和度量值放进了普通软件碰不到的一块物理区域。线上测试不要求背 TPM 的全部功能,但下面几个能力几乎是年年出现:受保护的存储(PCR 寄存器、NV 索引)、密钥的生成与管理、签名与随机数生成、平台状态报告 quote。记住 TPM 是一颗密码协处理器,它的本职是提供硬件级的信任锚点,而不是当一个加密硬盘。看到选项里写“TPM 用于加速磁盘加密”这种描述,方向就偏了,TPM 能做加密相关运算,但它的定位是信任锚,不是性能加速器。
这部分容易混淆的是三类密钥。EK 背书密钥每台 TPM 唯一,出厂时生成,用于证明“我是一颗真实的 TPM”,但不能被导出;SRK 存储根密钥管着存储层级,TPM 内部的其它密钥都直接或间接由它保护;AK 认证密钥是给远程证明签名用的,可以创建多个以避免被追踪。试卷里常把这三者放在一个题里让你选“远程证明签名用哪个密钥”,答案是 AK,不是 EK。用 EK 签名的最大问题是:EK 全局唯一,等于每次证明都在亮身份证,隐私性完全没法保障。
TPM 知识里还有一个隐藏考点:PCR 的操作方式。很多同学把 PCR 理解成普通寄存器,认为可以直接往里面写数据。实际 TPM 里 PCR 只能被 Reset 和 Extend,扩展公式是 PCR_new = H(PCR_old || measurement),把新度量值拼上旧值再哈希。这样设计是为了让历史不可篡改——攻击者哪怕在某个环节塞入了恶意代码,后面所有扩展出来的 PCR 值都会跟着变化,白名单比对时立刻暴露。记住“只扩展、不覆盖”这六个字,判断题就能拿下一半。
2.3 度量链路:从 BIOS 到操作系统的“体检报告”
第三块内容是可信度量启动。常见的 SRTM 静态度量信任根流程是:从 CRTM 开始,依次度量 BIOS 或 UEFI 固件、引导加载程序、操作系统内核,每一步都先度量、再执行、把结果扩展进 PCR。线上测试的排序题每年都有人在这里丢分,原因不是不知道流程,而是把“度量”和“执行”的顺序搞反。原则只有一条:上游环节先度量下游环节,度量通过后把控制权交出去,任何一步都不能边执行边度量。
| 信任链环节 | 主要度量对象 | 度量结果去向 |
|---|---|---|
| CRTM 到固件 | BIOS/UEFI 固件代码与配置 | 平台固件区 PCR |
| 引导加载程序 | Bootloader 自身与配置 | 引导区 PCR |
| 操作系统 | 内核镜像与 initramfs | OS 区 PCR |
| 运行时组件 | 可执行文件、动态库 | 运行时 PCR |
这张表的用途是应对“度量对象和 PCR 分组”的匹配题。线上测试一般只考分组,不考具体编号,因为不同厂商在 PCR 编号约定上存在差异,命题老师不会把题出死。你只需要记住趋势:越接近硬件,PCR 编号越小;越接近应用,编号越大。做题时看到“哪个度量结果放进平台固件 PCR”,直接按分组对应关系选。
PCR 扩展公式的题也爱出。要记住扩展不是替换,旧值永远参与下一次哈希。有的题目会给出一个伪公式让你判断,比如 PCR[i] = H(new_measurement),这是错的,少了旧值拼接。为什么不能替换?因为替换意味着攻击者只要覆盖当前值就能伪造干净状态,而扩展让所有历史都体现在最终值里,伪造需要重算整条链,这在密码学上不可行。这套逻辑本身就是应用题的答题素材。
注意:不同启动方案对 PCR 编号的使用有差异,答具体编号题时以题目给出的规范为准,不要用某一家厂商的习惯去套。
3. 三类必考题型的答题思路:概念辨析、流程排序、场景应用
知识底座打牢之后,下一步是熟悉线上测试的题型套路。可信计算的题目格式翻来覆去就三类:概念辨析题、流程排序题、场景应用题。每一类的考点重点不同,答题动作也不同。概念题考定义边界,排序题考时序关系,应用题考机制匹配。下面按类拆解,每类给出一套可复用的答题路径。
3.1 概念辨析题:选项里的关键词才是突破口
概念辨析题在试卷里以选择和判断为主。拿到题先别急着读选项,先看题干里的核心名词。可信计算语境下,“可信”指的是行为可预期、且这种预期可以被技术手段验证,而不是“绝对安全”。很常见的一道判断是:“可信计算通过硬件度量保证系统绝对不会被病毒感染。”这个说法是错的。原因在于,可信计算让平台状态变得可验证、可报告,攻击者制造出预期外状态时会被发现,但“被发现”和“永不感染”是两回事。这题错在“绝对”和“不被感染”两个词。
答题动作可以固化成三步。第一步,找题干里的绝对词,包括“一定、所有、任何、必然”;第二步,找机制词,包括度量、验证、签名、PCR、扩展;第三步,拿机制词去比对“行为可预期”的定义。只要题干把“可预期”偷换成“安全”“免疫”“加密”,不管句子读起来多顺,先判错。多选题里也常用这个手法,比如“可信计算能做什么”的选项里出现“保证文件机密性”,就需要看题目有没有限定在可信计算体系内;在可信框架内,TPM 有加密能力,但体系核心是度量与验证,选项描述如果把它当成主要目标,基本就是干扰项。
做题时间上,概念辨析题建议每道控制在 30 到 60 秒。超过一分钟还在纠结,说明你对定义边界不熟,先凭第一轮排除法选一个,做完整套再回来复查。我见过不少同学在这种题上死磕,结果后面的大题时间不够,得不偿失。记住一个规律:出题人在概念题里设置错误选项时,最常用的手法是“正确机制 + 错误目标”,只要你盯住目标词,就能快速识别。
3.2 流程排序题:把启动和证明过程排成时间线
流程排序题主要考两类:可信启动的链路顺序,以及远程证明的交互顺序。启动链路我们已经讲过,口诀是“先度量后执行,谁上游谁先动”。远程证明的顺序则要复杂一点,因为涉及两方交互。标准流程是:验证方生成随机 nonce 发给证明方;证明方读取当前 PCR 值;用 AK 对 PCR 值和 nonce 一起签名,生成 quote;验证方收到后校验签名、检查 nonce、比对 PCR 白名单。
这道排序题最大的坑是:把“读取 PCR”放在“收到 nonce”之前。有些同学觉得读取 PCR 是本地操作,什么时候做都一样。实际上,如果证明方先读 PCR、后接 nonce,签名时可以把 nonce 拼进去,但 quote 的生成时刻和 PCR 读取时刻之间就出现了时间差,攻击者可以利用这个缝隙替换平台状态。更关键的是一致性问题:没有 nonce 约束的 quote 可以被重放,验证方拿到旧的合法 quote 会误以为平台刚刚通过验证。所以 nonce 必须先到,再读 PCR,再签名。
做题时可以把每个步骤简化成一个动词短句,比如“发随机数”“读 PCR”“签 quote”“验 quote”,然后按因果关系排列。谁先谁后的判断标准是:后一个动作的输入是否依赖前一个动作的输出。读 PCR 不需要 nonce 作为输入,签名需要,所以签名在最后;比对 PCR 白名单需要 quote 里的 PCR 值,所以校验在整个流程的收尾。这个因果链捋清楚,排序题不会再丢分。
3.3 场景应用题:攻击场景里你要选哪个对策
场景应用题一般给一个具体威胁,让你选最直接的防护机制。典型问法:某系统要防止攻击者在运行中向内核注入恶意代码,以下哪个机制最直接?选项里有全盘加密、杀毒软件、内核度量加远程证明、防火墙。正确答案是内核度量加远程证明。威胁对象是内核完整性,全盘加密防的是静态数据被偷看,杀毒软件靠特征库识别已知样本,防火墙管网络边界,只有度量加证明能让验证方发现内核被改动。
做这类题我习惯用“三问法”。第一问,威胁动的是什么:完整性、机密性还是可用性;第二问,哪个机制直接作用在这个对象上:度量、签名、PCR 管完整性,加密管机密性,冗余管可用性;第三问,这个机制有没有被放大用途,题目经常放一个“TPM 加密所有文件”的选项来诱捕过度选型的人。三问问完,答案基本就锁定了。如果两个选项看起来都合理,选那个“作用链路更短”的——直接对完整性做度量的,优于通过日志告警间接发现的。
| 题型 | 典型问法 | 答题动作 | 建议耗时 |
|---|---|---|---|
| 概念辨析 | 下列说法正确的是 / 判断对错 | 找绝对词,比对“可预期”定义 | 30-60 秒 |
| 流程排序 | 远程证明的正确顺序是 | 按因果依赖重排,关注 nonce 位置 | 60-90 秒 |
| 场景应用 | 针对某威胁最直接的措施是 | 三问法锁定机制与对象 | 60-90 秒 |
4. 三个高频考点深挖:远程证明、密钥层级与 PCR 参数
选择题能做对不等于大题能得分。线上测试后面的简答和应用题,几乎都集中在三个方向:远程证明的完整过程、密钥层级的分工、PCR 参数的实际配置。这三个方向共同构成了可信计算从理论到落地的主干。下面每个方向都往深挖一层,附上可直接参考的验证命令和参数建议。
4.1 远程证明的完整协议逻辑:nonce、quote 与验证方视角
远程证明的目标是让验证方确信:这个平台是我的、它正处于我想要的状态。拆开看是三个子问题。身份问题靠 AK 的签名能力解决,证明方持有一把由 TPM 生成的 AK,验证方校验签名就从密码学上确认数据来自这颗 TPM;状态问题靠 PCR 值解决,PCR 里存的是平台度量摘要,验证方拿它和基线白名单比对;新鲜问题靠 nonce 解决,防止攻击者把过去的合法 quote 重放一遍。三个子问题逐个扣分,答案才完整。
答题话术上,简答题按“挑战-响应-验证”三段写:验证方生成 nonce 作为挑战;证明方读取 PCR 并用 AK 对 PCR 加 nonce 签名,返回 quote 作为响应;验证方验签、查 nonce、比对白名单完成验证。踩分点有两个,一个是 nonce 防重放,一个是 PCR 白名单防状态伪造。漏掉任何一个,阅卷都会扣掉一半分。
如果想在本地把这套逻辑跑通,可以装 tpm2-tools 后用软件 TPM 模拟实验环境。下面是一组最小命令序列,读取当前 PCR 值并生成一张带 nonce 的 quote:
# 读取指定 PCR 的当前度量值 tpm2_pcrread sha256:0 # 生成一个 32 字节的 nonce 文件,实际场景中应由验证方生成后下发 dd if=/dev/urandom of=nonce.bin bs=32 count=1 # 用 AK 对当前 PCR 值和 nonce 一起签名,生成 quote 与签名文件 tpm2_quote -k 0x81000001 -q nonce.bin -m quote.bin -s quote.sig -g sha256第一条命令读取 PCR 摘要,用来确认平台当前状态;第二条命令生成 nonce 文件,模拟验证方的挑战;第三条命令的 -k 指定 AK 的持久化句柄,-q 传入 nonce,-m 输出 quote 消息,-s 输出签名,-g 指定哈希算法。quote.bin 里同时包含 PCR 摘要和 nonce 的关联信息,验证方拆开后先验签名,再比对 PCR,最后确认 nonce 一致。没有物理 TPM 的机器上,用软件 TPM 模拟也能跑这套命令,输出格式与真实硬件基本一致。
注意:tpm2-tools 不同版本的参数略有差异,实际使用时先执行 tpm2_quote --help 确认参数名,避免命令格式不一致报错。
4.2 密钥层级与授权模型:EK、SRK、AK 的分工
可信计算的密钥体系经常被简化为“TPM 保护密钥”,但线上测试的大题会考到具体分工。EK 是出厂固化、全局唯一的身份根,用来向平台之外的实体证明“这是颗真 TPM”,它不做日常签名;SRK 是存储根,负责保护存储层级里的其它密钥;AK 是认证密钥,专门给远程证明签名,且可以生成多把,防止被跟踪。把三把密钥的用途和导出属性放进一张表,复习效率会高很多:
| 密钥 | 生成时机 | 主要用途 | 能否导出 | 考试陷阱 |
|---|---|---|---|---|
| EK | 出厂预置 | 身份背书 | 不可导出 | 误选为远程证明签名密钥 |
| SRK | 平台初始化 | 保护存储层级 | 不可导出 | 误认为参与业务签名 |
| AK | 按需生成 | 远程证明签名 | 不可导出 | 忽略可创建多把的隐私作用 |
再往深一层,TPM 2.0 的密钥还有固定属性和可迁移属性的区别。固定属性意味着私钥永远不离开 TPM,即使父密钥配合也无法迁移;可迁移密钥则可以在授权策略允许下导出到另一颗 TPM。所以判断题“TPM 里的密钥一律无法导出”是错的,正确说法是“被标记为 fixed 的密钥无法导出,可迁移密钥需要满足授权策略才能迁移”。这个边界在线上测试里经常以绝对词形式出现,记住“一律”这类词出现时先怀疑。
父子密钥关系也是常考点。TPM 里子密钥的私有数据会被父密钥加密后生成一个 blob,这个 blob 可以存在硬盘上,使用时再加载进 TPM 解密。理解这一点就能回答“TPM 密钥只能存在芯片里吗”这个问题——密钥的受保护形态可以在芯片外,但私钥的使用和运算必须回到芯片内。题目如果表述为“私钥被导出到硬盘明文存储”,这是错的;表述为“密钥 blob 可以存储在外部介质”,这才是对的。
4.3 PCR 编号与平台配置参数的实际选择
线上测试并不要求背下所有 PCR 编号,但遇到配置参数题时需要掌握分组规律。平台固件区一般占用 0 到 7,引导加载器和内核相关通常在 8 到 9,10 到 15 留给操作系统运行时,16 到 23 可以给应用、虚拟化或动态信任根使用。考题如果给出一组编号让判断属于哪个环节,按“硬件越近编号越小”的规律推导即可,不需要死记硬背。
实际配置中最常出问题的是 PCR bank 的选择。新平台通常同时维护 SHA-1 和 SHA-256 两套 bank,度量同一个对象时会在两个 bank 里各扩展一次。线上测试如果问“为什么 PCR 注册表里同一编号有两个值”,答案就是哈希算法不同,PCR 寄存器按算法分支产生不同摘要。配置时优先选 SHA-256,但要注意验证方和服务端的白名单必须用同一套算法生成,否则远程证明永远比对失败,这是最常见的落地翻车点。
参数建议集中在三点:哈希算法优先 sha256,PCR 选择按启动环节分别纳入,白名单每次发版后重新采集。尤其最后一点,很多团队第一次部署远程证明时把白名单烧死在配置里,之后每次更新内核或引导加载器都会导致证明失败,只能临时把白名单改成不校验才恢复业务。正确的做法是把白名单采集做成发布流程的一环,每次版本更新自动重新采样并签名,而不是手维护一份静态清单。
5. 线上测试避坑:五个反复出现的理解误区和排查方法
这一章专门用来排雷。下面五个误区是我在备考和工作里见过最多、也最容易被线上测试命中的理解偏差。每条按“现象 → 原因 → 解决”的顺序写,你可以对照自己的错题看看中了哪几条。
5.1 误区一:把“可信计算”当成“绝对安全”
现象是判断题里出现“可信计算能保证系统不被攻击”时,不少同学会选对,因为觉得可信计算功能很强大。原因是把“可信”和“安全”划了等号,忽略了可信的准确定义是行为可预期、可验证。解决方法是看到题干里的“保证、杜绝、免疫”这类词就判错,可信计算能提高攻击门槛、暴露异常状态,但不承诺绝对安全。记住一个判断口诀:可信是对行为的预期,安全是对威胁的防御,两者方向不同。
5.2 误区二:以为 PCR 里存的是被度量对象本身
现象是选择题问 PCR 中保存的内容时,选了“驱动程序的二进制文件”或“引导加载程序的完整镜像”。原因是把平台配置寄存器当成了普通存储区,以为度量就是把文件复制进去。解决方法是记住 PCR 只保存度量摘要,也就是哈希值,完整镜像在执行前会被哈希计算,然后仅把摘要扩展进 PCR。题目只要出现“PCR 保存原始数据”这个说法,不管哪个寄存器,都是错的。扩展公式里 PCR_new = H(PCR_old || measurement) 这个测量输入也是摘要计算前的原文,但存进寄存器的永远是摘要结果。
5.3 误区三:远程证明是在证明“我是谁”
现象是简答题里写“远程证明就是验证对方身份”,然后把重点全放在 AK 的签名上。原因是混淆了身份证明和状态证明两个层次。解决方法是明确远程证明的核心是平台状态,身份校验只是前提——验证方先确认 quote 来自合法 TPM,再比对 PCR 白名单确认平台状态符合预期。答题时按“身份 + 状态 + 新鲜性”三段写,缺一不可。方向错了,写得再多也只是在回答一个伪问题。
5.4 误区四:认为 TPM 里的密钥绝对无法迁移
现象是判断题“TPM 保护的密钥不能迁移到其它设备”被选为正确。原因是把“受保护”理解成了“物理绑定”。解决方法是区分密钥属性:固定密钥确实不可迁移,但 TPM 2.0 支持可迁移密钥,在授权策略允许的情况下可以导出并导入另一颗 TPM。题目里出现“所有、一律、任何”加“不能迁移”,基本就是错的。真正可靠的表述是“被标记为 fixed 的密钥私钥不会以明文形式离开 TPM”。
5.5 误区五:以为可信度量只在开机时做一次
现象是判断“可信计算的度量发生在系统启动阶段,运行期间不再进行”为正确。原因是只学了 SRTM 静态度量启动,没接触运行时度量。解决方法是把度量体系拆成两部分:启动阶段的静态度量负责建立一条可信的启动链;运行阶段还有动态信任根机制和 Linux 下的 IMA 完整性度量架构,会持续对可执行文件、动态库进行度量并扩展进对应 PCR。题目没限定“启动”,只说“度量发生”时,默认包含运行时度量,不能写成一次性动作。
6. 把错题重写成新题:一套可复用的可信计算复盘法
拿到题目和答案之后,真正能拉开差距的是复盘方式。我习惯用三遍复盘法消化一套题:第一遍只对答案,把错题标出来;第二遍给每道错题归因,分成“概念理解错、流程顺序错、场景匹配错”三类;第三遍最关键——把正确选项里的关键词换掉,亲手改造成一道新题。比如原来正确选项是“远程证明使用 AK 签名”,把“AK”换成“EK”,再问自己一次为什么错。能说清楚“换掉之后为什么错”,这个考点才算真正吸收。
做完三遍复盘后,最好再花十分钟做个本地验证。可信计算这门课有个好处,大部分核心概念都能用命令落地:没有物理 TPM,就用软件 TPM 模拟一个环境,把 PCR 读取、扩展、quote 签名跑一遍。我见过太多人把 nonce 的作用背成“防止签名被破解”,实际动手做一次远程证明就会明白,nonce 防的是重放,跟破解签名毫无关系。抽象概念一旦落到具体命令的输出上,就很难再忘掉。
我个人的教训是:有一年线上测试,我把远程证明的 nonce 答成了“保证传输机密性”,被扣了整道大题的分。后来自己在实验环境里跑了一次完整 quote 流程,看到同一个 nonce 文件出现两次——一次在本地挑战,一次在验证方校验——才彻底理解它存在的意义。从那以后,我养成了习惯:每学一个新的可信计算概念,就去找一条能验证它的命令或配置项,找不到就亲手搭个最小实验。这个习惯帮我避开了不少纸上谈兵的坑。希望帮到你。
本文还有配套的精品资源,点击获取