Aracılığıyla paylaş


Güvenilen Platform Modülü (TPM) ve Sanallaştırma tabanlı Güvenlik (VBS) kapanım kanıtlama protokolü

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).

Sonraki adımlar