TSS学习记录

转载测试
自己总结了一下TSS的相关资料,简介一共分为五大部分:

1. TPM Internals

2. TPM Device Driver(TDD)

3. TCG Device Driver Library(TDDL)

4. TCG Core Services(TCS)

5. TCG Service Provider(TSP)

?
?

0. TSS简介

???TSS是与TPM进行交互的核心软件部件,TSS的设计规范由TCG颁布,到目前为止版本号为1.2,并且厂商自行设计的TSS必须符合TSS1.2标准。TSS的构成如图所示,那么TSS的设计目的有以下四个方面:

???(1)为应用程度提供到TPM功能服务的单入口点;

???(2)提供对TPM的同步访问

???(3)按标准构建字节流隐藏应用程序所构建的命令流;

???(4)TPM资源的管理

???一般说来,TSS就是使用户可以使用TPM所提供的相关服务,这些服务包括:完整性度量及报告、认证功能和加、解密服务等。

一、TPM Internals

????TPM的内部构造,只介绍主要的几个部分,如下

1. I/O
???管理流经通信总线的信号流,典型的 LPC总线 (Low PinCount Bus)。
2. Execution Engine
???是一个微控制器,用于对命令码的校验、解析及执行,并控制内部执行流。(类似于PC中的CPU)

3. SHA-1 Engine (160 bits)
???主要被TPM使用,作为其可信的哈希算法。在平台启动过程中,其接口暴露在TPM外以进行度量工作,由CRTM使用,但不由应用程序使用。未来的TPM版本会加入更多的哈希算法。
4. RNG
???TPM内部的随机源,伪随机生成器。用于生成Nonce , 密钥等。

5. RSA Engine and Key Generator
????用于非对称密钥的生成(RSA;存储SK及AIK 密钥大小 >= 2048),它支持 512, 1024, 2048 bit的密钥,规范中建议使用2048位的密钥。RSA密钥生成遵循PKCS #1标准,在规范中其RSA公钥必须是0x10001。RSA密钥在使用的时候要加载到TPM内部。

6. Volatile Memory
???里面包括:密钥槽(10个)、 PCR值(24个),密钥句柄、授权会话句柄等。(类似于PC中的内存)
7. Non-Volatile Memory
???包括EK(2048bit)、EK证书,SRK(2048bit)及属主(Owner)授权数据(160bit)等。(类似于PC中的硬盘)
8. Opt-In

????平台属主决定是否使用TPM。(类似于PC中的power键)

?
?

PS:括号中的"类似于"只是帮助理解TPM的内部构造。另外提一下,TPM+CRTM+TSS构成了可信平台的子系统,该子系统可以用在PC、PDA、mobilephone、PS3、XBOX等通信设备系统中,增强该系统的安全性及可信性。

?

TDD这一部分就不介绍,具体可参见TIS标准。

二、TDDL

???TDDL是TSS用于和TPM通信的组件,它是运行于用户空间的第一个TSS组件,提供了内核模式到用户模式的转换。在TSS规范中,它也处于TCS和TDD之间,为TCS提供接口TDDLi,这里TDDLi是一个单线程同步接口,发送到TDDLi的TPM命令都已经被串行化。那么对于直接访问TPM设备的程序,TDDLi提供了7个功能函数,用于和TDD进行通信。这些函数包括:
???Tddli_Open()、Tddli_Close()、Tddli_TransmitData(…)、…
????值得说明的是,TDDL必须仅提供对TCS的链接。在这一部分,主要对TPMCommands以及授权协议作一下介绍。

????1.TPMCommands

???下面来具体介绍一下TPM Command。TPMCommands就是TPM可以直接理解的命令,用这些命令可以直接访问TPM,如图:

这样一个简单的询问PCR数量的命令交互过程就完成了。传输以及接受到的命令流都是以图中十六进制方式表示的。

?

2. 授权协议(Authorization Protocols)

???授权是指,能够证明请求者拥有执行某个TPM功能和使用某些对象的许可。用双方共享秘密(授权数据 )进行证明,无其他方式。

???授权数据是一个在用户和TPM之间共享的160bit秘密值,该秘密值由用户创建,可以看做是password。SRK及TPMOwner的授权数据要保存在TPM内部非易失性存储区内,而其他对象的授权数据则要与其自身进行绑定。当我们在编写关于TPM程序的时候,授权数据在策略对象里设置。

???在TPM中授权协议有很多,仅介绍其中有代表性的两个协议:对象无关授权协议(OIAP)以及对象相关授权协议(OSAP)。

????(1)ObjectIndependent Authorization Protocol (OIAP)
???????为提高效率而设计,在一个授权会话中可以验证一个或多个不同的对象;
???????验证的过程使用双方共享的秘密值(授权数据);
????(2)ObjectSpecific Authorization Protocol (OSAP)
???????在一个授权会话中仅对一个对象进行操作;
???????设置或重新设置授权数据的时候使用该协议;

