ما هو إثبات الضيف للأجهزة الظاهرية السرية؟
يساعدك تصديق الضيف على تأكيد أن بيئة الجهاز الظاهري السرية مؤمنة بواسطة بيئة تنفيذ موثوقة أصلية مدعومة من الأجهزة (TEE) مع تمكين ميزات الأمان للعزل والتكامل.
يمكنك استخدام إثبات الضيف من أجل:
- تأكد من تشغيل الجهاز الظاهري السري على النظام الأساسي للأجهزة المتوقع
- تحقق من تمكين التمهيد الآمن للجهاز الظاهري السري. يحمي هذا الإعداد الطبقات السفلية من الجهاز الظاهري (البرنامج الثابت، محمل التمهيد، النواة) من البرامج الضارة (rootkits، bootkits).
- الحصول على دليل لجهة اعتماد على أن الجهاز الظاهري السري يعمل على أجهزة سرية
إشعار
لإجراء تصديق الضيف لأجهزة DCesv5 وECesv5 الظاهرية المدعومة من Intel TDX، يتوفر دليل إرشادي هنا. يتطلب استخدام Intel Trust Authority التسجيل باستخدام Intel.
السيناريوهات
المكونات والخدمات الرئيسية المتضمنة في إثبات الضيف هي:
- حمل العمل
- مكتبة تصديق الضيف
- الأجهزة (لإعداد التقارير). على سبيل المثال، AMD-SEVSNP.
- خدمة Microsoft Azure Attestation
- استجابة الرمز المميز للويب JSON
تتضمن السيناريوهات التشغيلية النموذجية مكتبة العميل لتقديم طلبات التصديق على النحو التالي.
السيناريو: الطلب في حمل عمل منفصل
في هذا السيناريو المثال، يتم تقديم طلبات التصديق في حمل عمل منفصل. تحدد الطلبات ما إذا كان الجهاز الظاهري السري يعمل على النظام الأساسي الصحيح للأجهزة قبل تشغيل حمل العمل.
يجب أن يتكامل حمل العمل (عميل مدقق النظام الأساسي في الرسم التخطيطي) مع مكتبة التصديق وتشغيله داخل الجهاز الظاهري السري للقيام بالإثبات. بعد أن يقدم البرنامج طلبا إلى مكتبة التصديق، يوزع حمل العمل الاستجابة لتحديد ما إذا كان الجهاز الظاهري يعمل على النظام الأساسي الصحيح للأجهزة و/أو إعداد التمهيد الآمن قبل تشغيل حمل العمل الحساس.
يشبه هذا السيناريو السيناريو التالي. الفرق الرئيسي هو كيفية تحقيق كل سيناريو لنفس الهدف استنادا إلى موقع الطلب.
السيناريو: طلب من داخل حمل العمل
في هذا السيناريو المثال، يتم تقديم طلبات التصديق داخل حمل العمل في بداية البرنامج. تتحقق الطلبات مما إذا كان الجهاز الظاهري السري يعمل على النظام الأساسي الصحيح للأجهزة قبل تشغيل حمل العمل.
هذا السيناريو مشابه للسيناريو السابق. الفرق الرئيسي هو كيفية تحقيق كل سيناريو لنفس الهدف استنادا إلى موقع الطلب.
يجب أن يتكامل حمل عمل العميل مع مكتبة التصديق وتشغيله داخل الجهاز الظاهري السري. بعد أن يقدم حمل عمل العميل طلبا إلى مكتبة التصديق، يقوم حمل عمل العميل بتحليل الاستجابة لتحديد ما إذا كان الجهاز الظاهري يعمل على النظام الأساسي الصحيح للأجهزة و/أو إعداد التمهيد الآمن قبل إعداد حمل العمل الحساس بالكامل.
السيناريو: تأكيد اتصال جهة الاعتماد
في هذا السيناريو المثال، يجب أن يثبت الجهاز الظاهري السري أنه يعمل على نظام أساسي سري قبل أن يشارك طرف الاعتماد. يقدم الجهاز الظاهري السري رمزا مميزا للإثبات لجهة الاعتماد لبدء التفاوض.
بعض الأمثلة على المفاوضات هي:
- يريد الجهاز الظاهري السري أسرارا من خدمة إدارة سرية.
- يريد العميل التأكد من أن الجهاز الظاهري السري يعمل على نظام أساسي سري قبل الكشف عن البيانات الشخصية للجهاز الظاهري السري للمعالجة.
يوضح الرسم التخطيطي التالي تأكيد الاتصال بين جهاز ظاهري سري والطرف المعتمد.
يوضح الرسم التخطيطي للتسلسل التالي سيناريو جهة الاعتماد بشكل أكبر. يستخدم الطلب/الاستجابة بين الأنظمة المعنية واجهات برمجة تطبيقات مكتبة تصديق الضيف. يتفاعل الجهاز الظاهري السري مع مدير الأسرار ل bootstrap نفسه باستخدام الأسرار المستلمة.
واجهات برمجة التطبيقات (API)
توفر Microsoft مكتبة تصديق الضيف مع واجهات برمجة التطبيقات لإجراء الإثباتات، وتشفير البيانات وفك تشفيرها. هناك أيضا واجهة برمجة تطبيقات لاستعادة الذاكرة.
يمكنك استخدام واجهات برمجة التطبيقات هذه للسيناريوهات المختلفة الموضحة سابقا.
واجهة برمجة تطبيقات التصديق
تأخذ ClientParameters
واجهة برمجة تطبيقات Attest الكائن كمدخل وتعيد رمز إثبات تم فك تشفيره. على سبيل المثال:
AttestationResult Attest([in] ClientParameters client_params,
[out] buffer jwt_token);
المعلمة | المعلومات |
---|---|
ClientParameters (النوع: كائن) |
الكائن الذي يأخذ الإصدار (النوع: uint32_t )، معرف URI لمستأجر التصديق (النوع: حرف غير موقع)، وحمولة العميل (النوع: حرف غير موقع). حمولة العميل هي صفر أو أكثر من أزواج قيمة المفتاح لأي بيانات تعريف عميل أو عميل يتم إرجاعها في حمولة الاستجابة. يجب أن تكون أزواج قيمة المفتاح بتنسيق "{\"key1\":\"value1\",\"key2\":\"value2\"}" سلسلة JSON . على سبيل المثال، قد تبدو قيمة مفتاح حداثة الشهادة مثل {\”Nonce\”:\”011510062022\”} . |
buffer |
رمز ويب JSON المميز الذي يحتوي على معلومات التصديق. |
ترجع واجهة برمجة تطبيقات Attest (AttestationResult
النوع: البنية).
تشفير واجهة برمجة التطبيقات
تأخذ واجهة برمجة تطبيقات التشفير البيانات ليتم تشفيرها ورمز ويب JSON المميز كمدخل. تقوم واجهة برمجة التطبيقات بتشفير البيانات باستخدام المفتاح المؤقت العام الموجود في رمز ويب JSON المميز. على سبيل المثال:
AttestationResult Encrypt(
[enum] encryption_type,
[in] const unsigned char* jwt_token,
[in] const unsigned char* data,
[in] uint32_t data_size,
[out] unsigned char** encrypted_data,
[out] uint32_t* encrypted_data_size,
[out] unsigned char** encryption_metadata,
[out] uint32_t encryption_metadata_size);
المعلمة | الشرح |
---|---|
encryption_type |
لا شيء. |
const unsigned char* jwt_token |
رمز ويب JSON المميز الذي يحتوي على معلومات التصديق. |
const unsigned char* data |
البيانات المراد تشفيرها |
uint32_t data_size |
حجم البيانات المراد تشفيرها. |
unsigned char** encrypted_data |
البيانات المشفرة. |
uint32_t* encrypted_data_size |
حجم البيانات المشفرة. |
unsigned char** encryption_metadata |
بيانات تعريف التشفير. |
uint32_t encryption_metadata_size |
حجم بيانات تعريف التشفير. |
تقوم واجهة برمجة تطبيقات التشفير بإرجاع AttestationResult
(النوع: البنية).
فك تشفير واجهة برمجة التطبيقات
تأخذ واجهة برمجة تطبيقات فك التشفير البيانات المشفرة كإدخل وفك تشفير البيانات باستخدام المفتاح المؤقت الخاص المختوم بوحدة النظام الأساسي الموثوق به (TPM). على سبيل المثال:
AttestationResult Decrypt([enum] encryption_type,
[in] const unsigned char* encrypted_data,
[in] uint32_t encrypted_data_size,
[in] const unsigned char* encryption_metadata,
[in] unit32_t encryption_metadata_size,
[out] unsigned char** decrypted_data,
[out] unit32_t decrypted_data_size);
المعلمة | الشرح |
---|---|
encryption_type |
لا شيء. |
const unsigned char* encrypted_data |
البيانات المراد فك تشفيرها. |
uint32_t encrypted_data_size |
حجم البيانات المراد فك تشفيرها. |
const unsigned char* encryption_metadata |
بيانات تعريف التشفير. |
unit32_t encryption_metadata_size |
حجم بيانات تعريف التشفير. |
unsigned char** decrypted_data |
البيانات المفككة. |
unit32_t decrypted_data_size |
حجم البيانات التي تم فك تشفيرها. |
ترجع AttestationResult
واجهة برمجة تطبيقات فك التشفير (النوع: البنية).
واجهة برمجة تطبيقات مجانية
تستعيد واجهة برمجة التطبيقات المجانية الذاكرة التي تحتفظ بها البيانات. على سبيل المثال:
Free([in] buffer data);
المعلمة | الشرح |
---|---|
data |
استعادة الذاكرة التي تحتفظ بها البيانات. |
لا ترجع واجهة برمجة التطبيقات المجانية أي شيء.
رموز الخطأ
يمكن لواجهات برمجة التطبيقات إرجاع رموز الخطأ التالية:
رمز الخطأ | الوصف |
---|---|
1 | حدث خطأ أثناء تهيئة الفشل. |
2 | خطأ في تحليل الاستجابة. |
3 | لم يتم العثور على الهويات المدارة للرمز المميز لموارد Azure. |
4 | تجاوز الطلب عمليات إعادة المحاولة. |
5 | فشل الطلب. |
6 | فشل التصديق. |
7 | فشل إرسال الطلب. |
8 | معلمة إدخال غير صحيحة. |
9 | فشل التحقق من صحة معلمات التصديق. |
10 | فشل تخصيص الذاكرة. |
11 | فشل الحصول على معلومات نظام التشغيل (OS). |
12 | فشل داخلي في TPM. |
13 | فشلت عملية TPM. |
14 | فشل فك تشفير رمز ويب JSON المميز. |
15 | خطأ في فك تشفير رمز ويب JSON TPM. |
16 | استجابة JSON غير صحيحة. |
17 | شهادة مفتاح مصادقة الشريحة (VCEK) الفارغة. |
18 | استجابة فارغة. |
19 | نص الطلب الفارغ. |
20 | الإبلاغ عن فشل التحليل. |
21 | التقرير فارغ. |
22 | حدث خطأ أثناء استخراج معلومات رمز ويب JSON المميز. |
23 | حدث خطأ أثناء تحويل رمز ويب JSON المميز إلى مفتاح عام RSA. |
24 | فشل تهيئة التشفير EVP_PKEY. |
25 | فشل تشفير EVP_PKEY. |
26 | خطأ TPM لفك تشفير البيانات. |
27 | حدث خطأ أثناء تحليل معلومات DNS. |
رمز JSON على الويب
يمكنك استخراج أجزاء مختلفة من رمز ويب JSON المميز لسيناريوهات واجهة برمجة التطبيقات المختلفة الموضحة سابقا. فيما يلي حقول مهمة لميزة إثبات الضيف:
المطلب | السمة | مثال للقيمة |
---|---|---|
- | x-ms-azurevm-vmid |
2DEDC52A-6832-46CE-9910-E8C9980BF5A7 |
أجهزة AMD SEV-SNP | x-ms-isolation-tee |
sevsnpvm |
أجهزة AMD SEV-SNP | x-ms-compliance-status (ضمن x-ms-isolation-tee ) |
azure-compliant-cvm |
Secure boot | secure-boot (ضمن x-ms-runtime >vm-configuration ) |
true |
وحدة النظام الأساسي الموثوق بها الظاهرية | tpm-enabled (ضمن x-ms-runtime >vm-configuration ) |
true |
وحدة النظام الأساسي الموثوق بها الظاهرية | kid (ضمن x-ms-runtime >keys ) |
TpmEphemeralEncryptionKey |
{
"exp": 1653021894,
"iat": 1652993094,
"iss": "https://sharedeus.eus.test.attest.azure.net",
"jti": "<value>",
"nbf": 1652993094,
"secureboot": true,
"x-ms-attestation-type": "azurevm",
"x-ms-azurevm-attestation-protocol-ver": "2.0",
"x-ms-azurevm-attested-pcrs": [
0,
1,
2,
3,
4,
5,
6,
7,
11,
12,
13
],
"x-ms-azurevm-bootdebug-enabled": false,
"x-ms-azurevm-dbvalidated": true,
"x-ms-azurevm-dbxvalidated": true,
"x-ms-azurevm-debuggersdisabled": true,
"x-ms-azurevm-default-securebootkeysvalidated": true,
"x-ms-azurevm-elam-enabled": true,
"x-ms-azurevm-flightsigning-enabled": false,
"x-ms-azurevm-hvci-policy": 0,
"x-ms-azurevm-hypervisordebug-enabled": false,
"x-ms-azurevm-is-windows": true,
"x-ms-azurevm-kerneldebug-enabled": false,
"x-ms-azurevm-osbuild": "NotApplicable",
"x-ms-azurevm-osdistro": "Microsoft",
"x-ms-azurevm-ostype": "Windows",
"x-ms-azurevm-osversion-major": 10,
"x-ms-azurevm-osversion-minor": 0,
"x-ms-azurevm-signingdisabled": true,
"x-ms-azurevm-testsigning-enabled": false,
"x-ms-azurevm-vmid": "<value>",
"x-ms-isolation-tee": {
"x-ms-attestation-type": "sevsnpvm",
"x-ms-compliance-status": "azure-compliant-cvm",
"x-ms-runtime": {
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "HCLAkPub",
"kty": "RSA",
"n": "<value>"
}
],
"vm-configuration": {
"console-enabled": true,
"current-time": 1652993091,
"secure-boot": true,
"tpm-enabled": true,
"vmUniqueId": "<value>"
}
},
"x-ms-sevsnpvm-authorkeydigest": "<value>",
"x-ms-sevsnpvm-bootloader-svn": 2,
"x-ms-sevsnpvm-familyId": "<value>",
"x-ms-sevsnpvm-guestsvn": 1,
"x-ms-sevsnpvm-hostdata": "<value>",
"x-ms-sevsnpvm-idkeydigest": "<value>",
"x-ms-sevsnpvm-imageId": "<value>",
"x-ms-sevsnpvm-is-debuggable": false,
"x-ms-sevsnpvm-launchmeasurement": "<value>",
"x-ms-sevsnpvm-microcode-svn": 55,
"x-ms-sevsnpvm-migration-allowed": false,
"x-ms-sevsnpvm-reportdata": "<value>",
"x-ms-sevsnpvm-reportid": "<value>",
"x-ms-sevsnpvm-smt-allowed": true,
"x-ms-sevsnpvm-snpfw-svn": 2,
"x-ms-sevsnpvm-tee-svn": 0,
"x-ms-sevsnpvm-vmpl": 0
},
"x-ms-policy-hash": "<value>",
"x-ms-runtime": {
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "<value>"
}
]
},
"x-ms-ver": "1.0"
}