diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 088bef161cf04741329af12009b41ea025a216e8..74df2667ca4eabf152a28367aa5b8a0698e88ad1 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -13,11 +13,11 @@ - [可信工具集](anolisos-tpm2-tools.md) - [可信服务引擎](anolisos-tpm2-tss-engine.md) - [可信计算最佳实践及解决方案](practices.md) - - [飞腾平台可信计算最佳实践](practices-phytium.md) - [海光平台可信计算最佳实践](practices-hygon.md) - [Keylime最佳实践](practices-keylime.md) - [基于可信根的全盘加密](practices-luks-with-tpm2.md) - [基于国密的可信计算最佳实践](practices-shangmi_trusted_computing.md) - [基于机密计算的虚拟可信根解决方案](practices-Confidential_vtpm.md) - [可信计算3.0解决方案](practices-trustedComputing3.md) +- [白皮书作者](contributers.md) diff --git a/src/anolisos-kernel.md b/src/anolisos-kernel.md index 1bff32476225ab251f0e75755753c632d917e446..b1ff5b2d13d6ed7ada06c476ac9c692847a3c1d0 100644 --- a/src/anolisos-kernel.md +++ b/src/anolisos-kernel.md @@ -1,14 +1,15 @@ -# 一、概述 +# 内核可信特性 +## 一、概述 龙蜥操作系统内核提供了成熟的可信计算特性支持,满足内核安全可信需求、为应用层提供安全可信服务。 -# 二、可信驱动 -## 2.1 TPM Eventlog +## 二、可信驱动 +### 2.1 TPM Eventlog 本节简要描述了什么是TPM Eventlog,以及如何将TPM Eventlog从预引导固件传递到操作系统,事件中一般也将TPM Eventlog称为度量日志。 1. **TPM Eventlog概述**
预引导固件维护一个TPM Eventlog,每当固件度量新的组件并将度量结果扩展到任何PCR寄存器时,该日志都会新增一条记录。按事件类型分隔,并包含了扩展后的新PCR值。TPM Eventlog的主要用于远程证明,用于向挑战者证明平台的可信状态。度量日志(即TPM Eventlog)的主要作用是向挑战提供详细的度量日志、来证明详细的度量对象和度量结果,远程证明过程中通过包含PCR内容的可信报告验证度量日志的可信性。 2. **UEFI TPM Eventlog**
UEFI提供的 TPM Eventlog查询的protocol服务。在调用ExitBootServices()之前,Linux EFI存根将事件日志复制到由内核自定义的配置表中。
需要说明的是,ExitBootServices()生成的度量结果不会出现在最终的度量日志表中。固件提供了最终事件配置表来解决这个问题。在第一次调用EFI_TCG2_PROTOCOL.GetEventLog()之后,事件被镜像到这个表中。 -## 2.2 vTPM Proxy Driver for linux Container +### 2.2 vTPM Proxy Driver for linux Container 1. **面向容器的虚拟TPM驱动概述**
该特性是为每个Linux容器提供TPM功能,该特性允许程序以与物理系统上TPM交互相同的方式与容器中的TPM交互。每个容器都有自己独特的、模拟的软件TPM。
2. **面向容器的虚拟TPM驱动的设计**
@@ -61,7 +62,7 @@ long vtpmx_ioc_new_dev(struct file *file, unsigned int ioctl, unsigned long arg) * 将为调用者提供一个文件描述符,用于与客户端通信,以及TPM设备的主要和次要编号。 */ ``` -## 2.3 vTPM interface for Xen +### 2.3 vTPM interface for Xen 本文档描述Xen的虚拟可信平台模块(vTPM)子系统。假定读者熟悉构建和安装Xen、Linux,并对TPM和vTPM概念有基本的了解。 **介绍**
这项工作的目标是为虚拟客户机操作系统(用Xen术语来说就是DomU)提供TPM功能。这允许程序以与物理系统上的TPM交互相同的方式与虚拟系统中的TPM交互。每个客户机都有自己独特的、仿真的软件TPM。然而,每个vTPM的秘密(密钥,NVRAM等)都由vTPM Manager域管理,该域将秘密密封到物理TPM。如果创建这些域(管理器、vTPM和客户机)的过程是可信的,那么vTPM子系统将根植于硬件TPM的信任链扩展到Xen中的虚拟机。vTPM的每个主要组件都作为一个单独的域实现,提供由hypervisor保证的安全分离。vTPM域在mini-o中实现,以减少内存和处理器开销。 @@ -115,7 +116,7 @@ vTPM的架构描述如下: Xen在4.3中使用libxl工具栈添加了对vTPM驱动程序的支持。有关设置vTPM和vTPM Manager存根域的详细信息,请参阅Xen文档(docs/misc/ vTPM .txt)。一旦存根域开始运行,就会按照与域配置文件中的磁盘或网络设备相同的方式设置vTPM设备。 为了使用IMA等需要在initrd之前加载TPM的特性,必须将xen-tpmfront驱动程序编译到内核中。如果不使用这些特性,驱动程序可以被编译为一个模块,并将像往常一样加载。 -## 2.4 Firmware TPM Driver +### 2.4 Firmware TPM Driver 本文档介绍了固件的fTPM (Trusted Platform Module)设备驱动程序。 **介绍** 这个驱动程序是在ARM的TrustZone环境中实现的固件的垫片。驱动程序允许程序以与硬件TPM交互相同的方式与TPM交互。 @@ -124,8 +125,8 @@ Xen在4.3中使用libxl工具栈添加了对vTPM驱动程序的支持。有关 固件本身基于以下文件:https://www.microsoft.com/en-us/research/wp-content/uploads/2017/06/ftpm1.pdf 当驱动程序加载时,它将向用户空间公开/dev/tpmX字符设备,这将使用户空间能够-通过该设备与固件TPM通信。 -# 三、 IMA -## 3.1 介绍 +## 三、 IMA +### 3.1 介绍 原始的“ima”模板是固定长度的,包含了文件数据的哈希值和路径名。filedata哈希值限制为20字节(md5/sha1)。路径名是一个以空结尾的字符串,限制为255个字符。为了克服这些限制并添加额外的文件元数据,它是扩展当前版本的IMA是必要的模板。例如,可能报告的信息是索引节点UID/GID或索引节点和进程的LSM标签这就是访问它。然而,引入这个特性的主要问题是,每次定义一个新的模板,生成和显示函数度量列表将包括处理新格式的代码因此,随着时间的推移,它会显著增长。
提出的解决方案通过分离模板解决了这个问题管理从剩余的IMA代码。这个解决方案的核心是定义两个新的数据结构:一个模板描述符,确定测量表中应包括哪些信息;一个模板字段,以生成和显示给定类型的数据。
使用这些结构管理模板非常简单。支持一种新的数据类型,开发人员定义字段标识符并实现两个函数init()和show()分别用于生成和显示测量条目。定义一个新的模板描述符需要指定模板格式(由字段标识符分隔的字符串)通过' ' ima_template_fmt ' '内核命令行输入' ' | ' '字符)参数。在引导时,IMA初始化所选的模板描述符通过将格式转换为模板字段结构的数组从支撑点的集合中。
@@ -134,7 +135,7 @@ Xen在4.3中使用libxl工具栈添加了对vTPM驱动程序的支持。有关 使用相同的机制来显示度量条目。
函数``ima[_ascii]_measurements_show()``检索每个条目,用于生成该条目并调用show()的模板描述符方法,用于模板字段结构数组的每个项。 -## 3.2 支持的模板字段和描述符 +### 3.2 支持的模板字段和描述符 下面是支持的模板字段列表``('<identifier>': description)``,可用于定义新的模板将描述符的标识符添加到格式字符串中(稍后将添加对更多数据类型的支持): - 'd':事件的摘要(即测量文件的摘要);用SHA1或MD5哈希算法计算; - 'n':事件的名称(即文件名),大小为255字节; @@ -162,23 +163,23 @@ Xen在4.3中使用libxl工具栈添加了对vTPM驱动程序的支持。有关 - “ima-buf”:格式为“d-ng|n-ng|buf”; - “ima-modsig”:格式为“d-ng|n-ng|sig|d-modsig|modsig”; - "evm-sig":格式为' ' d-ng|n-ng|evmsig|xattrnames|xattrlength |xattrvalues|iuid|igid|imode ' '; -## 3.3 IMA使用 +### 3.3 IMA使用 要指定用于生成度量条目的模板描述符,请目前支持以下方法: - 从内核支持的模板描述符中选择一个配置(``ima-ng``是默认选择); - 指定模板描述符名称从内核命令行通过``ima_template=``参数; - 注册一个新的模板描述符与自定义格式通过内核命令行参数``ima_template_fmt=``。 -# 四、内核可信密钥与加密密钥支持 +## 四、内核可信密钥与加密密钥支持 可信密钥和加密密钥是添加到现有内核密钥环服务中的两种新密钥类型。这两种新类型都是可变长度对称密钥,在这两种情况下,所有密钥都是在内核中创建的,用户空间只能看到、存储和加载加密的blob。可信密钥需要可信源的可用性以获得更高的安全性,而加密密钥可以在任何系统上使用。为了方便起见,所有用户级blob都以十六进制ASCII格式显示和加载,并经过完整性验证。 -## 4.1 信任源 +### 4.1 信任源 可信源为可信密钥提供安全来源。信任源是否足够安全取决于其实现的强度和正确性,以及特定用例的威胁环境。由于内核不知道环境是什么,也没有信任度量,因此它依赖于可信密钥的使用者来确定信任源是否足够安全。 内核支持硬件可信根(如TPM/TCM)作为内核可信密钥的可信源。由于TPM/TCM提供的SRK机制确保了根密钥不会离开可信根、且提供芯片级安全保障机制和高安全等级的密钥熵源。 -## 4.2 将密钥使用与平台完整性状态绑定 +### 4.2 将密钥使用与平台完整性状态绑定 基于TPM/TCM提供的密钥服务,密钥可以选择性地密封到指定的PCR值,并且只有在PCR和blob可信验证通过的情况下,TPM才会对密钥进行解封。加载的可信密钥可以使用新的(未来的)PCR值更新,因此密钥很容易迁移到新的PCR值,例如当内核和initramfs更新时。同一个密钥在不同的PCR值下可以保存多个blob,因此很容易支持多个boot。 -## 4.3 接口和API +### 4.3 接口和API 内核支持TPM/TCM访问接口和API -# 五、内核可信配置参数(KConfig) +## 五、内核可信配置参数(KConfig) 内核中有需要可信计算相关的配置参数,下表中列举出部分常用的参数以及解释其含义 | 内核可信配置名称 | 用途 | 依赖的Config(以下省略`CONFIG_`开头) | | :-: | :-: | :-: | diff --git a/src/anolisos-swtpm.md b/src/anolisos-swtpm.md index f9962f62451befe79d92e9a584c1191baf930ada..ac3829509eb1f7715972f4786a3e0171acc5fa07 100644 --- a/src/anolisos-swtpm.md +++ b/src/anolisos-swtpm.md @@ -1,21 +1,22 @@ -# swtpm概述 +# 模拟可信根 +## swtpm概述 可信平台模块(TPM)是一个提供多种安全功能的组件,例如加密、随机数生成、测量等,由于操作系统安全认证的要求,现在已广泛部署在服务器、PC、终端设备中。对于想要使用TPM来开发安全功能的开发人员来说,通过访问主机上的TPM硬件,往往会受到TPM物理设备访问数量的限制。而软件TPM模拟器通常是一个不错的选择,通过使用软件实现的TPM模拟器,访客可以轻松地在TPM 1.2和TPM 2.0之间切换,这使开发人员的使用上更加轻松。 [swtpm](https://github.com/stefanberger/swtpm)项目的目标是提供一个TPM(TPM1.2和TPM2)模拟器,该模拟器可以集成到虚拟化的环境中,如虚拟机和容器。到目前为止,swtpm已经集成到QEMU中,并作为原型集成到RunC(PR)中。 swtpm的构建基于libtpms项目。 -# 龙蜥社区在swtpm上的工作与探索 +## 龙蜥社区在swtpm上的工作与探索 龙蜥社区自其可信计算SIG成立以来,一直在关注可信计算业界进展和国际OSV厂商的可信计算方案。在完成swtpm的适配和实践后,龙蜥社区也将自己的swtpm的开发与使用经验写入到白皮书中。未来,龙蜥社区除了继续加强与swtpm项目的交流与贡献外,还将结合自己在国密/国产化/云计算的积累围绕swtpm开展一些国密、国产化、机密计算相关的工作,敬请期待。 -# 龙蜥Anolis OS上swtpm实践 -## Anolis OS上swtpm安装与配置、运行 +## 龙蜥Anolis OS上swtpm实践 +### Anolis OS上swtpm安装与配置、运行 Anolis OS中可使用swtpm和libtpm源码安装或使用Anolis OS 提供的yum源进行安装,安装方式如下: *注意:使用源码安装的swtpm版本较新,可能与yum安装的版本存在冲突,在使用任一安装方法前,请确保系统能够内不存在冲突版本,以免造成不必要的使用异常* -### 源码安装 +#### 源码安装 **swtpm代码仓库** - [swtpm](https://github.com/stefanberger/swtpm) @@ -49,7 +50,7 @@ cd swtpm sudo make install ``` -### Anolis OS yum 安装swtpm +#### Anolis OS yum 安装swtpm ```shell @@ -57,9 +58,9 @@ yum install libtpms swtpm swtpm-devel swtpm-tools ``` -## 配置 -### swtpm with local -swtpm提供了3种类型的接口:socket、chardev和cuse。通过cuse接口,通过cuse接口,swtpm可以在用户空间创建字符设备,用来接收tpm指令。 +### 配置 +#### swtpm with local +swtpm提供了3种类型的接口:socket、chardev和cuse。通过cuse接口,swtpm可以在用户空间创建字符设备,用来接收tpm指令。 目前anolis 8.8 yum 源默认安装的swtpm 不支持cuse接口类型,需要通过下载源码,安装方式可参考[swtpm编译](#swtpm_compile) swtpm_cuse 需要内核cuse内核模块,处理方法如下: @@ -69,7 +70,7 @@ yum install kernel-modules-extra modprobe cuse ``` -#### tpm设备运行 +##### tpm设备运行 ```shell #1. 初始tpm2 state mkdir /tmp/myvtpm0; @@ -82,7 +83,7 @@ swtpm_cuse --tpm2 -n tpm0 #3. 启动tpm设备 swtpm_ioctl -i --tpm-device /dev/tpm0 ``` -#### 确认启动成功 +##### 确认启动成功 ```shell [root@localhost swtpm]# tpm2_pcrread sha1: @@ -116,7 +117,7 @@ sha512: ``` -### swtpm with QEMU +#### swtpm with QEMU 这里我们选择swtpm提供的“socket”类型的接口,因为它是唯一不需要在/dev中创建节点的类型。首先,在VM目录中创建一个目录来存储TPM状态: ```shell @@ -149,7 +150,7 @@ sha512: ``` -### swtpm with Libvirt +#### swtpm with Libvirt 如果使用libvirt, 在虚拟机的xml文件中插入如下内容 ```xml @@ -165,7 +166,7 @@ chmod -R 777 /var/lib/swtpm-localca/ virsh start vm ``` -#### 确认度量启动使能成功 +##### 确认度量启动使能成功 度量启动功能使能与否由虚拟机BIOS决定,目前龙蜥OS Anolis OS8.8 版本中的虚拟机uefi固件已经具备了度量启动的能力。若宿主机采用其他版本的edk2组件,请确认其是否支持度量启动功能。 使用root用户登录虚拟机,确认虚拟机中是否安装了tpm驱动、tpm2-tss协议栈及tpm2-tools工具。 龙蜥OS Anolis OS8.8 版本中默认安装了tpm驱动(tpm_tis.ko)、tpm2-tss协议栈和tpm2-tools工具。若使用其他操作系统,可以使用如下命令检查是否安装了驱动和相关工具 diff --git a/src/anolisos-tpm2-tools.md b/src/anolisos-tpm2-tools.md index 5a051c5e67167576e1bfab1a028247b4da2b72c0..a016188b5c7107eb342ff50fd826c891dc833ff9 100644 --- a/src/anolisos-tpm2-tools.md +++ b/src/anolisos-tpm2-tools.md @@ -1,16 +1,17 @@ -# tpm2-tools概述 +# 可信工具集 +## tpm2-tools概述 tpm2-tools是一套基于TSS2.0(Trusted Software Stack,可信软件栈)接口开发的TPM2管理工具集合,可用于操作TPM2.0芯片实现密码学、可信存储、完整性验证等功能。 -# 龙蜥Anolis OS上tpm2-tools实践 -## Anolis OS上tpm2-tools安装与使用 -### 安装 +## 龙蜥Anolis OS上tpm2-tools实践 +### Anolis OS上tpm2-tools安装与使用 +#### 安装 根据以下命令在anolis(以Anolis 8.8为例)上安装tpm2-tools ``` yum install tpm2-tools ``` -### 使用 -#### 说明 +#### 使用 +##### 说明 tpm2-tools工具可根据运行环境是否安装tpm2-abrmd工具决定tcti(Transmission Interface)类型,也可以通过--tcti参数修改tcti类型。 以tpm2_startup命令为例,未安装tpm2-abrmd,tpm2_startup通过device tcti与/dev/tpm0设备直接通信。 ``` @@ -22,7 +23,7 @@ tool="tpm2_startup" version="" tctis="libtss2-tctildr" tcti-default=tcti-device tpm2_startup -v tool="tpm2_startup" version="" tctis="libtss2-tctildr" tcti-default=tcti-abrmd ``` -#### 1、TPM2.0基本功能 +##### 1、TPM2.0基本功能 tpm2_startup工具可执行TPM2_CC_Startup命令使能TPM2.0芯片 ``` tpm2_startup -V #执行TPM2_SU_STATE类型的startup @@ -110,9 +111,9 @@ GetCapability: capability: 0x1, property: 0x80000000 - 0x80000001 ``` -#### 2、TPM2.0密码学功能 +##### 2、TPM2.0密码学功能 TPM2.0密钥管理采用加密存储的方式,每一密钥都有父密钥,密钥导出TPM2.0芯片时,都被父密钥加密保护,导入TPM2.0芯片时又父密钥解密恢复。在加密存储体系中,存在一个根密钥(又称为PrimaryObject),该密钥无法导出到TPM2.0芯片外。TPM2.0中有三个独立的特权域(Hierarchy),每一特权域都可创建根密钥。 -##### 密钥创建 +###### 密钥创建 1)创建根密钥 ``` @@ -204,7 +205,7 @@ a95350a0db6d639f5c25732ed4ab122df37d258d6786e0fbb123fc18eab71ed4 \ fb27f ``` 注:由于TPM2.0芯片中存储空间有限,并不无限加载密钥,tpm2-tools在管理密钥方面,会将生成的密钥通过TPM2_CC_ContextSave将密钥信息导出到文件保存,当使用密钥时,先通过TPM2_CC_ContextLoad将密钥信息加载至芯片中,再使用该密钥。 -##### RSA算法加密/解密 +###### RSA算法加密/解密 ``` tpm2_create -C rsaprimary.ctx -G rsa -u rsa.public -r rsa.private #创建RSA算法的密钥 @@ -244,7 +245,7 @@ load: TPMS_CONTEXT->savedHandle: 0x80000000 diff data-dec.txt data.txt #明文与解密后文件对比 ``` -##### RSA算法签名/验签 +###### RSA算法签名/验签 ``` tpm2_create -C rsaprimary.ctx -G rsa -u rsa.public \ @@ -289,7 +290,7 @@ ERROR on line: "147" in file: "tools/tpm2_tool.c": \ Unable to run tpm2_verifysignature ``` -##### ECC算法签名/验签 +###### ECC算法签名/验签 ``` tpm2_create -C rsaprimary.ctx -G ecc -u ecc.public -r ecc.private #创建ECC算法的密钥 @@ -305,7 +306,7 @@ tpm2_sign -c ecc-sign-key.ctx -o ecc-sig.bin eccsigndata.txt -V \ tpm2_verifysignature -c ecc-sign-key.ctx -s ecc-sig.bin -m eccsigndata.txt #使用ECC密钥验签 ``` -#### 3、TPM2.0存储功能 +##### 3、TPM2.0存储功能 TPM2.0芯片内置了NVRAM(Non-Volatile Random Access Memory,非易失性随机访问存储器),用于存放数据。TPM2.0芯片NVRAM读写需要授权,因此可用于存放敏感数据。TPM2.0 NV空间需要要先定义才能进行读写操作,使用完毕后要释放已定义的空间。 ``` @@ -338,7 +339,7 @@ GetCapability: capability: 0x5, property: 0x0 INFO on line: "1580" in file: "lib/tpm2.c": \ Success to release NV area at index 0x1800001. ``` -#### 4、TPM2.0 PCR功能 +##### 4、TPM2.0 PCR功能 TPM2.0 PCR(Platform Configuration Register, 平台配置寄存器)是TPM2.0中与完整性相关的信息存储空间。PCR的更新方法叫做扩展(Extend),扩展是一种单向的加密操作,保证度量值不被篡改。 ``` @@ -405,7 +406,7 @@ tpm2_pcrextend 10:sha256=181210f8f9c779c26da1d9b2075bde0127302ee0e3fca38c9a83f5b #将pcr.txt摘要值扩展至PCR4 SHA-256 Bank中 ``` -#### 5、TPM2.0死锁功能 +##### 5、TPM2.0死锁功能 TPM2.0中对象都需要授权访问,使用错误授权访问具有DA保护属性的对象(如密钥、没有设置noDA属性的NV等)会导致死锁计数器加1,当死锁计数器达到一定数值后,TPM2.0便拒绝授权访问。 TPM2.0中与死锁相关的属性有maxTries(最大允许授权失败次数)、lockoutRecovery(Lockout Hierarchy死锁恢复时间),recoveryTime(死锁计数器自减一时间间隔)。 diff --git a/src/anolisos-tpm2-tss-engine.md b/src/anolisos-tpm2-tss-engine.md index 5971a5f31720829452eb22e138669018eace07a1..3c5044963a87a0e0005db5a1a3f509092b5abd2d 100644 --- a/src/anolisos-tpm2-tss-engine.md +++ b/src/anolisos-tpm2-tss-engine.md @@ -1,9 +1,10 @@ -# tpm2-tss-engine概述 +# 可信服务引擎 +## tpm2-tss-engine概述 tpm2-tss-engine利用遵循可信计算组织(Trusted Computing Group,TCG)的软件栈——TSS2.0,实现了基于TPM2设备的OpenSSL密码引擎。tpm2-tss-engine利用TSS2.0中的增强型系统API(Enhanced System Applicaion Service Interface, ESAPI)与TPM2设备通信。tpm2-tss-engine支持RSA加解密、签名以及ECDSA签名功能。 -# 龙蜥Anolis OS上tpm2-tss-engine实践 +## 龙蜥Anolis OS上tpm2-tss-engine实践 龙蜥社区自其可信计算SIG成立以来,一直在关注可信计算业界进展和国际OSV厂商的可信计算方案。在完成tpm2-tss-engine的实践后,龙蜥社区也将自己的使用经验写入到白皮书中。未来,龙蜥社区除了继续加强与tpm2-tss-engine项目的交流与贡献外,还将结合自己在国密/国产化/云计算的积累围绕tpm2-tss-engine开展一些国密支持相关的工作,敬请期待。 -## Anolis OS上tpm2-tss-engine安装与使用 -### 安装 +### Anolis OS上tpm2-tss-engine安装与使用 +#### 安装 根据以下命令在anolis(以Anolis 8.8为例)上安装tpm2-tss-engine ```shell @@ -17,8 +18,8 @@ make make install popd ``` -### 使用 -#### 1、引擎信息 +#### 使用 +##### 1、引擎信息 ``` openssl engine -t -c tpm2tss @@ -26,7 +27,7 @@ openssl engine -t -c tpm2tss [RSA, RAND] [ available ] ``` -#### 2、随机数 +##### 2、随机数 基于TPM2生成128字节随机数 ``` @@ -39,8 +40,8 @@ b85bd15bb77375a4d5a69b998c4717e7b4c8b1bdb1f3b0e3936a6f528d \ 23ce2afe5802af2317b27a43 ``` -#### 3、RSA算法功能 -##### 创建密钥 +##### 3、RSA算法功能 +###### 创建密钥 tpm2tss-genkey创建密钥 ``` diff --git a/src/anolisos-tss.md b/src/anolisos-tss.md index 03958a746dc92c112797d5ed3bbd3bffd5cef5fb..1839cb7a57fc512f19a5e39439c876d1e7d6bd3d 100644 --- a/src/anolisos-tss.md +++ b/src/anolisos-tss.md @@ -1,8 +1,9 @@ -# 可信软件栈概述 +# 可信软件栈 +## 可信软件栈概述 TPM 软件栈 (TSS) 是一种软件规范,提供用于访问 TPM 的标准 API。 应用程序开发人员可以使用此软件规范来更好地使用TPM和开发基于TPM的应用程序。 -# 各个语言的TPM TSS软件栈现状 +## 各个语言的TPM TSS软件栈现状 TPM的软件栈非常繁荣,涉及到多个语言以及多个开源项目。以下表格仅列出部分主流开发语言(C/Go/Java/Python/Rust)的主流TPM TSS软件栈现状。 @@ -16,7 +17,7 @@ TSS项目 | 主要贡献者/企业 | 开发语言 | 对TPM1.2/TPM2.0的支持情 [tpm2-pytss](https://github.com/tpm2-software/tpm2-pytss) | Intel | Python | 支持TPM 2.0 | pytss在tpm2-tss上实现的wrapper,便于python用户较好地使用tpm2-tss软件栈开发基于TPM 2.0的Python应用程序 [rust-tss-esapi](https://github.com/parallaxsecond/rust-tss-esapi) | Arm | Rust | 支持TPM 2.0 | rust-tss-esapi是基于tpm2-tss的ESAPI开发的wrapper,便于RUST用户较好地使用tpm2-tss软件栈开发基于TPM 2.0的RUST应用程序。包括Keylime在内的一些TPM知名开源项目都是该项目的使用者。 -# 龙蜥社区在TPM TSS软件栈的贡献 +## 龙蜥社区在TPM TSS软件栈的贡献 龙蜥社区一直坚持upstream first原则,在多个TSS上游社区积极贡献代码,一共在tpm2-tss等四个仓库贡献并合入30来个patch, 包括多个feature和bugfix等, 其中 - feature:在tpm2-tools贡献用来处理TPM errata tpm2_errata库和用来删除指定句柄的tpm2_flushcontext工具等。 @@ -28,7 +29,7 @@ TSS项目 | 主要贡献者/企业 | 开发语言 | 对TPM1.2/TPM2.0的支持情 | [tpm2-tools](https://github.com/tpm2-software/tpm2-tools) | 21 | -52/+982 | | [go-tpm-tools](https://github.com/google/go-tpm-tools/)| 1 | -9/+8 | -# 龙蜥Anolis OS引入的TPM2 TSS软件栈及使用指南 +## 龙蜥Anolis OS引入的TPM2 TSS软件栈及使用指南 通过上文对各个语言的TPM TSS软件栈现状的分析,可以看到TPM软件栈分为两类: - 一种是各个语言原生实现的:其中tpm2-tss是基于TCG标准实现的被广泛使用。 @@ -44,8 +45,8 @@ TSS项目 | 主要贡献者/企业 | 开发语言 | 对TPM1.2/TPM2.0的支持情 - 海光在龙蜥社区贡献了tpm2-tss和tpm2-tools的仓库部分组件/库的国密功能,详见[hygon-tpm2-tss](https://gitee.com/anolis/hygon-tpm2-tss)和[hygon-tpm2-tools](https://gitee.com/anolis/hygon-tpm2-tools),这些特性也都集成到Anolis OS对应版本的yum源中。 - 龙蜥社区也在跟进和探索知名开源项目keylime,keylime部分组件依赖于rust的TSS软件栈rust-tss-esapi,未来也有计划将rust-tss-esapi引入来更好的服务可信计算Rust用户。 -# tpm2-tss架构、开发接口和开发示例 -## tpm2-tss架构 +## tpm2-tss架构、开发接口和开发示例 +### tpm2-tss架构 tpm2-tss包含以下由高到低的几层软件:FAPI,ESAPI,SAPI,TCTI(TPM Command Transmission Interface, TPM命令传输接口)等,在tpm2-tss和TPM 2.0之间还有TAB(TPM Access Broker,TPM访问代理),RM(Resource Manager),和设备驱动等软件层次。这些软件层次与tpm2-tss包含的软件层次的功能如下: - FAPI: 大多数的用户层引用程序基于FAPI开发就可以了,因为FAPI实现了TPM百分之八十的常用应用场景。使用这一层开发应用就像是使用JAVA,C#等高级语言开发应用一样方便。FAPI对应的库为`libtss2-fapi`,对应的标准为[TCG Feature API (FAPI) Specification,TCG TSS 2.0 JSON Data Types and Policy Language Specification](https://trustedcomputinggroup.org/wp-content/uploads/TSS_JSON_Policy_v0p7_r08_pub.pdf)。 @@ -59,7 +60,7 @@ tpm2-tss包含以下由高到低的几层软件:FAPI,ESAPI,SAPI,TCTI(T ![undefined](https://intranetproxy.alipay.com/skylark/lark/0/2023/png/136439/1692165449775-5f211546-3054-40ec-923d-929fac7bcd15.png) -## tpm2-tss开发接口 +### tpm2-tss开发接口 对于开发者和用户而言,tpm2-tss中使用最多的是FAPI和ESAPI,他们均提供了非常多的APIs供开发者使用。tpm2-tss提供一个文档详细的介绍了[FAPI](https://tpm2-tss.readthedocs.io/en/latest/group__fapi.html)和[ESAPI](https://tpm2-tss.readthedocs.io/en/latest/group__esys.html)中各个APIs的用法以及参数的含义,对用户快速理解和使用这些APIs非常有帮助。 @@ -69,7 +70,7 @@ tpm2-tools这个开源项目就是使用ESAPI进行开发并提供给用户对 - [Esys TPM Commands](https://tpm2-tss.readthedocs.io/en/latest/group__esys__tpm.html): 与TPM 2.0命令1:1映射的ESAPI,调用对应的ESAPI命令最终会转换为对应的TPM 2.0命令。 - [Internals of Enhanced System API](https://tpm2-tss.readthedocs.io/en/latest/group__iesys.html): 该层内部使用的一些ESAPI,包轮一些内部类型以及加密相关的APIs等。 -## tpm2-tss开发示例 +### tpm2-tss开发示例 tpm2-tools这个开源项目就是使用ESAPI进行开发并提供给用户对应的TPM 2.0工具,也是tpm2-tss一个好的开发示例。以tpm2-tools为例,如果想调用ESAPI进行开发,首先参考`tools/tpm2_tool.h`去include对应的库,例如 @@ -128,7 +129,7 @@ static void esys_teardown(ESYS_CONTEXT **esys_context) { Esys_Finalize(esys_context); ``` -# 龙蜥社区TSS软件栈规划 +## 龙蜥社区TSS软件栈规划 未来龙蜥社区将 - 持续跟进上游社区各个语言TSS软件栈的动态并积极参与贡献,同时也会把这些成果引入到Anolis OS中。 diff --git a/src/anolisos.md b/src/anolisos.md index fa1ad9ad383b3091c088ce63932d4669e72bc37d..0375fd945d099492d7a40c4334905ab5641b559e 100644 --- a/src/anolisos.md +++ b/src/anolisos.md @@ -1,4 +1,4 @@ #
龙蜥操作系统可信计算实践指南 -龙蜥操作系统以开源社区优秀成果为上游集成了模拟可信根、可信软件、可信工具集,满足用户对可信计算基础服务的需求。同时,可信计算SIG对可信根增强引擎等可信计算基础软件进行了探索分析,形成了龙蜥操作系统可信计算实践指南相关内容。未来,针对可信计算基础软件全展国密支持也将是可信计算SIG的重点工作,本白皮书最佳实践章节呈现了SIG成员单位在全栈国密支持方面的实践成果。 +  龙蜥操作系统以开源社区优秀成果为上游集成了模拟可信根、可信软件、可信工具集,满足用户对可信计算基础服务的需求。同时,可信计算SIG对可信根增强引擎等可信计算基础软件进行了探索分析,形成了龙蜥操作系统可信计算实践指南相关内容。未来,针对可信计算基础软件全展国密支持也将是可信计算SIG的重点工作,本白皮书最佳实践章节呈现了SIG成员单位在全栈国密支持方面的实践成果。 ![Anolis Trusted Computing Practices](images/AnolisOS实践指南.png) diff --git a/src/contributers.md b/src/contributers.md index c3fd90202dbc9d8e4c3c9ba4545806899b407351..57ae0e508120296d6132c028351446f2c5f3749a 100644 --- a/src/contributers.md +++ b/src/contributers.md @@ -2,17 +2,19 @@ (排名不分先后) -* 伯纪 * 曹佩庆 * 陈洪博 * 陈善 +* 付月朋 * 韩春超 * 鲁彬 * 龙勤 -* 乾越 -* 潭琳 +* 李艺林 +* 谭琳 * 吴保锡 +* 薛刚汝 * 许鑫 -* 张艺 +* 应志伟 +* 张佳 * 张天佳 -* 薛刚汝 +* 张艺 diff --git "a/src/images/AnolisOS\345\256\236\350\267\265\346\214\207\345\215\227.png" "b/src/images/AnolisOS\345\256\236\350\267\265\346\214\207\345\215\227.png" index 5db2f34e610edd5a3d4a7f5c4daec0b16c6581fc..bce9afc5c3aa10f3cdce33854a562105ee8d69f4 100644 Binary files "a/src/images/AnolisOS\345\256\236\350\267\265\346\214\207\345\215\227.png" and "b/src/images/AnolisOS\345\256\236\350\267\265\346\214\207\345\215\227.png" differ diff --git "a/src/images/AnolisOS\346\234\200\344\275\263\345\256\236\350\267\265.png" "b/src/images/AnolisOS\346\234\200\344\275\263\345\256\236\350\267\265.png" index 80fca993341e96110c832df342ba8e0dc0c2d1fa..6e5740f0271bae725671cd0d4bae108630bf514b 100644 Binary files "a/src/images/AnolisOS\346\234\200\344\275\263\345\256\236\350\267\265.png" and "b/src/images/AnolisOS\346\234\200\344\275\263\345\256\236\350\267\265.png" differ diff --git "a/src/images/AnolisOS\350\247\243\345\206\263\346\226\271\346\241\210.png" "b/src/images/AnolisOS\350\247\243\345\206\263\346\226\271\346\241\210.png" index 874ab1c34f58acfc17c863e651dcdfc5bc651494..879ad8d37732d518c55e5d88cf98897dfef94e7a 100644 Binary files "a/src/images/AnolisOS\350\247\243\345\206\263\346\226\271\346\241\210.png" and "b/src/images/AnolisOS\350\247\243\345\206\263\346\226\271\346\241\210.png" differ diff --git a/src/images/Confidential_vTPM.png b/src/images/Confidential_vTPM.png index 718d92b3fe13eab1405a9ce07060b2df68613ea4..d2074ef1f762602cb17ef96377a283657fc81727 100644 Binary files a/src/images/Confidential_vTPM.png and b/src/images/Confidential_vTPM.png differ diff --git a/src/images/TCA.png b/src/images/TCA.png index bd787b5784b04cc56c926f3abde7027519d4758d..f6f3aecb6fada9fd5ae49295eb61f870d11c1e1d 100644 Binary files a/src/images/TCA.png and b/src/images/TCA.png differ diff --git "a/src/images/TCG\345\267\245\344\275\234\347\273\204.png" "b/src/images/TCG\345\267\245\344\275\234\347\273\204.png" index 0ece9e952b865f06d825849671c6feb83703e11b..5ecdef6d2fe444d7d177b5c413c0a4ff701b2967 100644 Binary files "a/src/images/TCG\345\267\245\344\275\234\347\273\204.png" and "b/src/images/TCG\345\267\245\344\275\234\347\273\204.png" differ diff --git a/src/images/TNC.png b/src/images/TNC.png index 6fdf66ef55e834f93f9b89f74991e372018d41ce..14f82a3f4b0dabd6bfcd7b907676c13e96573804 100644 Binary files a/src/images/TNC.png and b/src/images/TNC.png differ diff --git a/src/images/iso_TPM_library_standard.png b/src/images/iso_TPM_library_standard.png index 2bab42bc7b39583128f09b9723acf5a756e59074..95fcb5c74d5a2b1a599d3a32eb55c70fa42eea61 100644 Binary files a/src/images/iso_TPM_library_standard.png and b/src/images/iso_TPM_library_standard.png differ diff --git a/src/images/remote_attestation1.png b/src/images/remote_attestation1.png index 0cbefc0c71829e052039f5aadd652bfd30302037..23d6fdf908daa608938c8b9138c77a000e4e256d 100644 Binary files a/src/images/remote_attestation1.png and b/src/images/remote_attestation1.png differ diff --git a/src/images/remote_attestation2.png b/src/images/remote_attestation2.png index 47e368e6490ea1992b8fdea78f43fbf92872c65e..0b415d7a458124bc1ec30c368a174232a7583aea 100644 Binary files a/src/images/remote_attestation2.png and b/src/images/remote_attestation2.png differ diff --git "a/src/images/\344\277\241\344\273\273\346\240\271.png" "b/src/images/\344\277\241\344\273\273\346\240\271.png" index 9677d4cdcf2168a595d131874cc386cdff250a60..9cb6c51f2a1a9c0e8b1b3e493777780fff90c41c 100644 Binary files "a/src/images/\344\277\241\344\273\273\346\240\271.png" and "b/src/images/\344\277\241\344\273\273\346\240\271.png" differ diff --git "a/src/images/\344\277\241\344\273\273\351\223\276.png" "b/src/images/\344\277\241\344\273\273\351\223\276.png" index 3acbd7cffbbf7e4e9471f8513c96d71996dd95ba..aaa3f73ad3adfc75b119c1aba9591ca37dd24fb8 100644 Binary files "a/src/images/\344\277\241\344\273\273\351\223\276.png" and "b/src/images/\344\277\241\344\273\273\351\223\276.png" differ diff --git "a/src/images/\345\217\257\344\277\2413.0\347\224\237\346\200\201\350\236\215\345\220\210\350\267\257\347\272\277\345\233\276.png" "b/src/images/\345\217\257\344\277\2413.0\347\224\237\346\200\201\350\236\215\345\220\210\350\267\257\347\272\277\345\233\276.png" index 942c68f247ae6a736cf6c86ba5dc9259172c9a73..f912e930cb56852d55307bef2ff4f0049035f9ab 100644 Binary files "a/src/images/\345\217\257\344\277\2413.0\347\224\237\346\200\201\350\236\215\345\220\210\350\267\257\347\272\277\345\233\276.png" and "b/src/images/\345\217\257\344\277\2413.0\347\224\237\346\200\201\350\236\215\345\220\210\350\267\257\347\272\277\345\233\276.png" differ diff --git "a/src/images/\345\217\257\344\277\241\350\256\241\347\256\2273.0-\345\217\257\344\277\241BIOS\345\220\257\345\212\250\346\265\201\347\250\213.png" "b/src/images/\345\217\257\344\277\241\350\256\241\347\256\2273.0-\345\217\257\344\277\241BIOS\345\220\257\345\212\250\346\265\201\347\250\213.png" index 6424c6aafeeddae6538e7b11c30897bb7d30f328..02c7c30059793e6678ce1ed0b3f8f38f740bcb65 100644 Binary files "a/src/images/\345\217\257\344\277\241\350\256\241\347\256\2273.0-\345\217\257\344\277\241BIOS\345\220\257\345\212\250\346\265\201\347\250\213.png" and "b/src/images/\345\217\257\344\277\241\350\256\241\347\256\2273.0-\345\217\257\344\277\241BIOS\345\220\257\345\212\250\346\265\201\347\250\213.png" differ diff --git "a/src/images/\351\276\231\350\234\245\346\223\215\344\275\234\347\263\273\347\273\237\345\217\257\344\277\241\350\256\241\347\256\227\345\256\236\350\267\265.png" "b/src/images/\351\276\231\350\234\245\346\223\215\344\275\234\347\263\273\347\273\237\345\217\257\344\277\241\350\256\241\347\256\227\345\256\236\350\267\265.png" index e679f78a0236e2d170751af1c90a94a530e1901e..0569e592d81011c130b6cf2eecc1402fc5ffba1e 100644 Binary files "a/src/images/\351\276\231\350\234\245\346\223\215\344\275\234\347\263\273\347\273\237\345\217\257\344\277\241\350\256\241\347\256\227\345\256\236\350\267\265.png" and "b/src/images/\351\276\231\350\234\245\346\223\215\344\275\234\347\263\273\347\273\237\345\217\257\344\277\241\350\256\241\347\256\227\345\256\236\350\267\265.png" differ diff --git a/src/introduction.md b/src/introduction.md index e2eec396ddb262a99b62b448d39b9967228b00b0..c99f0548423362b9b6ee79d6ec677a4f4ff354ae 100644 --- a/src/introduction.md +++ b/src/introduction.md @@ -6,7 +6,7 @@   可信计算概念最早可以追溯到 1983 美国国防部的 TCSEC 准则及之后出现的彩虹系列信息系统安全文件。1999 年,IBM、微软、Intel 等企业成了 TCPA(2003年改名为 TCG),主要致力于形成可信计算的工业标准。目前 TCG 已经制定了包括 TPM、TSS、TNC 等一系列技术规范,并形成了针对IoT、云计算、个人终端、移动终端、存储等不同场景的工作组、致力于可信计算在相关场景的应用标准编制与解决方案推动。
  国际上已经形成以 Trusted Computing Group(TCG)为代表的可信计算组,并推动 TPM 规范在 PC、服务器、移动终端、网络、云计算、物联网等领域的应用。在服务器及云计算领域,国际 IT 巨头已将可信计算技术作为其产品的重要支撑。Intel服务器 CPU 已经全面支持 TPM2.0;微软 Windows Server 2012 已支持 TPM2.0,并计划发布 Server2016 将支持 vTPM2.0,支持可信云计算环境的构建;Linux Kernel4.0已经集成 TPM2.0,以及主流虚拟化软件 Xen、KVM、Openstack、VMware 等都提供了对 TPM 和 vTPM 的支持;IBM 收购的 Softlayer 公司为全球 60 多个重要客户提供可信云主机服务;同时, 许多芯片公司都将部分可信计算功能集成到商用的处理器中, 如 ARM 公司的 TrustZone 技术、 Intel 公司的 SGX 技术和 AMD 公司的SEV(secure encrypted virtualization)技术等, 都在处理器中实现了内存隔离, 可以为上层应用提供安全的执行环境, 保障敏感程序的安全性, 并被广泛应用在移动手机和云平台中.
  鉴于可信计算技术对国家信息安全体系的重要性, 经国家密码管理局批准, 中国于2006年成立了可信计算密码专项组, 并于2008年12月更名为中国可信计算工作组(China TCM Union), 简称TCMU.2007年12月, 国家密码管理局颁布了《可信计算密码支撑平台功能与接口规范》, 将国内使用的可信基础模块定义为TCM(trust cryptography module).相较于TPM, TCM采用了我国《商用密码管理条例》中规定的SM2、SM3等国密算法, 同时引入了对称密钥算法, 简化了TPM中复杂的密钥管理.TCM的证书认证机制采用签名密钥以及加密密钥的双证书机制, 将对称密钥与非对称密钥结合保护系统安全, 在密钥管理体系和基础密码服务体系等方面进行了改进, 提升了系统的安全性. TPM和TCM的构成和功能类似, 提供可信计算平台的信任根(RTS, RTR), 是由CPU、存储器、I/O、密码协处理器、随机数产生器和嵌入式操作系统等部件组成的独立SoC芯片, 具备可信度量的存储、可信度量的报告、密钥产生、加密和签名、数据安全存储等功能.2015年TPM 2.0 library specification(Trusted Platform Module)正式成为国际标准ISO/IEC 11889,吸纳了TCM中相关的安全改进,并首次成体系支持中国密码算法体系,包括SM2/SM3/SM4密码算法。这是中国密码算法技术和标准的又一次重要突破,也是中国信息安全标准在国际标准化工作中的重要进展。ISO/IEC 11889 支持中国商用密码算法体系(SM2/SM3/SM4),使得在数据安全保护上更加牢不可破。
