Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Microsoft Azure Attestation menjamin keamanan yang kuat dengan memverifikasi rantai kepercayaan, dikelola dari akar kepercayaan (TPM) hingga peluncuran hypervisor dan kernel aman. Untuk melakukannya, Azure Attestation harus membuktikan status boot komputer sebelum kita dapat membangun kepercayaan pada enklave aman. Sistem operasi, hypervisor, dan biner kernel yang aman harus ditandatangani oleh otoritas Microsoft resmi yang benar dan dikonfigurasi dengan cara yang aman. Setelah kami memiliki kepercayaan terikat antara Modul Platform Tepercaya (TPM) dan kesehatan hypervisor, kami dapat memercayai IDK enklave Keamanan Berbasis Virtualisasi (VBS) yang disediakan dalam Log Boot Terukur, dengan ini kami dapat memvalidasi bahwa pasangan kunci dibuat oleh enklave dan membuat laporan pengesahan yang mengikat kepercayaan pada kunci tersebut dan berisi klaim lain seperti tingkat keamanan dan properti pengesahan boot.
Enklave VBS memerlukan TPM untuk memberikan pengukuran untuk memvalidasi fondasi keamanan. Enklave VBS disahkan oleh titik akhir TPM dengan tambahan objek permintaan dalam protokol.
Pesan protokol
Protokol memiliki dua pertukaran pesan:
- Pesan Init
- Pesan permintaan
Pesan init
Pesan untuk menetapkan konteks untuk pesan permintaan.
Arah
Klien -> Azure Attestation
Payload
{
"type": "aikcert"
}
"type" (string ASCII): mewakili jenis pengesahan yang diminta. Saat ini, hanya "aikcert" yang didukung.
Pesan tantangan
Arah
Azure Attestation -> Klien
Payload
{
"challenge": "<BASE64URL(CHALLENGE)>",
"service_context": "<BASE64URL(SERVICECONTEXT)>"
}
challenge (BASE64URL(OCTETS)): Nilai acak yang dikeluarkan oleh layanan.
service_context (BASE64URL(OCTETS)): Konteks buram yang dibuat oleh layanan.
Pesan permintaan
Payload yang berisi data yang akan dibuktikan oleh layanan pengesahan.
Catatan: Dukungan untuk log pengukuran IMA dan Kunci telah ditambahkan ke pesan Permintaan, dan dapat ditemukan di bagian Pesan Permintaan V2
Pesan permintaan v1
Arah
Klien -> Azure Attestation
Payload
{
"request": "<JWS>"
}
request (JWS): Permintaan terdiri dari struktur JSON Web Signature (JWS). JWS Protected Header dan JWS Payload ditampilkan di bawah. Seperti dalam struktur JWS apa pun, nilai akhir terdiri dari:
BASE64URL(UTF8(Header Dilindungi JWS)) || '.' ||
BASE64URL (Payload JWS) || '.' ||
BASE64URL (Tanda Tangan JWS)
Header yang dilindungi JWS
{
"alg": "PS256",
"typ": "attReq"
// no "kid" parameter as the key specified by attest_key MUST sign this JWS to prove possession.
}
Payload JWS
Payload JWS dapat berdasarkan jenis dasar atau VBS. Dasar digunakan saat bukti pengesahan tidak menyertakan data VBS.
Sampel khusus TPM:
{
"att_type": "basic",
"att_data": {
"rp_id": "<URL>",
"rp_data": "<BASE64URL(RPCUSTOMDATA)>",
"challenge": "<BASE64URL(CHALLENGE)>",
"tpm_att_data": {
"srtm_boot_log": "<BASE64URL(SRTMBOOTLOG)>",
"srtm_resume_log": "<BASE64URL(SRTMRESUMELOG)>",
"drtm_boot_log": "<BASE64URL(DRTMBOOTLOG)>",
"drtm_resume_log": "<BASE64URL(DRTMRESUMELOG)>",
"aik_cert": "<BASE64URL(AIKCERTIFICATE)>",
// aik_pub is represented as a JSON Web Key (JWK) object (RFC 7517).
"aik_pub": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"current_claim": "<BASE64URL(CURRENTCLAIM)>",
"boot_claim": "<BASE64URL(BOOTCLAIM)>"
},
// attest_key is represented as a JSON Web Key (JWK) object (RFC 7517).
"attest_key": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"custom_claims": [
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
},
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
}
],
"service_context": "<BASE64URL(SERVICECONTEXT)>"
}
}
Sampel enklave TPM + VBS:
{
"att_type": "vbs",
"att_data": {
"report_signed": {
"rp_id": "<URL>",
"rp_data": "<BASE64URL(RPCUSTOMDATA)>",
"challenge": "<BASE64URL(CHALLENGE)>",
"tpm_att_data": {
"srtm_boot_log": "<BASE64URL(SRTMBOOTLOG)>",
"srtm_resume_log": "<BASE64URL(SRTMRESUMELOG)>",
"drtm_boot_log": "<BASE64URL(DRTMBOOTLOG)>",
"drtm_resume_log": "<BASE64URL(DRTMRESUMELOG)>",
"aik_cert": "<BASE64URL(AIKCERTIFICATE)>",
// aik_pub is represented as a JSON Web Key (JWK) object (RFC 7517).
"aik_pub": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"current_claim": "<BASE64URL(CURRENTCLAIM)>",
"boot_claim": "<BASE64URL(BOOTCLAIM)>"
},
// attest_key is represented as a JSON Web Key (JWK) object (RFC 7517).
"attest_key": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"custom_claims": [
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
},
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
}
],
"service_context": "<BASE64URL(SERVICECONTEXT)>"
},
"vsm_report": "<BASE64URL(REPORT)>"
}
}
rp_id (StringOrURI): Mengandalkan pengidentifikasi partai. Digunakan oleh layanan dalam perhitungan klaim ID komputer
rp_data (BASE64URL(OCTETS)): Data buram yang diteruskan oleh pihak yang mengandalkan. Ini biasanya digunakan oleh pihak yang mengandalkan sebagai nonce untuk menjamin kesegaran laporan
challenge (BASE64URL(OCTETS)): Nilai acak yang dikeluarkan oleh layanan
tpm_att_data: Data pengesahan terkait TPM
srtm_boot_log (BASE64URL(OCTETS)): Log boot SRTM sebagaimana diambil oleh Tbsi_Get_TCG_Log_Ex dengan jenis log = TBS_TCGLOG_SRTM_BOOT
srtm_resume_log (BASE64URL(OCTETS)): log resume SRTM sebagaimana diambil oleh Tbsi_Get_TCG_Log_Ex dengan jenis log = TBS_TCGLOG_SRTM_RESUME
drtm_boot_log (BASE64URL(OCTETS)): Log boot DRTM sebagaimana diambil oleh Tbsi_Get_TCG_Log_Ex dengan jenis log = TBS_TCGLOG_DRTM_BOOT
drtm_resume_log (BASE64URL(OCTETS)): Log resume DRTM sebagaimana diambil oleh Tbsi_Get_TCG_Log_Ex dengan jenis log = TBS_TCGLOG_DRTM_RESUME
aik_cert (BASE64URL(OCTETS)): Sertifikat X.509 untuk AIK sebagaimana ditampilkan oleh fungsi NCryptGetProperty dengan properti = NCRYPT_CERTIFICATE_PROPERTY
aik_pub: Bagian publik dari AIK yang diwakili sebagai objek JSON Web Key (JWK) (RFC 7517)
current_claim (BASE64URL(OCTETS)): Klaim pengesahan untuk status PCR saat ini sebagaimana ditampilkan oleh fungsi NCryptCreateClaim dengan dwClaimType = NCRYPT_CLAIM_PLATFORM dan parameter NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK yang diatur untuk menyertakan semua PCR. Tantangan yang dikirim oleh layanan juga harus digunakan dalam perhitungan klaim ini
boot_claim (BASE64URL(OCTETS)): Klaim pengesahan untuk status PCR saat boot sebagaimana ditampilkan oleh fungsi NCryptCreateClaim dengan dwClaimType = NCRYPT_CLAIM_PLATFORM dan parameter NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK yang diatur untuk menyertakan semua PCR
vsm_report (BASE64URL(OCTETS)): Laporan pengesahan enklave VBS sebagaimana dikembalikan oleh fungsi EnclaveGetAttestationReport. Parameter EnclaveData harus berupa hash SHA-512 dari nilai report_signed (termasuk kurung kurawal pembuka dan penutup). Input fungsi hash adalah UTF8(report_signed)
attest_key: Bagian publik dari kunci enklave yang dinyatakan sebagai objek JSON Web Key (JWK) (RFC 7517)
custom_claims: Array klaim enklave kustom yang dikirim ke layanan yang dapat dievaluasi oleh kebijakan. Klaim
nama (String): Nama klaim. Nama ini akan ditambahkan ke url yang ditentukan oleh Layanan Pengesahan (untuk menghindari konflik) dan string yang digabungkan menjadi jenis klaim yang dapat digunakan dalam kebijakan
value (String): Nilai klaim
value_type (String): Jenis data nilai klaim
service_context (BASE64URL(OCTETS)): Konteks buram yang dibuat oleh layanan.
Pesan laporan
Arah
Azure Attestation -> Klien
Payload
{
"report": "<JWT>"
}
laporan (JWT): Laporan pengesahan dalam format JSON Web Token (JWT) (RFC 7519).
Pesan permintaan v2
{
"request": "<JWS>"
}
request (JWS): Permintaan terdiri dari struktur JSON Web Signature (JWS). JWS Protected Header dan JWS Payload ditampilkan di bawah. Seperti dalam struktur JWS apa pun, nilai akhir terdiri dari: BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(Payload JWS) || '.' || BASE64URL(Tanda Tangan JWS)
Header yang dilindungi JWS
{
"alg": "PS256",
"typ": "attReqV2"
// no "kid" parameter as the key specified by request_key MUST sign this JWS to prove possession.
}
Payload JWS
Payload JWS dapat berjenis dasar atau vsm. Dasar digunakan ketika bukti pengesahan tidak menyertakan data VSM.
Contoh dasar:
{
"att_type": "basic",
"att_data": {
"rp_id": "<URL>",
"rp_data": "<BASE64URL(RPCUSTOMDATA)>",
"challenge": "<BASE64URL(CHALLENGE)>",
"tpm_att_data": {
"current_attestation": {
"logs": [
{
"type": "TCG",
"log": "<BASE64URL(CURRENT_LOG1)>"
},
{
"type": "TCG",
"log": "<BASE64URL(CURRENT_LOG2)>"
},
{
"type": "TCG",
"log": "<BASE64URL(CURRENT_LOG3)>"
}
],
"aik_cert": "<BASE64URL(AIKCERTIFICATE)>",
// aik_pub is represented as a JSON Web Key (JWK) object (RFC 7517).
"aik_pub": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"pcrs": [
{
"algorithm": 4, // TPM_ALG_SHA1
"values": [
{
"index": 0,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 5,
"digest": "<BASE64URL(DIGEST)>"
}
]
},
{
"algorithm": 11, // TPM_ALG_SHA256
"values": [
{
"index": 2,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 1,
"digest": "<BASE64URL(DIGEST)>"
}
]
}
],
"quote": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
},
"boot_attestation": {
"logs": [
{
"type": "TCG",
"log": "<BASE64URL(BOOT_LOG1)>"
},
{
"type": "TCG",
"log": "<BASE64URL(BOOT_LOG2)>"
}
],
"aik_cert": "<BASE64URL(AIKCERTIFICATE)>",
// aik_pub is represented as a JSON Web Key (JWK) object (RFC 7517).
"aik_pub": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"pcrs": [
{
"algorithm": 4, // TPM_ALG_SHA1
"values": [
{
"index": 0,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 5,
"digest": "<BASE64URL(DIGEST)>"
}
]
},
{
"algorithm": 11, // TPM_ALG_SHA256
"values": [
{
"index": 2,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 1,
"digest": "<BASE64URL(DIGEST)>"
}
]
}
],
"quote": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
}
},
"request_key": {
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote": {
"hash_alg": "sha-256"
}
}
},
"other_keys": [
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_certify": {
"public": "<BASE64URL(TPMT_PUBLIC)>",
"certification": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
}
}
},
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
],
"custom_claims": [
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
},
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
}
],
"service_context": "<BASE64URL(SERVICECONTEXT)>"
}
}
Contoh enklave TPM + VBS:
{
"att_type": "vbs",
"att_data": {
"report_signed": {
"rp_id": "<URL>",
"rp_data": "<BASE64URL(RPCUSTOMDATA)>",
"challenge": "<BASE64URL(CHALLENGE)>",
"tpm_att_data": {
"current_attestation": {
"logs": [
{
"type": "TCG",
"log": "<BASE64URL(CURRENT_LOG1)>"
},
{
"type": "TCG",
"log": "<BASE64URL(CURRENT_LOG2)>"
},
{
"type": "TCG",
"log": "<BASE64URL(CURRENT_LOG3)>"
}
],
"aik_cert": "<BASE64URL(AIKCERTIFICATE)>",
// aik_pub is represented as a JSON Web Key (JWK) object (RFC 7517).
"aik_pub": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"pcrs": [
{
"algorithm": 4, // TPM_ALG_SHA1
"values": [
{
"index": 0,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 5,
"digest": "<BASE64URL(DIGEST)>"
}
]
},
{
"algorithm": 11, // TPM_ALG_SHA256
"values": [
{
"index": 2,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 1,
"digest": "<BASE64URL(DIGEST)>"
}
]
}
],
"quote": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
},
"boot_attestation": {
"logs": [
{
"type": "TCG",
"log": "<BASE64URL(BOOT_LOG1)>"
},
{
"type": "TCG",
"log": "<BASE64URL(BOOT_LOG2)>"
}
],
"aik_cert": "<BASE64URL(AIKCERTIFICATE)>",
// aik_pub is represented as a JSON Web Key (JWK) object (RFC 7517).
"aik_pub": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"pcrs": [
{
"algorithm": 4, // TPM_ALG_SHA1
"values": [
{
"index": 0,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 5,
"digest": "<BASE64URL(DIGEST)>"
}
]
},
{
"algorithm": 11, // TPM_ALG_SHA256
"values": [
{
"index": 2,
"digest": "<BASE64URL(DIGEST)>"
},
{
"index": 1,
"digest": "<BASE64URL(DIGEST)>"
}
]
}
],
"quote": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
}
},
"request_key": {
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote": {
"hash_alg": "sha-256"
}
}
},
"other_keys": [
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_certify": {
"public": "<BASE64URL(TPMT_PUBLIC)>",
"certification": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
}
}
},
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
],
"custom_claims": [
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
},
{
"name": "<name>",
"value": "<value>",
"value_type": "<value_type>"
}
],
"service_context": "<BASE64URL(SERVICECONTEXT)>"
},
"vsm_report": {
"enclave": {
"report": "<BASE64URL(REPORT)>"
}
}
}
}
rp_id (StringOrURI): Mengandalkan pengidentifikasi partai. Digunakan oleh layanan dalam komputasi klaim ID mesin.
rp_data (BASE64URL(OCTETS)): Data buram yang diteruskan oleh pihak yang mengandalkan. Ini biasanya digunakan oleh pihak yang mengandalkan sebagai nonce untuk menjamin kesegaran laporan.
challenge (BASE64URL(OCTETS)): Nilai acak yang dikeluarkan oleh layanan.
current_attestation (Objek): Berisi log dan kutipan TPM untuk status sistem saat ini (boot atau resume). Nonce yang diterima dari layanan harus diteruskan ke perintah TPM2_Quote dalam parameter 'qualifyingData'.
boot_attestation (Objek): Ini bersifat opsional dan berisi log dan kutipan TPM yang disimpan sebelum sistem dihibernasi dan dilanjutkan. boot_attestation info harus dikaitkan dengan siklus boot dingin yang sama (yaitu, sistem hanya dihibernasi dan dilanjutkan di antara mereka).
log (Array(Object)): Array log. Setiap elemen array berisi log dan array harus dalam urutan yang digunakan untuk pengukuran.
-
- type (String): Jenis log: "TCG" atau "IMA".
-
- log (BASE64URL(OCTETS)): Log yang dikodekan sebagai string BASE64URL.
aik_cert (BASE64URL(OCTETS)): Sertifikat X.509 yang mewakili AIK.
aik_pub (JWK): Bagian publik dari AIK diwakili sebagai objek JSON Web Key (JWK) (RFC 7517).
pcrs (Array(Object)): Berisi set yang dikutip. Setiap elemen array mewakili bank PCR dan array harus dalam urutan yang digunakan untuk membuat kuotasi. Bank PCR didefinisikan oleh algoritma dan nilainya (hanya nilai yang dikutip yang harus ada dalam daftar).
-
- algoritma (Bilangan Bulat): nilai UINT16 yang mewakili algoritma hash yang ditentukan oleh konstanta TPM_ALG_ID.
-
- nilai (Array(Object)): Array nilai hash yang dikutip. Setiap elemen array mewakili nilai hash di bank PCR.
-
-
- indeks (Bilangan Bulat): Indeks nilai hash PCR.
-
-
-
- digest (BASE64URL(OCTETS)): Nilai hash.
-
-
- quote (BASE64URL(OCTETS)): TPMS_ATTEST dikembalikan oleh perintah TPM2_Quote. Jika bidang ini berada di objek "current_attestation", tantangan yang diterima dari layanan harus diteruskan ke perintah TPM2_Quote dalam parameter 'qualifyingData'. Nilai parameter 'qualifyingData' tertentu tergantung pada metode pengikatan "request_key" dan dijelaskan di bagian KEY OBJECT.
-
- signature (BASE64URL(OCTETS)): TPMT_SIGNATURE dikembalikan oleh perintah TPM2_Quote. Jika bidang ini berada di objek "current_attestation", tantangan yang diterima dari layanan harus diteruskan ke perintah TPM2_Quote dalam parameter 'qualifyingData'. Nilai parameter 'qualifyingData' tertentu tergantung pada metode pengikatan "request_key" dan dijelaskan di bagian KEY OBJECT.
vsm_report (Objek Laporan VSM): Laporan pengesahan VSM. Lihat bagian OBJEK LAPORAN VSM.
request_key (Objek kunci): Kunci yang digunakan untuk menandatangani permintaan. Jika ada TPM (permintaan berisi kutipan TPM), request_key harus terikat ke TPM melalui kuotasi atau menjadi residen di TPM (lihat OBJEK KUNCI).
other_keys (Array(Objek kunci)): Array kunci yang akan dikirim ke layanan. Maksimal dua kunci.
custom_claims (Array(Object)): Array klaim enklave kustom yang dikirim ke layanan yang dapat dievaluasi oleh kebijakan.
nama (String): Nama klaim. Nama ini akan ditambahkan ke url yang ditentukan oleh Layanan Pengesahan (untuk menghindari konflik) dan string yang digabungkan menjadi jenis klaim yang dapat digunakan dalam kebijakan.
value (String): Nilai klaim.
value_type (String): Jenis data nilai klaim.
service_context (BASE64URL(OCTETS)): Buram, konteks terenkripsi yang dibuat oleh layanan yang mencakup, antara lain, tantangan dan waktu kedaluwarsa untuk tantangan tersebut.
Objek kunci
jwk (Objek): Bagian publik dari kunci yang diwakili sebagai objek JSON Web Key (JWK) (RFC 7517).
info (Objek): Informasi tambahan tentang kunci.
Tidak ada informasi tambahan:(Objek info dapat kosong atau hilang dari permintaan)
• Kunci terikat ke TPM melalui kutipan:
- tpm_quote (Objek): Data untuk metode pengikatan kutipan TPM.
- hash_alg (String): Algoritma yang digunakan untuk membuat hash yang diteruskan ke perintah TPM2_Quote dalam parameter 'qualifyingData'. Hash dihitung oleh HASH[UTF8(jwk) || 0x00 || <OCTETS(tantangan layanan)>]. Catatan: UTF8(jwk) harus berupa string yang tepat yang akan dikirim pada kawat karena layanan akan menghitung hash menggunakan string yang tepat yang diterima dalam permintaan tanpa modifikasi.
Catatan: Metode pengikatan ini tidak dapat digunakan untuk kunci dalam array other_keys.
• Bersertifikat kunci untuk menjadi residen di TPM:
tpm_certify (Objek): Data untuk metode pengikatan sertifikasi TPM. "public" (BASE64URL(OCTETS)): TPMT_PUBLIC struktur yang mewakili area publik kunci dalam TPM.
sertifikasi (BASE64URL(OCTETS)): TPMS_ATTEST dikembalikan oleh perintah TPM2_Certify. Tantangan yang diterima dari layanan harus diteruskan ke perintah TPM2_Certify dalam parameter 'qualifyingData'. AIK yang disediakan dalam permintaan harus digunakan untuk mensertifikasi kunci.
signature (BASE64URL(OCTETS)): TPMT_SIGNATURE dikembalikan oleh perintah TPM2_Certify. Tantangan yang diterima dari layanan harus diteruskan ke perintah TPM2_Certify dalam parameter 'qualifyingData'. AIK yang disediakan dalam permintaan harus digunakan untuk mensertifikasi kunci.
Catatan: Ketika metode pengikatan ini digunakan untuk request_key, nilai parameter 'qualifyingData' yang diteruskan ke perintah TPM2_Quote hanyalah tantangan yang diterima dari layanan.
Contoh:
Kunci tidak terikat ke TPM:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
Kunci terikat ke TPM melalui kutipan (baik penduduk di enklave VBS atau tidak):
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
Kunci bersertifikat untuk menjadi penghuni di TPM:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_certify": {
"public": "<BASE64URL(TPMT_PUBLIC)>",
"certification": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
}
}
}
Objek kunci kebijakan
Objek kunci kebijakan adalah versi objek kunci yang digunakan sebagai klaim input dalam kebijakan. Ini diproses oleh layanan untuk membuatnya lebih mudah dibaca dan lebih mudah dievaluasi oleh aturan kebijakan.
• Kunci tidak terikat ke TPM: Sama dengan objek kunci masing-masing. Contoh:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
• Kunci terikat ke TPM melalui kutipan (baik penduduk di enklave VBS atau tidak): Sama dengan objek kunci masing-masing. Contoh:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
• Bersertifikat kunci untuk menjadi residen di TPM:
jwk (Objek): Sama dengan objek kunci masing-masing. info.tpm_certify (Objek):
- name_alg (Bilangan Bulat): Nilai UINT16 yang mewakili algoritma hash yang ditentukan oleh konstanta TPM_ALG_ID.
- obj_attr (Bilangan Bulat): Nilai UINT32 yang mewakili atribut objek kunci yang ditentukan oleh TPMA_OBJECT
- auth_policy (BASE64URL(OCTETS)): Kebijakan opsional untuk menggunakan objek kunci ini.
Contoh:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_certify": {
"name_alg": 11, // 0xB (TPM_ALG_SHA256)
"obj_attr": 50, // 0x32 (fixedTPM | fixedParent | sensitiveDataOrigin)
"auth_policy": "<BASE64URL(AUTH_POLICY)>"
}
}
}
Objek laporan VBS
Pengesahan Enklave:
enklave (Objek): Data untuk pengesahan enklave VSM.
- report (BASE64URL(OCTETS)): Laporan pengesahan enklave VSM seperti yang dikembalikan oleh fungsi EnclaveGetAttestationReport. Parameter EnclaveData harus berupa hash SHA-512 dari nilai report_signed (termasuk kurung kurawal pembuka dan penutup). Input fungsi hash adalah UTF8(report_signed).
Contoh:
Pengesahan Enklave:
{
"enclave": {
"report": "<BASE64URL(REPORT)>"
}
}
Pesan laporan
Layanan Pengesahan Arah -> Klien
Payload
{
"report": "<JWT>"
}
laporan (JWT): Laporan pengesahan dalam format JSON Web Token (JWT) (RFC 7519).