Megbízható platformmodul (TPM) és Virtualization Based Security (VBS) enklávé igazolási protokoll

A Microsoft Azure-igazolás erős biztonságot garantál egy megbízhatósági lánc ellenőrzésével, amely a megbízhatóság gyökerétől (TPM) a hipervizor elindításáig és a biztonságos kernel elindításáig tart. Ehhez az Azure-igazolásnak igazolnia kell a gép rendszerindítási állapotát, mielőtt megbízhatóságot alakíthatnánk ki a biztonságos enklávéban. Az operációs rendszert, a hipervizort és a biztonságos kernel bináris fájljait a megfelelő hivatalos Microsoft-hatóságoknak kell aláírnia, és biztonságos módon kell konfigurálnia. Miután megkötöttük a megbízhatóságot a megbízható platformmodul (TPM) és a hipervizor állapota között, megbízhatunk a Virtualization Based Security (VBS) által a mért rendszerindítási naplóban biztosított enklávéazonosítókban. Ezzel ellenőrizheti, hogy az enklávé egy kulcspárt hozott-e létre, és létrehoz egy igazolási jelentést, amely megköti az adott kulcs megbízhatóságát, és más jogcímeket, például a biztonsági szintet és a rendszerindítási igazolási tulajdonságokat tartalmaz.

A VBS-enklávékhoz TPM szükséges a biztonsági alap ellenőrzéséhez szükséges mérés biztosításához. A VBS-enklávékat a TPM-végpont igazolja a kérelemobjektum hozzáadásával a protokollban.

Protokollüzenetek

A protokoll két üzenetcserével rendelkezik:

  • Init-üzenet
  • Üzenet kérése

Init-üzenet

Üzenet a kérelemüzenet környezetének létrehozásához.

Irány

Ügyfél –> Azure-igazolás

Hasznos adat

{ 
  "type": "aikcert" 
} 

"type" (ASCII-sztring): a kért igazolás típusát jelöli. Jelenleg csak az "aikcert" támogatott.

Kihívás üzenete

Irány

Azure-igazolás –> Ügyfél

Hasznos adat

{ 
  "challenge": "<BASE64URL(CHALLENGE)>", 
  "service_context": "<BASE64URL(SERVICECONTEXT)>" 
} 

challenge (BASE64URL(OCTETS)): A szolgáltatás által kibocsátott véletlenszerű érték.

service_context (BASE64URL(OCTETS)): A szolgáltatás által létrehozott átlátszatlan környezet.

Üzenet kérése

Az igazolási szolgáltatás által igazolni kívánt adatokat tartalmazó hasznos adat.

Megjegyzés: Az IMA mérési naplóinak és kulcsainak támogatása hozzá lett adva a Kérés üzenethez, és megtalálható a 2. kérésüzenet v2 szakaszában.

1. üzenet kérése

Irány

Ügyfél –> Azure-igazolás

Hasznos adat

{
  "request": "<JWS>"
}

request (JWS): A kérelem JSON webes aláírási (JWS) struktúrából áll. A JWS által védett fejléc és A JWS hasznos adatai az alábbiakban láthatók. Mint minden JWS-struktúrában, a végső érték a következőkből áll:

BASE64URL(UTF8(JWS védett fejléc)) || '.' ||

BASE64URL(JWS Payload) || '.' ||

BASE64URL(JWS-aláírás)

JWS által védett fejléc
{
  "alg": "PS256",
  "typ": "attReq"
  // no "kid" parameter as the key specified by attest_key MUST sign this JWS to prove possession.
}
JWS hasznos adatok

A JWS hasznos adatai lehetnek egyszerű vagy VBS típusúak. Alapszintű, ha az igazolási bizonyíték nem tartalmaz VBS-adatokat.

Csak TPM-minta:

