Digital Credentials API のオリジン トライアルのご紹介

公開日: 2024 年 9 月 4 日、最終更新日: 2024 年 10 月 16 日

Digital Credentials API のオリジン トライアルは Chrome 128 から開始されます。Digital Credentials API は、ウェブサイトがデジタル ウォレットに保存されている運転免許証や国家 ID などのデジタル認証情報を通じて、ユーザーに関する検証可能な情報を選択的にリクエストできる新しいウェブ プラットフォーム API です。

背景

多くの官公庁や民間企業がデバイスに関連付けられたデジタル認証情報を発行し始めており、現実世界でのデジタル ID が現実のものになりつつあります。たとえば、米国の一部の州(アリゾナ州、カリフォルニア州、コロラド州、ジョージア州、メリーランド州など)では、モバイル デバイスの Google ウォレットなどのデジタル ウォレット アプリにモバイル運転免許証と身分証明書をプロビジョニングできるようになりました。特定のオンライン確認でデジタル認証情報を使用できるかどうかに関する規制も制定されています。eIDAS 2.0 はその一例です。

Google ウォレットのモバイル運転免許証
Google ウォレットのモバイル運転免許証。

デジタル認証情報の機能は形式によって異なりますが、通常は次のものが含まれます。

  • セキュリティとプライバシーの強化: 高度な暗号化と強力な認証方法により、機密データを保護し、安全なアクセスを実現します。たとえば、認証情報の提示は通常、ウォレット アプリによるユーザー認証で保護されています。
  • 選択的な開示: 信頼できる当事者(RP)は認証情報から特定の情報をリクエストできるため、ユーザーは共有するデータをユースケースに必要なものに制限できます。たとえば、ユーザーの生年月日を公開せずに、ユーザーが 18 歳以上かどうかを共有できます。
  • 相互運用性: 認証情報は国際標準に準拠し、さまざまなシステムや国間で互換性を確保し、国境を越えた利用を容易にする必要があります。
  • 検証可能性: 共有される認証情報データは、発行元によってデジタル署名されています。RP はこの署名を検証して、データの真正性を確認できます。

デジタル認証情報は検証可能な性質があるため、次のようなユースケースを可能にします。

  • 年齢確認: 年齢制限のあるコンテンツを配信する前や、年齢制限のある商品を購入する前に、年齢をリクエストして確認します。
  • 本人確認: 法令遵守や不正行為の防止を目的として本人の身元を確認するため、名前と住所をリクエストします。
  • 運転権限の確認: ユーザーが運転できることを確認します(レンタカーを利用する場合など)。

ウェブサイトが(カスタム URL スキームを使用するなど)モバイル ウォレット アプリケーションと直接通信して、さまざまなユースケースのデジタル認証情報をリクエストするようになってきているため、ブラウザは、専用の API を使用してこのやり取りをより安全で、不正使用に耐え、使いやすくする機会と捉えています。

Digital Credentials API のご紹介

Digital Credentials API は、RP ウェブサイトがウォレット アプリからデジタル認証情報の提示をリクエストできる新しいウェブ プラットフォーム API です。この API は、Chrome 128 以降の Chrome でオリジン トライアルとして利用できます。

この API はプロトコルに依存しないため、RP は要件に基づいてプロトコルを指定できます。RP がリクエストを行うと、ブラウザはリクエストをモバイル オペレーティング システムに送信します。モバイル オペレーティング システムは、インストールされているウォレット アプリで一致する認証情報を検索します。見つかった場合、モバイル オペレーティング システムはユーザーに選択を求めるプロンプトを表示し、ユーザーが選択したウォレットにリクエストを送信します。ローカル認証後、ウォレットはリクエストされた認証情報データを含むレスポンスを返します。

ブラウザ、ウォレット、証明書利用者間の通信の図。

Chrome では、まず Android 版 Chrome で、同じデバイス上のウォレット アプリから認証情報をリクエストする API をサポートします。今後、パソコン版 Chrome で、別のモバイル デバイスからクロスデバイスで認証情報をリクエストできるようにする予定です。

リリース時に、Google ウォレットは Digital Credentials API と統合されます。これにより、一部の企業や組織は、Android 版 Chrome を介してユーザーにオンラインで身分証明書を提示するようリクエストを開始し、暗号署名を調べて送信されたデータの真正性を確認できるようになります。参加するには、こちらのフォームにご記入のうえ、Google ウォレットのデジタル ID の確認にご関心をお持ちであることをお知らせください。

また、この API はまもなく、Google アカウントで特定のユーザーの誕生日を確認するためにも使用される予定です。サポート対象の米国の州にお住まいのユーザーは、利用可能なウォレット アプリ(Google ウォレットを含む)にプロビジョニングされた州発行の身分証明書または運転免許証を使用して、本人確認の詳細を共有することなく、生年月日のみ Google とシームレスに共有できます。これにより、ユーザーはプライバシーを保護しながら、アカウント関連の年齢制限を満たしていることを Google に証明できます。

試してみる

要件:

  • Google Play 開発者サービス 23.40 以降
  • Chrome 128 以降
  • chrome://flags#web-identity-digital-credentials でフラグを有効にする

Digital Credentials API を試す手順は次のとおりです。

  1. 手順に沿ってデモ ウォレット アプリケーションをインストールします。
  2. IC ウォレット アプリを起動し、デモ用のモバイル運転免許証(mDL)をプロビジョニングします。
    • メニューボタンをタップし、[自己署名ドキュメントを追加] を選択します。
  3. Chrome 128 以降を使用して https://digital-credentials.dev にアクセスします。
  4. [Request Credentials (OpenID4VP)] を押します。

