「TCG 规范解读」第8章 TPM工作组 TPM 1.2中 SHA1的使用
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alliance,TCPA)所开发的规范。现在的规范都不是最终稿,都还在不断的更新中,比如:TPM的规范就从原来的v1.0更新到v1.2,现在还在不断的修订。
SHA1-Impact_V2.0
简介
本文档列出了TPM v1.2规范中SHA-1的使用情况,并对2005年发现的碰撞袭击对其影响进行了评估。总的来说,TCG 采取了一些预防措施来防止碰撞攻击,例如在做哈希前使用新的随机生成值或外部未知的随机生成值。此外,在数据中使用固定结构阻碍了攻击者操纵数据以有效地执行冲突攻击的发生。我们确实发现了一种极端情况,即RSA签名命令在签名之前可能会对输入进行散列,在这种情况下,TCG 不经意的选择了 TPM 之外的数值来连接到待签名数据,如果外部选择新的随机生成的值,在这里不会有问题,否则 TPM 需要提供保护 SHA-1 碰撞攻击的其他方式。
SHA 引擎的主要目的
TPM 包含了以下命令来实现一个通用目的的 SHA-1 引擎:
- TPM_SHA1Start
- TPM_SHA1Update
- TPM_SHA1Complete
- TPM_SHA1CompleteExtend
这个能力有助于 SHA-1 哈希的计算,TPM 暴露这些命令方便平台使用。TPM 在执行 SHA-1 会话过程中禁用了其他任何命令的处理。如果在TPM_SHA1Start和TPM_SHA1Complete/TPM_SHA1CompleteExtend中收到TPM_SHA1CompleteExtend以外任何命令,TPM 会将会话无效。
影响:
SHA-1 引擎只是一个服务,所以碰撞攻击影响对其自身而言是不确定的。SHA-1 引擎是 TPM 的必要组件,下面章节中描述了 TPM 如何使用这个服务,进一步的讨论在这些场景下碰撞攻击的影响。
PCR 扩展
TPM_Extend 命令使用 SHA-1 和 PCR 寄存器连结,输入是 20 个字节,通常是在 TPM 外部进行计算的。TPM 使用 SHA-1 来扩展一个 PCR 如下:
New_PCR_Value = SHA-1(Old_PCR_Value || Input_Digest).
影响:
TPM_Extend的输入参数是高度结构化的,即只有20字节的输入,那么攻击者只能操作者 20 字节而不是原文,这样的去构造碰撞是非常困难的。
审计摘要 Audit digest
除了审计命令本身以外,TPM 能够对其他任何命令进行审计。TPM 管理员(拥有者)可以控制那些命令需要被审计,当 TPM 命令执行可审计命令时(默认情况下,128个命令中有23个命令是可审计的),会使用 SHA-1 来对命令的输入进行哈希,然后扩展到审计摘要寄存器,这个寄存器在TPM_Startup或者之前审计会话关闭后被设置为 NULL,扩展的方式和 PCR 扩展相同。摘要同时合并一个标签和TPM_COUNTER_VALUE结构,增加了更多的结构。当 TPM 响应一个可审计命令时,TPM 同时也会对输出参数做哈希,并且扩展到摘要审计寄存器中。所有的哈希和扩展操作都使用 SHA-1,只有 5 个审计命令不使用 SHA -1 引擎。
影响:
所有的 TPM 命令和响应都是高度结构化的,即使攻击者有能力改变输入参数,他也无法操作 TPM 的响应。攻击者无法控制 TPM 响应的输出参数,因此无法成功进行上述的碰撞攻击
PCR 引用
TPM 有两个 PCR 引用命令,TPM_Quote和TPM_Quote2,这个命令会用SHA-1来讲 PCR 寄存器连接起来。输入是一个最多 5 字节的索引,用来选择 PCR 寄存器子集。TPM 填充一个包含这些 PCR 的结构,将其哈希并签名。输出是选择的 PCR 组的 SHA-1 签名。
影响:
TPM Quote 的输入是高度结构化的参数,潜在的攻击者只能操作 5 个字节,以选择不同的 PCR 集合。即使攻击者通过 TPM_Extend 指令成功的操作了 PCR,该动作也会触发其他依赖 PCR 的安全特性。这相当于修改了原像,即 SHA-1 无法解决。尽管 quote 结构能够包含 20 字节的外部数据供攻击者使用,实际上也很难形成实用的攻击。所以攻击者无法通过操作该命令的输入来实时碰撞攻击。
RSA 签名
TPM 有一个 RSA 签名命令,TPM_Sign,会在生成签名前用到 SHA-1。这个命令处理三种不同的场景。前两种场景是提供的数据大小小于签名密钥长度,因此 TPM 不会对数据进行哈希。最后一种情况是,TPM 创建一个结构包含字符串“SIGN”、一个防重放攻击的nonce以及将要别签名的数据。SHA-1 会对这个结构进行哈希、签名作为响应输出。
影响:
说实话,增加防止重放攻击的nonce已经能够阻止潜在的攻击了,不行的是 TCG 选择了外部生成 nonce 而不是在 TPM 内部随机生成,这给攻击者提供的操作空间。这种情况下,攻击者有可能操作函数输入创建能够影响签名的碰撞攻击。然而,TPM 的完整性和其他函数的安全性仍然保持完整的。
密钥结构(Blobs)
下面的密钥结构包含了 SHA-1 计算的摘要:
- TPM_STORE_ASYMKEY
- TPM_SEALED_DATA
- TPM_MIGRATE_ASYMKEY
- TPM_CERTIFY_INFO
- TPM_CERTIFY_INFO2
- TPM_DELEGATE_KEY_BLOB
这些密钥结构频繁嵌入加密区域里的公共区域的摘要,还有整个密钥结构的摘要,提供统计学意义上唯一的标识。
影响:
一些摘要用来保护固定共有结构,攻击者几乎没有可操作空间。另一些摘要被加密了,也就是说操作这些数据等同于要破解 RSA,这样可以看出攻击者也很难能利用碰撞攻击搞事情。
对称算法的 IV 和 Counter
TPM 基于 SHA-1 对于 TPM 生成的随机数和用户提供的数值来生成初始向量 IV 和 初始计数值。
影响:
既然 SHA-1 的输入是 TPM 产生的随机数,攻击者就无法操作这些输入来进行碰撞攻击,也就无法控制 IV 和 Counter来攻击对称加密算法。
授权会话 Authorization Sessions
TPM 建立并维持这些授权会话,HMAC 算法使用 SHA-1 来提供完整性以及防重放特性。
影响:
TPM 使用内部生成的新鲜的随机数来生成 nounce,所以这些会话都能抵抗 SHA-1 碰撞攻击。
DAA
TPM 使用 SHA-1 来验证 DAA 算法本身的摘要,这也是协议内部固定的结构。同时也用 SHA-1 来对算法参数和固定结构进行哈希
影响:
DAA 的参数是固定大小的非随机数值,结构也是固定的。攻击者没有太多机会操纵参数和结构实现碰撞攻击,除非破解 DAA 算法本身
身份密钥 Identity Keys
TPM 能够创建、激活身份密钥,当激活身份密钥时,TPM 会创建并验证固定密钥结构和其他结构的摘要值。
影响:
固定的结构/格式使得攻击者无机可乘
传输会话
TPM 传输会话具有记录日志功能选项。即使没有日志选项,也有很多传输会话命令会有一些生成 SHA-1 摘要的调用。
影响:
同上,固定结构,无法攻击。
通过上下文命令保存 TPM 资源
TPM 能够通过 TPM_SAVECONTEX 命令来保存 TPM 资源,同时通过 TPM_LOADCONTEX 来重新加载这些资源。TPM 使用 SHA-1 来计算整个上下文的完整性,然后对敏感区域和随机生成的攻击者无法得知的随机数进行加密。在加载资源时,会验证摘要值。
影响:
这种机制能够阻止碰撞攻击。
代理 delegation
TPM 允许需要管理员权限的个别命令代理给一些用户而不用授权其所有权限。用户也可以通过密钥授权代理密钥。代理表单的摘要是通过 SHA-1 计算的,来验证这些摘要、对称密码的 IV 和密钥流。
影响:
因为密钥流是用来保护授权数值的,这个不是必须的,所以我们对其进行考虑。IV 的创建使用新鲜的随机数生成的随机值,能够抵抗碰撞攻击。最后代理块是高度结构化的,并且哈希中包含了攻击者无法得知的随机值,所以这些摘要也能抵抗碰撞攻击。
迁移
TPM 允许特定密钥迁移到其他地方。更复杂使用场景是密钥的认证迁移,即从一个 TPM直接或间接的到另一个 TPM。使用 SHA-1 来计算结构化的哈希并验证摘要
影响:
既然迁移授权的摘要中包含随机生成的数值,攻击者并不知道,所以这个能够抵抗碰撞攻击。密钥和密钥结构是高度结构化的,私有区域也是加密的。操纵加密区域等同于破解 RSA 2048 算法,这个在目前来说也是不可能的。因此攻击者无法进行使用密钥摘要进行碰撞攻击。对于那些复合密钥摘要也是同样的。
参考
1.TCG 工作组规范合集
2. 更多 TPM 应用信息参考
- Ken Goldman, e-mail dated July 7, 2006
- Michael Szydlo, “SHA1 Collisions can be Found in 2^63 Operations”, http://www.rsa.com/rsalabs/node.asp?id=2927, RSA Laboratories, August 19, 2005. TCG, “TPM Main Part 1 Design Principles”, v1.2, revision 103, October 26, 2006
- TCG, “TPM Main Part 2 TPM Structures”, v1.2, revision 103, October 26, 2006
- TCG, “TPM Main Part 3 Commands”, v1.2, revision 103, October 26, 2006 Wikipedia, “SHA Hash Functions”, http://en.wikipedia.org/wiki/SHA_hash_functions, March 31, 2010
术语
TCG,可信计算组织;
TPM,可信平台模块;
可信度量,主体通过密码学方法对客体进行度量的方法;
皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~
“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~
相关文章:

