该项目为围绕报价提供的简单包装提供了库,提供工具,例如go-configfs-tsm
库或Linux中的/dev/tdx_guest
设备,以及用于证明证明引用的基本组件的库。
该项目分为两个互补角色。第一个角色是产生证明报价,第二个角色是检查证明报价。 client
库会产生报价, verify
库验证报价的签名和证书。
client
该库应在机密工作量中使用,以收集证明报价以及必要的证书。
您与IT的主要交互将是首先获取报价提供商,或打开设备,然后使用提供的64个字节的用户数据(通常为Nonce)获得证明报价,然后关闭设备。为了方便起见,可以以可通过电线传输协议缓冲区格式收集及其相关证书的证明。
func GetQuoteProvider() (*LinuxConfigFsQuoteProvider, error)
此函数创建一个引用提供商的实例,该实例使用Go-Configfs-TSM库通过Configfs获取证明引号。
func OpenDevice() (*LinuxDevice, error)
此函数为/dev/tdx_guest
设备创建文件描述符,并返回将命令封装到设备的方法的对象。完成后,请记住Close()
设备。注意: - 设备接口已弃用,并建议使用报价提供商接口来获取证明报价。
func GetQuote(quoteProvider any, reportData [64]byte) (any, error)
此功能采用一个对象,该对象实现了QuoteProvider
接口(例如LinuxConfigFsQuoteProvider
),或者Device
接口(例如, LinuxDevice
)以及通常由非CE值组成的报告数据。它返回证明报价的协议缓冲区表示。
您可以使用GetRawQuote
获取字节阵列格式的TDX报价。
func (d Device) Close() error
关闭设备。
verify
该库将检查证明报价的签名,证书链和基本良好的属性。报价良好的要求来自英特尔TDX规范,证书良好的要求来自英特尔PCK证书规范。
预期在输入证明报价中存在PCK证书链的存在。
func TdxQuote(quote *pb.QuoteV4, options *Options) error
此功能验证证明是否具有有效的签名和证书链。它提供了针对从英特尔PCS API获得的附带的可选验证,还提供了针对证书撤销列表(CRL)的可选检查。默认情况下,禁用了针对抵押品和证书吊销清单(CRL)的选项。使用抵押品的验证基于Intel PCS API规范文档。
示例预期调用:
verify.TdxQuote(myAttestation, verify.Options())
Options
类型此类型包含五个字段:
GetCollateral bool
:如果为true,则TdxQuote
将从Intel PCS API服务下载抵押品,并与获得的抵押品进行检查。如果CheckRevocations
为真,则必须为true
。CheckRevocations bool
:如果为true,则TdxQuote
将从Intel PCS API服务下载证书撤销列表(CRL),并检查是否撤销。Getter HTTPSGetter
:如果nil
,则使用DefaultHTTPSGetter()
。 HTTPSGetter
接口由单个方法Get(url string) (map[string][]string, []byte, error)
该方法应返回HTTPS响应的标头和主体。Now time.Time
:如果nil
,则使用time.Now()
。现在是验证证书和抵押品的有效性的时候。TrustedRoots *x509.CertPool
:如果nil
,则使用库的嵌入式证书。证书链验证是使用受信任根进行的。 rtmr
该库应在机密工作负载中使用,以执行哈希扩展操作到TDX RTMR寄存器中。
func ExtendEventLog(rtmrIndex int, hashAlgo crypto.Hash, eventLog []byte) error
此功能计算提供的事件日志的哈希摘要,并将其扩展在相应的RTMR寄存器中。但是,重要的是要注意,TDX当前仅支持SHA-384哈希算法。如果hashAlgo
不是SHA-384,则该函数将返回错误。
func ExtendDigest(rtmrIndex int, digest []byte) error
此功能将SHA-384摘要扩展到相应的RTMR寄存器中。如果给定摘要的长度与SHA-384摘要的长度不匹配,则该功能将返回错误。
Go-TDX-Guest在Apache 2.0许可下发布。
Copyright 2023 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
这不是官方支持的Google产品。