Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft Azure Doğrulama, güven kökünden (TPM) hiper yönetici ve güvenli çekirdeğin başlatılmasına kadar korunan bir güven zincirini doğrulayarak güçlü güvenlik garantisi verir. Bunu yapmak için Azure Doğrulama güvenli kapanıma güven oluşturmadan önce makinenin önyükleme durumunu doğrulamamız gerekir. İşletim sistemi, hiper yönetici ve güvenli çekirdek ikili dosyalarının doğru resmi Microsoft yetkilileri tarafından imzalanması ve güvenli bir şekilde yapılandırılması gerekir. Güvenilen Platform Modülü (TPM) ile hiper yöneticinin durumu arasında güvene bağlandıktan sonra, Ölçülen Önyükleme Günlüğü'nde sağlanan Sanallaştırma Tabanlı Güvenlik (VBS) kapanım IDK'lerine güvenebiliriz. Bununla, kapanım tarafından bir anahtar çifti oluşturulduğunu doğrulayabilir ve bu anahtara güven bağlayan ve güvenlik düzeyi ve önyükleme kanıtlama özellikleri gibi diğer talepleri içeren bir kanıtlama raporu oluşturabiliriz.
VBS kuşatmaları, güvenlik temelini doğrulamak için ölçümü sağlamak için bir TPM gerektirir. VBS kuşatmaları, protokoldeki istek nesnesine ek olarak TPM uç noktası tarafından doğrulanır.
Protokol iletileri
Protokolde iki ileti değişimi vardır:
- Başlatma İletisi
- İstek İletisi
Başlatma iletisi
İstek iletisi için bağlam oluşturmaya yönelik ileti.
Yön
İstemci -> Azure Doğrulama
Yük
{
"type": "aikcert"
}
"type" (ASCII dizesi): istenen kanıtlama türünü temsil eder. Şu anda yalnızca "aikcert" desteklenmektedir.
Sınama iletisi
Yön
Azure Doğrulama -> Müşteri
Yük
{
"challenge": "<BASE64URL(CHALLENGE)>",
"service_context": "<BASE64URL(SERVICECONTEXT)>"
}
challenge (BASE64URL(OCTETS)): Hizmet tarafından verilen rastgele değer.
service_context (BASE64URL(OCTETS)): Hizmet tarafından oluşturulan opak bağlam.
İstek İletisi
Kanıtlama hizmeti tarafından doğrulanacak verileri içeren yük.
Not: İstek iletisine IMA ölçüm günlükleri ve Anahtarlar desteği eklenmiştir ve İstek İletisi V2 bölümünde bulunabilir
İstek iletisi v1
Yön
İstemci -> Azure Doğrulama
Yük
{
"request": "<JWS>"
}
request (JWS): İstek bir JSON Web İmzası (JWS) yapısından oluşur. JWS Korumalı Üst Bilgisi ve JWS Yükü aşağıda gösterilmiştir. Herhangi bir JWS yapısında olduğu gibi, son değer şunlardan oluşur:
BASE64URL(UTF8(JWS Korumalı Üst Bilgi)) || '.' ||
BASE64URL(JWS Yükü) || '.' ||
BASE64URL(JWS İmzası)
JWS korumalı üst bilgisi
{
"alg": "PS256",
"typ": "attReq"
// no "kid" parameter as the key specified by attest_key MUST sign this JWS to prove possession.
}
JWS yükü
JWS yükü temel veya VBS türünde olabilir. Kanıtlama kanıtı VBS verilerini içermediğinde temel kullanılır.
Yalnızca TPM örneği:
{
"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)>"
}
}
TPM + VBS kapanım örneği:
{
"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): Bağlı olan taraf tanımlayıcısı. Hizmet tarafından makine kimliği talebi hesaplamasında kullanılır
rp_data (BASE64URL(OCTETS)): Bağlı olan taraf tarafından geçirilen donuk veriler. Bu normalde bağlı olan taraf tarafından raporun güncelliğini garanti etmek için nonce olarak kullanılır
sınama (BASE64URL(OCTETS)): Hizmet tarafından verilen rastgele değer
tpm_att_data: TPM ile ilgili kanıtlama verileri
srtm_boot_log (BASE64URL(OCTETS)): Günlük türü = TBS_TCGLOG_SRTM_BOOT olan işlev Tbsi_Get_TCG_Log_Ex tarafından alınan SRTM önyükleme günlükleri
srtm_resume_log (BASE64URL(OCTETS)): SRTM, günlük türü = TBS_TCGLOG_SRTM_RESUME olan işlev Tbsi_Get_TCG_Log_Ex tarafından alınan günlüğü sürdürür
drtm_boot_log (BASE64URL(OCTETS)): Günlük türü = TBS_TCGLOG_DRTM_BOOT olan işlev Tbsi_Get_TCG_Log_Ex tarafından alınan DRTM önyükleme günlükleri
drtm_resume_log (BASE64URL(OCTETS)): DRTM, günlük türü = TBS_TCGLOG_DRTM_RESUME olan işlev Tbsi_Get_TCG_Log_Ex tarafından alınan günlüğü sürdürür
aik_cert (BASE64URL(OCTETS)): NCryptGetProperty işlevi tarafından döndürülen AIK için X.509 sertifikası = NCRYPT_CERTIFICATE_PROPERTY
aik_pub: AIK'nin JSON Web Anahtarı (JWK) nesnesi olarak temsil edilen ortak bölümü (RFC 7517)
current_claim (BASE64URL(OCTETS)):DwClaimType = NCRYPT_CLAIM_PLATFORM ve parametre NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK tüm PCR'leri içerecek şekilde ayarlanmış NCryptCreateClaim işlevi tarafından döndürülen geçerli PCR durumu için kanıtlama talebi. Hizmet tarafından gönderilen sınama, bu talebin hesaplamasında da kullanılmalıdır
boot_claim (BASE64URL(OCTETS)): DwClaimType = NCRYPT_CLAIM_PLATFORM ve parametre NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK tüm PCR'leri içerecek şekilde ayarlanmış NCryptCreateClaim işlevi tarafından döndürülen önyüklemedeki PCR durumu kanıtlama talebi
vsm_report (BASE64URL(OCTETS)): EnclaveGetAttestationReport işlevi tarafından döndürülen VBS kapanım kanıtlama raporu. EnclaveData parametresi, report_signed değerinin SHA-512 karması olmalıdır (açma ve kapatma ayraçları dahil). Karma işlev girişi UTF8(report_signed)
attest_key: Kapanım anahtarının JSON Web Anahtarı (JWK) nesnesi olarak temsil edilen ortak bölümü (RFC 7517)
custom_claims: hizmete gönderilen ve ilke tarafından değerlendirilebilecek özel kapanım talepleri dizisi. Talep
name (String): Talebin adı. Bu ad Kanıtlama Hizmeti tarafından belirlenen bir URL'ye eklenir (çakışmaları önlemek için) ve birleştirilmiş dize ilkede kullanılabilecek talebin türü olur
value (Dize): Talebin değeri
value_type (Dize): Talebin değerinin veri türü
service_context (BASE64URL(OCTETS)): Hizmet tarafından oluşturulan opak bağlam.
Rapor iletisi
Yön
Azure Doğrulama -> Müşteri
Yük
{
"report": "<JWT>"
}
report (JWT): JSON Web Belirteci (JWT) biçiminde kanıtlama raporu (RFC 7519).
İstek iletisi v2
{
"request": "<JWS>"
}
request (JWS): İstek bir JSON Web İmzası (JWS) yapısından oluşur. JWS Korumalı Üst Bilgisi ve JWS Yükü aşağıda gösterilmiştir. Herhangi bir JWS yapısında olduğu gibi son değer şunlardan oluşur: BASE64URL(UTF8(JWS Korumalı Üst Bilgi)) || '.' || BASE64URL(JWS Yükü) || '.' || BASE64URL(JWS İmzası)
JWS korumalı üst bilgisi
{
"alg": "PS256",
"typ": "attReqV2"
// no "kid" parameter as the key specified by request_key MUST sign this JWS to prove possession.
}
JWS yükü
JWS yükü temel veya vsm türünde olabilir. Kanıtlama kanıtı VSM verilerini içermediğinde temel kullanılır.
Temel örnek:
{
"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)>"
}
}
TPM + VBS kapanım örneği:
{
"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): Bağlı olan taraf tanımlayıcısı. Hizmet tarafından makine kimliği talebi hesaplamasında kullanılır.
rp_data (BASE64URL(OCTETS)): Bağlı olan taraf tarafından geçirilen donuk veriler. Bu normalde bağlı olan taraf tarafından raporun güncelliğini garanti etmek için bir nonce olarak kullanılır.
challenge (BASE64URL(OCTETS)): Hizmet tarafından verilen rastgele değer.
current_attestation (Nesne): Sistemin geçerli durumu (önyükleme veya sürdürme) için günlükleri ve TPM alıntısını içerir. Hizmetten alınan nonce, 'qualifyingData' parametresindeki TPM2_Quote komutuna geçirilmelidir.
boot_attestation (Nesne): Bu isteğe bağlıdır ve sistem hazırda bekletilip sürdürülmeden önce kaydedilen günlükleri ve TPM alıntısını içerir. boot_attestation bilgiler aynı soğuk önyükleme döngüsüyle ilişkilendirilmelidir (yani, sistem yalnızca hazırda bekletildi ve aralarında sürdürüldü).
logs (Dizi(Nesne)): Günlük dizisi. Dizinin her öğesi bir günlük içerir ve dizi ölçümler için kullanılan sırada olmalıdır.
-
- type (Dize): Günlüğün türü: "TCG" veya "IMA".
-
- log (BASE64URL(OCTETS)): BASE64URL dizesi olarak kodlanmış günlük.
aik_cert (BASE64URL(OCTETS)): AIK'yi temsil eden X.509 sertifikası.
aik_pub (JWK): AIK'nin ortak bölümü bir JSON Web Anahtarı (JWK) nesnesi (RFC 7517) olarak temsil edilir.
pcrs (Dizi(Nesne)): Alıntılanan kümeyi içerir. Dizinin her öğesi bir PCR bankasını temsil eder ve dizi, alıntıyı oluşturmak için kullanılan sırayla olmalıdır. PCR bankası algoritması ve değerleriyle tanımlanır (yalnızca belirtilen değerler listede olmalıdır).
-
- algoritma (Tamsayı): TPM_ALG_ID sabitleri tarafından tanımlanan karma algoritmayı temsil eden UINT16 değeri.
-
- değerler (Dizi(Nesne)): Özet değerleri dizisi. Dizinin her öğesi PCR bankasındaki bir özet değerini temsil eder.
-
-
- index (Integer): PCR özet değerinin dizini.
-
-
-
- digest (BASE64URL(OCTETS)): Özet değeri.
-
-
- quote (BASE64URL(OCTETS)): TPM2_Quote komutu tarafından döndürülen TPMS_ATTEST. Bu alan "current_attestation" nesnesindeyse, hizmetten alınan sınama 'qualifyingData' parametresindeki TPM2_Quote komutuna geçirilmelidir. Belirli 'qualifyingData' parametre değeri "request_key" bağlama yöntemine bağlıdır ve KEY OBJECT bölümünde açıklanmıştır.
-
- signature (BASE64URL(OCTETS)): TPM2_Quote komutu tarafından döndürülen TPMT_SIGNATURE. Bu alan "current_attestation" nesnesindeyse, hizmetten alınan sınama 'qualifyingData' parametresindeki TPM2_Quote komutuna geçirilmelidir. Belirli 'qualifyingData' parametre değeri "request_key" bağlama yöntemine bağlıdır ve KEY OBJECT bölümünde açıklanmıştır.
vsm_report (VSM Rapor Nesnesi): VSM kanıtlama raporu. VSM REPORT OBJECT bölümüne bakın.
request_key (Anahtar nesnesi): İsteği imzalamak için kullanılan anahtar. TPM varsa (istek TPM teklifi içeriyorsa), request_key tpm'ye teklif yoluyla bağlı olmalı veya TPM'de yerleşik olmalıdır (bkz. ANAHTAR NESNESİ).
other_keys (Dizi(Anahtar nesnesi)): Hizmete gönderilecek anahtar dizisi. En fazla iki anahtar.
custom_claims (Dizi(Nesne)): Hizmete gönderilen ve ilke tarafından değerlendirilebilecek özel kapanım talepleri dizisi.
name (Dize): Talebin adı. Bu ad Kanıtlama Hizmeti tarafından belirlenen bir URL'ye eklenir (çakışmaları önlemek için) ve birleştirilmiş dize ilkede kullanılabilecek talebin türü olur.
value (Dize): Talebin değeri.
value_type (Dize): Talebin değerinin veri türü.
service_context (BASE64URL(OCTETS)): Diğerlerinin yanı sıra bu sınama için sınamayı ve sona erme süresini içeren, hizmet tarafından oluşturulan opak, şifrelenmiş bağlam.
Anahtar nesnesi
jwk (Nesne): Anahtarın JSON Web Anahtarı (JWK) nesnesi (RFC 7517) olarak temsil edilen ortak bölümü.
info (Nesne): Anahtar hakkında ek bilgiler.
Ek bilgi yok:(Bilgi nesnesi boş olabilir veya istekte eksik olabilir)
• Teklif yoluyla TPM'ye bağlı anahtar:
- tpm_quote (Nesne): TPM tırnak bağlama yönteminin verileri.
- hash_alg (Dize): 'qualifyingData' parametresindeki TPM2_Quote komutuna geçirilen karmayı oluşturmak için kullanılan algoritma. Karma, || 0x00 < || HASH[UTF8(jwk) tarafından hesaplanırOCTETS(hizmet sınaması)>]. Not: Hizmet değişiklik yapmadan istekte alınan tam dizeyi kullanarak karmayı hesaplayacak olduğundan UTF8(jwk) kabloda gönderilecek tam dize olmalıdır.
Not: Bu bağlama yöntemi other_keys dizisindeki anahtarlar için kullanılamaz.
• TPM'de ikamet etme sertifikasına sahip anahtar:
tpm_certify (Nesne): TPM sertifika bağlama yönteminin verileri. "public" (BASE64URL(OCTETS)): TPM'deki anahtarın ortak alanını temsil eden TPMT_PUBLIC yapısı.
certification (BASE64URL(OCTETS)): TPM2_Certify komutu tarafından döndürülen TPMS_ATTEST. Hizmetten alınan sınama , 'qualifyingData' parametresindeki TPM2_Certify komutuna geçirilmelidir. İstekte sağlanan AIK anahtarı onaylamak için kullanılmalıdır.
signature (BASE64URL(OCTETS)): TPM2_Certify komutu tarafından döndürülen TPMT_SIGNATURE. Hizmetten alınan sınama , 'qualifyingData' parametresindeki TPM2_Certify komutuna geçirilmelidir. İstekte sağlanan AIK anahtarı onaylamak için kullanılmalıdır.
Not: Bu bağlama yöntemi request_key için kullanıldığında, TPM2_Quote komutuna geçirilen 'qualifyingData' parametre değeri yalnızca hizmetten alınan sınamadır.
Örnekler:
Anahtar TPM'ye bağlı değil:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
Teklif yoluyla TPM'ye bağlı anahtar (VBS kapanında yerleşik olarak bulunan veya olmayan):
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
TPM'de ikamet etme sertifikasına sahip anahtar:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_certify": {
"public": "<BASE64URL(TPMT_PUBLIC)>",
"certification": "<BASE64URL(TPMS_ATTEST)>",
"signature": "<BASE64URL(TPMT_SIGNATURE)>"
}
}
}
İlke anahtarı nesnesi
İlke anahtarı nesnesi, ilkede giriş talepleri olarak kullanılan anahtar nesnesinin sürümüdür. İlke kuralları tarafından daha okunabilir ve daha kolay değerlendirilmesini sağlamak için hizmet tarafından işlenir.
• Anahtar TPM'ye bağlı değil: İlgili anahtar nesnesiyle aynı. Örnek:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
• Teklif yoluyla TPM'ye bağlı anahtar (VBS kapanında yerleşik veya değil): İlgili anahtar nesnesiyle aynıdır. Örnek:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
• TPM'de ikamet etme sertifikasına sahip anahtar:
jwk (Nesne): İlgili anahtar nesnesiyle aynıdır. info.tpm_certify (Nesne):
- name_alg (Tamsayı): TPM_ALG_ID sabitleri tarafından tanımlanan karma algoritmayı temsil eden UINT16 değeri.
- obj_attr (Tamsayı): TPMA_OBJECT tarafından tanımlanan anahtar nesnesinin özniteliklerini temsil eden UINT32 değeri
- auth_policy (BASE64URL(OCTETS)): Bu anahtar nesnesini kullanmak için isteğe bağlı ilke.
Örnek:
{
"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)>"
}
}
}
VBS rapor nesnesi
Kapanım kanıtlama:
kapanım (Nesne): VSM kapanım kanıtlama verileri.
- report (BASE64URL(OCTETS)): EnclaveGetAttestationReport işlevi tarafından döndürülen VSM kapanım kanıtlama raporu. EnclaveData parametresi, report_signed değerinin SHA-512 karması olmalıdır (açma ve kapatma ayraçları dahil). Karma işlev girişi UTF8(report_signed) işlevidir.
Örnekler:
Kapanım kanıtlama:
{
"enclave": {
"report": "<BASE64URL(REPORT)>"
}
}
Rapor iletisi
Yön Kanıtlama Hizmeti -> İstemci
Yük
{
"report": "<JWT>"
}
report (JWT): JSON Web Belirteci (JWT) biçiminde kanıtlama raporu (RFC 7519).