【TPM2.0原理及应用指南】 5、7、8章

第5章 规范指南

5.2 一些定义

以下定义适用于命令和响应:

  • 授权:授予访问TPM中某些实体的权利
  • 密码授权:这是一次性明文授权
    • HMAC授权:HMAC密钥是使用共享密钥派生的,这是授权的基础
    • 策略或者增强授权:使用必须满足的策略断言来授权。策略断言是命令被授权之前就发送到TPM的命令
    • 会话:会话用于授权,并且每个命令操作(加密,解密,审计等)都在一个会话里。在基于HMAC和策略的会话里,会话被创建并被多条其它命令使用。密码授权是不携带任何状态的一个特殊会话。
  • 句柄:一个用于标识占用TPM内存的TPM资源标识符
  • 字节流:在命令中实际发给TPM的字节,在响应中指实际从TPM接收的字节
  • 规范化数据
  • 反串行化数据:C语言结构体格式数据
  • 串行化数据:规范化的数据(即发送或从TPM接收的格式)

以下字段,按照命令字节流中出现的顺序进行描述:

  • 命令头:所有命令的公共部分
  • 句柄区域:包哦含第三部分的命令中所指的0~3个句柄
  • 授权区域:包含命令会话数据。多个会话可以与单个命令关联,所以这个区域可以包含0-3个绘画的参数。它包含了授权信息、每个命令会话信息和一些需要在应用程序和TPM之间进行通信的会话状态信息。
  • 参数区域:包含第三部分所述的特定命令的参数

响应字节流的主要字段定义:

  • 响应头:所有响应的公共部分
  • 句柄区域
  • 参数区域
  • 授权区域:包含响应会话数据。多个会话可以与单个命令关联,因此该区域可包含0-3个会话的参数。

5.3 第三部分 命令

无需授权的命令(TPM2_Startup)由三部分组成:

  • 一般描述:以文本形势描述命令,详细说明输入的约束条件
  • 命令和响应:命令的输入数据和响应的输出数据
  • 详细操作:包含代码和代码返回错误的条件表

第五章剩下都是些具体的命令细节,在此不赘述

第7章 TPM软件栈(TSS)

7.1 TSS概述

从上而下,TSS包含如下几层:特征API(Featurn API,FAPI)、增强系统API(Enhanced System API,ESAPI)、系统API(System API,SAPI)、TPM命令传输接口(TPM Command Transmission Interface,TCTI)、TPM访问代理(TPM Access Broker,TAB),资源管理器(Resource Manager,RM)和设备驱动(Device Driver)

技术人员应基于FAPI编写程序,等同于JAVA,C#等。接下来ESAPI,需要大量TPM知识,它提供一些会话管理和密码支持。SAPI层能让你访问TPM的所有功能,但需要高级专业知识。TCTI层用于传输TPM命令和接收响应。TAB层控制多进程同步访问TPM。RM类似于PC上虚拟内存管理的方式,负责TPM对象和会话在TPM内部存储空间的换入换出。
TSS图示

7.2 FAPI

创建TSS特征API(FAPI)的明确目的是,方便程序员使用TPM 2.0 功能。实现这一层的一种方法是使用配置文件,创建默认的配置选项,当创建和使用密钥时,不需要明确地选择算法、密钥长度、加密模式和签名机制。

FAPI为默认类型的实体定义了基本名称

  1. 密钥
  2. NV
  3. 标准策略及认证
    用FAPI命令创建和使用的实体都用策略来授权,所有FAPI函数都假设密钥只通过策略进行认证。

7.3 SAPI

SAPI规范的设计目的如下:

  • 提供访问TPM所有功能的能力
  • 跨平台可用,从高嵌入、存储受限的环境到多处理服务器。
  • 在提供能够访问TPM所有功能的条件下,让程序员轻松
  • 同时支持同步和异步调用TPM
  • SAPI实现并不需要分配任何内存,在大部分实现中,调用者负责分配SAPI的所有内存。

