TPM 2.0安全算法开发示例实战 杨悦,杨军,谢坚 著 清华大学出版社

  内容简介

  本书是针对TPM实战的编程实用书籍,将常用的TPM应用场景编写为C++与C#双语示例,配上详细代码说明,以浅显易懂、循序渐进的方式展示,在阅读后可以立即运用到项目开发之中。全书共19章: 第1章和第2章介绍常用的安全基础概念,包括HASH算法、HMAC算法、对称密钥、非对称密钥、数字签名、数字信封、PKI等内容; 第3~19章将理论付诸实践,讲解如何使用TPM提供的安全算法解决一些实际问题,包括生成随机数、计算HASH摘要、加密与解密文件、加密与解密消息、导入与导出密钥、管理存储分层、创建Child Key、构建Policy表达式、生成数字签名、实现PKI模型、迁移非对称密钥、使用NV Index存储数据、借助NV Index转移授权等内容。

  本书对于有一定编程基础,并希望基于TPM芯片构建安全应用软件产品、提升企业信息安全等级、学习安全领域知识的IT从业人员,均能起到很好的指导作用。

  目录

  图书代码

  第1章系统安全基础

  1.1常用攻击手段

  1.1.1字典攻击

  1.1.2HASH反查表攻击

  1.1.3彩虹表攻击

  1.1.4中间人攻击

  1.1.5战争驾驶

  1.1.6窃听

  1.1.7重播攻击

  1.1.8网络钓鱼

  1.1.9社会工程学

  1.2安全算法

  1.2.1HASH算法

  1.2.2HASH扩展

  1.2.3HMAC算法

  1.2.4对称密钥

  1.2.5非对称密钥

  1.2.6Nonce

  1.2.7KDF

  1.3本章小结

  第2章身份认证与安全协议

  2.1消息安全模式

  2.1.1数字签名

  2.1.2数字信封

  2.1.3证书

  2.2身份认证方式

  2.2.1密码认证

  2.2.2IC卡或智能卡认证

  2.2.32FA认证

  2.2.4生物特征认证

  2.2.5U盾认证

  2.2.6OTP认证

  2.2.7FIDO认证

  2.2.8Windows Hello

  2.2.9MFA

  2.3身份认证协议

  2.3.1SSL

  2.3.2TLS

  2.3.3Kerberos

  2.3.4PKI

  2.3.5RADIUS

  2.3.6EAP

  2.3.7SAML

  2.3.8JWT

  2.4本章小结

  第3章开发准备

  3.1初识TPM

  3.1.1什么是TPM

  3.1.2TPM历史

  3.1.3编程接口

  3.2准备工作

  3.2.1TPM芯片

  3.2.2TPM模拟器

  3.2.3C++开发环境

  3.2.4C#开发环境

  3.3测试TPM

  3.4本章小结

  第4章第一个TPM程序

  4.1随机数不随机

  4.1.1RNG

  4.1.2HRNG

  4.2使用HRNG生成随机数

  4.3本章小结

  第5章HASH算法

  5.1TPM_HANDLE

  5.2计算HASH

  5.2.1简单HASH

  5.2.2序列HASH

  5.2.3文件HASH

  5.3校验HASH

  5.4本章小结

  第6章HMAC算法

  6.1定义Key模板

  6.2TPMS_SENSITIVE_CREATE

  6.3创建HMAC Key对象

  6.4计算HMAC摘要

  6.4.1简单HMAC

  6.4.2序列HMAC

  6.5校验HMAC

  6.6本章小结

  第7章对称密钥

  7.1授权区域

  7.2Password授权

  7.2.1绑定密码

  7.2.2使用Password授权

  7.3使用密码保护Key

  7.4使用对称Key

  7.4.1加密与解密字符串

  7.4.2加密文件

  7.4.3解密文件

  7.5本章小结

  前言/序言

  随着Windows 11操作系统的正式发布,Microsoft公司将TPM这个词语再次推向了普通公众的视野。Windows 11相关的安全组件依赖TPM进行加密,因此Windows 11强制要求计算机主板安装TPM芯片。即使非IT从业人员,可能也曾在安装Windows 11的过程中查找过关于TPM的启用方式,从而对TPM有初步了解。

  TPM是一种安装在计算机主板内部的安全加密处理芯片,可以执行有关安全密钥的基础运算工作,并提供严格的物理安全防护机制。目前许多系统安全项目与应用程序开发项目已经将TPM作为基础安全层的核心模块,为上层应用生态系统提供基于底层硬件的高强度安全保护。

  由于TPM官方发布的标准规范非常难理解,并且实现方式极为复杂,因此使得开发基于TPM的应用系统十分困难,也造成了TPM技术未能很好的普及。不过完全不用担心,这正是本书将要解决的问题。

  1. TPM能做什么

  TPM芯片通常安装在计算机主板上,其不仅可以管理各种类型的安全密钥,也能够通过编程的方式去使用这些安全密钥。

  简单来说,TPM的主要作用是为上层应用系统提供安全加密运算、安全密钥管理能力。

  基于TPM可以实现如下场景:

  (1) 生成安全密钥。例如RSA、AES、ECC等。

  (2) 存储安全密钥。支持临时或永久存储密钥。

  (3) 管理安全密钥。支持加密、导入、导出、迁移密钥。

  (4) 保护安全密钥。支持以多种授权方式限制对密钥的读取,并抵御暴力破解。

  (5) 使用安全密钥。应用系统以编程方式读取并使用密钥。

  除此之外,TPM还具有许多其他功能,本书将在第3~19章介绍TPM的常用功能。

  2. 读者人群

  如果已经购买并开始阅读本书,说明可能具有安全领域相关的从业经验、对TPM有初步了解或项目上有开发需求。因为TPM是一项较为复杂的安全技术,其涉及的安全知识也非常广泛,所以建议至少需要具备一定的安全理论基础与编程开发经验,这样阅读起来会感到非常轻松。

  如果缺少有关系统安全方面的理论基础,也不必过于担心,因为本书已经尽量将阅读门槛降到最低。除此之外,本书第1章与第2章还会简要介绍安全方面的相关概念。

  TPM使用C语言作为标准应用程序接口(Application Programming Interface,API),虽然最近也出现了基于高级语言的API,例如.NET或Java版本,但是其实这些所谓的高级语言API并非真正意义上的API,它们只是对TPM底层C语言API的简单封装。在使用高级语言API时,有时仍无法避免需要处理底层指针与底层数据结构,并且经常需要处理字节流缓冲、内存、编码、解码等,所以,本书适合有一定开发经验的IT从业人员。当然,如果已经熟悉C或C++语言,那就再好不过了。关于TPM开发语言的选择将在第3章介绍。

  综上所述,本书适合的人群以及建议的阅读方式为: 系统分析师(快速阅读)、系统架构师(完整阅读)、开发人员(完整阅读)、测试人员(完整阅读)、项目经理(部分阅读)、产品经理(部分阅读)。

  3. 如何阅读

  做任何事情都需要花费成本,读书也是一样。但是,如果上来就用大量篇幅强行灌输复杂难懂的TPM理论知识,可能使读者直接产生“从入门到放弃”的想法,这也是许多IT从业人员只喜欢看视频教程却不喜欢看书的原因。许多教材、文档及技术规范可能通篇只介绍理论概念,阅读起来需要极大的耐心与扎实的技术功底,这不是每个人都能做到的。

  本书不会对TPM的理论知识从头到尾进行深入讲解,而是在简要介绍基础概念后,立即以示例代码形式演示TPM的实际开发过程。随着内容的逐渐深入,本书在介绍示例代码的同时也会穿插一些新的理论知识,以增量方式让读者潜移默化地完成TPM开发方法的学习。

  作者也是程序员,每天都要阅读大量的产品手册与协议规范,并运用到实际的方案设计与项目开发之中,深知程序员的时间何等珍贵。如何快速消化、吸收那些动辄上千页的技术规范,并立即设计出安全可靠的系统架构方案才是眼下最关心的问题。程序员与研究员不同,没有时间逐字逐句地研究技术规范,因此,本书的理念是以清晰直观的示例代码指导读者轻松地开发TPM应用程序。

  4. 快速开始

  TPM的官方规范非常难以理解,通篇都在介绍TPM的底层数据结构。如果再结合系统安全知识展开来讲,TPM开发将会是一门非常复杂的系统安全学科。更不友好的是,TPM自身的API架构十分接近硬件底层,并以C语言为通信接口,使得开发人员使用起来难上加难,使原本有趣的编程工作沦为一种精神折磨。即使现在已经出现了基于C#或Java的高级语言API,但是直接阅读官方的示例代码依然会使人一脸茫然。

  不过不必担心,本书只会精选TPM标准规范中常用的功能部分,以通俗易懂的文字解释其背后的工作原理与实际应用场景,真正做到使读者快速入门、快速掌握、快速开发。对于TPM标准规范中一些不常用的特性(例如审计)或深入的理论知识,本书有意不涉及。如果读者有兴趣且有时间,建议在阅读完本书后,尝试阅读TPM官方发布的标准规范,这对深入理解TPM理论知识非常有帮助。

  虽然本书主要以示例代码为主,但并不是说可以完全忽略TPM背后的理论知识。无论是系统分析师、系统架构师还是编写代码的程序员,都是企业安全与系统安全的直接责任人,只有具备了深厚的理论基础,才能面对系统安全设计的严酷挑战。

  TPM是为企业信息安全保驾护航的那把锁,时刻守护着上层应用系统与企业数字资产的安全。随着近年来安装有TPM芯片的计算机的日益普及,越来越多的应用系统开始整合TPM。掌握TPM技术已经成为一项新的流行技能,赶快跟随本书进入TPM的开发之旅吧!