Şifrelenmiş Nesne Biçimleri

Kimlik Kimlik Bilgisi

Android cihazlar Kimlik Kimlik Bilgisi'ni kullanır kitaplığını kullanarak cihazdaki kimlik bilgilerini güvenli bir şekilde yönetin. Kimlik Kimlik Bilgisi kitaplığı, kartı veren kuruluş tarafından kullanılması gereken çeşitli güvenlik özellikleri sunar. mümkün olduğunca güvenli bir yer hâline getirmelerini sağlıyor.

İmzalı Nonce

Kimlik Kimlik Bilgisi Kitaplığı "meydan okuma" gerektirir (bu API'de bulunurken, sertifikayı veren kuruluşa gönderilir. RegisterDeviceRequest içindeki bir değer girin. Bu tek seferlik rastgele sayı imzalandı ve cihazın onay uzantısına yerleştirilmiş. kimlik sertifikası. Bu sayede kartı veren kuruluş, sürecin güncelliğinden emin olabilir. ve onayın bir sunucu tarafından tekrar oynatılmadığını ortaya çıkarır.

Erişim Denetimi Profilleri

Erişim denetimi profilleri, kartı veren kuruluşun tam olarak erişim izinlerini Kimlik Bilgileri'nde depolanan verilerin korunmasını istiyorsanız. İlgili içeriği oluşturmak için kullanılan verilere erişmek için kullanıcı kimlik doğrulamasının gerekli olup olmadığını öğesi ve kullanıcının kimlik doğrulama işlemini ne kadar süre boyunca yapması gerektiği. Gelecek ( desteklenmeye devam ediyor. Bu özelliğin kullanım alanlarından biri, hangi okuyucuların ve verilere erişebilmesi gerekir. Erişim denetimini biçimlendirmeyle ilgili ayrıntılar profilleri, Kimlik Bilgisi nesnesi biçiminde bulunabilir.

Temel Hazırlık Kanıtı

Temel hazırlık nesnesinin kanıtı, kartı veren kuruluşların Kimlik bilgisi, Kimlik Kimlik Bilgisi içinde başarıyla depolandı. Kartı veren kuruluş, MSO temel hazırlık. Bu nesne, Identity Credentialer (Kimlik Bilgileri) belgelerinde daha ayrıntılı şekilde belgelenmiştir.

Nesne Biçimleri

Bu nesnelerin her biri cihaz ile sağlayan taraftır. Sonuç olarak, Google'ın sunucuları normalleştirme yapamamaktadır. ve bu nesnelerin bazıları, ilk ebatta olandan farklı biçimlerde olabilir diğer API nesnelerini kullanır. Örneğin, kimlik bilgisi CBOR olarak biçimlendirilmiştir bu, Android düzeyinde beklenen şeydir.

Kimlik bilgisi

Kimlik bilgisi, veri öğelerini ve bu öğelere nasıl erişilmesi gerektiğini içerir. Google provisionedData ve accessControlProfiles olmak üzere iki birincil nesne içerir. İlgili içeriği oluşturmak için kullanılan provisionedData, bir kimlik bilgisi türü olduğundan emin olun. Örneğin, mobil sürücü belgesi için bu değer org.iso.18013.5.1 ve org.aamva.18013.5.1. Veri girişleri ve değerler ilgili erişim kontrol profillerini belirtir. Bu kimlikler listesi olarak yapılır; burada kimlik, accessControlProfiles listesi. Aşağıdaki örnekte, her bir verideki [0] girişi, dizin 0 değil, kimliği 0 olan erişim kontrol profilini ifade etmektedir.

Aşağıda, kodlanmamış bir CBOR harita verisi öğesi örneği verilmiştir.

{
  "provisionedData": {
      "org.iso.18013.5.1": [
          {
              "name": "family_name",
              "value": "Smith",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "given_name",
              "value": "Stewart",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "birth_date",
              "value": {
                  "tag": 1004,
                  "value": "1965-09-01"
              },
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "issue_date",
              "value": {
                  "tag": 1004,
                  "value": "2022-08-01"
              },
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "expiry_date",
              "value": {
                  "tag": 1004,
                  "value": "2027-08-01"
              },
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "issuing_authority",
              "value": "IA",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "issuing_country",
              "value": "US",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "document_number",
              "value": "D04320785",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "portrait",
              "value": {
                  "type": "Buffer",
                  "data": [
                      167,
                      30,
                      148,
                      218,
                      204,
                      75,
                      112,
                      162,
                      138,
                      40,
                      52,
                      63,
                      255
                  ]
              },
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "un_distinguishing_sign",
              "value": "USA",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "driving_privileges",
              "value": [
                  {
                      "expiry_date": {
                          "tag": 1004,
                          "value": "2027-08-01"
                      },
                      "issue_date": {
                          "tag": 1004,
                          "value": "2022-08-01"
                      },
                      "vehicle_category_code": "B"
                  }
              ],
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "sex",
              "value": 1,
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "height",
              "value": 170,
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "weight",
              "value": 79,
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "eye_colour",
              "value": "Blue",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "hair_colour",
              "value": "Gray",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "age_in_years",
              "value": 57,
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "age_over_18",
              "value": true,
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "age_over_21",
              "value": true,
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "resident_address",
              "value": "1600 Amphitheatre Pkwy ",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "issuing_jurisdiction",
              "value": "US-CA",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "resident_city",
              "value": "Mountain View",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "resident_state",
              "value": "CA",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "resident_postal_code",
              "value": "94043",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "resident_country",
              "value": "US",
              "accessControlProfiles": [
                  1
              ]
          }
      ],
      "org.iso.18013.5.1.aamva": [
          {
              "name": "DHS_compliance",
              "value": "F",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "domestic_driving_privileges",
              "value": [
                  {
                      "domestic_vehicle_class": {
                          "domestic_vehicle_class_code": "D",
                          "domestic_vehicle_class_description": "Operator",
                          "expiry_date": {
                              "tag": 1004,
                              "value": "2027-08-01"
                          },
                          "issue_date": {
                              "tag": 1004,
                              "value": "2022-08-01"
                          }
                      },
                      "domestic_vehicle_restrictions": [
                          {
                              "domestic_vehicle_restriction_code": "B",
                              "domestic_vehicle_restriction_description": "Corrective lenses (also automated - vision screening)"
                          }
                      ]
                  }
              ],
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "aamva_version",
              "value": "1",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "family_name_truncation",
              "value": "N",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "given_name_truncation",
              "value": "N",
              "accessControlProfiles": [
                  1
              ]
          },
          {
              "name": "organ_donor",
              "value": true,
              "accessControlProfiles": [
                  1
              ]
          }
      ]
  },
  "accessControlProfiles": [
      {
          "id": 1,
          "userAuthenticationRequired": true,
          "timeoutMillis": 10000
      }
  ]
}

Bu nesne daha sonra CBOR biçiminde kodlanmalı, şifrelenmeli ve ardından base64 olarak kodlanmıştır. Test ortamında veriler şifrelenmiyorsa CBOR biçiminde ve daha sonra base64 olarak kodlanmalıdır.

Yukarıdaki örneğin JSON değil, kodlanmamış bir CBOR haritası olduğunu unutmayın. JSON dizesi CBOR'a kodlanmışsa Android cihaz tarafından doğru bir şekilde ayrıştırılamaz.

Mobil Güvenlik Nesneleri

ISO/IEC 18013-5, mDL'nin veriler üzerinde oynanmadığından ve güvenilir bir yetkili tarafından yayınlandığından emin olun.

MSO şunları içerir:

  • Özet değerleri: Bunlar her veri için oluşturulan benzersiz değerlerdir öğesine sahip olmayabilir Bunlar, verinin kontrol sahibi olmadığını MSO imzalandıktan sonra değiştirilmiştir.
  • Cihaz anahtarı: Her mobil cihaz için oluşturulan benzersiz bir anahtardır kimlik bilgisinin depolandığı yerdir. MSO'yu cihaza bağlamak ve diğer cihazlarda kullanılmasını engelleyebilirsiniz.
  • Geçerlilik bilgileri: Bu, geçerlilik süresinin başlangıç ve bitiş tarihlerini içerir. MSO geçerlidir.
  • IA imzası: Oluşturulan dijital bir imzadır. Düzenleyen Yetkili Kurum (IA) tarafından özel anahtarını kullanarak. MSO'nun güvenilir bir yetkili tarafından yayınlandığını doğrulamak için kullanılır.

MSO, aşağıdaki CCDL yapısına sahiptir:

   MobileSecurityObjectBytes = #6.24(bstr .cbor MobileSecurityObject)
   MobileSecurityObject = {
      "digestAlgorithm" : tstr,        ; Message digest algorithm used
      "valueDigests" : ValueDigests,   ; Array of digests of all data elements
      "deviceKeyInfo" : DeviceKeyInfo,
      "docType" : tstr,                ; DocType as used in Documents
      "validityInfo" : ValidityInfo
   }
   DeviceKeyInfo = {
      "deviceKey" : DeviceKey
      ? "keyAuthorizations" : KeyAuthorizations,
      ? "keyInfo" : KeyInfo
   }
   DeviceKey = COSE_Key                ; Device key in COSE_Key as defined in RFC 8152
   KeyAuthorizations = {
      ? "nameSpaces" : AuthorizedNameSpaces
      ? "dataElements" : AuthorizedDataElements
   }
   AuthorizedNameSpaces = [+ NameSpace]
   AuthorizedDataElements = {+ NameSpace => DataElementsArray}
   DataElementsArray = [+ DataElementIdentifier]
   KeyInfo = { * int => any}           ; Positive integers are RFU, negative integers may be used for proprietary use
   ValueDigests = {
      "nameSpaces" : NameSpacesDigests
   }
   NameSpacesDigests = {
      + NameSpace => DigestIDs
   }
   DigestIDs = {
      + DigestID => Digest
   }
   ValidityInfo = {
      "signed" : tdate,
      "validFrom" : tdate,
      "validUntil" : tdate,
      ? "expectedUpdate" : tdate
   }
   NameSpace = tstr                    ; NameSpace as used in IssuerSigned
   DigestID = uint                     ; DigestID as used in IssuerSig

Statik Kimlik Doğrulama Verileri

Hem digestIdMapping ve issuerAuth, kartı veren kuruluş tarafından oluşturulmalıdır.

Belirli bir ad alanı için digestIdMapping, bir diziden oluşur. Her biri elementValue özelliği için boş değere sahip IssuerSignedItem örnek. Ayrıca issuerAuth, COSE_Sign1 ile MobileSecurityObjectBytes.

   StaticAuthDataBytes = (bstr .cbor StaticAuthData)
   StaticAuthData = {
      "digestIdMapping" : DigestIdMapping,
      "issuerAuth" : IssuerAuth
   }
   DigestIdMapping = {
      NameSpace => [ + IssuerSignedItemBytes ]
   }
   ; Defined in ISO 18013-5
   ;
   NameSpace = String
   DataElementIdentifier = String
   DigestID = uint
   IssuerAuth = COSE_Sign1 ; The payload is MobileSecurityObjectBytes
   IssuerSignedItemBytes = #6.24(bstr .cbor IssuerSignedItem)
   IssuerSignedItem = {
      "digestID" : uint,                           ; Digest ID for issuer data auth
      "random" : bstr,                             ; Random value for issuer data auth
      "elementIdentifier" : DataElementIdentifier, ; Data element identifier
      "elementValue" : DataElementValue            ; Data element value
   }

/provisionMobileSecurityObjects çağrıldıktan sonra uç nokta kullanıldığında StaticAuthDataBytes HPKE kullanılarak şifrelenir ve karar verebiliriz.

Buradan kod örneği MSO'lar ve Statik Kimlik Doğrulama Verileri oluşturmaya yöneliktir.