โครงการนี้มีห้องสมุดสำหรับเสื้อคลุมง่าย ๆ เกี่ยวกับการเสนอราคาให้เครื่องมือเช่น go-configfs-tsm
Library หรืออุปกรณ์ /dev/tdx_guest
ใน Linux รวมถึงห้องสมุดสำหรับการยืนยันการยืนยันส่วนประกอบพื้นฐานของการอ้างสิทธิ์
โครงการนี้แบ่งออกเป็นสองบทบาทเสริม บทบาทแรกคือการสร้างคำกล่าวยืนยันและที่สองคือการตรวจสอบใบเสนอราคา ไลบรารี client
สร้างใบเสนอราคาห้องสมุด verify
ตรวจสอบลายเซ็นและใบรับรองของใบเสนอราคา
client
ห้องสมุดนี้ควรใช้ภายในเวิร์กโหลดที่เป็นความลับเพื่อรวบรวมใบเสนอราคาการรับรองพร้อมกับใบรับรองที่จำเป็น
การโต้ตอบหลักของคุณคือการได้รับผู้ให้บริการใบเสนอราคาก่อนหรือเปิดอุปกรณ์จากนั้นรับใบเสนอราคาการยืนยันด้วยข้อมูลผู้ใช้ 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
) พร้อมกับข้อมูลรายงานซึ่งโดยทั่วไปประกอบด้วยค่าที่ไม่ได้รับ มันส่งคืนการแสดงบัฟเฟอร์โปรโตคอลของใบเสนอราคาการรับรอง
คุณสามารถใช้ GetRawQuote
เพื่อรับใบเสนอราคา TDX ในรูปแบบอาร์เรย์ไบต์
func (d Device) Close() error
ปิดอุปกรณ์
verify
ห้องสมุดนี้จะตรวจสอบลายเซ็นเชนใบรับรองและคุณสมบัติที่มีรูปแบบพื้นฐานพื้นฐานของใบเสนอราคาการยืนยัน ข้อกำหนดสำหรับการเสนอราคาที่ดีมาจากข้อกำหนดของ Intel TDX และข้อกำหนดสำหรับใบรับรองการจัดรูปแบบที่ดีมาจากข้อกำหนดใบรับรอง Intel PCK
คาดว่าจะมีห่วงโซ่ใบรับรอง PCK ภายในใบเสนอราคาการรับรองอินพุต
func TdxQuote(quote *pb.QuoteV4, options *Options) error
ฟังก์ชั่นนี้ตรวจสอบว่าการยืนยันมีลายเซ็นที่ถูกต้องและห่วงโซ่ใบรับรอง มันให้การตรวจสอบทางเลือกกับหลักประกันที่ได้รับจาก Intel PCS API และยังมีการตรวจสอบเพิ่มเติมกับรายการการเพิกถอนใบรับรอง (CRL) โดยค่าเริ่มต้นตัวเลือกในการตรวจสอบกับหลักประกันและรายการการเพิกถอนใบรับรอง (CRL) ถูกปิดใช้งาน การตรวจสอบโดยใช้หลักประกันขึ้นอยู่กับเอกสารข้อมูลจำเพาะของ Intel PCS API
ตัวอย่างการเรียกร้องที่คาดหวัง:
verify.TdxQuote(myAttestation, verify.Options())
Options
ประเภทนี้มีห้าฟิลด์:
GetCollateral bool
: ถ้าเป็นจริง TdxQuote
จะดาวน์โหลดหลักประกันจากบริการ Intel PCS API และตรวจสอบกับหลักประกันที่ได้รับ จะต้องเป็น true
หาก CheckRevocations
เป็นจริงCheckRevocations bool
: ถ้าเป็นจริง TdxQuote
จะดาวน์โหลดรายการการเพิกถอนใบรับรอง (CRL) จากบริการ Intel PCS API และตรวจสอบการเพิกถอนGetter HTTPSGetter
: ถ้า nil
ให้ใช้ DefaultHTTPSGetter()
อินเทอร์เฟซ HTTPSGetter
ประกอบด้วยวิธีเดียว Get(url string) (map[string][]string, []byte, error)
ที่ควรส่งคืนส่วนหัวและร่างกายของการตอบสนอง HTTPSNow time.Time
: ถ้า nil
ใช้ time.Now()
ถึงเวลาที่จะตรวจสอบความถูกต้องของใบรับรองและหลักประกันTrustedRoots *x509.CertPool
: ถ้า nil
ให้ใช้ใบรับรองฝังของห้องสมุด การตรวจสอบห่วงโซ่ใบรับรองดำเนินการโดยใช้รากที่เชื่อถือได้ rtmr
ไลบรารีนี้ควรใช้ภายในเวิร์กโหลดที่เป็นความลับเพื่อดำเนินการขยายแฮชในการลงทะเบียน TDX RTMR
func ExtendEventLog(rtmrIndex int, hashAlgo crypto.Hash, eventLog []byte) error
ฟังก์ชั่นนี้คำนวณการย่อยแฮชของบันทึกเหตุการณ์ที่ให้ไว้และขยายในการลงทะเบียน RTMR ที่สอดคล้องกัน อย่างไรก็ตามสิ่งสำคัญคือต้องทราบว่าปัจจุบัน TDX รองรับอัลกอริทึม HASH SHA-384 เท่านั้น หาก hashAlgo
ไม่ใช่ SHA-384 ฟังก์ชั่นจะส่งคืนข้อผิดพลาด
func ExtendDigest(rtmrIndex int, digest []byte) error
ฟังก์ชั่นนี้ขยาย SHA-384 Digest ลงในการลงทะเบียน RTMR ที่สอดคล้องกัน หากความยาวของ digest ที่กำหนดไม่ตรงกับของ sha-384 digest ฟังก์ชั่นจะส่งคืนข้อผิดพลาด
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 ที่ได้รับการสนับสนุนอย่างเป็นทางการ