TCG Software Stack

Download Report

Transcript TCG Software Stack

Trusted Computing
TSS - TCG Software
Stack
TCG Software Stack
1
2010-04-28
Overview
•
•
•
•
•
•
Introduction
TPM Internals
TPM Device Driver (TDD)
TCG Device Driver Library (TDDL)
TCG Core Services (TCS)
TCG Service Provider (TSP)
TCG Software Stack
2
Overview
• Introduction
– TSS Overview
– TSS Architecture
•
•
•
•
•
TPM Internals
TPM Device Driver (TDD)
TCG Device Driver Library (TDDL)
TCG Core Services (TCS)
TCG Service Provider (TSP)
TCG Software Stack
3
Introduction
• TSS是与TPM进行交互的核心软件部件
• TSS的设计规范由TCG颁布
– TSS 1.2规范已有750余页
– 厂商自行设计的TSS必须符合TSS 1.2标准
• TSS的设计目的
–
–
–
–
1. 为应用程序提供到TPM功能的单入口点
2. 提供对TPM的同步访问
3. 按标准构建字节流隐藏应用程序所构建的命令流
4. TPM的资源管理
TCG Software Stack
4
Introduction
• TSS体系结构
– TCG服务提供者(TSP)
• 顶层模块
• 提供标准的API接口
– TSS核心服务(TCS)
• 管理服务
– TCG设备驱动库(TDDL)
• 提供标准的驱动接口
TCG Software Stack
5
Overview
• Introduction
• TPM Internals
– I/O、Execution Engine、RNG、……
•
•
•
•
TPM Device Driver (TDD)
TCG Device Driver Library (TDDL)
TCG Core Services (TCS)
TCG Service Provider (TSP)
TCG Software Stack
6
TPM Internals
• I/O
– 管理流经通信总线的信号流
– 典型的 LPC总线 (Low PinCount Bus)
• Execution Engine
–
–
–
–
命令的校验及解析
命令码的执行
控制内部执行流
微控制器
TPM
RSA Engine
RNG
I/O(LPC Bus)
Non-volatile storage
(special keys, owner secret, …)
Opt-in
Execution Engine
Volatile storage
(keyslots, PCR registers, …)
RSA key-generator
SHA1 Engine
TCG Software Stack
7
TPM Internals
• SHA-1 Engine (160 bits)
– 主要被TPM使用,作为其可信的哈希算法
– 在平台启动过程中,其接口暴露在TPM外以进行度量工作
– 未来的TPM版本会加入更多的哈希算法
• RNG
– TPM内部的随机源
– Nonce , 密钥的生成, ...
TPM
RSA Engine
RNG
I/O(LPC Bus)
Non-volatile storage
(special keys, owner secret, …)
Opt-in
Execution Engine
Volatile storage
(keyslots, PCR registers, …)
RSA key-generator
SHA1 Engine
TCG Software Stack
8
TPM Internals
• RSA Engine and Key Generator
– 非对称密钥的生成 (RSA;存储SK及AIK 密钥大小
>= 2048)
– 必须支持 512, 1024, 2048 bit 的密钥
– 建议使用2048位的密钥
– RSA密钥生成遵循PKCS #1 标准
– RSA密钥在使用的时候要加载到TPM内部
TPM
RSA Engine
RNG
I/O(LPC Bus)
Non-volatile storage
(special keys, owner secret, …)
Opt-in
Execution Engine
Volatile storage
(keyslots, PCR registers, …)
RSA key-generator
SHA1 Engine
TCG Software Stack
9
TPM Internals
• Volatile Memory
– 密钥槽(10个)、 PCR值(24个)
– 密钥句柄、授权会话句柄等
• Non-Volatile Memory
– EK(2048bit)、 EK证书
– SRK(2048bit)及属主(Owner)授权数据(160bit)等
• Opt-In: 平台属主决定是否使用TPM
RSA Engine
TPM
RNG
I/O(LPC Bus)
Non-volatile storage
(special keys, owner secret, …)
Opt-in
Execution Engine
Volatile storage
(keyslots, PCR registers, …)
RSA key-generator
SHA1 Engine
TCG Software Stack
10
Overview
•
•
•
•
•
•
Introduction
TPM Internals
TPM Device Driver (TDD)
TCG Device Driver Library (TDDL)
TCG Core Services (TCS)
TCG Service Provider (TSP)
TCG Software Stack
11
TPM Device Driver
• TPM的驱动程序由厂商提供,并运行在内核模
式下;
• 驱动程序所提供的功能接口仅由TDDL调用使用,
而不允许其他的组件调用;
• 驱动是除了TSS外,是不提供对其他应用程序
的连接TPM服务;
• 提供除基本驱动以外的额外服务
例如,电源管理等;
• TDD接口设计必须参考TIS标准。
TCG Software Stack
12
Overview
•
•
•
•
Introduction
TPM Internals
TPM Device Driver (TDD)
TCG Device Driver Library (TDDL)
– Introduction
– TPM Commands
– TPM Authorization Protocols
• TCG Core Services (TCS)
• TCG Service Provider (TSP)
TCG Software Stack
13
TCG Device Driver Library
• Introduction
– TSS用于和TPM通信的组件。
– 运行于用户空间的第一个TSS组件,提供了内核模
式到用户模式的转换。处于TCS和TDD之间,为
TCS提供接口TDDLi。
– TDDLi是一个单线程同步接口,发送到TDDLi的
TPM命令都已经被串行化。
– 对于直接访问TPM设备的程序,TDDLi提供了7个功
能函数,用于和TDD进行通信。
• Tddli_Open()、Tddli_Close()、Tddli_TransmitData(…)、…
– TDDL必须仅提供对TCS的链接
TCG Software Stack
14
TCG Device Driver Library
• TPM Command
Command
– 规范中TPM有122个命令
– 所有TPM命令格式都有相同的头
PARAM
HMAC
#
SZ
#
1
Result
Type
Name
Description
2
TPM_TAG
tag
TPM命令标签
2
4
UINT32
paramSize
整个命令的大小
3
4
TPM_COMMAND_CODE
ordinal
命令索引,唯一标示一个命令,格式:TPM_ORD_XX
SZ
Tag
Name
0x00C1
TPM_TAG_RQU_COMMAND
0x00C2
TPM_TAG_RQU_AUTH1_COMMAND
0x00C3
TPM_TAG_RQU_AUTH2_COMMAND
0x00C4
TPM_TAG_RSP_COMMAND
0x00C5
TPM_TAG_RSP_AUTH1_COMMAND
0x00C6
TPM_TAG_RSP_AUTH2_COMMAND
TCG Software Stack
TPM_ORD_OIAP
10
0x0000000A
X
TPM_ORD_OSAP
11
0x0000000B
X
TPM_ORD_OwnerClear
91
0x0000005B
X
TPM_ORD_OwnerReadInternalPub
129
0x00000081
X
TPM_ORD_OwnerReadPubek
125
0x0000007D
X
TPM_ORD_OwnerSetDisable
110
0x0000006E
X
15
TCG Device Driver Library
• Example A:
How many PCRs do you have?
Command
PARAM
HMAC
#
SZ
#
1
Type
Name
Description
2
TPM_TAG
tag
TPM_TAG_RQU_COMMAND
2
4
UINT32
paramSize
Total number of input bytes including paramSize and tag
3
4
TPM_COMMAND_CODE
ordinal
Command ordinal: TPM_ORD_GetCapability
4
4
TPM_CAPABILITY_AREA
capArea
Partition of capabilities to be interrogated
5
4
UINT32
subCapSize
Size of subCap parameter
6
<>
BYTE[]
subCap
Further definition of information
SZ
TPM_GetCapability Command
命令标识
0x00 C1
包大小
0x00 00 00 16
命令索引
0x00 00 00 65
功能域
0x00 00 00 05
功能子域大小
0c00 00 00 04
功能子域
0x00 00 01 01
TCG Software Stack
… TPM_TAG_RQU_COMMAND
… Command size: 22 bytes (0x16)
… TPM_ORD_GetCapability
… TPM_CAP_PROPERTY
… Sub capability size: 4 bytes
… TPM_CAP_PROP_PCR
16
TCG Device Driver Library
• Example A:
Ok, listen: 24.
Result
PARAM
HMAC
#
SZ
#
1
Type
Name
Description
2
TPM_TAG
tag
TPM_TAG_RSP_COMMAND
2
4
UINT32
paramSize
Total number of output bytes including paramSize and tag
3
4
TPM_RESULT
returnCode
The return code of the operation.
4
4
UINT32
respSize
The length of the returned capability response
5
<>
BYTE[ ]
resp
The capability response
SZ
TPM_GetCapability Response
命令标识
0x00 C4
包大小
0x00 00 00 12
返回码
0x00 00 00 00
响应净荷大小
0x00 00 00 04
响应数据大小
0c00 00 00 18
TCG Software Stack
… TPM_TAG_RSP_COMMAND
… Response size: 18 bytes (0x12)
… TPM_SUCCESS
… Response payload size: 4 bytes
… Response data: 0x18 … 24 PCRs
17
TCG Device Driver Library
• Programme 1.
// 获取8个字节随机数;
// 使能SHA-1;
// 需加密的数据,64个字节;
TCG Software Stack
18
TCG Device Driver Library
• TPM Authorization Protocols
– Authorization
• 能够证明请求者拥有执行某个TPM功能和使用
某些对象的许可。
• 用双方共享秘密(授权数据 )进行证明,无其他
方式。
– Authorization Data
• 是一个在用户和TPM之间共享的160bit秘密值
• 由用户创建,可以看做是password
• SRK及TPM Owner的授权数据要保存在TPM内部非易失
性存储区内,而其他对象的授权数据则要与其自身进行
绑定。
TCG Software Stack
19
TCG Device Driver Library
• TPM Authorization Protocols
– Object Independent Authorization Protocol (OIAP)
• 为提高效率而设计,在一个授权会话中可以验证一个或
多个不同的对象
• 验证的过程使用双方共享的秘密值(授权数据)
– Object Specific Authorization Protocol (OSAP)
• 在一个授权会话中仅对一个对象进行操作
• 验证的过程使用双方共享的秘密值(授权数据)
• 设置或重新设置授权数据的时候必须使用该协议
TCG Software Stack
20
TPM Device Driver Library
• Example B: (创建并使用密钥—创建密钥)
TPM_OSAP(parentKeyHandle, NonceOdd)
authHandle, authLastNonceEven, NonceEven
ShareSecret = HMAC(parenthKeyAuth; NonceEven, NonceOdd)
TPM_CreateWrapKey(parentKeyHandle, encAuth,
keyInfo, authHandle, NonceOdd)
HMAC(ShareSecret; encAuth, keyInfo, authLastNonceEven, NonceOdd)
NonceEven’, keyBlob, HMAC(ShareSecret; NonceEven’, NonceOdd)
TCG Software Stack
21
TPM Device Driver Library
• Example B: (创建并使用密钥—加载密钥)
TPM_OIAP()
authHandle, NonceEven
TPM_LoadKey2(parentKeyHandle, Warppedkey, authHandle, NonceOdd)
HMAC(parentKeyauth; Warppedkey, NonceEven, NonceOdd)
NonceEven’, keyBlob, HMAC(parentKeyauth; NonceEven’, NonceOdd)
TCG Software Stack
22
TPM Device Driver Library
• Example B: (创建并使用密钥—使用密钥)
TPM OSAP(keyHandle, NonceOdd)
authHandle, authLastNonceEven, NonceEven
ShareSecret = HMAC(KeyAuth; NonceEven, NonceOdd)
TPM_Seal(keyHandle, encAuth, PCRInfo, data,
authHandle, NonceOdd)
HMAC(ShareSecret; encAuth, PCRInfo, data, authLastNonceEven, NonceOdd)
NonceEven’, SealedBlob, HMAC(ShareSecret; NonceEven’, NonceOdd)
TCG Software Stack
23
Overview
•
•
•
•
•
Introduction
TPM Internals
TPM Device Driver (TDD)
TCG Device Driver Library (TDDL)
TCG Core Services (TCS)
– Introduction
– Management Services
• TCG Service Provider (TSP)
TCG Software Stack
24
TCG Core Service
• Introduction
– TPM的缺陷
•
•
•
•
•
一次只有一个操作可以进行
处理速度很慢
有限的资源,包括密钥槽、授权槽等
只能通过一个驱动程序与其进行串行通信
本地软件与之通信是有限制的
– TCS的优点
•
•
•
•
•
可以对多个TPM待处理的操作进行排队
对于不需要TPM处理的操作,TCS可以自行作出响应
对TPM有限资源进行管理,可看作是无限的资源
将输入输出的数据进行相应的转换
可以对资源提供本地的或者远程的调用方式
TCG Software Stack
25
TCG Core Service
• Introduction
– TCS的特点
• TCS是一个后台服务 (daemon or system service)
• 为TSP提供标准的接口
• TCG标准中,TCS对TPM的访问是唯一的
• 每个TPM仅对应一个TCS
– TCS并不提供加解密功能
• 对TPM有限的资源进行管理
– 密钥、证书管理
– 上下文管理
“软件
TPM”
• TCS负责调度要执行的TPM命令
– 每个操作都是原子操作
– 允许多线程访问TCS
• TCS对TPM命令格式进行转换
TCG Software Stack
26
TCG Core Service
• Introduction
– TCS Interface (TCSi)
•
•
•
•
P
Romate P
TSP
类C语言接口
允许多个线程访问TCS
TCG
每个操作都是原子操作
作为系统进程而存在,TSP与TCS之间的通信有可能是
RPC。
• 真正的接口定义在TSS发布的.wsdl文件中。
TCG Software Stack
TSP
RPC
27
TCG Core Service
• Management Services
– 上下文的管理
TSS Core Services Interfaces (TCSi)
• 在发送命令到TCS之前,上层(TSP, 应用
程序)需要打开一个TCS上下文对象
• TCS上下文管理器管理多个TCS上下文
• 为每一个上下文分配所需内存并设置其
中每一类型对象的句柄,同时包括该上
下文的句柄
• 对每一个上下文进行内存管理
TCG Software Stack
TCS Context Manager
Context
Allocated
Memory blocks
Handles
28
TCG Core Service
• Management Services
– 密钥、证书的管理
TSS Core Services Interfaces (TCSi)
Key & Credential
Manager
• 证书管理
– 只负责对EK证书、平台证书
及一致性证书进行管理,只
有Owner有对证书的访问权
TCG Software Stack
Persistent
Storage (S)
Key Cache Manager
29
TCG Core Service
TPM
• 密钥存储管理
– 定义了一个密钥永
久存储层次结构,
在其内部对其进行
管理
– 所有密钥在其中进
行注册,并为每个
密钥分配唯一标识
的UUID,通过它来
加载密钥
– 子密钥的加载依赖
于父密钥
TCG Software Stack
Key Slots
EK
Authdata
RSA
SRK
Key Manager
……
……
……
……
……
……
Mass
Storage
30
TCG Core Service
TPM
• 密钥缓存管理
– 在密钥加载之后,
为其分配一个唯一
的TCS密钥句柄
– 当KeySlot没有空间
时,将其中某一个
密钥换出,然后新
密钥加入
– 需要建立一张TCS
与TPM密钥句柄的
映射表
Key Slots
EK
Authdata
RSA
SRK
Key Manager
……
……
……
……
TCG Software Stack
……
……
Mass
Storage
31
TCG Core Service
• Example C.
• 创建TPM密钥
– RSA引擎创建一个
新的RSA密钥对
– 一个父密钥(存储密
钥)需要被指定,用
于封装(Wrap) 使用
后的新密钥
– 为新密钥设置授权
信息
TPM
Key Slots
EK
Authdata
RSA
SRK
Key Manager
……
……
……
……
TCG Software Stack
……
……
Mass
Storage
32
TCG Core Service
• Example C.
• 存放TPM密钥
– 在使用完RSA密钥
对后,将其存放在
密钥结构中,用
UUID唯一标识
– 用父密钥对其加密:
– Enc(Ppk; PK,
Enc(Authdata; SK))
TPM
Key Slots
EK
Authdata
RSA
SRK
Enc
Key Manager
……
……
……
……
TCG Software Stack
……
Mass
Storage
33
TCG Core Service
• Example C.
• 加载密钥
– 加载一个密钥(签名、
存储、AIK等)以备
使用
– 首先需要知道该密
钥的UUID,然后对
其父密钥进行授权
解密操作
TPM
Key Slots
EK
Authdata
RSA
SRK
Key Manager
……
……
……
……
TCG Software Stack
……
……
1
2
Mass
Storage
34
TCG Core Service
• Example C.
• 加载密钥
– 第一步:将# 1密钥
部分用SRK的私钥
进行解密,这时候
需要SRK的授权数
据
– 将#1存放在KeySlot
中
TPM
Key Slots
1
EK
Authdata
RSA
SRK
Dec
Key Manager
……
……
……
……
TCG Software Stack
……
……
1
2
Mass
Storage
35
TCG Core Service
• Example C.
• 加载密钥
TPM
Authdata
RSA
SRK
– 第二步:用#1的私
钥对#2密钥进行解
密,并将其放入
KeySlot中
– #1需要授权数据
Dec
Key Manager
……
……
……
……
TCG Software Stack
Key Slots
1
2
EK
……
……
1
2
Mass
Storage
36
TCG Core Service
• Example C.
• 加载密钥
– 第三步:用#2的私
钥对所要加载的密
钥进行解密,并将
其放入KeySlot中
– #2需要授权数据
– 这样一个密钥的加
载就完成了,在使
用该密钥的时候会
需要该密钥的授权
数据
TCG Software Stack
TPM
Key Slots
1
2
EK
Authdata
RSA
SRK
Dec
Key Manager
……
……
……
……
……
……
1
2
Mass
Storage
37
TCG Core Service
• Management Services
– 事件的管理
TSS Core Services Interfaces (TCSi)
• 生成、管理并输出相关的事件(PCR)记录
– 主要的事件记录由TSS来管理,例如运行时的
度量(IMA)
– 其他并不受TSS管理的事件,例如BIOS度量
由CRTM完成,OS内核模块的度量由
VMM(DRTM)完成。
– 为外部实体提供所需要事件记录
Event Manager (Event Log)
TSS runtime
BIOS
OS
• 事件记录存放于相应的数据库中
TCG Software Stack
38
TCG Core Service
• Example D.
TCG Software Stack
39
TCG Core Service
• 参数块生成器
TSS Core Services Interfaces (TCSi)
• 所有的命令(如,C类型
的数据结构)都要转变为
TDD能理解的字节流
• 对于TPM响应的字节流要
转变为响应的数据结构
• 该生成器与TCS内部的各
个模块进行交互
TCG Software Stack
ParameterBlock Generartor
TCG Device Driver Library
40
TCG Core Service
• TCS体系结构
TSS Core Services Interfaces (TCSi)
Event Manager (Event Log)
Key & Credential
Manager
TCS Context Manager
TSS runtime
BIOS
OS
Persistent
Storage (S)
Key Cache Manager
ParameterBlock Generator
事件
管理
TCG Software Stack
接口
管理
TCG Device Driver Library
资源
管理
41
Overview
•
•
•
•
•
•
Introduction
TPM Internals
TPM Device Driver (TDD)
TCG Device Driver Library (TDDL)
TCG Core Services (TCS)
TCG Service Provider (TSP)
–
–
–
–
Introduction
Working Objects
Programme with TSPi
Some Applications
TCG Software Stack
42
TCG Service Provider
• Introduction
– 所提供的服务
•
•
•
•
完整性收集和报告服务
保护存储服务
加密、解密服务
证书服务
– 不仅提供对TPM的访问(经由TCS),也包括额外的
功能,比如签名校验、哈希等
– 可以访问远程的TCS,经由RPC或者用标准的SOAP
消息
– 永久的用户存储,与TCS类似,但是它针对的是每
个用户,提供了隔离机制
– 提供了标准的C语言接口(TSPi)及公共的库函数
TCG Software Stack
43
TCG Service Provider
• Introduction
– TCG Service Provider Interface
• 是一种面向对象的API接口,每一条API都与对象关联
• TSPI定义的类
–
–
–
–
–
–
–
–
上下文类
策略类
TPM类
密钥类
加密数据类(密封或绑定的数据)
PCR类
NVRAM 类
HASH类
• 每一个Tspi_XXX_(API)都按此命名,以便程序员知道正
在操作的是哪种类型的对象
TCG Software Stack
44
TCG Service Provider
• Working Objects
– 上下文对象
•
•
•
•
•
在概念上类似于进程上下文
提供管理资源和释放内存的功能
连接到本地或者远程的TCS
创建工作对象
为工作中的对象建立默认策略,比如
为代表TPM所有者的TPM对象建立
策略对象
• 提供访问永久性存储器数据库的功
能
TCG Software Stack
45
TCG Service Provider
• Working Objects
– 与上下文相关的API
•
•
•
•
Tspi_Context_Create( &hContext);
//生成了一个上下文对象,创建了一个默认策略
Tspi_Context_Connect( hContext, Destination)
//上下文连接到TCS,并产生一个上下文句柄,若Destination
为空则连接到本地TCS;并隐式地创建一个TPM对象,并与
上下文关联
• Tspi_Context_CreateObject( hContext, TSS_Object_Type, Flags,
hObject)
• //在上下文中创建一个新的对象,除了TPM对象,其余的对
象都由此函数创建
TCG Software Stack
46
TCG Service Provider
• Working Objects
– 策略对象
• 三种策略类型:
– 使用策略
– 迁移策略
– 操作策略
• 保存命令所需要用到的授权数据
–
–
–
–
–
装载密钥
迁移密钥
加密/解密数据
获取TPM所有权
获得和设置TPM敏感属性时
TCG Software Stack
47
TCG Service Provider
• Working Objects
– 与策略对象相关的API
• Tspi_Policy_Setsecret( hPolicy, TSS_Secret_Mode, secret)
• //为该策略设置秘密模式及秘密值,对于每个需要唯一口令
的对象,必须创建一个新的策略,然后关联给该对象
• Tspi_Policy_AssignToObject( hPolicy, hObject);
• //将该策略关联到一个对象或多个对象
TCG Software Stack
48
TCG Service Provider
• Working Objects
– TPM对象
• 当TSP上下文连接到TCS时会隐式地
生成一个TPM对象,并为其分配一
个既定的策略,该策略处理TPM
Owner的授权数据
• 提供了对证书的访问
• TPM对象的API接口提供了几类操作
–
–
–
–
–
–
身份认证管理
获取\设置TPM状态
TPM测试
获取TPM功能
获取随机数
PCR事件
TCG Software Stack
49
TCG Service Provider
• Working Objects
– Key对象
• 用来表示TPM密钥(RSA密钥对)
• 有7种不同的密钥类型
–
–
–
–
–
–
–
SRK
AIK密钥
存储(Store)密钥
签名(Sign)密钥
绑定(Bind)密钥
密封(Seal)密钥
派生(Leavcy)密钥
• 在用户永久存储区保存密钥
TCG Software Stack
50
TCG Service Provider
• Working Objects
– 与Key对象相关的API
•
•
•
•
Tspi_Key_Loadkey( hKey, hUnwrappingKey )
//加载密钥key到TPM中,需用父密钥对其解密
Tspi_Key_CreateKey( hKey, hWrappingKey, hPcrComposite)
//创建密钥key,并用父密钥对其私钥部分加密,若使用PCR值
则需指明用到哪几个PCR合成对象
• Tspi_Key_WrapKey( hKey, hWrappingKey, hPcrComposite)
• //与Tspi_Key_CreateKey功能一样,但不创建密钥
TCG Software Stack
51
TCG Service Provider
• Working Objects
– PCR合成对象
• 代表了一批散列值及其合成的
摘要值
• 提供了对PCR值选择(Select)、
读(Get)、写(Set)和扩展(Extend)
等操作
TCG Software Stack
52
TCG Service Provider
• Working Objects
– 与PCR合成对象相关的API
• Tspi_PcrComposite_GetPcrValue( hPcrComposite, PcrIndex,
ulPcrValueLength, rgbPcrValue)
• //从PCR合成对象中获取相应索引的PCR值
• Tspi_PcrComposite_SetPcrValue( hPcrComposite, PcrIndex,
ulPcrValueLength, rgbPcrValue)
• //设置指定的PCR值到PCR对象中
• Tspi_PcrComposite_SelectPcrIndex(hPcrComposite,PcrIndex)
• //选择要使用哪一个PCR值,并记录在PCR合成对象中
TCG Software Stack
53
TCG Service Provider
• Working Objects
– 与PCR合成对象相关的API
• Tspi_TPM_PcrRead( hTPM, PcrIndex, PcrValueLength, PcrValue)
• //读取TPM中的PCR值
• Tspi_TPM_PcrExtend( hTPM, PcrIndex, DigestValue,
PcrValueLength, PcrValue)
• //对PCR值进行扩展,TCS记录下扩展事件,并返回扩展后的
PCR值。PCRnew = SHA-1( PCRold || Measure )
TCG Software Stack
54
TCG Service Provider
• Working Objects
– 散列对象
• TSS仅支持SHA-1算法,若使用其他
散列算法,则需一个支持所需算法
的外部库
• 支持对hash值的签名及校验操作
TCG Software Stack
55
TCG Service Provider
• Working Objects
– 与散列对象相关的API
•
•
•
•
Tspi_Hash_UpdateHashValue( hHash,strlen(data),data);
//对data进行SHA-1操作
Tspi_Hash_GetHashValue( hHash, &digestlen,&digest)
//获取HASH对象的散列值
TCG Software Stack
56
TCG Service Provider
• Working Objects
– 对象之间的关系
需授权
对象
TCG Software Stack
无授权
对象
57
TCG Service Provider
• Programme with TSPi
– Example D.
• D-1. PCR值的读取
– (1)创建上下文并连接到本地TCS;
– Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext, 0);
– (2)获取TPM对象;
– Tspi_Context_GetTpmObject(hContext,&hTPM);
– (3)读取TPM对象的PCR值;
– Tspi_TPM_PcrRead(hTPM,i,&pulPcrValueLength,&prgbPcrValue)
TCG Software Stack
58
TCG Service Provider
• Programme with TSPi
– Example D.
• D-2. PCR值的扩展
– (1)创建上下文并连接到本地TCS;
– Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext, 0);
– (2)获取TPM对象;
– Tspi_Context_GetTpmObject(hContext,&hTPM);
– (3)扩展TPM对象的PCR值,通过TCS扩展到真正TPM的PCR值;
– Tspi_TPM_PcrExtend(hTPM, i, ulPcrDataLength, pbPcrData,
pPcrEvent, &pulPcrValueLength,&prgbPcrValue)
TCG Software Stack
59
TCG Service Provider
• Programme with TSPi
– Example D.
• D-3. PCR合成对象的设置
– (1)创建上下文并连接到本地TCS;
– Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext, 0);
– (2)创建PCR合成对象;
– Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_PCR
, TSS_PCRS_STRUCT_INFO_LONG, &hPcrs)
– (3)选择所要设置的PCR;
– Tspi_PcrComposite_SelectPcrIndex(hPcrs,ulPcrIndex)
– (4)对所选择的PCR进行设值;
– Tspi_PcrComposite_SetPcrValue(hPcrs,ulPcrIndex,
sizeof(digestValues), digestValues)
TCG Software Stack
60
TCG Service Provider
• Programme with TSPi
– Example E.
• SHA-1散列函数的使用
– (1)创建上下文并连接到本地TCS;
– Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext, 0);
– (2)创建HASH对象;
– Tspi_Context_CreateObject(hContext,
TSS_OBJECT_TYPE_HASH, TSS_HASH_SHA1, &hHash)
– (3)将数据进行HASH
– Tspi_Hash_UpdateHashValue(hHash,strlen(data),data);
– (4)取回HASH对象的散列值
– Tspi_Hash_GetHashValue(hHash, &digestlen,&digest)
• SHA-1签名及校验(在签名密钥生成并注册之后)
TCG Software Stack
61
TCG Service Provider
• Programme with TSPi
– Example F.
• F-1(i). 密钥生成并注册
– (1)创建上下文并连接到本地TCS;
– Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext, 0);
– (2)创建密钥对象,并设值相应的密钥属性
– Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_RSA
KEY, FLAGS, &hKey);
– (3)创建策略对象,属性为使用策略
– Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_POLI
CY,TSS_POLICY_USAGE, &hKeyPolicy);
– (4)为策略设置秘密值,也就是授权数据
– Tspi_Policy_SetSecret(hKeyPolicy,TSS_SECRET_MODE_PLAIN,
strlen(secret), secret)
TCG Software Stack
62
TCG Service Provider
• Programme with TSPi
– Example F.
• F-1(ii). 密钥生成并注册
–
–
–
–
–
–
–
–
(5)将该策略关联到密钥对象
Tspi_Policy_AssignToObject(hKeyPolicy,hKey)
(6)加载一个存储密钥,作为其父密钥,此时需要该密钥的授权数据
Tspi_Context_LoadKeyByUUID(hContext,TSS_PS_TYPE_SYSTE
M,SRK_UUID,&hSRK)
(7)创建新的密钥
Tspi_Key_CreateKey(hKey,hSRK, 0)
(8)将新创建的密钥注册,并用UUID唯一标识
Tspi_Context_RegisterKey(hContext, hKey,
TSS_PS_TYPE_USER,user_storage_UUID,
TSS_PS_TYPE_SYSTEM, SRK_UUID)
TCG Software Stack
63
TCG Service Provider
• Programme with TSPi
– Example F.
• F-2(i). 加载并使用密钥
– (1)创建上下文并连接到本地TCS;
– Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext, 0);
– (2)创建策略对象
– Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_POLIC
Y,TSS_POLICY_USAGE, &hKeyPolicy)
– (3)为策略对象设置要加载密钥的授权数据
– Tspi_Policy_SetSecret(hKeyPolicy,TSS_SECRET_MODE_PLAIN,
strlen(secret), secret)
– (4)加载该密钥的父密钥,Tspi_Context_GetRegisteredKeysByUUID
– Tspi_Context_LoadKeyByUUID(hContext,TSS_PS_TYPE_SYSTEM,
SRK_UUID,&hSRK)
TCG Software Stack
64
TCG Service Provider
• Programme with TSPi
– Example F.
• F-2(ii). 加载并使用密钥
– (5)通过密钥的UUID获取该密钥对象
– Tspi_Context_LoadKeyByUUID(hContext,TSS_PS_TYPE_USER,
user_storage_UUID,&hKey)
– (6)将第(2)&(3)步创建的策略关联到该密钥对象
– Tspi_Policy_AssignToObject(hKeyPolicy,hKey)
– (7)使用该密钥
TCG Software Stack
65
TCG Service Provider
• Programme with TSPi
– Example G.
• Seal 操作(条件密码操作)
• 将密钥操作和平台配置信息(PCR)进行绑定,将数据加密绑
定到用户指定的PCR。
• KPUB-S{VPCR-x,K}, K是用于加密消息的对称密钥,只有当
当前的平台配置信息符合VPCR-x时,解密出K,对加密的密
文进行解密。
TCG Software Stack
66
TPM模拟环境的搭建
• 准备工作:
– 1. Linux操作系统,内核版本在2.6.30以上
– 2. Tpm_emulator软件
– 3. TSS软件栈
• 以上软件安装完毕后,执行以下操作
– 1.开启Tpm_emulator
– 2.开启TSS软件栈