SAPI包含四组函数:命令上下文分配函数、命令准备函数、命令执行函数、 命令完成函数:

  • 命令上下文分配函数:用来分配SAPI命令上下文数据结构体,它是一个不透明的结构体
  • 命令准备函数
  • 命令执行函数:命令可以同步或异步传送
  • 命令完成函数:这组函数是命令后处理所需要的,如果会话被设置为加密会话,那么本组函数还包括响应HMAC计算和响应参数解密。

7.4 TCTI

TPM命令传输接口(TCTI)上下文结构体告知SAPI函数,如何与TPM通信。每个进程、每个TPM都有一个TCTI上下文结构体,由初始代码创建。
在TPM栈的任意一层,只要是发送和接收已排好顺序的字节流,都会用到TCTI。目前这体现在两个地方,SAPI和TAB以及RM和驱动之间。

7.5 TAB

TAB用来控制和同步对一个单一共享TPM的多进程访问。

  • 当一个进程向TPM发送命令和从tpm接收响应时,不允许其它进程发送命令和接收响应。
  • TAB需要阻止进程访问不属于它的TPM会话、对象和序列,使用哪个TCTI连接来加载对象、开启会话或启动序列,就确定了所有权关系。

7.6 RM

RM的作用相当于操作系统中的虚拟内存管理器。因为TPM片内存储空间有限,对象、会话、序列需要在TPM和外部存储器之间交换,以让TPM命令能够执行。

一个TPM命令最多可以使用三个实体句柄和三个会话句柄。所有的这些存储在TPM内存中,供TPM执行命令所用。RM的工作是拦截命令字节流,确定什么资源需要被加载到TPM中,交换出能够加载所需资源的足够空间,再加载所需资源。

7.7 设备驱动

设备驱动接收一个命令字节缓冲区和缓冲区大小,执行必要的操作,将那些字节发送给TPM。当被栈中的高层请求时,驱动程序会等待,直到TPM准备好响应数据,然后读取响应数据,将其返回给栈上层。

第8章 实体

TPM实体是TPM中一个可以通过句柄直接索引到的项目。本章将介绍:永久性实体(hierarchy、字典攻击锁定机制、PCR);非易失性索引(NV索引);对象(密钥和数据);易失性实体(各种会话);

8.1 永久性实体

永久性实体的句柄由TPM规范定义,不能被创建和删除。在TPM 1.2中,PCR和所有者是唯一的永久性实体;存储根密钥(SRK)也有一个固定句柄,但却不是永久性实体。在TPM 1。2中则有很多:三个持久性hierarchy、临时性hierarchy、字典攻击锁定复位、PCR、保留句柄、明文口令授权会话和平台hierarchy NV功能。

  • 持久性hierarchy
    平台、存储和背书。这些hierarchy都需要通过授权才允许使用,所以每一个都有一个授权值和策略,两者都可以被hierarchy管理员修改
  • 临时性hierarchy
    空hierarchy,它也被一个永久句柄索引,它在每次TPM加电重启后都会被自动清除
  • 重置词典攻击锁定
    它没有密钥或对象hierarchy。如果它被触发,该机制被用来重置字典攻击锁定机制或者清楚。它通常代表TPM存储的hierarchy的IT管理员。
  • PCR
    PC客户端平台至少有24个PCR。TPM强制规定至少有一个bank(使用相同哈希算法的PCR集合),在启动时可编程为支持SHA-1或者SHA-256。
  • 保留句柄
    如果特定的平台规范确定了要使用保留句柄,TPM中就会有一些针对特定制造商的保留句柄。
  • 口令授权会话
    调用者利用此句柄完成明文口令(与HMAC值相对应)授权
  • 平台NV启用

8.2 NV索引

TPM中有一定数量的非易失性空间,用户可以将它们配置为存储空间,在配置时,需要给定一个用户选择的索引和一些属性集。