https://digital-credentials.dev を使用したデモを確認します。これは、デベロッパーがさまざまな属性の認証情報リクエストを生成するためのテスト用ウェブサイトです。

デモの詳しい手順は次のとおりです。

1. ユーザーが信頼関係にある当事者のウェブサイトにアクセスすると、確認済みの姓、名、21 歳以上の年齢証明書の提示を求められます。
2. ブラウザは、ユーザーがこのウェブサイトとデジタル認証情報を共有する意思があるかどうかを確認します。
3. オペレーティング システムに、リクエストされている情報と、リクエストに一致する有効な認証情報が表示されます。ユーザーは、リクエストを選択して完了します。
4. ウォレットは、画面ロック解除でユーザーをローカルで認証します。

5. リクエストされたデジタル認証情報が、信頼できる当事者のウェブサイトに渡されます。

API の仕組み

Digital Credentials API は Credential Management API の基盤上に構築されていますが、独立した API サーフェス navigator.identity から構築されています。navigator.identity.get() を呼び出すと、ウェブサイトはモバイル ウォレット アプリに保存されているデジタル認証情報をリクエストできます。

// Gets a CBOR with specific fields out of mobile driver's license as an mdoc
const controller = new AbortController();
const {protocol, data} = await navigator.identity.get({
  signal: controller.signal,
  digital: {
    providers: [{
      protocol: "openid4vp",
      request: {
        response_type: "vp_token",
        nonce: "n-0S6_WzA2Mj",
        client_metadata: {...},
        presentation_definition: {...}
      }
    }],
  }
});

基本的な API サーフェスは navigator.credentials.get() と似ていますが、"digital" 認証情報の種類のみを受け入れます。デジタル認証情報の種類内に、次の基本パラメータを含む IdentityRequestProvider を含む providers 配列を追加します。

  • protocol: 文字列で交換プロトコルを指定します。オリジン トライアルの時点では、開発中の主なプロトコルは "openid4vp" です。
  • request: 指定されたプロトコルでデジタル ウォレット アプリが受け入れるパラメータを入力します。"openid4vp" の場合、パラメータは W3C Digital Credentials API の OpenID for Verifiable Presentation(OID4VP)仕様で定義されています。

OID4VP を使用するデジタル認証情報のタイプへのペイロードの例:

{
  protocol: 'openid4vp',
  request: {
    response_type: 'vp_token',
    nonce: 'gf69kepV+m5tGxUIsFtLi6pwg=',
    client_metadata: {},
    presentation_definition: {
      id: 'mDL-request-demo',
      input_descriptors: [{
        id: "org.iso.18013.5.1.mDL",
        format: {
          mso_mdoc: {
            alg: ["ES256"]
          }
        },
        constraints: {
          limit_disclosure: "required",
          fields: [
            {
              path: ["$['org.iso.18013.5.1']['family_name']"],
              intent_to_retain: false
            }, {
              path: ["$['org.iso.18013.5.1']['given_name']"],
              intent_to_retain: false
            }, {
              path: ["$['org.iso.18013.5.1']['age_over_21']"],
              intent_to_retain: false
            }
          ]
        }
      }],
    }
  }
}

このリクエストにより、デバイスに mDL がインストールされているウォレットは、次のような検証可能な認証情報のセットを返します。

  • ユーザーの姓。
  • ユーザーの名。
  • ユーザーが 21 歳以上かどうかを示すブール値。

レスポンス ペイロードの例を次に示します。

{
  data: '{\n  "vp_token": "o2d2ZXJzaW9uYz..."\n}'
  id: '',
  protocol: 'openid4vp',
  type: 'digital'
}

この例では、"openid4vp" プロトコルで認証情報がリクエストされ、レスポンスの data プロパティに "vp_token" が含まれています。レスポンスの解析方法と認証情報の検証方法については、W3C Digital Credentials API の OpenID for Verifiable Presentation(OID4VP)仕様をご覧ください。

Digital Credentials API は、Android 版 Chrome でオリジン トライアルとしてサポートされています。現時点では、デスクトップ版 Chrome と iOS 版 Chrome ではサポートされていません。他のブラウザ エンジンについては、W3C ウェブ インキュベーター コミュニティ グループで活発な会話が行われています。

オリジン トライアルに参加する

開発用に、Chrome 128 以降で Chrome フラグ chrome://flags#web-identity-digital-credentials をオンにすると、ローカルで Digital Credentials API を有効にできます。

この機能はオリジン トライアルとしてもご利用いただけます。オリジン トライアルでは、新機能を試して、そのユーザビリティ、実用性、有効性についてウェブ標準コミュニティにフィードバックを送信できます。詳細については、起点のトライアルを使ってみるをご覧ください。このオリジン トライアルまたは他のオリジン トライアルに登録するには、登録ページにアクセスしてください。

  1. 送信元のトークンをリクエストします。
  2. トークンをページに追加します。これには次の 2 つの方法があります。
    • 各ページの head に origin-trial <meta> タグを追加します。たとえば、次のような形式になります。<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">.
    • サーバーを構成できる場合は、Origin-Trial HTTP ヘッダーを使用してトークンを追加することもできます。生成されたレスポンス ヘッダーは次のようになります。Origin-Trial: TOKEN_GOES_HERE.

フィードバックを共有

Digital Credentials API に関するフィードバックがある場合は、専用の Chromium バグトラッカーに送信してください。