第1章 TPM的历史 1
1.1 为什么是TPM 1
1.2 TPM规范:从1.1b到1.2的发展史 2
1.3 从TPM 1.2发展而来的TPM 2.0 3
1.4 TPM 2.0规范的发展历史 4
1.5 小结 5
第2章 基础安全概念 6
2.1 密码攻击 7
2.1.1 穷举攻击 7
2.1.2 针对算法本身的攻击 8
2.2 安全相关定义 9
2.3 密码大家族 10
2.3.1 安全哈希(或摘要) 10
2.3.2 哈希扩展 11
2.3.3 HMAC:消息认证码 12
2.3.4 KDF:密钥派生函数 12
2.3.5 认证或授权票据 13
2.3.6 对称密钥 13
2.3.7 nonce 15
2.3.8 非对称密钥 15
2.4 公钥认证 17
2.5 小结 18
第3章 TPM 2.0快速教程 19
3.1 TPM 1.2的使用场景 20
3.1.1 身份识别 20
3.1.2 加密 21
3.1.3 密钥存储 21
3.1.4 随机数生成器 22
3.1.5 NVRAM存储 22
3.1.6 平台配置寄存器 23
3.1.7 隐私启用 23
3.2 TPM 2.0额外功能的使用场景 24
3.2.1 算法灵活性(TPM 2.0新功能) 24
3.2.2 增强授权(TPM 2.0新功能) 26
3.2.3 密钥快速加载(TPM 2.0新功能) 28
3.2.4 非脆性PCR(TPM 2.0新功能) 28
3.2.5 灵活管理(TPM 2.0新功能) 29
3.2.6 按名称识别资源(TPM 2.0新功能) 30
3.3 小结 30
第4章 使用TPM的现有应用程序 31
4.1 与TPM交互的应用程序接口 31
4.2 TPM管理和WMI 33
4.2.1 平台加密程序 33
4.2.2 虚拟智能卡 34
4.3 使用TPM的应用程序 34
4.4 应该使用但还未使用TPM的应用程序 36
4.5 构建TPM 1.2应用程序 36
4.6 TSS.Net和TSS.C++ 37
4.7 Wave Systems Embassy套件 38
4.8 开发TPM时应该要注意的问题 38
4.8.1 Microsoft BitLocker 38
4.8.2 IBM文件/文件夹加密 39
4.9 TPM 2.0中新的可管理解决方案 39
4.10 小结 40
第5章 规范指南 41
5.1 TPM 2.0库规范 42
5.2 一些定义 42
5.2.1 常规定义 43
5.2.2 命令字节流的主要字段定义 43
5.2.3 响应字节流的主要字段定义 44
5.3 第三部分:命令 44
5.4 数据细节 48
5.4.1 常用数据结构体 48
5.4.2 联合体 49
5.4.3 规范化数据(canonicalization) 50
5.4.4 字节顺序(endianness) 51
5.5 第二部分:符号语法 51
5.6 第三部分:表格修饰符 51
5.7 规范中的常用部分 52
5.8 如何在规范中寻找信息 52
5.9 加强对TPM 2.0规范的理解 53
5.9.1 Will 53
5.9.2 Ken 54
5.9.3 David 54
5.10 其他TPM 2.0规范 55
5.11 小结 55
第6章 执行环境 56
6.1 设置TPM 56
6.1.1 Microsoft模拟器 56
6.1.2 用源码构建模拟器 57
6.1.3 设置模拟器的二进制文件版本 57
6.1.4 运行模拟器 57
6.1.5 测试模拟器 58
6.2 设置软件栈 59
6.2.1 TSS 2.0 59
6.2.2 TSS.net 60
6.3 小结 60
第7章 TPM软件栈 61
7.1 TSS概述 61
7.2 FAPI 63
7.3 SAPI 68
7.3.1 命令上下文分配函数 69
7.3.2 命令准备函数 70
7.3.3 命令执行函数 71
7.3.4 命令完成函数 72
7.3.5 简单代码示例 73
7.3.6 SAPI测试代码 74
7.4 TCTI 75
7.5 TAB 75
7.6 RM 76
7.7 设备驱动 76
7.8 小结 77
第8章 TPM实体 78
8.1 永久性实体 78
8.1.1 持久性hierarchy 78
8.1.2 临时性hierarchy 79
8.1.3 重置词典攻击锁定 79
8.1.4 PCR 79
8.1.5 保留句柄 80
8.1.6 口令授权会话 80
8.1.7 平台NV启用 80
8.2 NV索引 80
8.3 对象 81
8.4 非持久性实体 81
8.5 持久性实体 81
8.6 实体名称 82
8.7 小结 84
第9章 hierarchy 85
9.1 三个持久性hierarchy 85
9.1.1 平台hierarchy 86
9.1.2 存储hierarchy 87
9.1.3 背书hierarchy 87
9.2 隐私 88
9.2.1 激活证书 88
9.2.2 其他隐私考虑 90
9.3 空hierarchy 91
9.4 密码原语 92
9.4.1 随机数生成器 92
9.4.2 摘要原语 92
9.4.3 HMAC原语 94
9.4.4 RSA原语 95
9.4.5 对称密钥原语 95
9.5 小结 95
第10章 密钥 97
10.1 密钥命令 97
10.2 密钥生成器 98
10.3 主密钥和种子 98
10.4 密钥持久存留 101
10.5 密钥缓存 101
10.6 密钥授权 102
10.7 密钥销毁 102
10.8 密钥hierarchy 103
10.9 密钥类型和属性 103
10.9.1 对称和非对称密钥属性 103
10.9.2 复制属性 103
10.9.3 受限的签名密钥 105
10.9.4 受限的解密密钥 106
10.10 上下文管理与加载 106
10.11 空hierarchy 107
10.12 认证 107
10.13 密钥解析 109
10.14 小结 111
第11章 非易失性索引 113
11.1 NV普通索引 114
11.1.1 NV计数器索引 116
11.1.2 NV位字段索引 116
11.1.3 NV扩展索引 117
11.1.4 混合索引 117
11.1.5 NV访问控制 119
11.1.6 NV写入 119
11.1.7 NV索引句柄值 120
11.1.8 NV名称 121
11.1.9 NV口令 122
11.2 专用命令 122
11.3 小结 123
第12章 平台配置寄存器 124
12.1 PCR值 124
12.1.1 PCR数量 126
12.1.2 PCR命令 126
12.1.3 PCR授权 126
12.2 PCR验证 128
12.2.1 PCR quote操作的细节 129
12.2.2 PCR属性 130
12.2.3 PCR授权与策略 131
12.2.4 PCR算法 131
12.3 小结 132
第13章 授权与会话 133
13.1 会话相关的定义 134
13.2 口令、HMAC和策略会话 134
13.3 会话与授权 135
13.4 授权角色 138
13.5 命令和响应授权域细节 139
13.5.1 命令授权域 139
13.5.2 命令授权结构 139
13.5.3 响应授权结构 141
13.6 口令授权:最简单的授权方式 141
13.6.1 口令授权生命周期 142
13.6.2 创建一个口令授权实体 142
13.6.3 更改已创建的实体的口令授权 142
13.6.4 使用口令授权 143
13.6.5 代码示例:口令会话 143
13.7 开启HMAC和策略会话 146
13.7.1 TPM2 StartAuthSession命令 147
13.7.2 会话密钥和HMAC密钥的细节 148
13.7.3 TPM2 StartAuthSession句柄和参数 149
13.7.4 会话变体 150
13.8 HMAC和策略会话的区别 151
13.9 HMAC授权 152
13.9.1 HMAC授权的生命周期 152
13.9.2 HMAC与策略会话代码示例 154
13.9.3 使用HMAC会话发送多命令(滚动随机数) 163
13.9.4 HMAC会话安全 164
13.9.5 HMAC会话数据结构 164
13.10 策略授权 165
13.10.1 EA的工作原理 166
13.10.2 策略授权中的时间间隔 167
13.10.3 策略授权的生命周期 168
13.11 组合授权生命周期 171
13.12 小结 172
第14章 扩展授权策略 173
14.1 策略和密码 174
14.2 扩展授权的原因 174
14.2.1 多种认证方式 174
14.2.2 多因素认证 175
14.3 EA的工作步骤 175
14.4 创建策略 176
14.5 基于命令的断言 185
14.6 多因素认证 186
14.6.1 实例1:智能卡和口令 186
14.6.2 实例2:基于口令的仅用于签名的密钥策略 187
14.6.3 实例3:PC状态、口令和指纹 187
14.6.4 实例4:适用于一次引导周期的策略 187
14.6.5 实例5:灵活的PCR策略 188
14.6.6 实例6:组权限策略 188
14.6.7 实例7:1~100的NVRAM策略 189
14.7 复合策略:在策略中使用OR逻辑 189
14.7.1 制定复合策略 190
14.7.2 实例:工作或家用计算机的策略 191
14.8 创建策略时的注意事项 192
14.8.1 终端用户角色 192
14.8.2 管理员角色 192
14.8.3 替补角色 192
14.8.4 办公室角色 192
14.8.5 家庭角色 192
14.9 使用策略授权命令 193
14.9.1 启动策略 193
14.9.2 满足策略 193
14.9.3 如果策略是复合的 194
14.9.4 如果策略是灵活的(使用通配符) 195
14.10 认证的策略 196
14.11 小结 197
第15章 密钥管理 198
15.1 密钥生成 198
15.2 密钥树:使用相同算法集的密钥在一棵树里 200
15.3 复制 201
15.4 密钥分发 203
15.5 密钥激活 203
15.6 密钥销毁 204
15.7 综合 205
15.7.1 实例1:简单密钥管理 205
15.7.2 实例2:启用了TPM 2.0Windows系统的IT企业 206
15.8 小结 207
第16章 TPM命令审计 208
16.1 为什么要审计 208
16.2 审计命令 210
16.3 审计类型 210
16.3.1 命令审计 210
16.3.2 会话审计 211
16.4 审计日志 211
16.5 审计数据 212
16.6 专属审计 213
16.7 小结 213
第17章 解密和加密会话 214
17.1 加密和解密会话的作用 214
17.2 实际用例 215
17.3 解密和加密的限制 215
17.4 解密和加密设置 215
17.4.1 伪代码流 216
17.4.2 示例代码 218
17.5 小结 227
第18章 上下文管理 228
18.1 TAB和RM:一个高层次的说明 228
18.1.1 TAB 229
18.1.2 RM 230
18.1.3 RM操作 230
18.2 对象、会话和序列的管理 232
18.2.1 TPM上下文管理特性 232
18.2.2 上电和关机事件的特殊规则 234
18.2.3 状态转换图 235
18.3 小结 236
第19章 启动、关机和配置 237
19.1 启动和关机 237
19.2 配置 240
19.2.1 TPM制造商配置 240
19.2.2 平台OEM配置 242
19.2.3 终端用户配置 242
19.2.4 解除配置 243
19.3 小结 244
第20章 调试 246
20.1 底层应用程序调试 247
20.1.1 问题 247
20.1.2 分析错误码 247
20.1.3 调试跟踪分析 248
20.1.4 更复杂的错误 249
20.1.5 最后一招 249
20.2 常见的错误 250
20.3 调试高级应用程序 251
20.3.1 调试过程 252
20.3.2 典型的错误 252
20.4 小结 254
第21章 利用TPM 2.0解决更复杂的问题 255
21.1 使用基于EK生成的IDevID对PC进行远程配置 255
21.1.1 方案1 256
21.1.2 方案2 257
21.1.3 方案3 258
21.2 数据备份 259
21.3 特权分离 259
21.4 服务器登录保护 260
21.5 在嵌入式系统中锁定固件,但允许更新 261
21.6 小结 261
第22章 基于TPM 2.0的平台安全技术 262
22.1 三种技术 262
22.2 Intel可信执行技术 263
22.2.1 概述 264
22.2.2 如何使用TPM 2.0设备 268
22.2.3 ARM TrustZone 269
22.3.1 概述 270
22.3.2 TrustZone的实现 271
22.4 AMD安全技术 273
22.4.1 硬件验证引导 274
22.4.2 AMD平台上的TPM 274
22.4.3 SKINIT 274
22.5 小结 275
附录A 中国可信云社区 276
附录B 相关开源合作项目和升级 277