「TCG 规范解读」第8章 TPM工作组 TPM 1.2中 SHA1的使用
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...

熵权法计算权重
文章目录1. 多属性决策问题2. 熵(entropy)3. 信息熵4. 熵权法5. 熵权法的实现基于信息论的熵值法是根据各指标所含信息有序程度的差异性来确定指标权重的客观赋权方法,仅依赖于数据本身的离散程度。熵用于度量不确定性,指标的离散…...

redis实现用户签到,统计活跃用户,用户在线状态,用户留存率
开发的过程中,可能会遇到用户签到、统计当天的活跃用户、以及每个用户的在线状态,用户留存率的开发需求,可能会用传统的方法,根据相应的需求设计数据库表等,但这样耗费的存储空间大,以及性能方面也不会太好…...

MySQL中有多少种索引?索引的底层实现原理
索引存储在内存中,为服务器存储引擎为了快速找到记录的一种数据结构。索引的主要作用是加快数据查找速度,提高数据库的性能。索引的分类(1) 普通索引:最基本的索引,它没有任何限制。(2) 唯一索引:与普通索引类似&#…...

LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历迭代遍历层序遍历)以及线索二叉树java详解 文章目录二叉树遍历题目描述解题思路与代码递归遍历迭代遍历层序遍历线索二叉树:二叉树遍历 题目描述 从根节点往下查找,先找左子树…...