NV索引有一个关联的授权值和授权策略,授权值可以随索引所有者的意愿而改变,但是策略在创建NVRAM时被设置好后,就不能再被改变。

NV索引在创建时,就与一个hierarchy相关联,当hierarchy被清除时,与之相关联的NV索引也会被删除

8.3 对象

TPM对象要么是数据,要么是密钥,它有一个公开部分,也可能有一个四有部分。正如NV索引一样,所有的对象都隶属于四种hierarchy中的一种:平台、存储、背书、或者空。

8.4 非持久性实体

在系统断电重启后不会继续存在,尽管非持久性实体可以被保存,但在每次加电启动后,TPM加密机制会阻止加载保存的上下文,以强制丢失,这种实体类型有多种类别:

  • 授权会话:包括HMAC和策略会话
  • 哈希和HMAC事件队列实体持有中间结果

与非持久性实体相反的是,持久性实体在每次重启后都会持续存在。

8.5 持久性实体

一个持久性实体是一个对象,一个hierarchy所有者已要求在重启时留存在TPM里。它与永久性实体的不同在于,它可以被删除,TPM只有有限的持久性内存。

通常,主存储密钥(SRK)、主受限签名密钥(AIK),可能还有背书密钥(EK),是TPM中仅有的持久性实体。

8.6 实体名称

被哈希计算和HMAC计算的命令参数流,暗含了句柄所对应的每个实体的名称,即使命令参数可能不包含名称。在它经过HMAC计算被授权后,攻击者可能修改句柄,但不能修改相应的值。

名称是实体唯一的标识符。永久性实体(hierarchy和PCR)拥有永远都不会改变的句柄,所以他们的名称就是他们的句柄。其他实体(NV索引和加载的实体)拥有一个经计算得到的名称,该名称本质上是实体公开数据的哈希值。攻击者可以删除此索引并重新定义它,但是,除非公开数据区(索引值,属性值以及策略)是相同的,否则名称便会改变,授权不会通过。公开数据区随着实体类型的不同而变化。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在R语言,要将counts数据转化为tpm(每百万reads的转录本数),然后进行log2处理或者先进行log2处理再转化为tpm可以通过以下步骤实现。 首先,假设我们已经通过某种方法或程序计算出了基因表达的counts数据。假设该数据存储在一个名为counts的数据框,其每一行代表一个基因,每一列代表不同的样本。 要将counts转化为tpm,可以使用edgeR、DESeq2或其他基因差异表达分析软件包提供的方法。这些软件包通常提供了计算tpm的功能。例如,在edgeR,可以使用calcNormFactors函数来计算标准化因子,然后使用calcTPM函数来计算tpm值。以下是一个示例代码片段: ```R # 安装并加载edgeR软件包 install.packages("edgeR") library(edgeR) # 从counts数据框创建一个DGE对象 dge <- DGEList(counts = counts) # 计算标准化因子 dge <- calcNormFactors(dge) # 计算tpm值 tpm <- calcTPM(dge, log=T) # 这里使用了log=T参数来进行log2处理 # 获取tpm值的对数(log2)处理 tpm_log2 <- log2(tpm + 1) # 为了避免log(0)的问题,加上1后再进行对数处理 ``` 当然,如果我们先对counts进行log2处理,然后再转化为tpm,也可以通过相似的步骤实现。以下是一个示例代码片段: ```R # 对counts数据进行log2处理 counts_log2 <- log2(counts + 1) # 为了避免log(0)的问题,加上1后再进行对数处理 # 将counts_log2转化为tpm tpm <- counts_log2 / colSums(counts_log2) * 1e6 # 获取tpm值的对数(log2)处理 tpm_log2 <- log2(tpm + 1) # 为了避免log(0)的问题,加上1后再进行对数处理 ``` 需要注意的是,在进行log2处理时,为了避免log(0)的问题,我们在计算前都加上了1。 这样,我们就可以通过以上代码将counts数据转化为tpm,并可以选择是在转化为tpm之前还是之后进行log2处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Godams

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值