يوفر هذا المشروع مكتبات لتجميع بسيط حول اقتباس توفير أدوات مثل مكتبة go-configfs-tsm
، أو جهاز /dev/tdx_guest
في Linux ، بالإضافة إلى مكتبة للتحقق من المكونات الأساسية لاقتباس الشاهد.
يتم تقسيم هذا المشروع إلى دورين تكميليين. الدور الأول هو إنتاج اقتباس اهتمام ، والثاني هو التحقق من اقتباس التصديق. تنتج مكتبة client
اقتباسًا ، تتحقق مكتبة verify
من توقيعات وشهادات اقتباس.
client
يجب استخدام هذه المكتبة في عبء العمل السري لجمع اقتباس التصديق مع الشهادات المطلوبة.
ستكون تفاعلاتك الرئيسية معها هي الحصول أولاً على مزود الاقتباس ، أو فتح الجهاز ، ثم احصل على اقتباس شاهد مع 64 بايت من بيانات المستخدم (عادةً ما يكون غير محدد) ، ثم أغلق الجهاز. للراحة ، يمكن جمع الشهادات مع الشهادات المرتبطة بها بتنسيق مخزن مؤقت للبروتوكول القابل للانتقال إلى الأسلاك.
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
) جنبًا إلى جنب مع بيانات التقرير التي تتكون عادةً من قيمة nonce. يعيد تمثيل العازلة للبروتوكول لاقتباس الشاهد.
يمكنك استخدام GetRawQuote
للحصول على اقتباس TDX بتنسيق صفيف البايت.
func (d Device) Close() error
يغلق الجهاز.
verify
ستتحقق هذه المكتبة من التوقيع وسلسلة الشهادات وخصائص التكوين الأساسي من اقتباس التصديق. تأتي متطلبات الاقتباس بشكل جيد من مواصفات Intel TDX ، وتأتي متطلبات تشكيل الشهادة جيدًا من مواصفات شهادة Intel PCK.
من المتوقع وجود سلسلة شهادة PCK ضمن اقتباس Inport Investation.
func TdxQuote(quote *pb.QuoteV4, options *Options) error
تتحقق هذه الوظيفة من أن التصديق له توقيع وسلسلة شهادة صالحة. يوفر التحقق الاختياري مقابل الضمان الذي تم الحصول عليه من واجهة برمجة تطبيقات Intel PCS ويوفر أيضًا فحصًا اختياريًا مقابل قائمة إلغاء الشهادة (CRL). افتراضيًا ، يتم تعطيل خيار التحقق من الضمانات وقائمة إلغاء الشهادة (CRL). يعتمد التحقق باستخدام الضمانات على وثائق مواصفات API Intel PCS.
مثال على الاحتجاج المتوقع:
verify.TdxQuote(myAttestation, verify.Options())
Options
يحتوي هذا النوع على خمسة حقول:
GetCollateral bool
: إذا كان ذلك صحيحًا ، فسيقوم TdxQuote
بتنزيل الجانبية من خدمة API Intel PCS وتحقق من الضمان الذي تم الحصول عليه. يجب أن يكون true
إذا كانت CheckRevocations
صحيحة.CheckRevocations bool
: إذا كان ذلك صحيحًا ، فسيقوم TdxQuote
بتنزيل قائمة إلغاء الشهادة (CRL) من خدمة API Intel PCS وتحقق من الإلغاء.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
تمتد هذه الوظيفة إلى Digest SHA-384 في سجل RTMR المقابل. إذا لم يتطابق طول DAGEST المعطى مع DAGEST 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 المدعوم رسميًا.