Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft Azure Attestation garanterar stark säkerhet genom att verifiera en förtroendekedja som upprätthålls från en rot av förtroende (TPM) till lanseringen av hypervisor-programmet och en säker kernel. För att göra det måste Azure Attestation intyga datorns starttillstånd innan vi kan upprätta förtroende för den säkra enklaven. Operativsystemet, hypervisor-programmet och de säkra kernel-binärfilerna måste signeras av rätt officiella Microsoft-myndigheter och konfigureras på ett säkert sätt. När vi har bundit förtroende mellan TPM (Trusted Platform Module) och hypervisor-programmets hälsotillstånd kan vi lita på virtualiseringsbaserade säkerhets-IDK:er (VBS) i den uppmätta startloggen, med detta kan vi verifiera att ett nyckelpar genererades av enklaven och prägla en attesteringsrapport som binder förtroende för den nyckeln och innehåller andra anspråk, till exempel säkerhetsnivå- och startattesteringsegenskaper.
VBS-enklaver kräver en TPM för att tillhandahålla mätningen för att verifiera säkerhetsgrunden. VBS-enklaver intygas av TPM-slutpunkten med ett tillägg till begärandeobjektet i protokollet.
Protokollmeddelanden
Protokollet har två meddelanden:
- Init-meddelande
- Begärandemeddelande
Init-meddelande
Meddelande för att upprätta kontext för begärandemeddelandet.
Riktning
Klient –> Azure Attestation
Nyttolast
{
"type": "aikcert"
}
"type" (ASCII-sträng): representerar den typ av attestering som begärs. För närvarande stöds endast "aikcert".
Utmaningsmeddelande
Riktning
Azure-attestering –> klient
Nyttolast
{
"challenge": "<BASE64URL(CHALLENGE)>",
"service_context": "<BASE64URL(SERVICECONTEXT)>"
}
challenge (BASE64URL(OCTETS)): Slumpmässigt värde som utfärdats av tjänsten.
service_context (BASE64URL(OCTETS)): Ogenomskinlig kontext som skapats av tjänsten.
Begärandemeddelande
Nyttolast som innehåller de data som ska intygas av attesteringstjänsten.
Obs! Stöd för IMA-måttloggar och nycklar har lagts till i meddelandebegäran och finns i avsnittet Begär meddelande V2
Begärandemeddelande v1
Riktning
Klient –> Azure Attestation
Nyttolast
{
"request": "<JWS>"
}
request (JWS): Begäran består av en JSON-struktur för webbsignatur (JWS). JWS-skyddad rubrik och JWS-nyttolast visas nedan. Som i alla JWS-strukturer består det slutliga värdet av:
BASE64URL(UTF8(JWS Protected Header)) || '.' ||
BASE64URL(JWS Payload) || '.' ||
BASE64URL(JWS-signatur)
JWS-skyddat huvud
{
"alg": "PS256",
"typ": "attReq"
// no "kid" parameter as the key specified by attest_key MUST sign this JWS to prove possession.
}
JWS-nyttolast
JWS-nyttolasten kan vara av typen basic eller VBS. Basic används när attesteringsbevis inte innehåller VBS-data.
Exempel på endast 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)>"
}
}
Exempel på TPM + VBS-enklaver:
{
"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): Förlitande partsidentifierare. Används av tjänsten i beräkningen av dator-ID-anspråket
rp_data (BASE64URL(OCTETS)): Ogenomskinliga data som skickas av den förlitande parten. Detta används normalt av den förlitande parten som en nonce för att garantera rapportens färskhet
challenge (BASE64URL(OCTETS)): Slumpmässigt värde som utfärdats av tjänsten
tpm_att_data: TPM-relaterade attesteringsdata
srtm_boot_log (BASE64URL(OCTETS)): SRTM-startloggar som hämtas av funktion Tbsi_Get_TCG_Log_Ex med loggtyp = TBS_TCGLOG_SRTM_BOOT
srtm_resume_log (BASE64URL(OCTETS)): SRTM återupptar loggen som hämtad av funktion Tbsi_Get_TCG_Log_Ex med loggtyp = TBS_TCGLOG_SRTM_RESUME
drtm_boot_log (BASE64URL(OCTETS)): DRTM-startloggar som hämtas av funktion Tbsi_Get_TCG_Log_Ex med loggtyp = TBS_TCGLOG_DRTM_BOOT
drtm_resume_log (BASE64URL(OCTETS)): DRTM återupptar loggen som hämtad av funktion Tbsi_Get_TCG_Log_Ex med loggtyp = TBS_TCGLOG_DRTM_RESUME
aik_cert (BASE64URL(OCTETS)): X.509-certifikatet för AIK som returneras av funktionen NCryptGetProperty med egenskapen = NCRYPT_CERTIFICATE_PROPERTY
aik_pub: Den offentliga delen av AIK som representeras som ett JSON-webbnyckelobjekt (JWK) (RFC 7517)
current_claim (BASE64URL(OCTETS)): Attesteringsanspråket för det aktuella PCR-tillståndet som returneras av funktionen NCryptCreateClaim med dwClaimType = NCRYPT_CLAIM_PLATFORM och parametern NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK inställd på att inkludera alla PCR. Den utmaning som skickas av tjänsten bör också användas vid beräkningen av detta anspråk
boot_claim (BASE64URL(OCTETS)): Attesteringsanspråket för PCR-tillståndet vid start som returneras av funktionen NCryptCreateClaim med dwClaimType = NCRYPT_CLAIM_PLATFORM och parametern NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK inställd på att inkludera alla PCR:er
vsm_report (BASE64URL(OCTETS)): Rapporten om attestering av VBS-enklaver som returneras av funktionen EnclaveGetAttestationReport. Parametern EnclaveData måste vara SHA-512-hashvärdet för värdet för report_signed (inklusive inledande och avslutande klammerparenteser). Hashfunktionens indata är UTF8(report_signed)
attest_key: Den offentliga delen av enklavnyckeln som representeras som ett JWK-objekt (JSON Web Key) (RFC 7517)
custom_claims: Matris med anpassade enklaveranspråk som skickas till tjänsten som kan utvärderas av principen. Anspråket
name (String): Namnet på anspråket. Det här namnet läggs till i en URL som bestäms av attesteringstjänsten (för att undvika konflikter) och den sammanfogade strängen blir den typ av anspråk som kan användas i principen
value (String): Värdet för anspråket
value_type (sträng): Datatyp för anspråkets värde
service_context (BASE64URL(OCTETS)): Ogenomskinlig kontext som skapats av tjänsten.
Rapportmeddelande
Riktning
Azure-attestering –> klient
Nyttolast
{
"report": "<JWT>"
}
report (JWT): Attesteringsrapporten i JSON Web Token-format (JWT) (RFC 7519).
Begär meddelande v2
{
"request": "<JWS>"
}
request (JWS): Begäran består av en JSON-struktur för webbsignatur (JWS). JWS-skyddad rubrik och JWS-nyttolast visas nedan. Precis som i alla JWS-strukturer består det slutliga värdet av: BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS-signatur)
JWS-skyddat huvud
{
"alg": "PS256",
"typ": "attReqV2"
// no "kid" parameter as the key specified by request_key MUST sign this JWS to prove possession.
}
JWS-nyttolast
JWS-nyttolasten kan vara av typen basic eller vsm. Basic används när attesteringsbevis inte innehåller VSM-data.
Grundläggande exempel:
{
"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)>"
}
}
Exempel på TPM + VBS-enklaver:
{
"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): Förlitande partsidentifierare. Används av tjänsten i beräkningen av dator-ID-anspråket.
rp_data (BASE64URL(OCTETS)): Ogenomskinliga data som skickas av den förlitande parten. Detta används normalt av den förlitande parten som en nonce för att garantera rapportens färskhet.
challenge (BASE64URL(OCTETS)): Slumpmässigt värde som utfärdats av tjänsten.
current_attestation (objekt): Innehåller loggar och TPM-offert för systemets aktuella tillstånd (antingen start eller återuppta). Den nonce som tas emot från tjänsten måste skickas till kommandot TPM2_Quote i parametern "qualifyingData".
boot_attestation (objekt): Detta är valfritt och innehåller loggar och TPM-offerten som sparats innan systemet viloläge och återupptagits. boot_attestation information måste vara associerad med samma kallstartscykel (d.v.s. systemet viloläge och återupptogs mellan dem).
loggar (Array(Object)): Matris med loggar. Varje element i matrisen innehåller en logg och matrisen måste vara i den ordning som används för mätningar.
-
- type (String): Typ av logg: "TCG" eller "IMA".
-
- log (BASE64URL(OCTETS)): Loggen som kodas som en BASE64URL sträng.
aik_cert (BASE64URL(OCTETS)): X.509-certifikatet som representerar AIK.
aik_pub (JWK): Den offentliga delen av AIK som representeras som ett JSON-webbnyckelobjekt (JWK) (RFC 7517).
pcrs (Array(Object)): Innehåller den angivna uppsättningen. Varje element i matrisen representerar en PCR-bank och matrisen måste vara i den ordning som används för att skapa offerten. En PCR-bank definieras av dess algoritm och dess värden (endast de värden som anges ska finnas i listan).
-
- algoritm (Heltal): UINT16-värde som representerar en hash-algoritm som definieras av TPM_ALG_ID konstanter.
-
- values (Array(Object)): Matris med sammanfattade värden som citeras. Varje element i matrisen representerar ett sammandragsvärde i PCR-banken.
-
-
- index (Heltal): Index för PCR-sammandragsvärdet.
-
-
-
- digest (BASE64URL(OCTETS)): Sammandragsvärde.
-
-
- quote (BASE64URL(OCTETS)): TPMS_ATTEST returneras av kommandot TPM2_Quote. Om det här fältet finns i objektet "current_attestation" måste uppgiften som tas emot från tjänsten skickas till kommandot TPM2_Quote i parametern "qualifyingData". Det specifika parametervärdet "qualifyingData" beror på bindningsmetoden "request_key" och beskrivs i avsnittet NYCKELOBJEKT.
-
- signature (BASE64URL(OCTETS)): TPMT_SIGNATURE returneras av kommandot TPM2_Quote. Om det här fältet finns i objektet "current_attestation" måste uppgiften som tas emot från tjänsten skickas till kommandot TPM2_Quote i parametern "qualifyingData". Det specifika parametervärdet "qualifyingData" beror på bindningsmetoden "request_key" och beskrivs i avsnittet NYCKELOBJEKT.
vsm_report (VSM-rapportobjekt): VSM-attesteringsrapporten. Se avsnittet VSM-RAPPORTOBJEKT.
request_key (nyckelobjekt): Nyckel som används för att signera begäran. Om en TPM finns (begäran innehåller TPM-offert) måste request_key antingen vara bunden till TPM via offert eller vara bosatt i TPM (se NYCKELOBJEKT).
other_keys (Matris(nyckelobjekt)): Matris med nycklar som ska skickas till tjänsten. Maximalt två nycklar.
custom_claims (Array(Object)): Matris med anpassade enklaveranspråk som skickas till tjänsten som kan utvärderas av principen.
name (String): Namnet på anspråket. Det här namnet läggs till i en URL som bestäms av attesteringstjänsten (för att undvika konflikter) och den sammanfogade strängen blir den typ av anspråk som kan användas i principen.
värde (sträng): Anspråkets värde.
value_type (Sträng): Datatyp för anspråkets värde.
service_context (BASE64URL(OCTETS)): Ogenomskinlig, krypterad kontext som skapats av tjänsten som bland annat innehåller utmaningen och en förfallotid för den utmaningen.
Nyckelobjekt
jwk (Objekt): Den offentliga delen av nyckeln som representeras som ett JSON-webbnyckelobjekt (JWK) (RFC 7517).
info (Object): Extra information om nyckeln.
Ingen extra information:(Info-objektet kan vara tomt eller saknas i begäran)
• Nyckel bunden till TPM via citattecken:
- tpm_quote (objekt): Data för bindningsmetoden för TPM-offert.
- hash_alg (Sträng): Algoritmen som används för att skapa hashen som skickas till kommandot TPM2_Quote i parametern "qualifyingData". Hashen beräknas av HASH[UTF8(jwk) || 0x00 || <OCTETS(service challenge)>]. Obs! UTF8(jwk) måste vara den exakta sträng som skickas på tråden eftersom tjänsten beräknar hashen med den exakta strängen som tas emot i begäran utan ändringar.
Obs! Den här bindningsmetoden kan inte användas för nycklar i other_keys matris.
• Nyckel certifierad för att vara bosatt i TPM:
tpm_certify (objekt): Data för TPM-certifieringsbindningsmetoden. "public" (BASE64URL(OCTETS)): TPMT_PUBLIC struktur som representerar det offentliga området för nyckeln i TPM.
certifiering (BASE64URL(OCTETS)): TPMS_ATTEST returneras av kommandot TPM2_Certify. Den utmaning som tas emot från tjänsten måste skickas till kommandot TPM2_Certify i parametern "qualifyingData". AIK som anges i begäran måste användas för att certifiera nyckeln.
signature (BASE64URL(OCTETS)): TPMT_SIGNATURE returneras av kommandot TPM2_Certify. Den utmaning som tas emot från tjänsten måste skickas till kommandot TPM2_Certify i parametern "qualifyingData". AIK som anges i begäran måste användas för att certifiera nyckeln.
Obs! När den här bindningsmetoden används för request_key är parametervärdet "qualifyingData" som skickas till kommandot TPM2_Quote helt enkelt den utmaning som tas emot från tjänsten.
Exempel:
Nyckeln är inte bunden till TPM:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
Nyckel som är bunden till TPM via citattecken (antingen bosatt i en VBS-enklav eller inte):
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
Nyckel som är certifierad för att vara bosatt i 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)>"
}
}
}
Principnyckelobjekt
Principnyckelobjektet är den version av nyckelobjektet som används som indataanspråk i principen. Den bearbetas av tjänsten för att göra den mer läsbar och enklare att utvärdera med principregler.
• Nyckeln är inte bunden till TPM: Samma som respektive nyckelobjekt. Exempel:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
• Nyckel bunden till TPM via offert (antingen bosatt i en VBS-enklav eller inte): Samma som respektive nyckelobjekt. Exempel:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
• Nyckel certifierad för att vara bosatt i TPM:
jwk (objekt): Samma som respektive nyckelobjekt. info.tpm_certify (objekt):
- name_alg (Heltal): UINT16-värde som representerar en hash-algoritm som definieras av TPM_ALG_ID konstanter.
- obj_attr (Heltal): UINT32-värde som representerar attributen för nyckelobjektet som definierats av TPMA_OBJECT
- auth_policy (BASE64URL(OCTETS)): Valfri princip för att använda det här nyckelobjektet.
Exempel:
{
"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-rapportobjekt
Enklavattestering:
enclave (Object): Data för VSM-enklavattestering.
- report (BASE64URL(OCTETS)): VSM-enklavens attesteringsrapport som returneras av funktionen EnclaveGetAttestationReport. Parametern EnclaveData måste vara SHA-512-hashvärdet för värdet för report_signed (inklusive inledande och avslutande klammerparenteser). Indata för hashfunktionen är UTF8(report_signed).
Exempel:
Enklavattestering:
{
"enclave": {
"report": "<BASE64URL(REPORT)>"
}
}
Rapportmeddelande
Direction Attestation Service –> klient
Nyttolast
{
"report": "<JWT>"
}
report (JWT): Attesteringsrapporten i JSON Web Token-format (JWT) (RFC 7519).