【Java闭关修炼】MyBatis-接口代理的方式实现Dao层
【Java闭关修炼】MyBatis-接口代理的方式实现Dao层实现规则代码实现代理对象分析接口代理方式小结实现规则 映射配置文件中的名称空间必须和Dao层接口的全类名相同映射配置文件的增删改查标签的id属性必须和Dao层接口方法的参数相同映射配置文件中的增删改查标签的parameterTyp…...

2022年网络安全政策态势分析与2023年立法趋势
近日,公安部第三研究所网络安全法律研究中心与 360 集团法务中心联合共同发布了《全球网络安全政策法律发展年度报告(2022)》。《报告》概览2022年全球网络安全形势与政策法律态势,并对2023年及后续短期内网络安全政策、立法趋势进…...

使用vmware制作云平台redhat7.9镜像模板
一、概述 1.1 redhat7.9 定制镜像上传到云平台。 这个制作镜像得方式适用于多种iso 镜像。 将iso 镜像通过vmware 创建出一台虚机,对虚机做一些基础配置。在虚机上安装kvm 虚拟化得工具, 将iso 镜像在导入虚机种通过kvm创建一下虚机, 虚机创…...

OpenCV基础(28)使用OpenCV进行摄像机标定Python和C++
摄像头是机器人、监控、太空探索、社交媒体、工业自动化甚至娱乐业等多个领域不可或缺的一部分。 对于许多应用,必须了解相机的参数才能有效地将其用作视觉传感器。 在这篇文章中,您将了解相机校准所涉及的步骤及其意义。 我们还共享 C 和 Python 代码以…...

