Ce projet propose des bibliothèques pour un simple emballage autour de la citation fournissant des outils tels que la bibliothèque go-configfs-tsm
, ou le dispositif /dev/tdx_guest
de Linux, ainsi qu'une bibliothèque pour la vérification d'attestation des composants fondamentaux d'un devis d'attestation.
Ce projet est divisé en deux rôles complémentaires. Le premier rôle consiste à produire un devis d'attestation, et le second consiste à vérifier un devis d'attestation. La bibliothèque client
produit un devis, la bibliothèque verify
vérifie les signatures et les certificats de Quote.
client
Cette bibliothèque doit être utilisée dans la charge de travail confidentielle pour collecter un devis d'attestation avec les certificats requis.
Vos principales interactions avec lui seront d'abord d'obtenir le fournisseur de devis, ou d'ouvrir l'appareil, puis d'obtenir un devis d'attestation avec vos 64 octets fournis les données utilisateur (généralement un nonce), puis de fermer l'appareil. Pour plus de commodité, l'attestation avec ses certificats associés peut être collectée dans un format tampon de protocole transmitable.
func GetQuoteProvider() (*LinuxConfigFsQuoteProvider, error)
Cette fonction crée une instance d'un fournisseur de devis qui utilise la bibliothèque Go-Configfs-TSM pour récupérer les citations d'attestation via ConfigFS.
func OpenDevice() (*LinuxDevice, error)
Cette fonction crée un descripteur de fichiers sur le périphérique /dev/tdx_guest
et renvoie un objet qui a des méthodes encapsulant des commandes sur l'appareil. Une fois terminé, n'oubliez pas de Close()
l'appareil. Remarque: - L'interface de l'appareil est obsolète et l'utilisation de l'interface du fournisseur de devis est recommandée pour obtenir la récupération d'attestation.
func GetQuote(quoteProvider any, reportData [64]byte) (any, error)
Cette fonction prend un objet implémentant soit l'interface QuoteProvider
(par exemple, LinuxConfigFsQuoteProvider
), soit l'interface Device
(par exemple, un LinuxDevice
) ainsi que des données de rapport qui se compose généralement d'une valeur nonce. Il renvoie la représentation du tampon de protocole de la citation d'attestation.
Vous pouvez utiliser GetRawQuote
pour obtenir le devis TDX au format de tableau d'octets.
func (d Device) Close() error
Ferme l'appareil.
verify
Cette bibliothèque vérifiera la signature, la chaîne de certificat et les propriétés de base de bien formes d'un devis d'attestation. Les exigences de citation de bien-être formées proviennent de la spécification Intel TDX, et les exigences de bien-fondé du certificat proviennent de la spécification du certificat Intel PCK.
La présence de la chaîne de certificat PCK dans le devis d'attestation d'entrée est attendue.
func TdxQuote(quote *pb.QuoteV4, options *Options) error
Cette fonction vérifie que l'attestation a une chaîne de signature et de certificat valide. Il fournit une vérification facultative par rapport aux garanties obtenues à partir de l'API Intel PCS et propose également une vérification facultative par rapport à la liste de révocation du certificat (CRL). Par défaut, l'option de vérification des collatéraux et la liste de révocation du certificat (CRL) est désactivée. La vérification utilisant des collatéraux est basée sur la documentation de spécification de l'API Intel PCS.
Exemple d'invocation attendue:
verify.TdxQuote(myAttestation, verify.Options())
Options
Ce type contient cinq champs:
GetCollateral bool
: Si vrai, TdxQuote
téléchargera les garanties à partir du service API Intel PCS et vérifiera contre les garanties obtenues. Doit être true
si CheckRevocations
est vraie.CheckRevocations bool
: Si true, TdxQuote
téléchargera la liste de révocation du certificat (CRL) à partir du service API Intel PCS et vérifiera les révocations.Getter HTTPSGetter
: Si nil
, utilise DefaultHTTPSGetter()
. L'interface HTTPSGetter
se compose d'une seule méthode Get(url string) (map[string][]string, []byte, error)
qui devrait renvoyer les en-têtes et le corps de la réponse HTTPS.Now time.Time
: si nil
, utilise time.Now()
. C'est le moment où vérifier la validité des certificats et des collatéraux.TrustedRoots *x509.CertPool
: Si nil
, utilise le certificat intégré de la bibliothèque. La vérification de la chaîne de certificat est effectuée à l'aide de racines de confiance. rtmr
Cette bibliothèque doit être utilisée dans la charge de travail confidentielle pour effectuer une opération de hachage d'étendue dans le registre RTMR TDX.
func ExtendEventLog(rtmrIndex int, hashAlgo crypto.Hash, eventLog []byte) error
Cette fonction calcule le digestion de hachage d'un journal d'événements fourni et l'étend dans le registre RTMR correspondant. Cependant, il est important de noter que TDX ne prend actuellement en charge que l'algorithme de hachage SHA-384. Si hashAlgo
n'est pas SHA-384, la fonction renverra une erreur.
func ExtendDigest(rtmrIndex int, digest []byte) error
Cette fonction étend un digest SHA-384 dans le registre RTMR correspondant. Si la longueur du digest donné ne correspond pas à celle d'un digest SHA-384, la fonction renverra une erreur.
GO-TDX-GUEST est publié sous la licence 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.
Ce n'est pas un produit Google officiellement pris en charge.