-  我国学者则从传统计算机体系结构着手,考虑到传统冯诺伊曼架构存在的安全设计缺陷,提出了“在计算运行的同时进行安全防护的信计算模模式,即以密码为基因产生抗体,实施身份识别、状态度量、保密存储等功能,及时识别自己和非自己成份,从而破坏和排斥进入机体的有害物质”即“主动免疫安全可信计算”技术体系(这一体系被学界称为“可信计算3.0”)。主动免疫安全可信计算通过构建“计算+防护”并行双体系结构,实现防护部件并行动态的方式对计算部件运算过错进行可信验证,达到主动免疫防护效果。在并行的双体系结构中,采用了一种安全可信策略管控下的运算和防护并列的主动免疫的新计算体系结构,以可信密码模块(TCM)连接可信平台控制模块(TPCM),组成可信根,由策略产生可信验证规则,由可信软件基根据安全可信策略规则实施身份识别、状态度量、保密存储等功能,及时发现异常并加以处置,从根本上防止(恶意代码)对计算部件(主机)的攻击.该体系的可信验证通过对人的操作访问策略4要素(主体、客体、操作、环境)进行动态可信度量、识别和控制,以达到纠正传统访问控制策略模型局限于授权标识属性进行操作,而不作可信验证、难防篡改的安全缺陷.另外,传统访问控制不考虑环境要素(代码及参数)是否被破坏,难以防止恶意代码攻击,为此必须对环境要素进行可信验证的基础上依据策略规则进行动态访问控制。当前,国内主要以中关村可信计算产业联盟代表推动可信计算3.0技术体系及其生态的繁荣发展,在开源开方方面,北京工业大学推出了一系列的可信计算3.0开源教学实践探索、可信计算产业联盟推出了一系列团体标准,并通过“等级保护2.0与可信计算3.0联合攻关基地”推动相关团体标准的落地实施。 +  我国学者则从传统计算机体系结构着手,考虑到传统冯诺伊曼架构存在的安全设计缺陷,提出了“在计算运行的同时进行安全防护的可信计算模式,即以密码为基因产生抗体,实施身份识别、状态度量、保密存储等功能,及时识别自己和非自己成份,从而破坏和排斥进入机体的有害物质”即“主动免疫安全可信计算”技术体系(这一体系被学界称为“可信计算3.0”)。主动免疫安全可信计算通过构建“计算+防护”并行双体系结构,实现防护部件并行动态的方式对计算部件运算过错进行可信验证,达到主动免疫防护效果。在并行的双体系结构中,采用了一种安全可信策略管控下的运算和防护并列的主动免疫的新计算体系结构,以可信密码模块(TCM)连接可信平台控制模块(TPCM),组成可信根,由策略产生可信验证规则,由可信软件基根据安全可信策略规则实施身份识别、状态度量、保密存储等功能,及时发现异常并加以处置,从根本上防止(恶意代码)对计算部件(主机)的攻击.该体系的可信验证通过对人的操作访问策略4要素(主体、客体、操作、环境)进行动态可信度量、识别和控制,以达到纠正传统访问控制策略模型局限于授权标识属性进行操作,而不作可信验证、难防篡改的安全缺陷.另外,传统访问控制不考虑环境要素(代码及参数)是否被破坏,难以防止恶意代码攻击,为此必须对环境要素进行可信验证的基础上依据策略规则进行动态访问控制。当前,国内主要以中关村可信计算产业联盟代表推动可信计算3.0技术体系及其生态的繁荣发展,推出了一系列团体标准,并通过“等级保护2.0与可信计算3.0联合攻关基地”推动相关团体标准的落地实施。 ## (三) 可信计算关键技术及术语 ### 3.1 信任根 - **概念**
@@ -41,7 +41,7 @@ ![信任链](images/信任链.png) ### 3.3 可信计算平台 -  可信计算平台是指具有可信计算安全机制并能够提供可信服务的计算平台.其主要特征是:有信任根,并基于此构键信任链机制、具有度量存储报告机制、能够提供确保系统数据完整性、数据安全存储和平台远程证明等可信功能服务[ 张焕国、赵波等著. 可信计算. 武汉大学出版社.]。典型的可信计算平台包括:可信PC、可信服务器、可信PDA等。
+  可信计算平台是指具有可信计算安全机制并能够提供可信服务的计算平台.其主要特征是:有信任根,并基于此构建信任链机制、具有度量存储报告机制、能够提供确保系统数据完整性、数据安全存储和平台远程证明等可信功能服务[ 张焕国、赵波等著. 可信计算. 武汉大学出版社.]。典型的可信计算平台包括:可信PC、可信服务器、可信PDA等。
  可信计算平台以CRTM(可信度量根核)为起点,以信任链的方式来度量整个平台资源的完整性,将度量值存储至可信根的平台配置寄存器中,并通过可信芯片向询问平台可信状态的实体提供报告,供访问者判断平台是否可信,以决定是否可以与其交互。这种工作机制被称为可信度量、报告、存储机制,是可信计算机和普通计算机在安全机制上的最大区别。
