Este projeto oferece bibliotecas para um invólucro simples em torno de citações, fornecendo ferramentas como a biblioteca go-configfs-tsm
ou o dispositivo /dev/tdx_guest
no Linux, bem como uma biblioteca para verificação de atestado de componentes fundamentais de uma citação de atestado.
Este projeto é dividido em dois papéis complementares. O primeiro papel é produzir uma citação de atestado, e a segunda está verificando uma citação de atestado. A biblioteca client
produz cotação, a biblioteca verify
verifica as assinaturas e certificados da citação.
client
Esta biblioteca deve ser usada dentro da carga de trabalho confidencial para coletar uma cotação de atestado, juntamente com os certificados necessários.
Suas principais interações com ele será primeiro obter o provedor de cotações ou abrir o dispositivo, depois obter uma cotação de atestado com os 64 bytes de dados do usuário (normalmente um nonce) e fechar o dispositivo. Por conveniência, o atestado com seus certificados associados pode ser coletado em um formato de buffer de protocolo transmitível por arame.
func GetQuoteProvider() (*LinuxConfigFsQuoteProvider, error)
Esta função cria uma instância de um provedor de cotação que usa a biblioteca GO-CONFIGFS-TSM para buscar cotações de atestado via configfs.
func OpenDevice() (*LinuxDevice, error)
Esta função cria um descritor de arquivo para o dispositivo /dev/tdx_guest
e retorna um objeto que possui métodos que encapsula os comandos ao dispositivo. Quando terminar, lembre -se de Close()
o dispositivo. NOTA:- A interface do dispositivo é descontinuada e o uso da interface do provedor de cotações é recomendado para obter cotação de atestado.
func GetQuote(quoteProvider any, reportData [64]byte) (any, error)
Esta função leva um objeto que implementa a interface QuoteProvider
(por exemplo, LinuxConfigFsQuoteProvider
) ou a interface Device
(por exemplo, um LinuxDevice
), juntamente com os dados do relatório que normalmente consistem em um valor de NONCE. Ele retorna a representação do buffer do protocolo da citação de atestado.
Você pode usar GetRawQuote
para obter a citação TDX no formato da matriz de bytes.
func (d Device) Close() error
Fecha o dispositivo.
verify
Esta biblioteca verificará as propriedades de assinatura, cadeia de certificados e bem formada básica de uma citação de atestado. Os requisitos para citações bem formados vêm da especificação Intel TDX e os requisitos para o certificado bem formado vêm da especificação do certificado Intel PCK.
A presença da cadeia de certificados PCK na cotação de atestado de entrada é esperada.
func TdxQuote(quote *pb.QuoteV4, options *Options) error
Esta função verifica que o atestado possui uma cadeia de assinatura e certificado válida. Ele fornece uma verificação opcional em relação à garantia obtida na API Intel PCS e também oferece uma verificação opcional na lista de revogação de certificados (CRL). Por padrão, a opção a ser verificada em relação às garantias e a Lista de Revocação de Certificação (CRL) está desativada. A verificação usando garantias é baseada na documentação da especificação da API da Intel PCS.
Exemplo de invocação esperada:
verify.TdxQuote(myAttestation, verify.Options())
Options
Este tipo contém cinco campos:
GetCollateral bool
: se verdadeiro, TdxQuote
baixará a garantia do serviço API Intel PCS e verifique contra as garantias obtidas. Deve ser true
se CheckRevocations
for verdadeiro.CheckRevocations bool
: Se True, o TdxQuote
baixará a lista de revogação de certificados (CRL) do serviço API Intel PCS e verifique se há revogações.Getter HTTPSGetter
: se nil
, usa DefaultHTTPSGetter()
. A interface HTTPSGetter
consiste em um único método Get(url string) (map[string][]string, []byte, error)
que deve retornar os cabeçalhos e o corpo da resposta HTTPS.Now time.Time
: se nil
, usa time.Now()
. É o momento em que verificar a validade de certificados e garantias.TrustedRoots *x509.CertPool
: Se nil
, usa o certificado incorporado da biblioteca. A verificação da cadeia de certificados é realizada usando raízes confiáveis. rtmr
Esta biblioteca deve ser usada dentro da carga de trabalho confidencial para executar uma operação de estender a hash no registro TDX RTMR.
func ExtendEventLog(rtmrIndex int, hashAlgo crypto.Hash, eventLog []byte) error
Esta função calcula o resumo de hash de um log de eventos fornecido e o estende no registro RTMR correspondente. No entanto, é importante observar que o TDX atualmente suporta apenas o algoritmo SHA-384 Hash. Se hashAlgo
não for SHA-384, a função retornará um erro.
func ExtendDigest(rtmrIndex int, digest []byte) error
Esta função estende um resumo SHA-384 no registro RTMR correspondente. Se o comprimento do resumo fornecido não corresponder ao de um resumo SHA-384, a função retornará um erro.
O GO-TDX-GUEST é liberado sob a licença 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.
Este não é um produto do Google oficialmente suportado.