google/go-tpm-tools

GitHub: google/go-tpm-tools

基于 go-tpm 构建的 TPM 2.0 高级 Go 库,提供客户端/服务端抽象、模拟器绑定及命令行工具,简化可信平台模块的开发与使用。

Stars: 306 | Forks: 111

# Go-TPM tools [![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/google/go-tpm-tools)](https://github.com/google/go-tpm-tools/releases) [![Build Status](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/google/go-tpm-tools/actions?query=workflow%3ACI) [![Go Reference](https://pkg.go.dev/badge/github.com/google/go-tpm-tools.svg)](https://pkg.go.dev/github.com/google/go-tpm-tools) ![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/google/go-tpm-tools) [![Go Report Card](https://goreportcard.com/badge/github.com/google/go-tpm-tools)](https://goreportcard.com/report/github.com/google/go-tpm-tools) [![License](https://img.shields.io/badge/LICENSE-Apache2.0-ff69b4.svg)](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, 可信计算, 安全测试工具, 客户端加密, 密码学, 手动系统调用, 日志审计, 远程证明