{ 
  "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 enklávé minta:

{ 
  "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üggő entitás azonosítója. A szolgáltatás a gépazonosító-jogcím számításában használja

rp_data (BASE64URL(OCTETS)): A függő entitás által átadott átlátszatlan adatok. Ezt a függő entitás általában nonce-ként használja a jelentés frissességének garantálására

challenge (BASE64URL(OCTETS)): A szolgáltatás által kibocsátott véletlenszerű érték

tpm_att_data: TPM-hez kapcsolódó igazolási adatok

  • srtm_boot_log (BASE64URL(OCTETS)): SRTM rendszerindítási naplók a függvény által lekért Tbsi_Get_TCG_Log_Ex naplótípus = TBS_TCGLOG_SRTM_BOOT

  • srtm_resume_log (BASE64URL(OCTETS)): Az SRTM a naplót a függvény által lekért módon folytatja, Tbsi_Get_TCG_Log_Ex naplótípus = TBS_TCGLOG_SRTM_RESUME

  • drtm_boot_log (BASE64URL(OCTETS)): DRTM rendszerindítási naplók a függvény által lekért Tbsi_Get_TCG_Log_Ex naplótípus = TBS_TCGLOG_DRTM_BOOT

  • drtm_resume_log (BASE64URL(OCTETS)): A DRTM a naplót a függvény által lekért módon folytatja, Tbsi_Get_TCG_Log_Ex naplótípus = TBS_TCGLOG_DRTM_RESUME

  • aik_cert (BASE64URL(OCTETS)): Az AIK X.509-tanúsítványa az NCryptGetProperty függvény által visszaadott= NCRYPT_CERTIFICATE_PROPERTY

  • aik_pub: Az AIK nyilvános része JSON Web Key (JWK) objektumként (RFC 7517)

  • current_claim (BASE64URL(OCTETS)): Az NCryptCreateClaim függvény által visszaadott jelenlegi PCR-állapot igazolási jogcíme a dwClaimType = NCRYPT_CLAIM_PLATFORM és a NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK paraméter, amely az összes PCR-t tartalmazza. A szolgáltatás által küldött kihívást is fel kell használni ennek a jogcímnek a kiszámításához

  • boot_claim (BASE64URL(OCTETS)): A PCR-állapot igazolási jogcíme a rendszerindításkor az NCryptCreateClaim függvény által visszaadott dwClaimType = NCRYPT_CLAIM_PLATFORM és a NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK paraméter által visszaadott igazolási jogcím, amely az összes PCR-t tartalmazza

vsm_report (BASE64URL(OCTETS)): A VBS enklávé igazolási jelentése az EnclaveGetAttestationReport függvény által visszaadott módon. Az EnclaveData paraméternek a report_signed értékének SHA-512 kivonatának kell lennie (beleértve a nyitó és záró zárójeleket is). A kivonatfüggvény bemenete UTF8(report_signed)

attest_key: Az enklávékulcs nyilvános része JSON-webkulcsként (JWK) (RFC 7517)

custom_claims: A szolgáltatásnak küldött egyéni enklávé jogcímek tömbje, amelyeket a szabályzat kiértékelhet. A jogcím

  • name (String): A jogcím neve. Ez a név hozzá lesz fűzve az Igazolási szolgáltatás által meghatározott URL-címhez (az ütközések elkerülése érdekében), és az összefűzött sztring lesz a szabályzatban használható jogcím típusa

  • érték (sztring): A jogcím értéke

  • value_type (sztring): A jogcím értékének adattípusa

service_context (BASE64URL(OCTETS)): A szolgáltatás által létrehozott átlátszatlan környezet.

Jelentésüzenet

Irány

Azure-igazolás –> Ügyfél

Hasznos adat

{
  "report": "<JWT>"
}

jelentés (JWT): Az igazolási jelentés JSON Web Token (JWT) formátumban (RFC 7519).

2. üzenet kérése

{
  "request": "<JWS>"
}

request (JWS): A kérelem JSON webes aláírási (JWS) struktúrából áll. A JWS által védett fejléc és A JWS hasznos adatai az alábbiakban láthatók. Mint minden JWS-struktúrában, a végső érték a következőkből áll: BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS-aláírás)

JWS által védett fejléc
{
  "alg": "PS256",
  "typ": "attReqV2"
  // no "kid" parameter as the key specified by request_key MUST sign this JWS to prove possession.
}

JWS hasznos adatok

A JWS hasznos adatai lehetnek egyszerű vagy vsm típusúak. Alapszintű, ha az igazolási bizonyíték nem tartalmaz VSM-adatokat.

Egyszerű példa:

{
  "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 enklávé példa:

{
  "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üggő entitás azonosítója. A szolgáltatás a gépazonosító-jogcím számításában használja.

rp_data (BASE64URL(OCTETS)): A függő entitás által átadott átlátszatlan adatok. Ezt a függő entitás általában nonce-ként használja a jelentés frissességének garantálására.

challenge (BASE64URL(OCTETS)): A szolgáltatás által kibocsátott véletlenszerű érték.

  • current_attestation (Objektum): Naplókat és TPM-idézeteket tartalmaz a rendszer aktuális állapotához (rendszerindítás vagy folytatás). A szolgáltatástól kapott nem szolgáltatásokat át kell adni a "qualifyingData" paraméter TPM2_Quote parancsának.

  • boot_attestation (Objektum): Ez nem kötelező, és naplókat és a rendszer hibernálása és folytatása előtt mentett TPM-idézetet tartalmazza. boot_attestation adatokat ugyanahhoz a hideg rendszerindítási ciklushoz kell társítani (vagyis a rendszer csak hibernált volt, és közöttük folytatódott).

  • naplók (Tömb(Objektum)): Naplók tömbje. A tömb minden eleme tartalmaz egy naplót, és a tömbnek a mérésekhez használt sorrendben kell lennie.

    • type (String): A napló típusa: "TCG" vagy "IMA".
    • log (BASE64URL(OCTETS)): A napló BASE64URL sztringként van kódolva.
  • aik_cert (BASE64URL(OCTETS)): Az AIK-t képviselő X.509-tanúsítvány.

  • aik_pub (JWK): Az AIK nyilvános része JSON Web Key (JWK) objektumként (RFC 7517).

  • pcrs (Array(Object)): Az idézett készletet tartalmazza. A tömb minden eleme egy PCR-bankot jelöl, és a tömbnek az idézőjel létrehozásához használt sorrendben kell lennie. A PCR-bankokat az algoritmusa és az értékei határozzák meg (csak az idézett értékek szerepelhetnek a listában).

    • algoritmus (egész szám): A TPM_ALG_ID állandók által definiált kivonatoló algoritmust képviselő UINT16 érték.
    • értékek (Tömb(Objektum)): Idézett kivonatértékek tömbje. A tömb minden eleme egy kivonatértéket jelöl a PCR-bankban.
      • index (egész szám): A PCR kivonatoló értékének indexe.
      • digest (BASE64URL(OCTETS)): Kivonatoló érték.
    • quote (BASE64URL(OCTETS)): TPMS_ATTEST a TPM2_Quote parancs adja vissza. Ha ez a mező a "current_attestation" objektumban van, a szolgáltatástól kapott feladatot át kell adni a TPM2_Quote parancsnak a "qualifyingData" paraméterben. Az adott "qualifyingData" paraméter értéke a "request_key" kötési módszertől függ, és a KEY OBJECT szakaszban ismertetjük.
    • aláírás (BASE64URL(OCTETS)): TPMT_SIGNATURE a TPM2_Quote parancs által visszaadott. Ha ez a mező a "current_attestation" objektumban van, a szolgáltatástól kapott feladatot át kell adni a TPM2_Quote parancsnak a "qualifyingData" paraméterben. Az adott "qualifyingData" paraméter értéke a "request_key" kötési módszertől függ, és a KEY OBJECT szakaszban ismertetjük.

vsm_report (VSM jelentésobjektum): A VSM igazolási jelentése. Lásd a VSM REPORT OBJECT szakaszt.

request_key (Kulcsobjektum): A kérés aláírásához használt kulcs. Ha egy TPM jelen van (a kérelem TPM-ajánlatot tartalmaz), request_key vagy idézőjelen keresztül kell a TPM-hez kötni, vagy a TPM-ben rezidensnek kell lennie (lásd: KEY OBJECT).

other_keys (Array(Key object)): A szolgáltatásnak küldendő kulcsok tömbje. Legfeljebb két kulcs.

custom_claims (Array(Object)): A szolgáltatásnak küldött egyéni enklávé jogcímek tömbje, amelyeket a szabályzat kiértékelhet.

  • name (String): A jogcím neve. Ez a név hozzá lesz fűzve az Igazolási szolgáltatás által meghatározott URL-címhez (az ütközések elkerülése érdekében), és az összefűzött sztring lesz a szabályzatban használható jogcím típusa.

  • érték (sztring): A jogcím értéke.

  • value_type (sztring): A jogcím értékének adattípusa.

service_context (BASE64URL(OCTETS)): A szolgáltatás által létrehozott átlátszatlan, titkosított környezet, amely magában foglalja többek között a kihívást és a feladat lejárati idejét.

Kulcsobjektum

jwk (Object): A kulcs nyilvános része JSON Web Key (JWK) objektumként (RFC 7517).

info (Object): További információ a kulcsról.

Nincs további információ:(Az információs objektum üres lehet, vagy hiányzik a kérésből)

• A TPM-hez kötött kulcs idézőjelen keresztül:

  • tpm_quote (Objektum): A TPM idézőjelkötési metódusának adatai.
  • hash_alg (sztring): A "qualifyingData" paraméterben a TPM2_Quote parancsnak átadott kivonat létrehozásához használt algoritmus. A kivonat kiszámítása a HASH[UTF8(jwk) || 0x00 || <OCTETS(szolgáltatás kihívás)>]. Megjegyzés: Az UTF8(jwk) pontosan a vezetékre küldött sztringnek kell lennie, mivel a szolgáltatás módosítás nélkül kiszámítja a kivonatot a kérelemben kapott pontos sztring alapján.

Megjegyzés: Ez a kötési módszer nem használható a other_keys tömb kulcsaihoz.

• A TPM-ben lakóhellyel rendelkező kulcs:

  • tpm_certify (Objektum): A TPM tanúsítványkötési módszerének adatai. "public" (BASE64URL(OCTETS)): TPMT_PUBLIC a kulcs nyilvános területét képviselő struktúra a TPM-ben.

  • minősítés (BASE64URL(OCTETS)): TPMS_ATTEST a TPM2_Certify parancs adja vissza. A szolgáltatástól kapott feladatot át kell adni a "qualifyingData" paraméter TPM2_Certify parancsának. A kulcs minősítéséhez a kérelemben megadott AIK-t kell használni.

  • signature (BASE64URL(OCTETS)): TPMT_SIGNATURE a TPM2_Certify parancs adja vissza. A szolgáltatástól kapott feladatot át kell adni a "qualifyingData" paraméter TPM2_Certify parancsának. A kulcs minősítéséhez a kérelemben megadott AIK-t kell használni.

Megjegyzés: Ha ezt a kötési módszert használja a request_key, a TPM2_Quote parancsnak átadott "qualifyingData" paraméter értéke egyszerűen a szolgáltatástól kapott kihívás.

Példák:

A TPM-hez nem kötött kulcs:

{
  "jwk": {
    "kty": "RSA",
    "n": "<Base64urlUInt(MODULUS)>",
    "e": "<Base64urlUInt(EXPONENT)>"
  }
}

A TPM-hez idézőjelen keresztül kötött kulcs (vagy egy VBS-enklávéban tartózkodik, vagy nem):

{
  "jwk": {
    "kty": "RSA",
    "n": "<Base64urlUInt(MODULUS)>",
    "e": "<Base64urlUInt(EXPONENT)>"
  },
  "info": {
    "tpm_quote":
      "hash_alg": "sha-256"
    }
  }
}

A TPM-ben lakóhellyel rendelkező kulcs:

{
  "jwk": {
    "kty": "RSA",
    "n": "<Base64urlUInt(MODULUS)>",
    "e": "<Base64urlUInt(EXPONENT)>"
  },
  "info": {
    "tpm_certify": {
      "public": "<BASE64URL(TPMT_PUBLIC)>",
      "certification": "<BASE64URL(TPMS_ATTEST)>",
      "signature": "<BASE64URL(TPMT_SIGNATURE)>"
    }
  }
}

Szabályzatkulcs-objektum

A szabályzatkulcs-objektum a szabályzatban bemeneti jogcímként használt kulcsobjektum verziója. A szolgáltatást azért dolgozzák fel, hogy olvashatóbbá és könnyebben kiértékelhetővé tegyék a szabályzatszabályok.

• A kulcs nincs a TPM-hez kötve: Ugyanaz, mint a megfelelő kulcsobjektum. Példa:

{
  "jwk": {
    "kty": "RSA",
    "n": "<Base64urlUInt(MODULUS)>",
    "e": "<Base64urlUInt(EXPONENT)>"
  }
}

• A TPM-hez idézőjelen keresztül kötött kulcs (vagy egy VBS-enklávéban tartózkodik, vagy nem): Ugyanaz, mint a megfelelő kulcsobjektum. Példa:

{
  "jwk": {
    "kty": "RSA",
    "n": "<Base64urlUInt(MODULUS)>",
    "e": "<Base64urlUInt(EXPONENT)>"
  },
  "info": {
    "tpm_quote":
      "hash_alg": "sha-256"
    }
  }
}

• A TPM-ben lakóhellyel rendelkező kulcs:

jwk (Object): Ugyanaz, mint a megfelelő kulcsobjektum. info.tpm_certify (objektum):

  • name_alg (egész szám): A TPM_ALG_ID állandók által definiált kivonatoló algoritmust képviselő UINT16 érték.
  • obj_attr (egész szám): A TPMA_OBJECT által definiált kulcsobjektum attribútumait képviselő UINT32 érték
  • auth_policy (BASE64URL(OCTETS)): A kulcsobjektum használatához választható szabályzat.

Példa:

{
  "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 jelentésobjektum

Enklávé igazolás:

enklávé (objektum): A VSM enklávé igazolásának adatai.

  • jelentés (BASE64URL(OCTETS)): A VSM enklávé igazolási jelentése az EnclaveGetAttestationReport függvény által visszaadott módon. Az EnclaveData paraméternek a report_signed értékének SHA-512 kivonatának kell lennie (beleértve a nyitó és záró zárójeleket is). A kivonatfüggvény bemenete UTF8(report_signed).

Példák:

Enklávé igazolás:

{
  "enclave": {
    "report": "<BASE64URL(REPORT)>"
  }
}

Jelentésüzenet

Irányigazolási szolgáltatás –> Ügyfél

Hasznos adat

{
  "report": "<JWT>"
}

jelentés (JWT): Az igazolási jelentés JSON Web Token (JWT) formátumban (RFC 7519).

Következő lépések