google/go-tpm-tools
GitHub: google/go-tpm-tools
基于 go-tpm 构建的 TPM 2.0 高级 Go 库,提供客户端/服务端抽象、模拟器绑定及命令行工具,简化可信平台模块的开发与使用。
Stars: 306 | Forks: 111
# Go-TPM tools [](https://github.com/google/go-tpm-tools/releases)
[](https://github.com/google/go-tpm-tools/actions?query=workflow%3ACI)
[](https://pkg.go.dev/github.com/google/go-tpm-tools)

[](https://goreportcard.com/report/github.com/google/go-tpm-tools)
[](http://www.apache.org/licenses/LICENSE-2.0.html)
`go-tpm-tools` 模块是一个 [TPM 2.0](https://trustedcomputinggroup.org/resource/trusted-platform-module-2-0-a-brief-introduction/) 支持库,旨在作为 [Go-TPM](https://github.com/google/go-tpm) 的补充。
它包含以下公开包:
- [`client`](https://pkg.go.dev/github.com/google/go-tpm-tools/client):
一个 Go 包,提供与 TPM 2.0 交互的简化抽象和实用函数,包括:
- 签名
- 认证
- 读取 PCR
- 封装/解封数据
- 导入数据和密钥
- 读取 NVData
- 获取 TCG Event Log
- [`server`](https://pkg.go.dev/github.com/google/go-tpm-tools/server):
一个 Go 包,提供远程服务器发送、接收和解释 TPM 2.0 数据的功能。此包中的任何命令都不会发出 TPM 命令,而是处理:
- TCG Event Log 解析
- 认证验证
- 创建用于导入 TPM 的数据
- [`proto`](https://pkg.go.dev/github.com/google/go-tpm-tools/proto):
在 `client` 和 `server` 库之间交换的通用 [Protocol Buffer](https://developers.google.com/protocol-buffers) 消息。此包还包含用于验证这些消息的辅助方法。
- [`simulator`](https://pkg.go.dev/github.com/google/go-tpm-tools/simulator):
Microsoft [TPM 2.0 simulator](https://github.com/Microsoft/ms-tpm-20-ref/) 的 Go 绑定。
此仓库还包含 `gotpm`,一个用于使用 TPM 的命令行工具。
运行 `gotpm --help` 和 `gotpm --help` 以获取更多文档。
### 使用预构建的 `gotpm` 二进制文件
你可以直接从 [发布页面](https://github.com/google/go-tpm-tools/releases) 下载二进制文件。
```
# VERSION: 0.4.4 ARCH: Linux_x86_64
curl -L https://github.com/google/go-tpm-tools/releases/download/[VERSION]/go-tpm-tools_[ARCH].tar.gz -o go-tpm-tools.tar.gz
tar xvf go-tpm-tools.tar.gz
# 您可能需要将二进制文件复制到具有可执行权限的目录中。
# 注意:在 Container-Optimized OS 上,/var/lib/google/ 是可执行的
./gotpm --help
```
### 构建和安装 `gotpm`
可以通过运行以下命令直接从此仓库安装 `gotpm`:
```
go install github.com/google/go-tpm-tools/cmd/gotpm@latest
# gotpm 将被安装到 $GOBIN
gotpm --help
```
或者,要从克隆的此仓库版本构建 `gotpm`,请运行:
```
cd /my/path/to/cloned/go-tpm-tools/cmd/gotpm
go build
# gotpm 将位于 repo 的 cmd/gotpm 子目录中
./gotpm --help
```
## 最低要求的 Go 版本
此项目目前需要 Go 1.20 或更高版本。任何对最低要求的 Go 版本的更新都将作为**次要**版本更新发布。
## 构建 `simulator` 时的 `openssl` 错误
同样,在构建 `simulator` 库(或测试)时,你可能会遇到如下错误:
```
fatal error: openssl/aes.h: No such file or directory
47 | // #include
| ^~~~~~~~~~~~~~~~
compilation terminated.
```
这是因为 `simulator` 库依赖于已安装的 [OpenSSL](https://www.openssl.org/) 头文件。要修复此错误,请安装相应的头文件包:
### Linux
```
# 基于 Ubuntu/Debian 的系统
sudo apt install libssl-dev
# 基于 Redhat/Centos 的系统
sudo yum install openssl-devel
# Arch Linux(headers/library 在同一个 package 中)
sudo pacman -S openssl
```
### macOS
首先,安装 [Homebrew](https://brew.sh/)。然后运行:
```
brew install openssl
```
### Windows
首先,安装 [Chocolatey](https://chocolatey.org/)。然后运行:
```
choco install openssl
```
### 自定义安装位置
如果你想使用不同的 OpenSSL 安装,或者你收到
像 `ld: library not found for -lcrypto` 这样的链接器错误,你可以直接
将 Go 指向你的安装位置。我们假设你的安装位于
`$OPENSSL_PATH`(包含 `lib` 和 `include` 子目录)。
#### 在命令行中将 OpenSSL 添加到 include 和 library 路径
此解决方案不需要修改 go-tpm-tools 代码,并且在处理依赖于 go-tpm-tools/simulator 的其他项目时非常有用。
```
C_INCLUDE_PATH="$OPENSSL_PATH/include" LIBRARY_PATH="$OPENSSL_PATH/lib" go test ...
```
#### 在代码中将 OpenSSL 添加到 include 和 library 路径
此解决方案会修改你本地的 go-tpm-tools simulator 源代码副本,
并消除了在命令行中提供路径的需要。
将 `simulator/internal/internal.go` 中以 `#cgo darwin` 或
`#cgo windows` 开头的 `CFLAGS`/`LDFLAGS` 选项修改为指向你的
安装位置。这可能类似于以下内容:
```
// #cgo darwin CFLAGS: -I $OPENSSL_PATH/include
// #cgo darwin LDFLAGS: -L $OPENSSL_PATH/lib
```
请记住在提交更改之前
还原你对 `simulator/internal/internal.go` 的修改。
## 不支持 TPM 1.2
与 [Go-TPM](https://github.com/google/go-tpm)(支持 TPM 1.2 和 TPM 2.0)不同,此模块明确只支持 TPM 2.0。由于对 SHA1(已经[被严重破解](https://sha-mbles.github.io/))的固有的依赖,用户应避免使用 TPM 1.2。
## 使用 Intel TDX 的机密 VM
对于 Ubuntu 镜像,`tdx_guest` 模块在 1016 及更新的内核中被移到了 linux-modules-extra 包中。你应该能够安装该模块,
并手动加载该模块或重新启动。
要安装 linux-modules-extra 包,请运行:
```
sudo apt-get install linux-modules-extra-gcp
```
要手动加载该模块,请运行:
```
sudo modprobe tdx_guest
```
## 法律声明
版权所有 2018 Google Inc.,基于
[Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0)。Microsoft 的 TPM simulator
代码基于 [3-clause BSD license](https://opensource.org/licenses/BSD-3-Clause) 和 [TCG software license](https://trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-1-Architecture-01.38.pdf) 授权。有关更多信息,请参见 [`LICENSE`](LICENSE) 文件。
这不是一个官方的 Google 产品。
标签:Go库, TPM 2.0, 可信计算, 安全测试工具, 客户端加密, 密码学, 手动系统调用, 日志审计, 远程证明