APB总线详解及手撕代码
本文的参考资料为官方文档AMBA™3 APB Protocol specification文档下载地址: https://pan.baidu.com/s/1Vsj4RdyCLan6jE-quAsEuw?pwdw5bi 提取码:w5bi APB端口介绍介绍总线具体握手规则之前,需要先熟悉一下APB总线端口,APB的端口…...

【Linux/Windows】源文件乱码问题解决方法总结
🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Linux技术&…...

Python 四大主流 Web 编程框架
目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django、Tornado、Flask、Twisted。 …...

学UI设计,可以向哪些方向发展?该怎么学?
1、什么是UI设计?UI设计,全称 User Interface,翻译成中文意思叫做用户界面设计。2、UI设计的类型UI设计按用户和界面来分可分成四种UI设计。分别是移动端UI设计,PC端UI设计,游戏UI设计,以及其它UI设计。第一…...

【C++】初识CC++内存管理
前言 我们都知道C&C是非常注重性能的语言,因此对于C&C的内存管理是每一个C/C学习者必须重点掌握的内容,本章我们并不是深入讲解C&C内存管理,而是介绍C&C内存管理的基础知识,为我们以后深入理解C&C内存管理做铺…...

Nacos快速使用指南
简单例子:springboot快速集成nacos官方github文档命名空间是绝对隔离的。group之间可以通过配置实现跨 group访问配置中心Nacos config官方文档应用级别的默认配置文件名(dataId)dataId 的完整格式如下:${prefix}-${spring.profil…...

复旦发布国内首个类ChatGPT模型MOSS,和《流浪地球》有关?
昨晚,复旦大学自然语言处理实验室邱锡鹏教授团队发布国内首个类ChatGPT模型MOSS,现已发布至公开平台https://moss.fastnlp.top/ ,邀公众参与内测。 MOSS和ChatGPT一样,开发的过程也包括自然语言模型的基座训练、理解人类意图的对…...

国家级高新区企业主要经济指标(2012-2021年)
数据来源:国家统计局 时间跨度:2012-2021 区域范围:全国(及各分类统计指标) 指标说明:手工提取最新的中国统计年鉴数据中各个excel指标表,形成各个指标文件的多年度数据,便于多年…...

SpringBoot2核心技术-核心功能【05、Web开发】
目录 1、SpringMVC自动配置概览 2、简单功能分析 2.1、静态资源访问 1、静态资源目录 2、静态资源访问前缀 2.2、欢迎页支持 2.3、自定义 Favicon 2.4、静态资源配置原理 3、请求参数处理 0、请求映射 1、rest使用与原理 2、请求映射原理 1、普通参数与基本注解 …...

2021-03 青少年软件编程(C语言)等级考试试卷(六级)解析
2021-03 青少年软件编程(C语言)等级考试试卷(六级)解析T1. 生日相同 2.0 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。 时间限制:1000 内存限制:65536 输入 第一行为整数n,表示有n个学生,n …...

数据库的多租户隔离
数据库的多租户隔离有三种方案 1、独立数据库 一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,成本也最高 优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租…...

网络输入分辨率是否越大越好
目标检测比如 yolov5,训练输入图像大小默认是 640*640,这个是不是越大训练的效果越好 ? 这个肯定不是的。而且,如果仅调整输入图像的分辨率,不改变网络结构的话,检测准确率反而会下降的。首先,…...

离线采集普遍解决方案
简介 使用Datax每日全量相关全量表,使用Maxwell增量采集到Kafka然后到Flume然后到Hdfs。 DataX全量 生成模板Json gen_import_config.py # codingutf-8 import json import getopt import os import sys import MySQLdb#MySQL相关配置,需根据实际情…...

SAP ABAP 数据类型P类型详解
ABAP中比较难以理解的是P类型的使用,P类型是一种压缩类型,主要用于存储小数,定义时要指定字节数和小数点位数,定义语法如下: DATA: name(n) TYPE P decimals m,n代表字节数,最大为16,m是小…...

应用沙盒seccomp的使用
应用沙盒原理参考https://zhuanlan.zhihu.com/p/513688516 1、什么是Seccomp? seccomp 是 secure computing 的缩写,其是 Linux kernel 从2.6.23版本引入的一种简洁的 sandboxing 机制。 系统调用: 在Linux中,将程序的运行空间分为内核与用户空间(内核态和用户态),在逻辑…...

C++项目——高并发内存池(2)——thread_cache的基础功能实现
1.并发内存池concurrent memory pool 组成部分 thread cache、central cache、page cache thread cache:线程缓存是每个线程独有的,用于小于64k的内存的分配,线程从这里申请内存不需要加锁,每个线程独享一个cache,这…...

【C进阶】数据的存储
文章目录:star:1. 数据类型:star:2. 整形在内存中的存储2.1 存储规则2.2 存储模式2.3 验证大小端模式:star:3. 数据范围3.1 整形溢出3.2 数据范围的求解3.3 练习:star:4. 浮点型在内存中的存储4.1 浮点数的存储规则4.2 练习5. :star::star:总结(思维导图)⭐️1. 数据类型 在了…...

【已解决】异常断电文件损坏clickhouse启动不了:filesystem error Structure needs cleaning
问题 办公室有一台二手服务器,作为平时开发测试使用。由于机器没放在机房,会偶发断电异常断电后,文件系统是有出问题的可能的,尤其是一些不断在读写合并的文件春节后,发现clickhouse启动不了,使用systemct…...

FlinkSQL行级权限解决方案及源码
FlinkSQL的行级权限解决方案及源码,支持面向用户级别的行级数据访问控制,即特定用户只能访问授权过的行,隐藏未授权的行数据。此方案是实时领域Flink的解决方案,类似离线数仓Hive中Ranger Row-level Filter方案。 源码地址: https…...

【基础篇】8 # 递归:如何避免出现堆栈溢出呢?
说明 【数据结构与算法之美】专栏学习笔记 什么是递归? 递归是一种应用非常广泛的算法(或者编程技巧),比如 DFS 深度优先搜索、前中后序二叉树遍历等等都是用到了递归。 方法或函数调用自身的方式称为递归调用,调用…...

基于微信公众号(服务号)实现扫码自动登录系统功能
微信提供了两种方法都可以实现扫描登录。 一种是基于微信公众平台的扫码登录,另一种是基于微信开放平台的扫码登录。 两者的区别: 微信开放平台需要企业认证才能注册(认证费用300元,只需要认证1次,后续不再需要进行缴费年审&#…...