ID 認証情報
Android デバイスは、ID 認証情報を使用します。 ライブラリを使用して、デバイス上の認証情報を安全に管理します。ID 認証情報 ライブラリには、カード発行会社が使用するためのさまざまなセキュリティ機能が備わっています。 Google との統合を可能な限り安全にする責任を負っています。
署名付きノンス
ID 認証情報ライブラリが「チャレンジ」を受ける(この API では、 ノンスなど)が発行元に送信されたデバイス ID 証明書を取得したとき RegisterDeviceRequest に作成されます。 このノンスは署名され、デバイスの証明書拡張に埋め込まれます ID 証明書を使用できます。これにより発行元は 最新の収益データであるということを リプレイされていないことを検証する必要があります。 やり取りの途中で生じます
アクセス制御プロファイル
アクセス制御プロファイルは、発行元がアクセス制御プロファイルを ID 認証情報内に保存されているデータを保護することを望んでいます。「 カード発行会社は、データにアクセスするためにユーザー認証が必要かどうかを指定できる ユーザーが認証を行う必要がある時間などです。将来( できます。たとえば、この機能のユースケースでは、 データ要素にアクセスできます。アクセス制御の形式に関する詳細 Credential オブジェクト形式に格納されます。
プロビジョニングの証明
プロビジョニングの証拠オブジェクトは、 ID 認証情報内に正常に保存されました。カード発行会社は 証明書を受け取って検証するまでは、認証情報の MSO を発行することはできません。 プロビジョニングを行いますこのオブジェクトの詳細については、ID 認証情報のドキュメントをご覧ください。
オブジェクトの形式
これらの各オブジェクトは、デバイスとクラウド プロバイダの間で 発行元です。そのため Google のサーバーでは、 また、オブジェクトによっては、形式が実際のものとは 他の API オブジェクトも参照できますたとえば、クルデンシャルの形式は CBOR です。 JSON よりも JSON の方が適しています。
認証情報
認証情報には、データ要素とそのアクセス方法が含まれています。これは、
provisionedData と accessControlProfiles という 2 つの主要オブジェクトが含まれています。「
provisionedData には、リソースに関連するすべての名前空間が
指定します。たとえば、モバイル運転免許証の場合は、次のようになります。
org.iso.18013.5.1 と org.aamva.18013.5.1。データエントリと値
関連するアクセス制御プロファイルを指定します。これは、
ID のリストとして指定され、ID はアクセス制御プロファイルの
accessControlProfiles リスト。以下の例では、各データの [0] は、
エントリは、インデックス 0 ではなく、ID 0 のアクセス制御プロファイルを参照しています。
以下は、エンコードされていない CBOR マップデータ アイテムの例です。
{ "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 } ] }
このオブジェクトを CBOR 形式でエンコード、暗号化してから、 エンコードされます。テスト環境でデータが暗号化されない場合、 CBOR 形式でエンコードしてから、Base64 でエンコードする必要があります。
上記の例は、JSON ではなくエンコードされていない CBOR マップです。JSON 文字列が が CBOR にエンコードされている場合、Android デバイスでは正しく解析されません。
モバイル・セキュリティ・オブジェクト
ISO/IEC 18013-5 では、モバイル セキュリティ オブジェクト(MSO)が定義されており、 信頼できる機関によって発行されたものであること。
MSO には次のものが含まれます。
- ダイジェスト値: データごとに生成される一意の値 要素で検証する必要があります。これらは、データが過去に遡って 変更されたためです。
- デバイスキー: モバイル デバイスごとに生成される一意のキー 認証情報を保存します。MSO をデバイスにバインドし、 他のデバイスでの使用を防ぐことができます。
- 有効期間情報: 期間の開始日と終了日 MSO は有効です。
- IA 署名: 最初に作成されるデジタル署名です。 発行元によって発行される鍵です。 MSO が信頼できる機関によって発行されたものであることを確認するために使用します。
MSO の CCDL 構造は次のとおりです。
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静的認証データ
静的認証データ。
digestIdMapping と issuerAuth は、発行者が構築する必要があります。
特定の名前空間の digestIdMapping は、次の配列で構成されます。
IssuerSignedItem インスタンス。それぞれの elementValue プロパティは null 値を持ちます。
また、issuerAuth は、署名されたトークンによって生成されます。
COSE_Sign1 を使用する 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 の呼び出し時
StaticAuthDataBytes は HPKE を使用して暗号化され、
レスポンスの一部として返されます
こちらが コードサンプル を使用して、MSO と静的認証データを作成します。