可信计算与TPM考点解析:PCR扩展、密钥迁移与远程证明
简介面向学习可信计算与网络空间安全课程、准备线上测试的高校学生这份华中科技大学可信计算测试题目及答案可作为复习与自测材料也便于教师参考命题范围。文档围绕可信计算的理论担忧、TPM芯片形态与软硬件交互、信任链和动态可信度量展开并整理Hash算法的性质及MD4、MD5、SHA-1对比以及DES、AES、RC5、Blowfish与RSA、ElGamal、ECC等对称、非对称算法的特点和应用场景。题目还覆盖PKI与证书、公私密钥对关系、PCR数量、TPM远程与本地报告、可迁移密钥等问答读者可据此梳理知识框架、核对答题要点并定位薄弱环节。资源包为1个docx文件约558KB篇幅紧凑便于打印和检索已有333人学习。对需要快速把握华科可信计算测试范围与答题思路的读者具有较明确的复习参考价值。1. 从「给 TPM 加对称加密引擎并不能提升安全性」这道反直觉题说起可信计算线上测试到底考什么可信计算线上测试的题面通常不长但每一问都卡在机制细节上PCR 什么时候复位、扩展公式怎么写、EK 和 SRK 谁能迁移、度量日志为什么不用防篡改。它不考你背了多少缩写考的是能不能把信任链这条主线讲圆——从 CRTM 起一级度量一级度量值扩进 PCR再用 AIK 签名做远程证明。拿分点集中在三处公式写对、密钥的迁移属性判断不混、攻击与对策成对出现。这套题适合已经学过密码学基础、正在准备网安方向课程测的人先按考点过一遍再用真题自测最后照着失分点清单改答案。2. 密码学底座Hash 三性质、四组对称算法与三类非对称算法的配对题这一章的题看着像送分实际最容易丢细节分。题目问法通常是「常见的 Hash 算法有哪些、性质和特点是什么」「对称和非对称各有哪些、特色和应用场景」答题时只写算法名而不写分组长度、输出长度、安全假设基本拿不到满分。更隐蔽的一类是「为什么 TPM 增加对称加密算法的支持不会给 PC 系统提供更高的安全性」它考的不是算法本身而是你对威胁模型的理解。2.1 Hash 算法MD4、MD5、SHA-1 的迭代关系与输出长度MD4 是 1990 年设计的面向 32 位字长的处理器用高速软件实现核心是基于 32 位操作数的位操作。MD5 是 1991 年对 MD4 的改进版输入仍按 512 位分组输出是 4 个 32 位字的级联结构跟 MD4 一致但更复杂、速度略慢抗分析和抗差分表现更好。SHA-1 面向长度小于 2^64 的输入产生 160bit 散列值抗穷举能力更强设计原理和 MD4 同源。这三者的关系经常被考成一句话「MD5 是在 MD4 基础上加复杂度SHA-1 是在 MD4 原理上换输出长度」。答题时把「分组长度、输出长度、设计来源、强度定位」四件事写全比单独说「MD5 不安全」有用得多。SHA-1 输出 160bit 这个数字要记牢后面 PCR 扩展、AIK 签名都会反复出现。Hash 的三条性质是必背项输入敏感原始输入任何变化都会让新 Hash 值出现很大变化不可逆给定明文和算法能算出 Hash给定 Hash 很难逆推明文冲突避免很难找到两段内容不同而 Hash 一致的明文。这三条不是孤立的定义后面解释「为什么 PCR-Extend 能抵御攻击」「为什么日志不用防篡改」都要回来用单向性断了攻击者倒推初始状态的路抗碰撞性让篡改日志和改写 PCR 难以同时成立。2.2 对称加密四选一DES、AES、RC5、Blowfish 的场景问法对称算法的题流行给一张表让你填「特点 应用场景」评分点其实在「密钥长度、分组长度、是否可变参数」这些硬指标上。算法关键参数特点典型场景DES56 位密钥速度较快加密大量数据AES替代 DESRijndael 加密法速度快、安全级别高加密大量数据RC5分组、密钥、轮数均可变以简洁著称的对称分组算法参数可变的分组密码场景Blowfish64 位分组、密钥长度可变加密快、紧凑、可变密钥、可免费使用暂未发现有效破解加密 64 比特长度字符串答题时容易犯的错是只写「DES 不安全、AES 安全」。DES 的 56 位密钥是硬指标AES 的定位是「用来替代 DES」RC5 的关键词是「参数可变」Blowfish 的关键词是「64 位分组 可变密钥 未发现有效破解」。把关键词对齐阅卷时一眼能看到得分点。真正拉开差距的是那道反直觉题为什么 TPM 增加对称加密算法的支持不会给 PC 系统提供更高的安全性标准答法要分两种情况。系统安全时靠软件就能做对称加密硬件里再塞一个对称引擎并不会改变安全边界系统不安全时攻击者感兴趣的不是密钥而是明文密钥保护得再好也挡不住明文被读走。所以加对称加密既不改善前一种情况的安全性也解决不了后一种情况的威胁。这类题面试官最想听的是「威胁模型有没有变」而不是「算法强不强」。2.3 非对称三选一RSA、ElGamal、ECC 的安全假设非对称算法的评分点和对称不一样重点在「安全性依赖什么数学难题」。RSA 的可靠性取决于对极大整数做因数分解的难度至今没有可靠的攻击方式密钥足够长时加密信息实际上不可破典型场景是数字签名。ElGamal 基于迪菲-赫尔曼密钥交换安全性依赖有限域上离散对数难题用于公开密钥加密和电子商业。ECC 基于椭圆曲线数学是替代 RSA 的强有力竞争者160 位 ECC 与 1024 位 RSA、DSA 安全强度相当计算量小、处理速度快私钥处理速度远快于 RSA密钥尺寸和系统参数小存储占用小带宽要求低应用前景广。这里最常见的失分是把「ECC 更安全」当成答案。安全强度相当不等于无条件更强题干问的是「为什么 ECC 适合资源受限场景」你要答的是计算量、存储、带宽这三条而不是重复「更安全」。另一类失分是把 ElGamal 的数学基础写成「大整数分解」这两者经常被混记法是RSA 分解整数ElGamal 求离散对数ECC 解椭圆曲线离散对数。2.4 PKI为什么需要证书公私钥与身份怎么绑定PKI 的作用是证明公钥和身份的对应关系在这个机制保障下才能进行可信赖的网络通信它也是信息安全技术的核心、电子商务的关键和基础技术。证书和公私钥对的关系可以一句话说清证书里包含公钥信息可以用来验证私钥产生的签名。答题时建议按「没有 PKI 会怎样 → 证书里有什么 → 验证链怎么走」三段写。没有 PKI 时公钥可以在传输中被替换通信双方无法确认拿到的公钥属于谁中间人攻击就成立证书把主体身份、公钥和签发机构的签名绑在一起验证方先验签发者签名再确认证书没过期、没被吊销最后用证书里的公钥验数据签名。这条链路在后面讲 AIK 证书验证时会原样复用远程证明那一步「与第三方 CA 交流验证 AIK 证书」就是 PKI 的直接应用。面试里如果被追问「为什么不能只靠公私钥对」答「公私钥对解决的是加密和签名解决不了身份归属PKI 补的正是归属这一环」就够了不要展开到具体产品实现。3. TPM 密钥体系五类密钥的用途、迁移性与一条加载链密钥题是这套题库里出题密度最高的部分EK、AIK、SRK、Sealing Key、Binding Key 五个名词轮着考问法高度固定用途是什么、可不可以迁移、为什么。很多人背了用途却栽在迁移性上原因是没抓住判断依据——私钥有没有离开 TPM。抓住这一条五类密钥的迁移性判断可以一次推完不用死记。3.1 EK、AIK、SRK三个「唯一」与各自边界EK 是签署密钥也叫背书密钥是一个 TPM 平台的不可迁移解密密钥2048bit 的 RSA 密钥对在平台生产过程中生成代表每个平台的真实身份每个平台唯一。它的用途有两块确定平台所有者时解密所有者的授权数据以及解密与生成 AIK 相关的数据。要注意 EK 从不用作数据加密和签名它的主要功能是生成 AIK 和建立 TPM 平台的所有者之后由所有者生成 SRK用 SRK 加密、存储其他密钥。AIK 是认证身份密钥不可迁移专用于对 TPM 产生的数据TPM 功能、PCR 寄存器的值等签名用来证明平台的身份和环境配置凡是经过 AIK 签名的实体都表明已经过 TPM 处理。每个用户可以拥有多个 AIK每个 AIK 的生成都需要可信第三方的支持。这句话是远程证明题的伏笔挑战者最后要和第三方 CA 验证 AIK 证书就是因为 AIK 的签发有第三方参与。SRK 是存储根密钥是存储密钥的一个特例整个系统拥有一个最高权限的存储密钥也就是存储根密钥。它在每个用户创建时生成管理该用户的所有数据即存储可信根RTS一个 TPM 仅存在唯一一个所有其他密钥都在它保护之下。这里有个容易答反的推理EK 用于签名而不用于加密所以没有密钥能用于加密 SRK而 SRK 又需要保护因此 SRK 必须存在 TPM 内部不以明文或密文形式离开 TPM属于不可迁移密钥。三者的分工可以记成一句话EK 证明「这是哪台机器」AIK 证明「这台机器现在是什么状态」SRK 保护「这台机器上的密钥树」。3.2 Sealing Key 与 Binding Key绑定 PCR 还是绑定平台Sealing Key 是密封密钥。内置 TPM 的计算机可以创建一个密钥这个密钥不仅被绑定还被连接到特定硬件或软件条件。首次创建密封密钥时TPM 会记录配置值和文件哈希的快照只有在当前系统值与快照中的值相匹配时才能解封或释放。它的用途是保护秘密信息属于不可迁移密钥。Binding Key 是绑定密钥用于在一个平台中加密小规模数据如对称密钥然后在另一个 TPM 平台上解密。由于使用平台特有的密钥加密所以与该平台绑定用法和传统非对称密钥加密相同。它的用途是发放到其他平台的公钥用于存储单个对称密钥或多个对称密钥其他平台用它加密要传输的内容方便密钥迁移。这两者的区别几乎每次都以选择题或简答题出现Sealing 绑的是「状态」PCR 值不匹配就解不开Binding 绑的是「平台」靠平台特有密钥实现跨平台传递。迁移性判断也不同Sealing 是不可迁移密钥Binding 因为要在另一个平台解密按「私钥是否离开 TPM」的口径它属于可迁移密钥这一类。答题时把「绑定对象」和「迁移性」分开写两行就能拿满。3.3 可迁移与不可迁移单向转换的判断依据可迁移与不可迁移都是密钥的属性。可迁移密钥不局限于某个特定平台可以由平台用户控制在平台之间迁移不可迁移密钥则永久与某个指定平台关联。不可迁移密钥能够用来加密保护可迁移密钥反之不行。不可迁移密钥安全性更高理由有两条它全部由 TPM 内部产生从产生到销毁的整个周期里私钥部分都不会离开 TPM除非被转化为可迁移密钥它还可以被 TPM 签名向用户证明自己的不可迁移属性从另一个角度证明了安全性。这两条要连着写只写「不离开 TPM」会丢一半分。转换方向也是常考点不可以相互转换由于安全性等级上不可迁移密钥高于可迁移密钥所以只能由不可迁移密钥单向转化为可迁移密钥。反过来的说法一定是错的遇到「可迁移密钥能否转成不可迁移密钥」直接判否理由就是安全性不能被「升级」出来。3.4 密钥加载过程从 SRK 一路解到签名密钥自密钥的使用过程是这样的从顶端密钥通常是 SRK开始依次加载各层密钥包括迁移和不可迁移密钥以及签名和绑定密钥等直到所有密钥加载完成。题目常给一条具体任务比如「将签名密钥加载到 TPM 中用于签名操作建立到 SRK 的整个密钥链」标准三步是使用私有的 SRK 解密存储密钥 #1 的私有密钥使用存储密钥 #1 解密存储密钥 #2 的私钥使用存储密钥 #2 解密签名密钥的私钥。答题要点在于「用上一层的私钥解下一层的私钥」顺序不能反也不能跳过中间层直接说「用 SRK 解签名密钥」。如果题目问「使用子密钥有什么前提」答案是使用子密钥要父密钥的授权使用前先加载加载可以绑定 PCR 或绑定口令。这三条经常被拆成三个小问逐条写清即可。密钥参数部分要记住「三种参数、七种类型」通用信息包括密钥类型、密钥算法和授权秘密特殊信息包括密钥长度和密钥数据密钥属性包括移植属性和 PCR 值。七种密钥类型不需要在简答题里全部列名但被问到「TPM 密钥有哪几种参数」时必须按这三类回答不能把参数和类型混成一锅。3.5 PCR数量、初值与扩展公式PCR 里存储的是平台状态信息的 SHA-1 散列值所以 PCR 的值能够代表机器的运行状态。数量上TCG1.1 规范要求至少有 16 个TCG1.2 规范又额外引进了 8 个用于实现动态可信度量这两组数字要分开记经常被合成一问答「TPM1.0 和 1.2 分别有多少 PCR」。PCR-Reset 和 PCR-Extend 的操作主体与时机是完全不同的两问。只有在机器重新启动或断电时才会执行 PCR-Reset任何具有管理员权限的人在系统运行过程中都能执行 PCR-Extend。扩展操作的公式必须写全PCR[i] SHA-1(PCR[i] || newMeasurement)为什么 PCR-Extend 能抵御攻击答题要答出两层。第一层是链式覆盖扩展操作让每一次系统状态的异常或改变都体现在其后的度量序列里攻击者的攻击痕迹难以消除攻击失去隐匿性。第二层是单向性由于 hash 函数具有单向性攻击者无法推断最初的状态也就消灭了「得知最初状态后不断后推伪造状态」的可能。只写「因为用了 hash」太单薄把「痕迹留在后续序列」和「无法倒推初值」分开说才算答到位。3.6 远程证明与本地报告两条验证路径的答法差异远程报告的流程可以拆成五步挑战者向配备 TPM 的客户端请求一次摘要客户端使用 AIK 对要求的 PCR 和 nonce 进行数字签名客户端把已签名的摘要和 AIK 证书一起传给挑战者挑战者验证摘要数据块的签名和 nonce然后与第三方 CA 交流验证 AIK 证书最后挑战者对比 PCR 摘要值是否与期望值相符基于客户端状态决定下一步动作。最关键的一步是「挑战者怎么算出期望值」读取度量日志 SML其中包含每次度量得到的度量值模仿 PCR 扩展操作按扩展的顺序对度量值执行扩展操作得到期望的 PCR 值。如果期望值和客户端返回值相等就能证实客户端的环境配置值得信任。这一步经常被简写成「挑战者比对 PCR」漏了 SML 重算分数直接掉一档。本地报告的前提不一样当需要本地报告时意味着本地机器可能是不可信的所以要借助 TPM 本身的机制完成本地安全报告。用户要求 TPM 对一条绑定到 PCR 值的机密信息执行 Unseal 操作如果这条被 Seal 过的机密信息能够被释放说明相应 PCR 值符合期望进而说明启动过程安全。正常启动后要销毁秘密信息再扩展 PCR 改变机器状态确保后来者无法 unseal。Seal 保护数据的机制可以用一个公式组说明设 M 是信息K 是对称密钥V 是某组 PCR 的值TPM 的一对密钥为 KPUB-S 和 KPRI-S。密封时先用 K 对 M 加密得到 K{M}再用 KPUB-S 对 V 和 K 加密得到 KPUB-S{V,K}。想取回 M 必须先拿到 K这就要 TPM 用 KPRI-S 解密并检查当前 PCR 组的值是否等于 V相等才提供 K。所以密封的本质是把信息 M 与 TPM 的一个状态关联起来当且仅当密封时和解密封时的 TPM 状态相同解封才能成功。下面这段 Python 模拟的是 PCR 扩展和 SML 重算的一致性检查考试里写不出代码没关系但把这段逻辑读懂远程证明那道题就能答出「为什么篡改日志会被发现」import hashlib def extend(pcr_value: bytes, measurement: bytes) - bytes: # PCR 扩展旧值参与拼接不能直接用新度量值覆盖 return hashlib.sha1(pcr_value measurement).digest() def replay_sml(initial_pcr: bytes, sml: list[bytes]) - bytes: # 挑战者按扩展顺序重放度量日志算出期望 PCR 值 pcr initial_pcr for m in sml: pcr extend(pcr, m) return pcr initial b\x00 * 20 # TPM 1.2 中 SHA-1 PCR 的初值20 字节 sml [bcrtm, bbios, bbootloader, bkernel] expected replay_sml(initial, sml) # 攻击者篡改日志中的 bootloader 条目 tampered [bcrtm, bbios, bevil, bkernel] assert replay_sml(initial, tampered) ! expected # 重算结果必然不一致这段代码对应的就是远程证明的验证逻辑。extend里旧值和新度量值拼接后再做 SHA-1保证了顺序敏感和链式依赖replay_sml按 SML 的记录顺序重放任何一条被替换最后的摘要都对不上。参数上要注意初值长度必须和摘要长度一致SHA-1 是 20 字节实际考试写公式时写成PCR[i]SHA-1(PCR[i]||newMeasurement)即可代码只是帮你把「为什么篡改会被发现」讲透。4. 信任链与动态度量CRTM、日志、静态根四问题与 SKINIT/TXT这一章是整份题库的主干也是简答题最容易写散的地方。信任链的题看似在问流程实质在问「信任从哪里开始、传递时损耗怎么控制、被攻击时哪一环先塌」。答题时把「先度量、再执行」这条原则放在开头再按启动顺序往下推比一上来罗列组件要清楚得多。4.1 信任链的产生过程先度量再执行根据信任传递机制在信任当前某一环节的前提下由该环节去评估下一个环节的安全性确定下一环节可信之后再将控制权转交给它然后依次向后推进。整个启动序列都遵循「先度量再执行」的原则当前阶段的代码负责度量下一阶段即将要执行的代码再把度量值扩展到 PCR 寄存器中循环往复构成信任链。以 TPM 为例从 CRTM 开始每次上一级度量下一级的 hash 值扩展到 PCR 后再移交控制权中间还会产生日志。这段描述里有两个关键词常被漏掉一是「移交控制权」发生在度量之后顺序不能反二是「度量值扩展而非覆盖」这一点和 3.5 的公式呼应。答题时如果只写「一级信任一级」没有写清「谁度量谁、度量结果放哪」会被判为不完整。4.2 日志为什么不需要防篡改TPM 存储空间有限不可能存放与运行状态相关的完整信息只能存储其摘要所以平台状态信息以日志的形式放在 TPM 外部的度量日志文件中PCR 中通过扩展来记录度量日志信息的摘要供以后对度量日志进行验证。日志不需要防篡改的理由是即使攻击者篡改了度量日志由于 PCR 中记录的度量值不可伪造用户对度量日志重新求摘要就会发现与度量值不匹配。这句话里「不可伪造」是关键不是「日志不重要」而是「日志错了会被 PCR 抓出来」。答这道题最常见的错误是写「日志有 TPM 签名保护」题库里没有这个机制写上去就是自造。4.3 CRTM 为什么必须固化篡改后能做什么CRTM 是核心可信度量根是引导时在平台上执行的第一部分代码比如现有平台的 BIOS 或 BIOS 引导块或下一代平台上的 CPU 程序。它之所以不可修改是因为源头在启动过程中没有被度量这里存在一个假设——这个源头是安全可信的。而大多数 PC 系统使用的是可刷写的 BIOS 固件攻击者有可能通过修改 BIOS 摧毁信任根所以符合 TCG 规范的系统必须拥有不可更改的 BIOS 代码这段代码可以是一段短小的固化 BIOS 代码由它来度量其余的大致 BIOS但最初执行的代码必须固化不可修改这就是 CRTM。假如 CRTM 被篡改后果要答得具体攻击者可以构造自己的信任链可以往 PCR 中写入任意值可以轻易做到远程证明等操作。这三条是按危害递进的从「本地信任链被替换」到「PCR 被污染」再到「远程证明被欺骗」答题时按这个顺序写逻辑比单说「系统不安全」强得多。4.4 静态度量根的四个问题与 TPM1.0 的三个缺陷静态可信度量根有四个问题易用性、可扩展性、度量时机、包容性。易用性问题是挑战者发起挑战时需要重启才能证明安全包容性问题是要使静态可信根对第三方有说服力必须度量 TCB 的所有组件但在许多系统中 TCB 定义得有问题使得系统中所有可执行部件都要被度量信任链变得很庞大可扩展性问题是一个庞大的信任链不易扩展接收者要判定系统可信性就得知道链中所有可执行部件的可信性机器修正 BIOS 或给操作系统打补丁信任链就被破坏了度量时机问题是系统安全启动并被判定可信之后仍可能发生很多事情比如攻击者利用缓冲区溢出替换可执行文件所以静态可信根只能提供装载时的保证不能提供运行时的保证。这四个问题建议按「用起来麻烦、链太长、补丁就断、只管启动」四句记答题时每句展开一到两行比逐字背定义更容易写全。TPM1.0 被指出的三个缺陷要和这四个问题对应起来看。缺陷一是引导装载程序中存在 BUG可信引导程序装载不完整把加载内核镜像和度量并扩展 PCR 分开硬盘损坏或光盘启动时不扩展 PCR。缺陷二是无法抵御 BIOS 攻击BIOS 可刷写机器启动时不对 BIOS 进行度量。缺陷三是对 LPC 总线攻击在平台没有重启的情况下重启 TPM。动态可信度量根消除前两个缺陷的思路很直接它的信任链移除了 BIOS 及其配置、可选 ROM 及其配置以及由于 bug 带来漏洞的 boot loader所以不再受缺陷一和缺陷二威胁。消除缺陷三靠的是新增 8 个 PCR初值为全 1LPC 总线攻击只能让它们保持全 1而不能模拟 CPU 的指令只有从 CPU 发出的指令如 SKINIT能使它们变为 0。初值不同攻击者很难 hash 出一样的结果。这段「初值不同」是得分点很多人只写「新增 PCR」就结束了。4.5 动态度量根的三条路线SKINIT、AC Module、TXT 四阶段AMD 的 SVM 构建动态信任链靠 SKINIT 指令它对处理器进行重新初始化并建立一个安全的执行环境来运行 secure loader。虚拟机管理器或可信操作系统的 secure loader 被封装到一个安全的引导块在 CPU 跳转到 secure loader 执行之前安全引导块要被度量其度量值被放进 TPM 的 PCR17PCR17 中的值就形成了 DRTM然后再度量、扩展逐步构建信任链。PCR17 这个编号要记住题目问「动态度量根的值放在哪个 PCR」时直接写。AC Module 的验证逻辑是AC module 经过签名并包含一个公钥Intel 的 CPU 中含有这个公钥的 hash 值所以首先由 CPU 认证这个公钥然后再用这个公钥去对 AC module 进行认证。这条链的关键是「CPU 里预置的是公钥的 hash不是公钥本身」答反了就成了「CPU 直接信任 AC module」。Intel TXT 的执行过程主要有四个部分经过度量的启动、MLE 的初始化、MLE 运转、MLE 销毁。构建可信环境的步骤是确保执行环境没有受到不可信应用的监视将 AC module 和 MLE 加载到内存中调用 GETSEC[SENTER] 指令处理器验证 AC module 的签名然后执行 AC moduleAC module 度量 MLE 并将结果送到 TPM启动 MLE。此外 TXT 还可以通过 LCP 来验证这一启动过程确保其可信。四阶段的名称要按顺序写漏掉「销毁」会被认为没读完规范。Locality 部分记「5 个、鉴别发起者」Locality 的作用就是鉴别一个 TPM 请求的发起者每一级代表一个发起者身份。Locality 4 是可信硬件也表示动态可信度量根Locality 3 是辅助组件使用可选目前 Intel 用到而 AMD 没有使用Locality 2 是可信操作系统运行时使用的Locality 1 是可信操作系统为应用程序提供的执行环境使用的Locality 0 用于对 TPM1.1 向下兼容。这五级经常被做成匹配题记法是「4 硬件、3 辅助、2 系统、1 应用、0 兼容」。5. 易错点虚拟机回滚、vTPM 与五个高频失分答法回滚和 vTPM 是整套题里综合性最强的部分题干往往把「虚拟机快照」「TPM 状态」「远程证明」三件事拧在一起考生一紧张就只答一半。这一章按「错在哪 → 为什么错 → 怎么答对」拆开讲每条都可以直接当改错模板用。5.1 虚拟机回滚为什么和可信计算矛盾虚拟机回滚而 TPM 不回滚会破坏 TPM 和系统状态的一致性。典型的攻击路径是先正常启动使 TPM 正常然后把虚拟机回滚到不可信状态。此时 TPM 无法证明平台安全性因为一致性已经被破坏。答这道题的关键是抓住「一致性」三个字。TPM 里的 PCR 记录的是某一次运行的状态摘要虚拟机回滚之后运行状态回到了过去PCR 却停留在回滚前的值两者对不上远程证明就会给出错误结论。常见错答是「回滚会让病毒回来」这只说了现象没说清机制。正确写法是先点明「TPM 状态与系统状态不一致」再举「先正常启动再回滚到不可信状态」这个具体路径。5.2 单纯回滚 TPM 为什么不行以及 vTPM 的四类安全问题单纯回滚 TPM 数据会造成新产生数据的丢失并且存在重放攻击攻击者每次做远程证明时都回滚到可信状态就可以利用重放攻击消除入侵痕迹。这两条要成对写前一条是可用性代价后一条是安全性代价。vTPM 在为一组虚拟机服务时的问题更多答题时按四类展开。第一是安全状态不一致现有 vTPM 不可回滚当经过验证的服务被回滚到包含恶意代码的状态时它仍然是可信的。第二是 seal 的密钥无法解封因为 PCR 没有回滚解封条件对不上。第三是重放攻击利用回滚机制回到可信状态后可以消除攻击痕迹。第四是限量服务无限使用许多限量试用软件借助 vTPM 的数据进行验证而这一数据可以回滚。归结起来就是一句话虚拟安全设备和虚拟机在不同安全场景下并不能总是同时保持适应的安全状态应用程序还会因为回滚丢失状态。性能方面的问题要单独答需要高安全环境的应用是相似的比如各个用户弹窗输入密码如果提供一个公用的高安全环境可以节省大量开销。与物理 TPM 相比的安全问题则是vTPM 管理器可能被篡改或者管理域被篡改。这两条经常被合成一问「vTPM 有什么性能缺陷和安全问题」答题时先性能后安全各写一句不要混在一起。5.3 解决回滚问题部分回滚加两组不回滚 PCR标准思路是 TPM 部分回滚PCR 回滚保证一致性密钥不回滚已经过期的密钥不再使用新产生的密钥不会丢失。此外增加两组不会回滚的 PCR用来记录回滚记录包括快照时间、快照时的 TPM 状态。另一种答法更完整按三步写首先为了保证虚拟机安全状态一致性需要在对虚拟机做快照时也对 vTPM 的状态做快照保证可信执行环境的状态与 vTPM 的状态一一对应其次为了保证虚拟机在做过一次快照后新增的密钥等安全数据不在回滚过程中丢失需要在 vTPM 回滚后恢复密钥数据最后为了解决回滚虚拟机带来的重放攻击问题在每次创建快照或回滚时把快照时间、执行创建命令的用户信息、vTPM 当前状态以及虚拟机当前状态的度量值分别扩展到两组新增的 PCR 中从而保证快照的唯一性用永远不会发生回滚操作的 PCR 真实反映虚拟机的回滚轨迹使攻击者无法通过回滚虚拟机消除攻击痕迹。这道题最常见的失分是只答「回滚 TPM」或只答「加 PCR」前者没解决数据丢失和重放后者没解释一致性怎么保证。把「PCR 回滚 密钥不回滚 两组新 PCR 记录轨迹」三件事写全才算答到点上。5.4 为什么需要 vTPMvTPM Manager 在做什么已经有了 TPM 还要 vTPM原因有两条。一是 TPM1.2 不适用于云计算场景在 TPM1.2 中一台虚拟机进入安全环境其他虚拟机就会暂停而实际需求是每个虚拟机都能有自己的安全环境相互不干扰有自己的数据、AIK 等TPM1.2 中一个物理机对应一个 TPM如果能虚拟化 TPM就能以一个 TPM 满足多个虚拟机。二是有时只要求验证一个虚拟机的安全而不需要所有虚拟机安全不需要挑战整个物理平台此时 vTPM 效率更高。vTPM Manager 的作用可以按线程结构答它有三个线程一个连接 TPM 硬件驱动一个管理 vTPM 实例一个连接前后端驱动。处理指令时先判断是哪一个 vTPM 发来的指令然后再根据 locality 判断是几环用共享内存代替网络来传递 TPM 指令提高效率。这道题的问法比较偏实现答题时把「三个线程、两层判断、共享内存」三个点写出来即可不需要展开调度细节。5.5 五条高频失分点错在哪、为什么错、怎么答对第一条把 PCR-Extend 写成赋值。错在写成PCR[i] SHA-1(newMeasurement)为什么错丢掉了旧值链式依赖断了攻击者可以任意伪造单个状态怎么答对写全PCR[i]SHA-1(PCR[i]||newMeasurement)并补一句「旧值参与运算才能让历史状态不可抹除」。第二条说度量日志必须防篡改。错在答「日志要加签名保护」为什么错没理解 TPM 只存摘要、日志放在外部的前提怎么答对日志可被篡改但 PCR 中的度量值不可伪造对日志重算摘要一比对就会暴露不一致。第三条迁移性判断靠猜。错在把 AIK 或 Sealing Key 说成可迁移为什么错只记了用途没记判断依据怎么答对统一按「私钥是否会离开 TPM」判断EK、AIK、SRK、Sealing Key 不可迁移Binding Key 因为要在另一个平台解密而属于可迁移一类且转换只能从不可迁移单向转到可迁移。第四条回滚题只答单边回滚。错在写「把 TPM 也回滚就行了」为什么错会造成新密钥丢失还会留下重放攻击的口子怎么答对部分回滚PCR 回滚保一致性、密钥不回滚保数据再加两组不回滚 PCR 记录快照时间与状态保证快照唯一。第五条静态度量根问题答成「性能差」。错在只用一句「效率低」概括为什么错四个问题是易用性、可扩展性、度量时机、包容性各有各的机制原因怎么答对逐条点名易用性对应「挑战需重启」、可扩展性对应「打补丁就断链」、度量时机对应「只管装载不管运行」、包容性对应「TCB 定义不清导致全量度量」。6. 答题技巧与押题把简答写成「机制 公式 攻击对策」三段这套题的简答有个稳定的得分结构先给机制定义再给公式或流程最后补攻击与对策。比如 PCR-Extend第一段写「扩展是把新度量值与旧值拼接后做 SHA-1」第二段写公式第三段写「因此攻击痕迹会留在后续序列、且无法倒推初值」。三段写完哪怕字数不多采分点也齐了。反过来只写结论的答案通常只能拿到一半分因为阅卷要找的是机制链条不是名词。押题方向上优先盯住四类组合。第一类是「密钥 迁移性」问法固定为某密钥的用途与能否迁移答题按「用途一句、迁移性一句、理由一句」写。第二类是「PCR 证明」可能把扩展公式、远程证明、日志验证合成一大题顺序是先公式、再流程、再解释日志为什么不用防篡改。第三类是「信任链 缺陷」从 CRTM 讲到静态根四问题再落到动态根怎么消除缺陷一、二、三。第四类是「虚拟化 回滚」按一致性、数据丢失、重放攻击、部分回滚四步走。下面这张表可以考前十分钟扫一遍。题型常见问法必答点密钥类某密钥用途、可否迁移用途一句、迁移性一句、私钥是否离开 TPMPCR 类扩展公式、谁能复位PCR[i]SHA-1(PCR[i]证明类远程证明流程、本地报告AIK 签名 nonce、SML 重算期望值、Seal/Unseal信任链类产生过程、日志作用先度量再执行、日志存外部、PCR 存摘要缺陷类静态根四问题、TPM1.0 三缺陷易用性、可扩展性、度量时机、包容性虚拟化类回滚攻击、vTPM 问题一致性破坏、密钥丢失、重放、部分回滚写答案时还有两个小习惯值得养成。遇到「为什么」的题先写「如果不这样会怎样」把攻击场景摆出来再写机制怎么挡住比直接背定义更有说服力遇到带公式的题公式单独成行前后各留一句解释别把公式塞在长句中间阅卷时容易看漏。我自己在这类测试上翻过车有一次回滚题只写了「回滚 TPM 保证一致」觉得意思到了结果被扣掉大半因为数据丢失和重放攻击两个采分点一个没提。从那以后我每次答综合题都强制走一遍「机制是什么、公式或流程是什么、不这样做会被怎么攻击、对策是什么」这四问哪怕时间紧也至少把后两问各写一句。希望帮到你。本文还有配套的精品资源点击获取