@@ -65,7 +65,7 @@ ![remote_attestation_1](images/remote_attestation1.png) -  每个可信根(TPM/TCM)设备都有一个唯一的非对称密钥,称为背书密钥(Endorsement Key,EK)。其中公钥被称为EKPub,私钥被称为EKPriv。EK由TPM制造商在生产过程中烧录到TPM芯片中,并可能由制造商颁发EKCert作为公钥的数字签名。 +  每个可信根(TPM/TCM)设备都有一个唯一的非对称密钥,称为背书密钥(Endorsement Key,EK)。其中公钥被称为EKPub,私钥被称为EKPriv。EK由TPM制造商在生产过程中烧录到TPM芯片中,并由制造商颁发EKCert作为公钥的数字签名。 * 为了验证可信根设备的真实性,需要建立对EKPub或EKCert的信任。这通常是通过与颁发EKCert的证书颁发机构(CA)进行交互来实现的。 * 用户会生成一个密钥对AK,并向Server证明该密钥与可信根的EKPub存在加密关系,并且用户拥有EKPriv。 * AK是在可信根内部由EK派生的一个密钥对,用于生成远程证明的关键。每次创建AK都会生成一个全新的密钥,使得该密钥具备匿名性。 diff --git a/src/laboratory.md b/src/laboratory.md index 06c4c784bde7ffcf6f7604ee6bdf21f912f60b74..b1c6402da359a6c7c9a95dd4b22846f941edd238 100644 --- a/src/laboratory.md +++ b/src/laboratory.md @@ -1,4 +1,3 @@ -# 浪潮信息龙蜥联合实验室
浪潮信息龙蜥联合 @@ -11,7 +10,9 @@ * 生态认证中心:主要开展龙蜥及龙蜥衍生版硬件兼容性认证、适配认证体系建立等工作,不断完善操作系统生态体系。 * 联合创新中心:主要面向智慧计算、云原生、系统安全等领域开展技术创新,联合生态伙伴进行课题研究与技术攻关,打造创新、开放、共享的实验室环境,持续推动技术创新发展。 --- + > 🟢 **实验室设施及业务概况** + * 物理设施:覆盖Intel、AMD、海光、飞腾、安培等架构的100+服务器
* 支撑业务:T-One、测试执行
 * Anolis服务器整机兼容性适配
