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

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

背景

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

<ph type="x-smartling-placeholder">
</ph> Google ウォレットのモバイル運転免許証
Google ウォレットのモバイル運転免許証。

デジタル認定証の機能は形式によって異なりますが、一般的には以下が挙げられます。

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

デジタル クルデンシャルが次のようなユースケースを実現できる可能性があります。

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

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

Digital Credentials API のご紹介

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

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

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> ブラウザ、ウォレット、証明書利用者間の通信の図。

まず、Android 版 Chrome でこの API がサポートされ、同じデバイスのウォレット アプリから認証情報をリクエストできるようになります。将来的には、パソコン版 Chrome で別のモバイル デバイスからデバイス間で認証情報をリクエストできるようにする予定です。

リリース時点で、Google ウォレットは Digital Credentials API と統合されます。これにより、特定の企業や組織は、ユーザーがオンラインで Android の Chrome を通じて身分証明書を提示するようにリクエストを開始し、暗号署名を検査して送信されるデータの信頼性を検証できるようになります。Google ウォレットのデジタル身分証明書の受け取りを希望される場合は、こちらのフォームにご記入ください。

この API はまもなく Google アカウントでも使用され、特定のユーザー生年月日を入力します。サポートされている米国の州にお住まいのユーザーは、利用可能なウォレット アプリ(Google ウォレットを含む)でプロビジョニングされた州発行の身分証明書または運転免許証を使用して、他の身元の情報を共有することなく、生年月日のみを Google とシームレスに共有できます。これにより、ユーザーはプライバシーに配慮した方法で、アカウントに関連する年齢制限を満たしていることを Google に示すことができます。

試してみる

Digital Credentials API を試すには:

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

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

デモの詳しい流れは次のとおりです。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 1.ユーザーは証明書利用者のウェブサイトにアクセスし、確認済みの姓、名、21 歳以上の年齢証明を提示するよう要求されます。
で確認できます。
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 2.ブラウザにより、ユーザーがこのウェブサイトとデジタル認証情報を共有する意思があるかどうかを確認します。
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 3.オペレーティング システムに、リクエストされた情報と、ユーザーがリクエストを選択して完了するためのリクエストに一致する有効な認証情報が表示されます。
で確認できます。
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 4.ウォレットは画面ロック解除によりローカルでユーザーを認証します。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 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" の場合、パラメータは OpenID for Verified Presentation(OID4VP) for the W3C Digital Credentials API 仕様で定義されています。

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" が含まれています。レスポンスを解析して認証情報を検証する方法については、OpenID for Verably Presentation(OID4VP)for the W3C Digital Credentials API の仕様をご覧ください。

Android 版 Chrome では、オリジン トライアルとして Digital Credentials API がサポートされています。現在のところ、パソコン版 Chrome と iOS 版 Chrome ではサポートされていません。その他のブラウザ エンジンについては、W3C Web Incubator Community Group を通じてアクティブな会話が促進されています。

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

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

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

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

フィードバックを共有

Digital Credentials API についてフィードバックがある場合は、専用の Chromium Issue Tracker にお寄せください。