下面用一个例子来说明这两个协议的使用,该例子说明的是一个密钥的创建-》加载-》使用整个过程所使用的授权协议,如图所示:

总的说来,这两个协议基于的是传统的"挑战-响应"认证方法,比较容易理解。

?

?

三、TCG Core Service

???此部分将详细介绍TCS核心服务,为什么要有这个服务呢?首先分析一下TPM所存在的一些缺陷,如下:

???(1)一次只有一个操作可以进行;

???(2)由于硬件的限制,TPM处理速度很慢;

???(3)有限的资源,包括密钥槽、授权槽等;

???(4)只能通过一个驱动程序与其进行串行通信;

????(5)本地软件与之通信是有限制的。

???针对这些缺陷,TCS采取如下的方法:

???(1)可以对多个TPM待处理的操作进行排队;

???(2)对于不需要TPM处理的操作,TCS可以自行作出响应;

???(3)对TPM有限资源进行管理,可看做是无限的资源;

???(4)将输入输出的数据进行相应的转换;

???(5)可以对资源提供本地的或者远程的调用方式。

????那么TCS的特点又有哪些呢?

???(1)TCS是一个后台服务(类似于Linux下的daemon,或者windows下的system service);

???(2)它为TSP提供标准的接口TCSi(稍后介绍);

???(3)TCG标准中,TCS是唯一一个可以直接访问TPM的实体;

????(4)每个TPM仅对应一个TCS(注意:TCS并不提供加解密功能);

???(5)对TPM有限的资源进行管理(密钥、证书管理,以及上下文的管理);

???(6)TCS负责调度要操作的TPM命令(注意:每个操作都是原子操作,并且允许多线程访问);

???(7)TCS将上层的命令转换为TPM命令格式。

???对于(4)~(7)这四个特点来说,我们可以将TCS视为一个软件的TPM。就其本质来说,TCS就是一个管理服务。

1. TCS Interface(TCSi)

???它类似于C语言接口(说C接口只是为了方面讨论而定义的基准,其实并不是这么做。真正的TCS接口定义在TSS发布的.wsdl文件中,实为Web服务。),允许多个线程访问TCS,每个操作都是原子操作,它作为系统进程存在,TSP与之的通信有可能是RPC,如图。

2. Manager Services

???用文字叙述较为困难,做了几个图来具体介绍一下TCS所提供的管理服务,如图:

(注意:这里的Persistent Storage与之后介绍的TSP层的PersistentStorage不是同一个贮存区,他们各自有其贮存区,在TCS层仅有一个贮存区,而在TSP层则针对不同的用户有不同的贮存区。

时间: 2024-10-20 05:12:29

TSS学习记录的相关文章

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Windows API 编程学习记录<二>

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Windows API 编程学习记录<三>

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr

Python学习记录-2016-11-29

今日学习记录: 心灵鸡汤: 要有合适自己的目标,一个目标一个目标实现,切忌好高骛远: 最好的投资就是投资自己: 实现梦想 学习,学习,再学习: Talk is cheap. 从本身而言,余三十而立之年,从事测试行业7七年有余,一年半华为外包路由器,两年无线wifi测试,一年半网管软件测试,一年自动化测试经理,推行公司自动化测试进程,从开始的TCL,到现在的python,工欲善其事必先利其器,所以自己来学习,总体我认为我的目标是一直前进的,不断变化的,但是方向并没有大的错误,有些累,所以近期有些懈

程序的机械级表示学习记录

程序的机械级表示学习记录 X86的三代寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全. 8086的分段模式. IA32的带保护模式的平坦模式. 对于机械级编程的两种重要抽象 ISA:机械级程序的格式和行为,定义为指令集体系结构,它定义了处理器状态.指令的格式,以及每条指令对状态的影响. 虚拟地址:机器级程序使用的存储器地址,提供的存储器模型看上去是一个非常大的数组.存储器系统的实际实现是将多个硬件存储器和操作系统软件组合起来的. 在GCC中获得汇编代码与反汇编 获得汇编代码:

python 系统地学习记录

由头: python值得一学. 尝试一下写学习记录,看看效果. 1.记录一些不熟悉或者重要的知识点. 2.记录一些遇到的问题,标签 Question. 书:python基础教程(第2版) Chapter 1:基础知识 本章的内容熟悉即可. 比较重要的是字符串,单双引号转义,str,repr... Time 1.5 h  2015.8.31 23:09 版权声明:本文为博主原创文章,未经博主允许不得转载.

Java 静态内部类与非静态内部类 学习记录.

目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合,我并不是很清楚,留下一些值得思考的问题作为记录,说不定以后能自己来填.于是就会有这篇文章啦. 常规使用方法我也不想介绍,网上一大把,我就说说比较容易错的,值得注意的地方. 注意 这篇文章只是分享一下我对内部类的一些研究与困惑吧,说不定对大家有帮助,说不定能引导大家一起思考学习.Java语法知识其实