@@ -21,7 +22,9 @@  * 系统安全联合研究及实践探索
* 参与厂商:社区理事单位、社区及KOS生态厂商 --- + > 🟢 **实验室建设** + * 商业:商业衍生版发布、案例共建;人才与市场共建 * 技术:SIG贡献(Serverless SIG、可信计算SIG)、技术贡献(特性、补丁、实践探索等) * 产品生态:产品认证、生态服务、运营支持 diff --git a/src/openanolis.md b/src/openanolis.md index 9b21afecc5147dd1d7af30a460244a80eb1610f2..8933ee80bc69dd4accf8985e26321eed75df8b44 100644 --- a/src/openanolis.md +++ b/src/openanolis.md @@ -6,7 +6,7 @@ > 🟢 **认识龙蜥** -[龙蜥社区( OpenAnolis )](https://openanolis.cn/)成立于 2020 年 9 月,由阿里云、ARM、统信软件、龙芯、飞腾、中科方德、Intel 等 24 家国内外头部企业共同成立龙蜥社区理事会,到目前有超过 300 家合作伙伴参与共建,是国内领先的操作系统开源社区之一,具备较为领先的产业和技术影响力。目前,龙蜥操作系统下载量已超240万,整体装机量达300多万,100余款企业产品完成与龙蜥操作系统的适配。同时,浪潮信息、统信软件、中科方德、中国移动云、麒麟软件、中标软件、凝思软件、新支点、阿里云基于龙蜥开源操作系统推出各自商业版本及产品,在政务、金融、交通、通信等领域累计服务用户超过30万。 +2020 年 9 月,依托多家头部厂商的多年技术沉淀,阿里云联合统信软件、Intel、Arm、龙芯中科、三大运营商等多家操作系统厂商、芯片公司、云计算公司共同发起[龙蜥操作系统开源社区-OpenAnolis](https://openanolis.cn/),立足云计算打造数字创新基石。作为面向国际的 Linux 服务器操作系统开源根社区及创新平台,龙蜥社区持续推动软、硬件及应用生态繁荣发展,到目前有超过 600 家合作伙伴参与共建。目前,龙蜥操作系统下载量已超240万,整体装机量达500多万,100余款企业产品完成与龙蜥操作系统的适配。同时,浪潮信息、统信软件、中科方德、中国移动云、麒麟软件、中标软件、凝思软件、新支点、阿里云等12家企业基于龙蜥开源操作系统推出各自商业版本及产品,在政务、金融、交通、通信等领域累计服务用户超过30万。 --- diff --git a/src/practices-Confidential_vtpm.md b/src/practices-Confidential_vtpm.md index 9799f5005ff4344637beb5c7a3515067b6b4c11c..42dc07bbf48ff866e4c7beb052144591eb472a0d 100644 --- a/src/practices-Confidential_vtpm.md +++ b/src/practices-Confidential_vtpm.md @@ -1,4 +1,5 @@ -# 背景 +# 基于机密计算的虚拟可信根解决方案 +## 背景 目前,有四种类型的TPM广受欢迎,包括独立型(DISCRETE) TPM、集成型(INTEGRATED) TPM、固件(FIRMWARE)TPM和软件(SOFTWARE) TPM。它们在成本、功能和安全性之间提供了不同的权衡。在虚拟化场景或云计算中,软件TPM更受偏爱,因为它具有更好的灵活性和易用性、成本效益以及测试和原型设计等方面的优势。然而,软件TPM可能更容易受到软件错误和攻击的影响,因此需要更多的组件来保持安全,包括TEE操作系统和运行在TEE中的应用程序代码。 许多云安全产品中的软件TPM解决方案可以为Guest提供可信计算的功能。这些方案基于硬件和虚拟信任根,在服务器硬件可信的基础上,将信任链从Host延伸到Guest,构建了安全体系。然而,这些虚拟TPM方案在敏感数据安全方面无法满足租户的要求。因为TPM命令请求和响应的内容在链路传输中以明文形式传递,并且敏感操作结果保存在Host侧的软件TPM后端服务实例中,这导致租户保存在软件TPM的敏感数据容易受到攻击和泄露,无法保证数据的机密性。 @@ -7,9 +8,9 @@ 项目地址:https://github.com/inclavare-containers/confidential-vtpm -# 可信计算与机密计算 +## 可信计算与机密计算 -## 区别与联系 +### 区别与联系 可信计算和机密计算(TEE)是两种不同的安全技术,但它们之间存在一定的关系。 可信计算旨在确保计算过程的完整性和可信度。它通过硬件保护和隔离机制,如可信平台模块(TPM)、安全处理器等,保护计算过程中的敏感信息和代码免受恶意攻击和篡改。可信计算通常用于保护整个计算平台的完整性和安全性。 @@ -21,7 +22,7 @@ TEE和TPM在度量和认证方面有相似之处,但它们之间最大的区 基于TPM的可信系统需要在软硬件上增加很多额外的防护机制以实现纵深防御,增加攻击者渗透Host的难度,同时通过在运维层面增加很多安全流程尽可能防止内鬼。而TEE则是在这些防护和流程被攻破或绕过时,建立安全假设的。因此,如果用户不需要如此高的安全水平,不担心来自Host的安全威胁,那就不必使用机密计算TEE技术。 总体来说,TEE技术提供了与基于TPM的可信系统相比更高级别的安全保护。虽然这种技术的实现方式不同,但其价值在于保护敏感数据和代码免受攻击者的获取和篡改。因此,在选择何种技术时,需要根据实际需求和安全风险进行综合考虑。 -## 相互结合 +### 相互结合 机密计算(TEE)技术的出现为应对当前日益增长的安全问题提供了一种全新的解决方案,然而,它并不能完全取代TPM技术。这是因为TEE技术具有以下三个限制: 1. TEE技术一般度量的寄存器并不多,不能提供细粒度的度量。相比之下,TPM技术可以提供更加精细的度量记录,以便进行更为细致的验证和认证。 @@ -30,7 +31,7 @@ TEE和TPM在度量和认证方面有相似之处,但它们之间最大的区 为了能够更好地将可信计算技术与机密计算技术相结合使用,建议在TEE中使用可信计算技术,在可信主机执行环境中使用机密计算技术。通过Confidential vTPM项目,可以为租户提供安全等级更高的云主机环境。这种结合使用可信计算技术和机密计算技术的方案,可以在保护计算过程的同时,保护租户的敏感数据和机密计算任务的安全性。 -# 架构 +## 架构 Confidential vTPM的解决方案由四个部分组成:前端、后端、认证服务和可信CA。前端是一个认证服务和可信CA是运营商或用户部署的第三方可信服务,用于提供数字身份验证和认证,确保用户身份的真实性和数据的机密性。 @@ -47,7 +48,7 @@ TPM attestation服务和可信CA是可以由运营商或用户部署的第三方 * 通过重新设计一套认证注册流程,该流程不仅验证了平台是否受到 TPM 的保护,还验证了平台是否运行在 TEE 环境中。通过这个流程,可以为实现多平台 TEE 的机密互联打下了坚实的基础,提供了更高的安全性和可信度。 -# 安全特性 +## 安全特性 * 使用[Enclave-CC](https://github.com/confidential-containers/enclave-cc)部署swtpm后端,实现高效、安全和可扩展的大规模部署。Enclave-CC具有K8s无缝对接能力和硬件安全扩展功能,可轻松管理敏感工作负载,并为用户提供与普通容器相媲美的使用体验。 * 采用可信任的安全数据存储方案,将swtpm的非易失存储内容妥善存储在一个经过严格验证的可信任数据库中。只有在可靠的信道下,才会从数据库中读取这些宝贵数据信息,以确保数据的安全性和完整性。 diff --git a/src/practices-hygon.md b/src/practices-hygon.md index 0535afc86ae6ce5b4f8f1d3fe744f1fd227fd80d..9bff688f6f27aec185a211785af82ae65cba7f74 100644 --- a/src/practices-hygon.md +++ b/src/practices-hygon.md @@ -1,40 +1,41 @@ -# 1. 可信计算整体架构 -## 1.1. 概述 +# 海光平台可信计算最佳实践 +## 1. 可信计算整体架构 +### 1.1. 概述 图 1 可信计算架构 ![](images/hygon/tc-1.png) CPU利用内置安全处理器对可信计算做了相关支持与拓展,在CPU内部实现了TPM2.0模块(Trusted Platform Module,国际标准)、TCM2.0模块(Trusted Crypto Module,中国传统标准)、TPCM模块(Trusted Platform Control Module,中国新兴标准)、TDM模块(Trusted Dynamic Measuring, 私有)及TSB模块(Trusted Secure Boot,私有)五大可信功能模块。利用上述功能模块可以实现可信计算的核心功能,如可信启动、动态度量、可信存储、可信报告等。 -## 1.2. 可信计算支持 -### 1.2.1. TPM2.0 +### 1.2. 可信计算支持 +#### 1.2.1. TPM2.0 基于安全处理器以固件的形式实现了TPM2.0设备,命令接口符合TPM2.0规范。同时,利用内置的密码运算硬件加速引擎CCP实现所有密码运算相关操作,克服传统固件实现TPM的不足,提高了系统性能,硬件加速引擎全面支持商密标准。 -### 1.2.2. TCM2.0 +#### 1.2.2. TCM2.0 TCM是国内传统的可信计算标准,有着广泛的应用。2020年国密局升级了TCM标准,推出了TCM2.0规范《GM/T 0012-2020 可信计算 可信密码模块接口规范》。TCM2.0功能与接口的定义基于TPM2.0,与TPM2.0具有较强的兼容性,TCM2.0只支持商密标准。与TPM2.0一样,TCM2.0基于CPU安全处理器以固件的形式实现,固件以BIOS PI的形式发布给OEM厂商,因此使用TCM2.0需与OEM厂商确认BIOS已使能该功能支持。 -### 1.2.3. TPCM +#### 1.2.3. TPCM TPCM(Trusted Platform Control Module)是国内新兴的可信计算技术,是中国可信计算3.0的底层芯片标准,实现可信计算的信任根,由中关村可信计算联盟制定。和TPM/TCM相比,TPCM增加了对系统主动监视和控制的功能,可以实现系统启动时的主动启动度量,及程序运行时的动态度量和监控,进一步增强系统的安全性。 -### 1.2.4. TDM +#### 1.2.4. TDM TDM(Trusted Dynamic Measurement)为基于安全处理器实现的轻量级动态度量,是特有功能。通过TDM可以实现对设定内存目标进行持续的周期性度量,及时发现程序异常,保护程序运行时安全;同时TDM通过独有的双重授权保护方式确保非授权用户无法篡改TDM内的度量任务设定,极大的增强了模块的安全性。 -### 1.2.5. TSB +#### 1.2.5. TSB 平台固件BIOS的完整性验证是启动信任链可信的关键和基础,传统的CPU由于缺少专门硬件支持无法验证BIOS的完整性。TSB(Trusted Secure Boot)是除了上述TPCM/TPM/TCM之外另一个独立的由CPU硬件验证平台固件BIOS完整性的功能,验证基于数字签名。CPU上电或重启时,TSB首先验证颁发的OEM公钥证书,再用OEM公钥证书中的公钥验证BIOS固件的OEM签名,验证通过后才运行BIOS固件,从而保证BIOS固件的安全以及后续整个启动信任链的源头安全。 -# 2. 软件编译说明 -## 2.1. 安装说明 +## 2. 软件编译说明 +### 2.1. 安装说明 (1)安装OS为Anolis系列镜像时,功能测试不需要额外安装软件包,可跳过软件编译说明部分直接进行功能测试即可; (2)安装OS镜像为开源版本时,功能测试需要另外安装测试软件包或模块,具体安装说明如下。 -## 2.2. tpm2 +### 2.2. tpm2 **tpm2功能测试需要安装相应软件栈,安装包(RPM)的生成及安装脚本已上传龙蜥社区开源仓库,使用如下:** @@ -47,7 +48,7 @@ $ ./install.sh 注:tpm2功能测试还需要安装grub,具体安装步骤请参考本页面grub安装相关说明。 -## 2.3. tdm +### 2.3. tdm **tdm驱动已集成到Anolis OS 5.10内核。测试TDM功能时还需要相应的测试module,已上传龙蜥社区仓库,安装步骤如下:** ``` @@ -57,7 +58,7 @@ $ make LOCAL_KERDIR=/lib/modules/`uname -r`/build ``` 编译通过后可在当前目录下生成tdm-verify.ko,将该测试module拷贝至测试目录下,再按照下文TDM功能测试文档的步骤测试即可。 -## 2.4. grub +### 2.4. grub 完整的可信启动信任链包含grub度量OS内核,支持tpm2的grub版本需2.04或以上,同时需将grub tpm模块安装进grub内核。以Anolis OS 8.8为例: @@ -102,8 +103,8 @@ $ sudo /usr/local/sbin/grub-mkconfig -o /boot/efi/boot/grub/grub.cfg - bootstrap在发布版Grub里可能没有,没有则不需要运行; - 拷贝/etc/default/grub配置文件到/usr/local/etc/default目录时,如果本地不存在该目录,请创建; -# 3. TPM2.0功能测试 -## 3.1. 概述 +## 3. TPM2.0功能测试 +### 3.1. 概述 该章节演示了在一台安装Anolis OS的服务器上测试TPM2.0功能的完整步骤。演示的主要TPM应用包括:BIOS/GRUB/Linux启动度量,商密测试。 @@ -127,7 +128,7 @@ $ sudo /usr/local/sbin/grub-mkconfig -o /boot/efi/boot/grub/grub.cfg 本次测试安装的ISO镜像名称为AnolisOS-8.8-x86_64-dvd.iso ,具体名称请以发布为准。 -## 3.2. BIOS安装及TPM设置 +### 3.2. BIOS安装及TPM设置 进入BIOS设置,在TCG Trusted Computing选项下关于TPM的默认设置如下图1所示,度量使用SM3算法,三个Hierarchy(Platform, Storage, Endorsement)全部使能,如果没特殊需求,使用默认设置即可。 BIOS中开启TPM的设置在不同的BIOS下可能会有差异,具体请咨询相应的BIOS厂商。以下设置仅供参考: @@ -136,13 +137,13 @@ BIOS中开启TPM的设置在不同的BIOS下可能会有差异,具体请咨询 ![](images/hygon/tpm2-1.png) -## 3.3. 依赖软件包 +### 3.3. 依赖软件包 tpm2.0依赖的软件栈或者安装包等都已经集成进ISO,如果当前环境缺少对应安装包,可直接使用yum安装。 需要注意的是tpm驱动默认以ko模块的方式集成到kernel中,如果需要测试IMA功能,则需要将TPM驱动编译进内核,不能以模块的方式加载。如果不需要使用IMA则可以忽略。 -## 3.4. 配置 +### 3.4. 配置 安装相应安装包后,在测试tpm2功能之前,需要设置如下配置并启动tpm2-abrmd服务: ``` @@ -157,7 +158,7 @@ $ sudo service tpm2-abrmd start $ systemctl status tpm2-abrmd.service ``` -## 3.5. BIOS/Grub/Linux内核启动度量 +### 3.5. BIOS/Grub/Linux内核启动度量 启动度量对TPM PCR的使用情况如表2: @@ -195,12 +196,12 @@ sm3_256: 11: 0x0000000000000000000000000000000000000000000000000000000000000000 ``` -## 3.6. 商密支持的测试 -### 3.6.1. 商密测试脚本 +### 3.6. 商密支持的测试 +#### 3.6.1. 商密测试脚本 包含商密测试的脚本已入库龙蜥仓库,具体见tpm2-tools仓库a8分支,patch名称:0001-add-gm-test-case-for-all-commands.patch -### 3.6.2. 运行测试 +#### 3.6.2. 运行测试 命令正确执行的结果如下: ``` @@ -221,13 +222,13 @@ Tests passed: 12 Tests Failed: 0 ``` -### 3.6.3. 测试脚本说明 +#### 3.6.3. 测试脚本说明 - 每个以test开头的脚本是测试TPM的一类脚本,比如测试TPM policy相关命令的脚本名字为test_tpm2_policy.sh - 脚本中测试命令都是测试商密的命令,TPM算法解析是object:scheme:symdetail 格式的字符串,比如tpm2_createprimary -C o -g sm3_256 -G eccsm2:null:sm4128cfb -c /tmp/context,字符串eccsm2:null:sm4128cfb就是在上面格式的基础上添加商密相关的字符串sm2,sm4128cfb以支持商密。在某些命令中需要增加额外的参数支持商密选择,同时保持兼容以前的密码算法,具体命令可参考脚本中tpm2_certify,tpm2_createak,tpm2_createek,tpm2_createprimary,tpm2_loadexternal,tpm2_nvdefine,tpm2_quote,tpm2_startauthsession的使用。 -# 4. TDM功能测试 -## 4.1. 概述 +## 4. TDM功能测试 +### 4.1. 概述 如下章节演示了在一台安装Anolis OS的服务器上使用TDM功能的步骤,演示的主要TDM应用包括:TDM动态保护任务创建运行销毁流程,TDM动态保护任务更新操作流程,TDM动态保护防字典攻击流程,TDM基于虚拟地址创建运行销毁度量任务流程,TDM度量任务异常触发机器挂机流程,TDM证书获取与证书链验证流程,TDM度量报告获取与验证流程,TDM VPCR获取与重放VPCR值验证流程。 @@ -247,8 +248,8 @@ Tests Failed: 0 本次测试安装的ISO镜像名称为AnolisOS-8.8-x86_64-dvd.iso ,具体名称请以发布为准。 -## 4.2. TDM测试环境配置 -### 4.2.1. TDM驱动加载 +### 4.2. TDM测试环境配置 +#### 4.2.1. TDM驱动加载 ISO镜像中的内核已包含TDM驱动,机器启动完成后dmesg输出下面log则表示TDM驱动已正常加载。 ``` @@ -256,7 +257,7 @@ tdm: Thread started for measurement exception handler dispatching... tdm: TDM driver loaded successfully! ``` -### 4.2.2. 使用hag查看TDM设备信息 +#### 4.2.2. 使用hag查看TDM设备信息 注: - hag工具可在龙蜥社区获取,hygon-devkit仓库bin目录下; @@ -277,11 +278,11 @@ show_tdm_device command success! [tdm] Command successful! ``` -### 4.2.3. tpm2_tools配置 +#### 4.2.3. tpm2_tools配置 Tpm2_tools工具主要用来读取PCR的值,VPCR需要使用到fTPM,tpm2_tools工具已默认集成到ISO镜像,不需额外配置。 -## 4.3. TDM动态保护任务创建运行销毁流程 +### 4.3. TDM动态保护任务创建运行销毁流程 该场景主要测试《PSP动态度量接口规范》中的第七部分“度量任务创建及运行”,实现了度量任务的创建、注册异常回调、启动度量、停止度量、销毁度量任务的完成过程,在验证各个命令正常的情况下同时测试了正常启动度量的流程。 @@ -330,7 +331,7 @@ $ dmesg –----------------------end---------------------------- ``` -## 4.4. TDM动态保护任务更新操作流程 +### 4.4. TDM动态保护任务更新操作流程 该场景主要测试《PSP动态度量接口规范》中的第八部分“度量任务基准值更新”,实现了对正在正常运行的度量任务的基准值更新,通过更新后基准值与实际度量结果不匹配而出发异常回调,同时验证了更新命令与异常触发回调的流程。 @@ -415,7 +416,7 @@ $ dmesg –----------------------end---------------------------- ``` -## 4.5. TDM动态保护防字典攻击流程 +### 4.5. TDM动态保护防字典攻击流程 该场景主要测试《PSP动态度量接口规范》中的第四部分“防字典攻击”,实现了尝试对正在运行度量任务授权码暴力破解,进而触发DA保护启动的逻辑。 @@ -476,7 +477,7 @@ $ dmesg –----------------------end---------------------------- ``` -## 4.6. TDM度量任务通过虚拟地址创建运行销毁流程(1.3固件版本后支持) +### 4.6. TDM度量任务通过虚拟地址创建运行销毁流程(1.3固件版本后支持) 参考用例场景3测试主流程逻辑与场景0基本相同,主要调整为度量任务创建改用虚拟地址进行创建,详细细节可阅读参考用例tdm_verify.c的代码逻辑。 @@ -516,7 +517,7 @@ $ dmesg –----------------------end---------------------------- ``` -## 4.7. TDM度量任务异常触发机器挂机流程(1.4固件版本后支持) +### 4.7. TDM度量任务异常触发机器挂机流程(1.4固件版本后支持) 参考用例场景4测试主流程逻辑与场景1基本相同,主要调整为度量任务创建时flag配置增加TASK_EXCEPTION_CRASH属性配置,当度量异常触发时,机器将挂机,详细细节可阅读参考用例tdm_verify.c的代码逻辑。 @@ -531,7 +532,7 @@ $ sudo insmod tdm-verify.ko test_scene=4 ``` 该命令运行后,系统触发度量任务异常,若机器此时挂机,表明该机制验证成功,仅可通过BMC硬重启或断电重启恢复,用户可根据verify的代码逻辑参考该机制的实现,否则该机制验证失败。 -## 4.8. TDM AK证书获取与证书链验证流程(1.2固件版本后支持) +### 4.8. TDM AK证书获取与证书链验证流程(1.2固件版本后支持) 该场景演示了获取TDM的AK证书与验证AK证书的证书链的例子,通过该场景,可以熟悉并验证TDM模块的证书导出接口,同时通过hag完成对证书的导出、解析、验证来实现对整个TDM证书系统的了解。hag提供了证书获取以及从AK证书逐步验证整个证书链的过程,用户可以通过使用hag工具来熟悉TDM AK证书的使用。 @@ -686,7 +687,7 @@ hsk pubkey verify cek cert successful (6)可以看到成功验证了TDM的证书链,该验证方式主要通过从AK证书中获取的chip_id,到证书服务器下载其对应的CEK证书、HSK证书、HRK证书,通过从根证书一级一级验证到AK证书。 -## 4.9. TDM度量报告获取与使用AK证书验证度量报告流程(1.2固件版本后支持) +### 4.9. TDM度量报告获取与使用AK证书验证度量报告流程(1.2固件版本后支持) 该场景演示了获取TDM度量报告与使用AK证书验证报告的例子,通过该场景,可以熟悉并验证TDM模块的度量报告导出接口,同时通过hag完成对报告的导出、解析、验证来实现对整个TDM度量报告系统的了解。hag工具提供了度量报告获取以及使用AK证书验证度量报告的过程,用户可以通过使用hag工具来熟悉TDM度量报告接口的使用。 @@ -849,7 +850,7 @@ verify_tdm_report command success! $ sudo rmmod tdm-verify.ko ``` -## 4.10. TDM VPCR获取与审计重放VPCR值验证流程(1.3固件版本后支持) +### 4.10. TDM VPCR获取与审计重放VPCR值验证流程(1.3固件版本后支持) 该场景演示了获取VPCR值以及VPCR审计信息的原始TDM度量值与fTPM原始PCR值获取,以及根据审计信息重放VPCR值的验证流程。通过该场景,可以熟悉并验证VPCR机制的应用,理解TDM利用fTPM的PCR实现VPCR从而利用fTPM成熟的PCR远程证明的过程。hag工具提供了VPCR审计信息获取的具体流程以及使用根据审计信息重放VPCR值的过程,用户可以通过使用hag来熟悉TDM基于VPCR的使用与审计信息接口的使用。 diff --git a/src/practices-keylime.md b/src/practices-keylime.md index 324b58fd6695e7e8df48611258259b674f9d3fe3..5d9cc7180d4d958f2e20d3c2fd0f980e165acd3d 100644 --- a/src/practices-keylime.md +++ b/src/practices-keylime.md @@ -1,4 +1,5 @@ -# keylime概述 +# Keylime最佳实践 +## keylime概述 [Keylime](https://github.com/keylime/keylime) 是一个利用可信计算TPM 技术的开源可扩展信任系统。Keylime已经进入CNCF项目且被Redhat等多个主流发行版集成。Keylime 提供了一种端到端解决方案,用于为远程计算机引导基于硬件的加密信任、加密负载的配置以及运行时系统完整性监控。 它还为任何给定 PCR(平台配置寄存器)的远程证明提供了灵活的框架。 用户可以创建自己的自定义操作,当机器未通过其验证测量时将触发这些操作。 @@ -15,7 +16,7 @@ Keylime 由三个主要组件组成;verifier、registrar和agent。 此外keylime还提供tenant工具便于用户远程管理agent。 -# 龙蜥社区在keylime社区的工作与探索 +## 龙蜥社区在keylime社区的工作与探索 龙蜥社区自其可信计算SIG成立以外,一直在关注可信计算业界进展和国际OSV厂商的可信计算方案。同时龙蜥社区在keylime社区积极贡献代码与适配,一共在rust-keylime和keylime两个仓库提交并合入17个patch,包括多个features、bugfixes和文档。详见[keylime release notes](https://github.com/keylime/keylime/releases)和[rust-keylime](https://github.com/keylime/rust-keylime/releases), 具体包括: - features:集成龙蜥anolis以及下游阿里云Alibaba Cloud Linux OS的安装代码、集成阿里云vTPM EK证书、支持keylime安装时选择缺省的监听端口等。 @@ -29,14 +30,14 @@ Keylime 由三个主要组件组成;verifier、registrar和agent。 在完成keylime的适配和实践后,龙蜥社区也将自己的keylime经验写入到白皮书中。未来,龙蜥社区除了继续加强与keylime社区的沟通和贡献(参与keylime rust化)外,还将结合自己在国密/国产化/机密计算的积累围绕keylime开展一些国密、国产化、机密计算相关的工作,尽情期待。 -# 龙蜥Anolis OS上keylime用途与实践 +## 龙蜥Anolis OS上keylime用途与实践 Keylime可以借助PCR或者Measure boot监控远程机器(Agent部署机器)的启动时的状态(完整性等)和借助IMA来监控运行时的完整性。开启对应的策略(policy)后,时刻轮询监控着对应agent的状态,如果发现异常则返回给verifier执行对应的操作(标记失败/停止轮询/打印错误等)。关于这部分的用法详见下文`Anolis OS上keylime高级功能实践`章节。 Keylime也可以通过RESTful APIs去监控/管理/查询 Keylime的agent、verifier以及registrar,便于用户以及运维人员有效的管理Keylime的各个组件以及验证远程机器的完整性等。此外keylime提供更加安全的mtls协议和基于Https的RESTful APIs。其中如果被正确执行,则RESTful APIs返回对应的信息且状态码为200,否则则为错误运行。关于这些APIs的用法详见下文`用Restful API去监控/管理Anolis OS上的各个keylime组件`章节。 -## Anolis OS上keylime安装与配置、运行 -### 安装(以anolis 8.8为例) +### Anolis OS上keylime安装与配置、运行 +#### 安装(以anolis 8.8为例) keylime分为两个代码仓库: - [keylime](https://github.com/keylime/keylime):包含除了agent以外的其它keylime组件(verifier,registrar,tenant), 下载后执行`cd keylime && ./installer.sh -i` 命令进行安装 @@ -58,13 +59,13 @@ mkdir -p /var/lib/keylime/cv_ca chown -R keylime /var/lib/keylime ``` -### 配置 +#### 配置 - verifier配置:`/etc/keylime/verifier.conf`为verifier的缺省配置。一般情况下不需要进行修改(当然您也可以根据您的需求进行修改)。 - registrar配置:`/etc/keylime/registrar.conf`为registrar的缺省配置。一般情况下不需要进行修改(当然您也可以根据您的需求进行修改)。 - agent配置:`/etc/keylime/agent.conf`为agent的缺省配置。当agent跟verifier、registrar部署在同一台机器时,不需要修改agent的配置;否则需要修改agent监听的IP、contact_ip(verifier和tenant用来连接的agent IP)、registrar的IP以便于正确注册和通信。 - tenant配置:`/etc/keylime/tenant.conf`为tenant的缺省配置。一般情况下不需要进行修改(当然您也可以根据您的需求进行修改)。 -### 运行 +#### 运行 启动方式: 1. 以二进制方式启动verifier、registrar和agent: @@ -78,8 +79,8 @@ systemctl start keylime_registrar systemctl start keylime_agent ``` -## Anolis OS上keylime高级功能实践 -### 使用用户选择的PCR进行监控 +### Anolis OS上keylime高级功能实践 +#### 使用用户选择的PCR进行监控 该功能需要Agent侧有TPM,但因为TPM的PCR数量有限,扩展性不好。配置tpm_policy并用keylime_tenant工具进行添加,具体命令如下 @@ -93,7 +94,7 @@ keylime_tenant -v 121.43.60.253 -t 120.26.100.138 \ -c add --cert /var/lib/keylime/cv_ca ``` -#### 监控 +##### 监控 成功的case如下(agent时刻监控TPM PCRs的状态) @@ -107,7 +108,7 @@ keylime_tenant -v 121.43.60.253 -t 120.26.100.138 \ /v2.1/quotes/integrity?nonce=WSn8mEpGLjN5I8mhHjPn&mask=0x408000&partial=1&ima_ml_entry=0 ``` -### 使用Measured Boot +#### 使用Measured Boot 该功能 - 需要Agent有TPM以及使能IMA @@ -146,7 +147,7 @@ agent侧查看轮询结果:时刻轮询/监控着是否有异常。 HTTP/1.1 from 121.43.60.253 result 200 (took 1452.270707 ms) ``` -### Runtime Integrity Monitoring +#### Runtime Integrity Monitoring 该功能 - 需要Agent有TPM以及使能IMA @@ -171,7 +172,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ 查看runtime policy ```shell -# curl --key /var/lib/keylime/cv_ca/client-private.pem \ +## curl --key /var/lib/keylime/cv_ca/client-private.pem \ --cert /var/lib/keylime/cv_ca/client-cert.crt \ -k "https://127.0.0.1:8881/v2.1/allowlists/tpm" | jq . { @@ -184,7 +185,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -#### 监控IMA错误 +##### 监控IMA错误 从verifier的日志可以看到有一些没有进行IMA签名,无法验证,所有直接报错 @@ -200,12 +201,12 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ stopping polling ``` -## 用Restful API去监控/管理Anolis OS上的各个keylime组件 -### registrar +### 用Restful API去监控/管理Anolis OS上的各个keylime组件 +#### registrar 使用registrar的RESTful APIs能够对agent进行注册、查询、删除、激活等操作。注意以下示例中的registrar IP需要根据实际IP进行修改。 -#### GET /v2.1/agents/ +##### GET /v2.1/agents/ 用来获取注册的agents列表,具体命令如下: @@ -225,7 +226,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ ``` -#### GET /v2.1/agents/{agent_id:UUID} +##### GET /v2.1/agents/{agent_id:UUID} 获取对应agent的端口、IP、EK证书等信息, 命令如下: @@ -245,7 +246,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -#### PUT /v2.1/agents/{agent_id:UUID}/activate +##### PUT /v2.1/agents/{agent_id:UUID}/activate 激活agent_id的agent,注意**这是一个http请求,不是https,如果用https会提示这个不是TLS接口**。命令如下: @@ -262,7 +263,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -#### DELETE /v2.1/agents/{agent_id:UUID} +##### DELETE /v2.1/agents/{agent_id:UUID} 从registrar中移除ID为agent_id的agent,移除后再查看发现没有该agent了, 使用该命令 @@ -289,7 +290,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -#### POST /v2.1/agents/{agent_id:UUID} +##### POST /v2.1/agents/{agent_id:UUID} 注册agent_id的agent到registrar.**这是一个http不是https的请求。** 注册及注册后的查询命令如下 @@ -318,9 +319,9 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -### verifier +#### verifier -#### GET /v2.1/agents/{agent_id:UUID} +##### GET /v2.1/agents/{agent_id:UUID} 从CV中获取agent `agent_id`的状态。具体命令如下: @@ -344,7 +345,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -#### PUT /v2.1/agents/{agent_id:UUID}/stop +##### PUT /v2.1/agents/{agent_id:UUID}/stop 停止对 `agent_id` 的 cv 轮询,但不要删除(对于已经启动的 agent_id)。具体命令如下: @@ -360,7 +361,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -#### DELETE /v2.1/agents/{agent_id:UUID} +##### DELETE /v2.1/agents/{agent_id:UUID} 删除 agent_id实例。删除包括删除后的查看命令如下: @@ -384,7 +385,7 @@ keylime_tenant -c update --uuid d432fbb3-d2f1-4a97-9ef7-75bd81c00000 \ } ``` -#### GET /v2.1/allowlists/{runtime_policy_name:string} +##### GET /v2.1/allowlists/{runtime_policy_name:string} 从 CV 中检索命名的运行时策略 runtime_policy_name。比如tpm的policy创建了,可以通过以下命令查看 @@ -416,7 +417,7 @@ curl --key /var/lib/keylime/cv_ca/client-private.pem \ } ``` -#### DELETE /v2.1/allowlist/{runtime_policy_name:string} +##### DELETE /v2.1/allowlist/{runtime_policy_name:string} 删除 IMA policy `runtime_policy_name`. 比如删除已有的`tpm` policy,然后再测试,发现该policy没了 @@ -459,9 +460,9 @@ curl --key /var/lib/keylime/cv_ca/client-private.pem \ } ``` -### agent +#### agent -#### GET /version +##### GET /version 获取agent支持的API版本。对应的命令如下: @@ -478,7 +479,7 @@ curl --key /var/lib/keylime/cv_ca/client-private.pem \ } ``` -#### GET /v2.1/keys/pubkey +##### GET /v2.1/keys/pubkey 获取agent的公钥. 对应的命令如下: @@ -495,7 +496,7 @@ curl --key /var/lib/keylime/cv_ca/client-private.pem \ } ``` -#### GET /v2.1/quotes/identity +##### GET /v2.1/quotes/identity 从节点获取identity quote, 对应的命令如下: @@ -517,7 +518,7 @@ curl --key /var/lib/keylime/cv_ca/client-private.pem \ } ``` -#### GET /v2.1/quotes/integrity +##### GET /v2.1/quotes/integrity 从节点获取integrity quote,具体命令如下: @@ -541,7 +542,7 @@ curl --key /var/lib/keylime/cv_ca/client-private.pem \ } ``` -#### GET /v2.1/keys/verify +##### GET /v2.1/keys/verify 获取bootstrap key的验证, 对应的命令如下: diff --git a/src/practices-luks-with-tpm2.md b/src/practices-luks-with-tpm2.md index b762396b75cf9874a4ae920ac2918da05f4d631d..f71243d15f0d08b8b07196b601e030464ce85466 100644 --- a/src/practices-luks-with-tpm2.md +++ b/src/practices-luks-with-tpm2.md @@ -1,5 +1,5 @@ -# 基于可信根的luks磁盘加密安全增强解决方案 +# 基于可信根的全盘加密 LUKS(Linux Unified Key Setup)是Linux硬盘加密的标准。LUKS是由Clemens Fruhwirth在2004年创建的磁盘加密规范,最初用于Linux,它是一种知名的、安全的、高性能的磁盘加密方法,基于改进版本的cryptsetup,使用dm-crypt作为磁盘加密后端。LUKS提供多种加密算法、多种加密模式和多种哈希函数可供选择,有40多种可能的组合。 磁盘加密可以防止存储设备安装在由攻击者控制的备用操作环境中,攻击者可以观察或篡改敏感信息。 @@ -128,7 +128,7 @@ sudo losetup -d /dev/loop0 该方案检索LUKS加密密码口令之前通过使用TPM PCR验证系统状态。 但是现在有一个新问题:更新。在本例中,对系统应用固件更新可能导致加密数据无法访问,因为PCR0表示固件的特定版本。为了成功地更新系统,有必要根据一组预测的PCR值重新密封秘密。但是,如果回滚更新,旧的值将不再工作。此外,在实际执行更新之前预测更新后的PCR值可能是不切实际的——最好的方法可能是在相同的系统上应用更新,看看会产生什么PCR值,并预先授权两组PCR值。对于TPM,有一种方法可以做到这一点,称为“被授权的PCR策略”(authorized PCR policy)。 -# 基于被授权的PCR策略保护带有密码口令的LUKS +## 基于被授权的PCR策略保护带有密码口令的LUKS 被授权的PCR策略作为TPM密封对象的身份验证机制。不再使用严格的PCR策略绑定到原始PCR值,我们现在密封它的PCR签名。PCR集由系统设计人员签名,并由TPM进行验证。 这一方案可以通过以下步骤实现: diff --git a/src/practices-shangmi_trusted_computing.md b/src/practices-shangmi_trusted_computing.md index e9dc1a5de66725e1da4b69c8eb6f4e727e192c0a..fff53f91de313df6b4fe892ec6bd9d0f51433070 100644 --- a/src/practices-shangmi_trusted_computing.md +++ b/src/practices-shangmi_trusted_computing.md @@ -1,4 +1,4 @@ -# 国密可信计算 +# 基于国密的可信计算最佳实践 ## TPM、TCM 与国密算法 diff --git a/src/practices-trustedComputing3.md b/src/practices-trustedComputing3.md index f0083a45553881beba8d297f3184c6957eb09cdb..8aad9dffa3861d3a5907da396865d77b473875e8 100644 --- a/src/practices-trustedComputing3.md +++ b/src/practices-trustedComputing3.md @@ -1,5 +1,6 @@ -# 可信计算3.0 系统架构 -## 系统架构概述 +# 可信计算3.0解决方案 +## 可信计算3.0 系统架构 +### 系统架构概述 可信计算3.0双体系可信计算架构是整个主动免疫防御体系的基础结构保障,构建了安全隔离的计算部件与防护部件并存的双体系架构,计算部件无法访问防护部件的资源,防护部件可访问计算部件的所有资源,双方通过安全的专用通道进行交互,这 是构建整个主动免疫防护体系的基石。防护部件以可信平台控制模块 TPCM 为核心和信任源点,能够先于计算部件处理器启动,并通过直接总线共享机制访问主机所有资源,进行静态和动态可信验证,通过度量方能启动或继续执行,否则进行报警 和控制,主动抵御入侵行为,并能实时生成主机的可信报告,上报至可信安全管理平台进行进一步关联分析。 @@ -15,7 +16,7 @@ ![图1](./images/可信计算3.0双系统架构图.png) -## 可信计算节点中的TPCM架构1 +### 可信计算节点中的TPCM架构1 ![图2](./images/可信计算节点中的TPCM.png) @@ -40,14 +41,14 @@ * 可信网络:可信计算节点会对网络通信进行加密,防止网络攻击。 -## TPCM功能及接口框架1 +### TPCM功能及接口框架1 ![图3](./images/TPCM功能及接口框架.png) 图3中的左侧是 TPCM 的功能层次结构。应用层提供可信控制、度量和判定服务,包括可信身份验证、访问控制、数据完整性保护和软件完整性保护。操作系统核心层提供操作系统可信代理(OSA),OSA 是 TPCM 的接口点。 图3中的右侧是 TPCM 的接口框架。TSB 是 TPCM 的调用接口,用于将应用程序与 TPCM 功能连接起来。管理接口用于管理 TPCM 组件。 -# 可信计算3.0与计算基础设施生态的融合 +## 可信计算3.0与计算基础设施生态的融合 为了让终端用户更好的触达和使用到可信计算3.0的技术,可信华泰在与计算技术设施生态的融合上做了若干实践。 可信华泰与国产计算基础设施生态的厂商,包括:CPU平台厂商、BIOS厂商、整机厂商、国产OS厂商进行了广泛合作,做了以下的实践: @@ -58,18 +59,18 @@ ![图4](./images/可信3.0生态融合路线图.png) -## 与平台的融合 +### 与平台的融合 可信计算3.0在计算平台层面上,对CPU和BIOS引入了可信计算3.0的核心组件TPCM、TCM,让计算平台具备可信计算3.0的 "可信根"。 -### **海光CPU核内TPCM2** +#### **海光CPU核内TPCM2** 在海光2-3号(3/5/7全系)中的安全处理器(PSP)中植入了TPCM可信根固件,TPCM固件使用密码协处理器(CCP)的SM2/3/4 以及TRNG密码功能,CCP在此处承担TCM的职责。 ![图5](./images/可信计算3.0CPU内置方案图.png) CPU中嵌入TPCM,可以让整机厂商能够随CPU平台选择使用可信3.0 TPCM作为整机KeyPart进行采购和产线部署 -### **可信BIOS的改造** +#### **可信BIOS的改造** 一般BIOS经过可信改造,运行以下可信启动流程。 ![图6](./images/可信计算3.0-可信BIOS启动流程.png) @@ -93,12 +94,12 @@ CPU中嵌入TPCM,可以让整机厂商能够随CPU平台选择使用可信3.0 16. 上一步可信验证通过后,由计算部件加载执行应用程序,至此系统进入一个可信的启动环境。 -## 与整机的融合3 +### 与整机的融合3 可信改造后的BIOS同样作为整机厂商随CPU平台采购的keypart在整机产线中进行导入。整机厂商在整机产线上导入带有TPCM可信根功能的CPU和BIOS。 -## 与Anolis OS的衍生发行版之一KeyarchOS的融合 +### 与Anolis OS的衍生发行版之一KeyarchOS的融合 KeyarchOS是浪潮信息基于Anolis OS发布服务器操作系统,**一方面,践行以系统设计为中心的技术路线,持续推动软硬协同创新;另一方面,通过 KeyarchOS 充分发挥芯片、板卡和服务器的创新成果,为用户提供卓 越的整机系统体验**4 可信计算3.0作为一种包含芯片、整机、操作系统的安全防护体系,已经KeyarchOS上进行了兼容性适配认证。 @@ -112,7 +113,7 @@ KeyarchOS是浪潮信息基于Anolis OS发布服务器操作系统,**一方面 图8是TSB与操作系统之间的交互流程,TSB 向计算环境发送通知。通知可以是主动度量和控制相关的,也可以是异步命令处理完成的通知。通知是通过共享内存传输的。计算环境读取通知并清空通知标记。然后,计算环境将通知传递给 TSB 代理。TSB 代理查找唤醒等待进程,并调用通知处理函数。 -## 注 +### 注 1. 摘自沈昌祥院士《可信计算筑牢网络强国底座》演讲稿 2. 本文以海光CPU作为最佳实践的举例,飞腾CPU目前也支持核内TPCM,并在在架构原理上与海光CPU相似,仅在TPCM与外部通信接口不同。 3. 可信整机产线流程目前已经在浪潮服务器、新华三服务器产线上进行了实践。 diff --git a/src/standard-international.md b/src/standard-international.md index 4e37e3e26b089f4323bc72e9b04b804cf38eddcf..9b4784b60ec79dbb8e171419abdcbe2d4f3e9f9e 100644 --- a/src/standard-international.md +++ b/src/standard-international.md @@ -1,26 +1,26 @@ # 国际可信计算标准 ## ISO发布 ### ISO简介 -ISO(国际标准化组织)和IEC(国际电工委员会)组成了专门的全球标准化体系。作为ISO或IEC成员的国家机构通过各自组织建立的技术委员会参与国际标准的制定,以处理特定领域的技术活动。ISO和IEC技术委员会在共同感兴趣的领域进行合作。与ISO和IEC保持联系的其他政府和非政府国际组织也参加了这项工作。在信息技术领域,ISO和IEC成立了一个联合技术委员会ISO/IEC JTC 1。国际标准是根据ISO/IEC指令第2部分中给出的规则起草的。联合技术委员会的主要任务是制定国际标准。联合技术委员会通过的国际标准草案分发给国家机构表决。作为国际标准出版需要至少75%的国家机构投票通过。 +  ISO(国际标准化组织)和IEC(国际电工委员会)组成了专门的全球标准化体系。作为ISO或IEC成员的国家机构通过各自组织建立的技术委员会参与国际标准的制定,以处理特定领域的技术活动。ISO和IEC技术委员会在共同感兴趣的领域进行合作。与ISO和IEC保持联系的其他政府和非政府国际组织也参加了这项工作。在信息技术领域,ISO和IEC成立了一个联合技术委员会ISO/IEC JTC 1。国际标准是根据ISO/IEC指令第2部分中给出的规则起草的。联合技术委员会的主要任务是制定国际标准。联合技术委员会通过的国际标准草案分发给国家机构表决。作为国际标准出版需要至少75%的国家机构投票通过。 ### ISO/IEC 11889系列标准概述 -TPM2.0库规范系列标准以ISO/IEC 11889:2015发布。该规范由可信计算组(TCG)提交给ISO/IEC JTC 1*,遵循JTC 1公开可用规范(PAS)转换过程。 -在最终的TPM 2.0标准化投票中,来自发达经济体和新兴经济体的支持,赞成票来自澳大利亚、比利时、加拿大、中国、捷克、丹麦、芬兰、法国、加纳、爱尔兰、意大利、日本、韩国、黎巴嫩、马来西亚、荷兰、尼日利亚、挪威、俄罗斯联邦、南非、阿拉伯联合酋长国、英国和美国。 -TPM 2.0库规范支持现代安全和隐私保护,该规范整合了基于硬件和基于软件的安全技术的优势。它在计算设备中的实现保护了加密密钥;防止私钥被导出;屏蔽用于身份验证的PIN值;并记录和匿名报告在启动过程中加载的软件,以防止恶意软件和攻击。因此,它将成为任何综合安全战略的重要组成部分。
+  TPM2.0库规范系列标准以ISO/IEC 11889:2015发布。该规范由可信计算组(TCG)提交给ISO/IEC JTC 1*,遵循JTC 1公开可用规范(PAS)转换过程。 +在最终的TPM 2.0标准化投票中,来自发达经济体和新兴经济体的支持,赞成票来自澳大利亚、比利时、加拿大、中国、捷克、丹麦、芬兰、法国、加纳、爱尔兰、意大利、日本、韩国、黎巴嫩、马来西亚、荷兰、尼日利亚、挪威、俄罗斯联邦、南非、阿拉伯联合酋长国、英国和美国。
+  TPM 2.0库规范支持现代安全和隐私保护,该规范整合了基于硬件和基于软件的安全技术的优势。它在计算设备中的实现保护了加密密钥;防止私钥被导出;屏蔽用于身份验证的PIN值;并记录和匿名报告在启动过程中加载的软件,以防止恶意软件和攻击。因此,它将成为任何综合安全战略的重要组成部分。
![TPM标准](images/iso_TPM_library_standard.png) **ISO/IEC 11889系列标准** -[ISO/IEC 11889-1:2015 Information technology — TPM Library — Part 1: Architecture](https://www.iso.org/standard/66510.html) -[ISO/IEC 11889-2:2015 Information technology — TPM Library — Part 2: Structures](https://www.iso.org/standard/66511.html) -[ISO/IEC 11889-3:2015 Information technology — TPM Library — Part 3: Commands](https://www.iso.org/standard/66512.html) -[ISO/IEC 11889-4:2015 Information technology — TPM Library — Part 4: Supporting Routines](https://www.iso.org/standard/66513.html) +- [ISO/IEC 11889-1:2015 Information technology — TPM Library — Part 1: Architecture](https://www.iso.org/standard/66510.html) +- [ISO/IEC 11889-2:2015 Information technology — TPM Library — Part 2: Structures](https://www.iso.org/standard/66511.html) +- [ISO/IEC 11889-3:2015 Information technology — TPM Library — Part 3: Commands](https://www.iso.org/standard/66512.html) +- [ISO/IEC 11889-4:2015 Information technology — TPM Library — Part 4: Supporting Routines](https://www.iso.org/standard/66513.html) ## TCG发布 ### 关于TCG -可信计算组(Trusted Computing Group,TCG)是一个非营利组织,旨在为可互操作的可信计算平台开发、定义和推广基于硬件信任根的供应商无关的全球行业规范和标准。TCG的核心技术包括可信平台模块(Trusted Platform Module,TPM),可信网络通信(Trusted Network Communications,TNC)以及网络安全和自加密驱动器的规范和标准。TCG还设有工作组,将信任的核心概念从企业扩展到物联网的云安全、虚拟化和其他平台以及计算服务。 +  可信计算组(Trusted Computing Group,TCG)是一个非营利组织,旨在为可互操作的可信计算平台开发、定义和推广基于硬件信任根的供应商无关的全球行业规范和标准。TCG的核心技术包括可信平台模块(Trusted Platform Module,TPM),可信网络通信(Trusted Network Communications,TNC)以及网络安全和自加密驱动器的规范和标准。TCG还设有工作组,将信任的核心概念从企业扩展到物联网的云安全、虚拟化和其他平台以及计算服务。 ![TCG Work Group](images/TCG工作组.png) ### TPM2.0库标准 -TPM2.0库标准是TPM2.0中基础规范,该规范描述了TPM2.0实现的所有核心功能。库标准由四部分组成: +  TPM2.0库标准是TPM2.0中基础规范,该规范描述了TPM2.0实现的所有核心功能。库标准由四部分组成: - 第一部分:架构规范,该部分描述了TPM2.0的操作规范、设计原理及工作细节(例如如何创建用于授权、审计、加密命令的会话)。 - 第二部分:数据结构规范,该部分描述了TPM2.0所使用的数据类型、结构体、联合体,该部分也包含了TPM所使用的命令码、错误码等内容。 - 第三部分:命令规范,该部分描述了TPM2.0中所使用的命令及其功能使用方法,包括了命令的输入输出参数、参考的错误码含义,并提供了命令在TPM中实现的伪代码。 @@ -34,7 +34,8 @@ TPM2.0库标准是TPM2.0中基础规范,该规范描述了TPM2.0实现的所 - [Part 4: Supporting Routines](https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part4_SuppRoutines_pub.pdf) - [Part 4: Supporting Routines – Code](https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part4_SuppRoutines_code_pub.pdf) ### TPM Software Stack(TSS)标准 -TSS (TCG Software Stack)是一种软件规范,提供了访问TPM功能的标准API,TSS由多层组成,允许对可扩展的TSS实现进行定制,以适应高端系统和资源受限的低端系统(如下图所示)。TSS也设计了应用程序提供与本地或远程TPM通信的接口方法。 +  TSS (TCG Software Stack)是一种软件规范,提供了访问TPM功能的标准API,TSS由多层组成,允许对可扩展的TSS实现进行定制,以适应高端系统和资源受限的低端系统(如下图所示)。TSS也设计了应用程序提供与本地或远程TPM通信的接口方法。 + ![TCG Software Stack 2.0](images/tss2.0spec-arch.PNG) __说明:附图源自TCG官网__ @@ -45,7 +46,7 @@ TSS2各组成部分所需资源如下图所示: 应用程序开发人员可以参考该规范开发可互操作的客户端应用程序,以实现对可信计算能力的调用。TSS的另一个作用是将程序程序员与与TPM接口的底层细节隔离开来、降低TPM应用开发的学习成本。 - [TSS规范官网入口](https://trustedcomputinggroup.org/resource/tcg-software-stack-tss-specification/) ### PC Client -PC Client系列规范主要定义了TCG技术在计算机(例如笔记本电脑、台式机或平板电脑)中的上下文中所呈现的功能和行为,包括TPM以及与TPM交互或在其平台中集成TPM的平台OEM和固件供应商所需参考的规范、技术要求和指导。主要分为PC Client TPM Platform标准及配套参考文档和PC Client Firmware标准及配套参考文档。 +  PC Client系列规范主要定义了TCG技术在计算机(例如笔记本电脑、台式机或平板电脑)中的上下文中所呈现的功能和行为,包括TPM以及与TPM交互或在其平台中集成TPM的平台OEM和固件供应商所需参考的规范、技术要求和指导。主要分为PC Client TPM Platform标准及配套参考文档和PC Client Firmware标准及配套参考文档。 PC Client TPM Platform标准及配套文档体系: ![PC Client TPM Platform](images/pcclient_spec&resources.png) @@ -83,12 +84,12 @@ PC Client Firmware标准及配套文档体系: |PC Client Firmware|TCG PC Client Platform Firmware Integrity Measurement|Version 1.0 Revision 43 2021.5.7|This document describes the requirements for a PC Client Endpoint in an enterprise computing environment complying with SP 800-155 BIOS Integrity Measurements| |PC Client Firmware|TCG PC Client Physical Presence Interface Specification|Version 1.30 Revision 0.52 2015.7.28|This specification defines an interface between an operating system and the firmware to manage the configuration of a TPM and, if required, initiate TPM related operations. The specification gives suggestions on UI wording for interactions with users of a system, if UI interaction is required.| ### Storage -存储工作组以现有的TCG技术和理念为基础,重点关注专用存储系统上的安全服务标准。其中一个目标是开发标准和实践,用于跨专用存储控制器接口定义相同的安全服务,包括但不限于ATA、串行ATA、SCSI、FibreChannel、USB存储、IEEE 1394、网络附加存储(TCP/IP)、NVM Express和iSCSI。存储系统包括磁盘驱动器、可移动媒体驱动器、闪存和多个存储设备系统。 +  存储工作组以现有的TCG技术和理念为基础,重点关注专用存储系统上的安全服务标准。其中一个目标是开发标准和实践,用于跨专用存储控制器接口定义相同的安全服务,包括但不限于ATA、串行ATA、SCSI、FibreChannel、USB存储、IEEE 1394、网络附加存储(TCP/IP)、NVM Express和iSCSI。存储系统包括磁盘驱动器、可移动媒体驱动器、闪存和多个存储设备系统。 存储标准体系: ![Storage Spec Category](images/iso_TPM_library_standard.png) ### TNC(可信网络通信) -TCG的可信网络通信(TNC-Trusted Network Communications)工作组定义并发布了一个开放架构和一套不断增长的网络安全标准,在跨各种端点、网络技术和策略的多供应商环境中提供可互操作的端到端信任。TNC支持在不同的网络和安全系统之间进行端点遵从性评估、智能策略决策、动态安全实施和安全自动化。 +  TCG的可信网络通信(TNC-Trusted Network Communications)工作组定义并发布了一个开放架构和一套不断增长的网络安全标准,在跨各种端点、网络技术和策略的多供应商环境中提供可互操作的端到端信任。TNC支持在不同的网络和安全系统之间进行端点遵从性评估、智能策略决策、动态安全实施和安全自动化。 - 标准编制 TNC工作组已经定义并发布了一个开放架构和一套不断增长的标准,用于端点遵从性评估、网络访问控制和安全自动化。TNC体系结构使网络运营商能够在网络连接和跨不同安全和网络设备的协调信息时或之后执行有关端点完整性的策略。 @@ -134,6 +135,7 @@ TNC不同场景下的安全需求提供了可互操作的标准,TNC标准确 - 标准推广: TNC标准的采用也从供应商和最终用户扩展到其他标准组织。互联网工程任务组(IETF)网络端点评估(NEA)工作组发布了几个基于TNC客户端-服务器协议的rfc: + |IETF RFC|TNC Specification| |--------|-----------------| |PA-TNC: A Posture Attribute (PA) Protocol Compatible with Trusted Network Connect (TNC) - RFC 5792|TNC IF-M: TLV Binding Version 1.0| @@ -141,7 +143,7 @@ TNC标准的采用也从供应商和最终用户扩展到其他标准组织。 |A Posture Transport Protocol over TLS (PT-TLS) - RFC 6876| TNC IF-T Binding to TLS Version 2.0| |PT-EAP: Posture Transport (PT) Protocol for Extensible Authentication Protocol (EAP) Tunnel Methods - RFC 7171|TNC IF-T: Protocol Bindings for Tunneled EAP Methods, Version 2.0| -TNC提供了一个灵活、开放的体系结构,可以适应不断变化的环境,而不依赖于任何一家供应商。跨国公司支持的技术提高了投资回报率,支持使用现有的网络设备和同类最佳产品,并避免了供应商锁定。可见性和协调性有助于有效的网络管理和安全。 +  TNC提供了一个灵活、开放的体系结构,可以适应不断变化的环境,而不依赖于任何一家供应商。跨国公司支持的技术提高了投资回报率,支持使用现有的网络设备和同类最佳产品,并避免了供应商锁定。可见性和协调性有助于有效的网络管理和安全。 TNC开放的网络安全架构和完整的标准得益于安全专家的全面技术审查。为了获得最强的安全性,TNC可以利用TPM进行健壮的身份验证、认证和危害检测。商业供应商、开源社区和IETF对TNC标准提供了广泛的支持。 TNC可以与TPM集成,以实现安全身份验证和认证,解决rootkit和其他受损软件的检测和缓解问题。TNC标准为保护嵌入式系统(如网络设备、汽车和物联网解决方案)提供了通信基础。 ### 其他 diff --git a/src/trustedcomputingSig.md b/src/trustedcomputingSig.md index c4cf1c4215e0b1a851cce450929f116b677c91dd..f3a93715da1f483bed07e781d3c9269fae231d4e 100644 --- a/src/trustedcomputingSig.md +++ b/src/trustedcomputingSig.md @@ -1,4 +1,5 @@ -# SIG 成立背景 +# 可信计算SIG简介 +## SIG 成立背景   等保2.0时代通过可信计算技术构建关键信息基础设施主动安全纵深防御能力,正在成为业界共识。龙蜥社区作为各大厂商的粘合剂,需要具备可信计算总体解决方案。各方也都希望有一个统一的可信计算技术解决方案,需要有一个社区驱动的参考实现,该实现需要具备良好易用性和可落地性。   当前国内可信计算技术生态面临如下困境: 1. 割裂的可信计算技术方案: @@ -13,21 +14,22 @@ - 作为可信计算技术落地应用的核心,远程证明server侧没有现成可用开源参考实践,TPM虽然在Windows中非常成熟,但是在 LinuxOS用户有感知地透传,应用可信计算技术目前比较有限; - 缺乏面向基础设施的通用可信计算特性使能开源参考实现;   为夯实关键信息基础设施主动安全纵深防御能力,促进可信计算技术开源开放生态繁荣发展,可信计算SIG由此成立。后续,SIG将依托浪潮信息龙蜥社区联合实验室丰富多样的服务器可信计算平台设备环境,联合SIG成员伙伴共同推动可信计算实践及解决方案探索,输出易用好用的可信计算解决方案及配套成果,繁荣国内可信计算开源开放生态。 -# SIG 愿景 +## SIG 愿景 1. 立足龙蜥社区国内OS根社区定位,将龙蜥社区可信计算SIG打造为国内可信计算技术开源开放的总入口; 2. 依托社区及SIG成员单位、携手挖掘易用实用的可信计算技术落地方案、让用户清晰感知可信计算价值、让用户轻松使用可信计算技术实现安全目标; 3. 让SIG成为国内可信计算技术应用推广的践行者 -# SIG 主要目标 +## SIG 目标 1. 开源可信基础软件开发维护:面向异构可信计算技术方案,提供通用的可信计算基础软件实现(包括可信软件栈、远程证明组件等),实现可信基础软件全栈国密支持,持续优化可信基础软件的稳定性和易用性; 2. 探索可信计算落地方案: 面向不同场景(如云服务、数据中心、桌面端、边缘侧等),探索可落地的可信计算解决方案参考实现,提供相应的代码仓库和发行版; 3. 可信计算技术动态: 发布年度可信计算技术白皮书。 ![可信计算SIG目标](images/tcSigJob.png) -# 加入可信计算 SIG +## 加入可信计算 SIG 以下是我们在 OpenAnolis 上的可信计算SIG,非常欢迎有兴趣的开发能参与到社区中来,携手繁荣中国可信计算开源生态、推动可信计算高速发展。 🔗 SIG地址:[https://openanolis.cn/sig/tc-sig] -**欢迎加入钉钉交流群,与社区用户和开发者实时交流:**
-  “龙蜥-可信计算SIG技术交流群”,群号: 15370024496 +**欢迎加入钉钉或微信交流群,与社区用户和开发者实时交流:**
+  钉钉群:“龙蜥-可信计算SIG技术交流群”,群号: 15370024496
+  微信群:“龙蜥-可信计算SIG技术交流群”