Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Microsoft Azure Attestation garandeert een sterke beveiliging door een vertrouwensketen te verifiëren, onderhouden vanaf een basis van vertrouwen (TPM) tot het starten van de hypervisor en beveiligde kernel. Hiervoor moet Azure Attestation de opstartstatus van de machine bevestigen voordat we vertrouwen in de beveiligde enclave kunnen instellen. Het besturingssysteem, de hypervisor en de beveiligde binaire kernelbestanden moeten worden ondertekend door de juiste officiële Microsoft-autoriteiten en op een veilige manier worden geconfigureerd. Zodra we een vertrouwensrelatie hebben tussen de Trusted Platform Module (TPM) en de status van de hypervisor, kunnen we de enclave-ID's voor beveiliging op basis van virtualisatie (VBS) die zijn opgegeven in het gemeten opstartlogboek, vertrouwen. Hiermee kunnen we valideren dat een sleutelpaar is gegenereerd door de enclave en een attestation-rapport dat vertrouwen in die sleutel verbindt en andere claims bevat, zoals het beveiligingsniveau en de eigenschappen van de opstartverklaring.
VOOR VBS-enclaves is een TPM vereist om de meting te bieden om de beveiligingsbasis te valideren. VBS-enclaves worden door het TPM-eindpunt getest met een aanvulling op het aanvraagobject in het protocol.
Protocolberichten
Het protocol heeft twee berichtenuitwisseling:
- Init-bericht
- Bericht aanvragen
Init-bericht
Bericht voor het tot stand brengen van context voor het aanvraagbericht.
Richting
Client -> Azure Attestation
Nettolading
{
"type": "aikcert"
}
"type" (ASCII-tekenreeks): vertegenwoordigt het type attestation aangevraagd. Op dit moment wordt alleen 'aikcert' ondersteund.
Vraagbericht
Richting
Azure Attestation -> Client
Nettolading
{
"challenge": "<BASE64URL(CHALLENGE)>",
"service_context": "<BASE64URL(SERVICECONTEXT)>"
}
uitdaging (BASE64URL(OCTETS)): willekeurige waarde die door de service wordt uitgegeven.
service_context (BASE64URL(OCTETS)): Ondoorzichtige context die door de service is gemaakt.
Bericht aanvragen
Nettolading met de gegevens die moeten worden getest door de attestation-service.
Opmerking: ondersteuning voor IMA-meetlogboeken en sleutels is toegevoegd aan aanvraagbericht en is te vinden in de sectie Aanvraagbericht V2
Aanvraagbericht v1
Richting
Client -> Azure Attestation
Nettolading
{
"request": "<JWS>"
}
aanvraag (JWS): De aanvraag bestaat uit een JSON Web Signature-structuur (JWS). Hieronder ziet u de beveiligde JWS-header en JWS-nettolading. Net als in een JWS-structuur bestaat de uiteindelijke waarde uit:
BASE64URL(UTF8(JWS Protected Header)) || '.' ||
BASE64URL(JWS-nettolading) || '.' ||
BASE64URL(JWS-handtekening)
Met JWS beveiligde header
{
"alg": "PS256",
"typ": "attReq"
// no "kid" parameter as the key specified by attest_key MUST sign this JWS to prove possession.
}
JWS-nettolading
JWS-nettolading kan van het type basic of VBS zijn. Basis wordt gebruikt wanneer attestation-bewijs geen VBS-gegevens bevat.
Alleen TPM-voorbeeld:
{
"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-enclavevoorbeeld:
{
"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): Relying party-id. Wordt gebruikt door de service in de berekening van de computer-id-claim
rp_data (BASE64URL(OCTETS)): Ondoorzichtige gegevens die door de relying party worden doorgegeven. Dit wordt normaal gesproken door de relying party gebruikt als een nonce om de versheid van het rapport te garanderen
uitdaging (BASE64URL(OCTETS)): Willekeurige waarde uitgegeven door de service
tpm_att_data: TPM-gerelateerde attestation-gegevens
srtm_boot_log (BASE64URL(OCTETS)): SRTM-opstartlogboeken zoals opgehaald door functie Tbsi_Get_TCG_Log_Ex met logboektype = TBS_TCGLOG_SRTM_BOOT
srtm_resume_log (BASE64URL(OCTETS)): SRTM hervat het logboek zoals opgehaald door functie Tbsi_Get_TCG_Log_Ex met logboektype = TBS_TCGLOG_SRTM_RESUME
drtm_boot_log (BASE64URL(OCTETS)): DRTM-opstartlogboeken zoals opgehaald door functie Tbsi_Get_TCG_Log_Ex met logboektype = TBS_TCGLOG_DRTM_BOOT
drtm_resume_log (BASE64URL(OCTETS)): DRTM hervat het logboek zoals opgehaald door functie Tbsi_Get_TCG_Log_Ex met logboektype = TBS_TCGLOG_DRTM_RESUME
aik_cert (BASE64URL(OCTETS)): het X.509-certificaat voor de AIK als geretourneerd door functie NCryptGetProperty met eigenschap = NCRYPT_CERTIFICATE_PROPERTY
aik_pub: Het openbare deel van de AIK weergegeven als een JWK-object (JWK) (JWK)-object (RFC 7517)
current_claim (BASE64URL(OCTETS)): de attestation-claim voor de huidige PCR-status die wordt geretourneerd door functie NCryptCreateClaim met dwClaimType = NCRYPT_CLAIM_PLATFORM en parameter NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK ingesteld om alle PCR's op te nemen. De uitdaging die door de service wordt verzonden, moet ook worden gebruikt bij de berekening van deze claim
boot_claim (BASE64URL(OCTETS)): de attestation-claim voor de PCR-status tijdens het opstarten, zoals geretourneerd door functie NCryptCreateClaim met dwClaimType = NCRYPT_CLAIM_PLATFORM en parameter NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK ingesteld om alle PCR's op te nemen
vsm_report (BASE64URL(OCTETS)): het VBS enclave attestation-rapport zoals geretourneerd door functie EnclaveGetAttestationReport. De parameter EnclaveData moet de SHA-512-hash zijn van de waarde van report_signed (inclusief de accolades openen en sluiten). De hash-functie-invoer is UTF8(report_signed)
attest_key: Het openbare deel van de enclavesleutel dat wordt weergegeven als een JSON-object (JWK) (RFC 7517)
custom_claims: Matrix van aangepaste enclaveclaims die worden verzonden naar de service die door het beleid kan worden geëvalueerd. De claim
naam (tekenreeks): naam van de claim. Deze naam wordt toegevoegd aan een URL die wordt bepaald door de Attestation-service (om conflicten te voorkomen) en de samengevoegde tekenreeks wordt het type claim dat kan worden gebruikt in het beleid
waarde (tekenreeks): waarde van de claim
value_type (tekenreeks):gegevenstype van de waarde van de claim
service_context (BASE64URL(OCTETS)): Ondoorzichtige context die door de service is gemaakt.
Rapportbericht
Richting
Azure Attestation -> Client
Nettolading
{
"report": "<JWT>"
}
rapport (JWT): het attestation-rapport in JSON Web Token-indeling (JWT) (RFC 7519).
Aanvraagbericht v2
{
"request": "<JWS>"
}
aanvraag (JWS): De aanvraag bestaat uit een JSON Web Signature-structuur (JWS). Hieronder ziet u de beveiligde JWS-header en JWS-nettolading. Net als in een JWS-structuur bestaat de uiteindelijke waarde uit: BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS-nettolading) || '.' || BASE64URL(JWS-handtekening)
Met JWS beveiligde header
{
"alg": "PS256",
"typ": "attReqV2"
// no "kid" parameter as the key specified by request_key MUST sign this JWS to prove possession.
}
JWS-nettolading
JWS-nettolading kan van het type basic of vsm zijn. Basis wordt gebruikt wanneer attestation-bewijs geen VSM-gegevens bevat.
Basisvoorbeeld:
{
"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)>"
}
}
VOORBEELD VAN TPM + VBS-enclave:
{
"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): Relying party-id. Wordt gebruikt door de service in de berekening van de computer-id-claim.
rp_data (BASE64URL(OCTETS)): Ondoorzichtige gegevens die door de relying party worden doorgegeven. Dit wordt normaal gesproken door de relying party gebruikt als een nonce om de versheid van het rapport te garanderen.
uitdaging (BASE64URL(OCTETS)): willekeurige waarde die door de service wordt uitgegeven.
current_attestation (object): bevat logboeken en TPM-aanhalingstekens voor de huidige status van het systeem (opstarten of hervatten). De nonce die van de service wordt ontvangen, moet worden doorgegeven aan de opdracht TPM2_Quote in de parameter 'qualifyingData'.
boot_attestation (object): dit is optioneel en bevat logboeken en de TPM-offerte die is opgeslagen voordat het systeem in de sluimerstand is gezet en hervat. boot_attestation informatie moet worden gekoppeld aan dezelfde koude opstartcyclus (dat wil gezegd, het systeem werd alleen in de slaapstand gezet en hervat).
logboeken (Matrix(Object)): Matrix van logboeken. Elk element van de matrix bevat een logboek en de matrix moet in de volgorde staan die wordt gebruikt voor metingen.
-
- type (tekenreeks): Type van het logboek: "TCG" of "IMA".
-
- log (BASE64URL(OCTETS)): het logboek dat is gecodeerd als een BASE64URL tekenreeks.
aik_cert (BASE64URL(OCTETS)): het X.509-certificaat dat de AIK vertegenwoordigt.
aik_pub (JWK): het openbare deel van de AIK dat wordt weergegeven als een JSON Web Key (JWK)-object (RFC 7517).
pcrs (Matrix(Object)): bevat de set tussen aangeroepen waarden. Elk element van de matrix vertegenwoordigt een PCR-bank en de matrix moet in de volgorde staan die wordt gebruikt om de offerte te maken. Een PCR-bank wordt gedefinieerd door het algoritme en de bijbehorende waarden (alleen de waarden die in de lijst worden vermeld).
-
- algoritme (Integer): UINT16-waarde die een hash-algoritme vertegenwoordigt dat is gedefinieerd door de TPM_ALG_ID constanten.
-
- waarden (Matrix(Object)): Matrix met samenvattingswaarden tussen aangeroepen waarden. Elk element van de matrix vertegenwoordigt een samenvattingswaarde in de PCR-bank.
-
-
- index (integer): index van de PCR-digestwaarde.
-
-
-
- digest (BASE64URL(OCTETS)): Digest-waarde.
-
-
- quote (BASE64URL(OCTETS)): TPMS_ATTEST geretourneerd door de opdracht TPM2_Quote. Als dit veld zich in het object current_attestation bevindt, moet de uitdaging die van de service wordt ontvangen, worden doorgegeven aan de opdracht TPM2_Quote in de parameter 'qualifyingData'. De specifieke parameterwaarde 'qualifyingData' is afhankelijk van de bindingsmethode 'request_key' en wordt beschreven in de sectie KEY OBJECT.
-
- handtekening (BASE64URL(OCTETS)): TPMT_SIGNATURE geretourneerd door de opdracht TPM2_Quote. Als dit veld zich in het object current_attestation bevindt, moet de uitdaging die van de service wordt ontvangen, worden doorgegeven aan de opdracht TPM2_Quote in de parameter 'qualifyingData'. De specifieke parameterwaarde 'qualifyingData' is afhankelijk van de bindingsmethode 'request_key' en wordt beschreven in de sectie KEY OBJECT.
vsm_report (VSM Report Object): het VSM-attestation-rapport. Zie de sectie VSM REPORT OBJECT.
request_key (sleutelobject): sleutel die wordt gebruikt om de aanvraag te ondertekenen. Als er een TPM aanwezig is (aanvraag een TPM-offerte bevat), moet request_key via offerte zijn gebonden aan de TPM of aanwezig zijn in de TPM (zie KEY OBJECT).
other_keys (matrix(sleutelobject)): matrix met sleutels die naar de service moeten worden verzonden. Maximaal twee sleutels.
custom_claims (Matrix(Object)): Matrix met aangepaste enclaveclaims die naar de service worden verzonden die door het beleid kunnen worden geëvalueerd.
naam (tekenreeks): naam van de claim. Deze naam wordt toegevoegd aan een URL die wordt bepaald door de Attestation-service (om conflicten te voorkomen) en de samengevoegde tekenreeks wordt het type claim dat in het beleid kan worden gebruikt.
waarde (tekenreeks): waarde van de claim.
value_type (tekenreeks): gegevenstype van de waarde van de claim.
service_context (BASE64URL(OCTETS)): Ondoorzichtige, versleutelde context die is gemaakt door de service, waaronder de uitdaging en een verlooptijd voor die uitdaging.
Sleutelobject
jwk (Object): het openbare deel van de sleutel dat wordt weergegeven als een JSON Web Key (JWK)-object (RFC 7517).
info (Object): Extra informatie over de sleutel.
Geen extra informatie:(Info-object kan leeg zijn of ontbreken in de aanvraag)
• Sleutel gebonden aan tpm via offerte:
- tpm_quote (Object): Gegevens voor de bindingsmethode voor TPM-aanhalingstekens.
- hash_alg (tekenreeks): het algoritme dat wordt gebruikt om de hash te maken die is doorgegeven aan de opdracht TPM2_Quote in de parameter 'qualifyingData'. De hash wordt berekend door HASH[UTF8(jwk) || 0x00 || <OCTETS(servicevraag)>]. Opmerking: UTF8(jwk) moet de exacte tekenreeks zijn die op de draad wordt verzonden, omdat de service de hash berekent met behulp van de exacte tekenreeks die in de aanvraag wordt ontvangen zonder wijzigingen.
Opmerking: deze bindingsmethode kan niet worden gebruikt voor sleutels in de other_keys matrix.
• De sleutel die is gecertificeerd om in de TPM te wonen:
tpm_certify (Object): Gegevens voor de TPM-certificeringsbindingsmethode. "public" (BASE64URL(OCTETS)): TPMT_PUBLIC structuur die het openbare gebied van de sleutel in de TPM vertegenwoordigt.
certificering (BASE64URL(OCTETS)): TPMS_ATTEST geretourneerd door de opdracht TPM2_Certify. De uitdaging die van de service wordt ontvangen, moet worden doorgegeven aan de opdracht TPM2_Certify in de parameter 'qualifyingData'. De AIK die in de aanvraag is opgegeven, moet worden gebruikt om de sleutel te certificeren.
handtekening (BASE64URL(OCTETS)): TPMT_SIGNATURE geretourneerd door de opdracht TPM2_Certify. De uitdaging die van de service wordt ontvangen, moet worden doorgegeven aan de opdracht TPM2_Certify in de parameter 'qualifyingData'. De AIK die in de aanvraag is opgegeven, moet worden gebruikt om de sleutel te certificeren.
Opmerking: Wanneer deze bindingsmethode wordt gebruikt voor de request_key, is de parameterwaarde 'qualifyingData' die wordt doorgegeven aan de opdracht TPM2_Quote gewoon de uitdaging die is ontvangen van de service.
Voorbeelden:
De sleutel is niet gebonden aan de TPM:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
Sleutel gebonden aan de TPM via aanhalingsteken (aanwezig in een VBS-enclave of niet):
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
De sleutel die is gecertificeerd om te worden ingezet in de 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)>"
}
}
}
Beleidssleutelobject
Het beleidssleutelobject is de versie van het sleutelobject dat wordt gebruikt als invoerclaims in het beleid. Het wordt verwerkt door de service om deze beter leesbaar te maken en gemakkelijker te evalueren door beleidsregels.
• De sleutel is niet gebonden aan de TPM: Hetzelfde als het desbetreffende sleutelobject. Voorbeeld:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
}
}
• De sleutel die is gebonden aan de TPM via aanhalingsteken (aanwezig in een VBS-enclave of niet): Hetzelfde als het desbetreffende sleutelobject. Voorbeeld:
{
"jwk": {
"kty": "RSA",
"n": "<Base64urlUInt(MODULUS)>",
"e": "<Base64urlUInt(EXPONENT)>"
},
"info": {
"tpm_quote":
"hash_alg": "sha-256"
}
}
}
• De sleutel die is gecertificeerd om in de TPM te wonen:
jwk (object): hetzelfde als het betreffende sleutelobject. info.tpm_certify (object):
- name_alg (integer): UINT16-waarde die een hash-algoritme vertegenwoordigt dat is gedefinieerd door de TPM_ALG_ID constanten.
- obj_attr (integer): UINT32-waarde die de kenmerken van het sleutelobject vertegenwoordigt dat is gedefinieerd door TPMA_OBJECT
- auth_policy (BASE64URL(OCTETS)): Optioneel beleid voor het gebruik van dit sleutelobject.
Voorbeeld:
{
"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-rapportobject
Enclave-attestation:
enclave (Object): Gegevens voor VSM enclave-attestation.
- report (BASE64URL(OCTETS)): het VSM enclave attestation-rapport als geretourneerd door functie EnclaveGetAttestationReport. De parameter EnclaveData moet de SHA-512-hash zijn van de waarde van report_signed (inclusief de accolades openen en sluiten). De hash-functie-invoer is UTF8 (report_signed).
Voorbeelden:
Enclave-attestation:
{
"enclave": {
"report": "<BASE64URL(REPORT)>"
}
}
Rapportbericht
Direction Attestation Service -> Client
Nettolading
{
"report": "<JWT>"
}
rapport (JWT): het attestation-rapport in JSON Web Token-indeling (JWT) (RFC 7519).