Verify with Wallet APIの概要

年齢/本人確認が必要なアプリでVerify with Wallet APIを利用すると、Appleウォレットに保存されたIDを使ってユーザー情報をすばやく安全に検証できます。

Verify with Wallet APIで本人確認を送信するiPhone

概要

確認プロセスの合理化

Verify with Walletでは、AppleウォレットにあるIDカードの情報を共有することで、アプリ内でより簡単かつ迅速に確認を行えるようになります。ユーザーがIDや年齢を証明する必要があるサービスの確認プロセスを合理化できるように設計されており、書類のスキャンや自撮り写真の撮影などの面倒な作業が不要になります。ワンタップのシンプルな操作性を実現することで、煩わしさが解消され、離脱の回避につながります。

検証/認証済みのIDデータ

Verify with Walletを介して取得されるID情報は、政府の発行機関によって検証されています。AppleウォレットにIDカードを追加するには、ユーザーは政府発行の有効なIDカードの所有権を証明する必要があります。この証明プロセスにおいて、発行機関はユーザーのIDカードが本物であり、そのユーザーに帰属するものであることを確認します。さらに、ID情報をアプリに提示するには、IDカードをAppleウォレットに追加する際に使用したのと同じFace IDかTouch IDで認証する必要があります。

プライバシーの保護

Verify with Walletと統合すると、アプリからリクエストするID情報とその保存期間について、十分な透明性を確保できます。アプリでは、トランザクションの完了に必要な特定のデータのみをリクエストできます。そのため、ユーザーがID情報を必要以上に共有する必要がなくなります。さらに、発行機関もAppleも、ユーザーがいつ、どこで免許証やID情報を共有したかを把握することはできません。

利用可能な地域と要件

デジタル運転免許証やIDは現在、以下の地域でサポートされています。

  • 米国:アリゾナ州、カリフォルニア州、コロラド州、ジョージア州、アイオワ州、ハワイ州、メリーランド州、ニューメキシコ州、オハイオ州、プエルトリコ
  • 日本

Verify with Walletには、対応デバイスのAppleウォレットに保存されているID情報が必要です。

  • アリゾナ州、コロラド州、ジョージア州、ハワイ州、アイオワ州、メリーランド州、ニューメキシコ州、オハイオ州での本人確認には、iOS 16.5以降を搭載したiPhone 8以降、またはwatchOS 9.5以降を搭載したApple Watch Series 4以降が必要です。
  • カリフォルニア州での本人確認には、iOS 17.5以降を搭載したiPhone XS以降、またはwatchOS 10以降を搭載したApple Watch Series 4以降が必要です。
  • プエルトリコでの本人確認には、iOS 18.1以降を搭載したiPhone XS以降、またはwatchOS 11以降を搭載したApple Watch Series 6以降が必要です。
  • 日本での本人確認には、iOS 18.5以降を搭載したiPhone XS以降が必要です。

エンタイトルメントの申請

Verify with Wallet APIを使用する場合は、デベロッパアカウントにエンタイトルメントが割り当てられている必要があります。Apple Developer ProgramのAccount Holderは、Verify with Wallet APIのエンタイトルメントを申請できます。申請はバンドルID(アプリの固有識別子)単位で許可され、割り当てられたエンタイトルメントは、そのバンドルIDに関連付けられている1つのバイナリでのみ使用できます。

エンタイトルメントを受けるアプリの利用要件は以下の通りです。

  • 該当する地域において、同じ商品やサービスを利用する各ユーザーに、年齢/本人確認に関する同等のプロセスを義務付けている場合。
  • 以下のいずれかのカテゴリに該当する場合。
    • アクセス(警備/物理的なセキュリティ)
    • 航空旅行
    • 酒類の購入(事前注文と配送)
    • レンタカー
    • 金融サービス
    • ギグエコノミー
    • 行政サービス
    • ヘルスケア
    • ホスピタリティ
    • 保険
    • スクーターレンタル
    • チケット

これらのカテゴリでは、デベロッパは従来の確認方法に代わる安全でプライバシーを重視した代替手段を得ることができ、ユーザーが手動で個人情報をアップロードする必要がなくなります。上記以外のカテゴリに関心をお持ちの場合は、エンタイトルメント申請フォームにVerify with Wallet APIをどのように使用されたいかをご記載ください。今後の導入について検討いたします。

提供する必要がある情報

アプリ情報

  • アプリ名
  • バンドルID(アプリ固有の識別子)
  • App StoreまたはTestFlightのURL
  • App ClipアプリID(利用可能な場合)
  • アプリを通じて提供する商品やサービスのうち年齢/本人確認が必要になる内容の説明
  • AppleウォレットのIDを使用していないユーザーの年齢/本人確認プロセスのスクリーンショット

リクエスト可能なデータ

運転免許証(米国)

年齢確認データ:

  • 対象年齢以上であることを示すフラグ
  • 年齢(歳)
  • 発行機関
  • 写真付きのID

本人確認データ:

  • 住所
  • 生年月日
  • 目の色
  • 髪の色
  • 身長
  • 体重
  • 臓器提供に関する意思
  • 軍歴
  • 性別
  • 証明書番号
  • 証明書発行日
  • 証明書有効期限
  • 運転特権
  • DHSに対するコンプライアンス(REAL ID)
マイナンバーカード(日本)

年齢確認データ:

  • 対象年齢以上であることを示すフラグ
  • 年齢(歳)
  • 写真付きのID

本人確認データ:

  • 住所
  • 生年月日
  • マイナンバー(マイナンバーの利用は、適用される法令に準拠します。)
  • 性別

使用に関する情報

  • アプリを通じて提供する商品やサービスのうち、年齢/本人確認が必要となる内容と、現在の確認方法を説明します。
  • AppleウォレットのIDを使用するユーザーに対して提案される年齢/本人確認プロセスのスクリーンショットと、AppleウォレットのIDを使用していないユーザーに対する既存または提案される年齢/本人確認プロセスのスクリーンショットをアップロードします。
  • アプリのプライバシーポリシーと、Verify with Wallet用に各種データを収集または保持する各サードパーティのプライバシーポリシーへのURLリンクを提供します。

APIの実装

Verify with Wallet APIのエンタイトルメントを受け取ったら、PassKitフレームワークでVerify with Wallet APIを呼び出し、リクエストする情報を指定できます。アプリ間で一貫した体験を提供できるように、APIには専用のボタンが一式用意されています。年齢/本人確認を求める必要があるアプリでご利用ください。ボタンをタップすると、情報共有のリクエストについて説明するシートが表示され、ユーザーは同意するかキャンセルするかを選択できます。ユーザーが同意すると、アプリには暗号化された応答が届き、サーバに渡されて復号と検証が行われます。

Verify with Apple Wallet
Continue with Apple Wallet
Verify Age with Apple Wallet
Verify Identity with Apple Wallet
ローカライズされたボタン
Verify with Apple Wallet
Continue with Apple Wallet
Verify Age with Apple Wallet
Verify Identity with Apple Wallet

ドキュメント、ビデオ、リソース

発行機関証明書

ユーザーの発行機関のペイロードを確認するには、その発行機関のWebサイトからIACA証明書をダウンロードして使用する必要があります。

米国
日本

よくある質問

APIの使用

エンタイトルメントが付与されたのち、デベロッパアカウントとXcodeプロジェクトを設定するにはどうすればよいですか?

Apple Developer Webサイトの「Certificates, Identifiers, & Profiles(証明書、ID、プロファイル)」セクションで、以下の操作を行います。

  1. マーチャントIDを作成します。マーチャントIDをすでにお持ちで、Apple Payで使用している場合は、ここで再利用できます。
  2. マーチャントIDの「Identity Access Certificate(IDアクセス証明書)」を作成します。これは、「Edit or Configure a Merchant ID(マーチャントIDの編集または設定)」ページの「Identity(ID)」タブに表示されます。
    1. 暗号化証明書の秘密鍵は、APIから返されたencryptedDataを復号するためにサーバで使用されます。
  3. アプリIDに「In App Identity Presentment(アプリでのID提示)」機能を追加します。これは、「Edit your App ID Configuration(アプリIDの設定を編集)」ページの「Additional Capabilities(追加機能)」タブに表示されます。
  4. アプリIDに「In App Identity Presentment Merchant IDs(アプリでのID提示のマーチャントID)」機能を追加し、関連付けられているマーチャントIDを選択します。
  5. これらの変更を含むプロビジョニングプロファイルを新規作成します。

また、アプリのエンタイトルメントplistファイルを手動で構成する必要があります。

エンタイトルメント 1:

エンタイトルメントを申請して、エンタイトルメントの取得が必要な本人確認書類のタイプを選択します。

"com.apple.developer.in-app-identity-presentment": {
    "document-types": [
        "us-drivers-license"
    ],
    "elements": [
        "given-name",
        "family-name",
        "portrait",
        "address",
        "issuing-authority",
        "document-expiration-date",
       	"document-number",
        "driving-privileges",
        "age",
        "date-of-birth"
    ]
},

エンタイトルメントのリストをフィルタリングして、エンタイトルメントを申請したものだけにします。

エンタイトルメント 2:
"com.apple.developer.in-app-identity-presentment.merchant-identifiers": [
    “your-merchant-id-goes-here”
]

Apple Payで同じマーチャントIDを使用している場合でも、このエンタイトルメントを追加する必要があります。Apple Payのcom.apple.developer.in-app-paymentsエンタイトルメントは、本人確認では認識されません。

ブラウザベースのオンライン提示では、W3Cが定めるmDoc request APIをサポートする予定です。最終的な定義は未定ですが、適切なプライバシーとセキュリティのガイドラインを満たすサードパーティアプリからの適合するID認証情報を提示することが可能になります。

APIの使用をテストするにはどうすればよいですか?

APIの使用をテストするには、いくつかの方法があります。

  • iOSシミュレータを使用する:シミュレータにはモックデータがプリロードされており、APIとの統合をテストできます。シミュレータのモックデータからの応答を検証するために必要なキーやその他のリソースについて、詳しくはサンプルデータとシミュレータキーバンドルをダウンロードしてください。
  • iOSデバイスの場合:ウォレットおよびApple mDL Developer Integratorプロファイルをインストールすると、APIは実際のデバイス署名を含むモックデータを返しますが、発行者の署名は返しません。
  • テストサンプル:サンプルデータとシミュレータキーバンドルには、検証に必要なキーと証明書を網羅した応答のサンプルが含まれています。このサンプルを使用して、応答検証ロジックをテストできます。

IDデータのリクエストに使用する記述子を教えてください。

IDデータのリクエストには、PKIdentityNationalIDCardDescriptorを使用します。

注:日本固有のエレメントは、API region(APIの地域)をJPに設定した場合にのみ取得できます。

エレメント

ISO/IEC 18013-5とAAMVAの名前空間にはどのような違いがありますか?

ISO/IEC 18013-5の仕様がサポートする名前空間では、本人確認書類内にさまざまなエレメントを共存させることができます。ISO/IEC 18013-5は、org.iso.18013.5.1名前空間内で標準的なエレメントを定めています。米国自動車管理者協会(AAMVA)は、米国の運転免許証に固有の追加情報を含む独自の名前空間を定めています。

Verify with Walletでサポートされている名前空間とエレメントについて、詳しくはPKIdentityDriversLicenseDescriptorのドキュメントをご参照ください。

ISO/IEC 18013-5、ISO/IEC 23220、日本政府の名前空間にはどのような違いがありますか?

ISO/IEC 18013-5は、運転免許証に関連するorg.iso.18013.5.1名前空間内で標準的なエレメントを定めています。ISO/IEC 23220-2は、org.iso.23220.1内の汎用名前空間を定めています。日本政府は、日本のマイナンバーカードに固有の追加のデータエレメントを含む独自の名前空間として、org.iso.23220.1.jpを定めています。

Verify with Walletでサポートされている名前空間とエレメントについて、詳しくはPKIdentityNationalIDCardDescriptorのドキュメントをご参照ください。

住所フィールドはどのような構成ですか?市区町村、都道府県/州(該当する場合)、郵便番号も取得可能ですか?

はい。リクエストの「住所」エレメントで、番地、市区町村、都道府県/州(該当する場合)、国、郵便番号を取得できます。

日本のマイナンバーカードの住所フィールドには、総務省が全国の都道府県と市区町村に定めた5桁のコードである「都道府県コード及び市区町村コード」も記載されています。詳しくは、https://www.soumu.go.jp/denshijiti/code.htmlをご参照ください。

証明書番号とは何を指しますか?

本人確認書類の番号であり、運転免許証番号やマイナンバーカードのマイナンバーが該当します。マイナンバーは、日本のすべての国民と居住者に発行される12桁のID番号です。

年齢と年齢しきい値にはどのような違いがありますか?

年齢は、ユーザーの年齢(歳)です。年齢しきい値は、ユーザーが特定の年齢を超えているかどうかを示すブール値です。たとえば、ユーザーが42歳の場合は以下のようになります。

  • 年齢は42を返します
  • AgeThresholdElementWithAge:18はtrueを返します
  • AgeThresholdElementWithAge:65はfalseを返します

ユーザーが特定の年齢以上/未満かを確認するだけでよい場合は、最もプライバシーに配慮したアプローチである年齢しきい値のエレメントを使用する必要があります。

発行機関とは何を指しますか?免許証やIDを発行する都道府県/州または政府等の機関のことですか?

発行機関とは、ISO 18013-5の仕様に記載されている「発行機関」、「発行地域」、「発行国」、「国連識別記号」エレメントを指します。

名前のエレメントはどのような構造ですか?

APIでは、姓と名の2つの名前のエレメントが定められています。これらは、ISO 18013-5の仕様で定められている「given_name」と「family_name」のエレメントに対応します。名をリクエストすると(リクエスト可能な場合)、AAMVAの名前空間から「given_name_truncation」、「aka_given_name」、「name_suffix」、「aka_suffix」のエレメントが返されます。同様に、姓をリクエストすると(リクエスト可能な場合)、AAMVAの名前空間から「family_name_truncation」と「aka_family_name」のエレメントが返されます。

ISO 18013-5の仕様には、ミドルネームのエレメントは含まれていません。通常、ミドルネームは名(given name)フィールドに含まれますが、最終的には各発行者の裁量に委ねられます。

Appleウォレットでは、仮運転免許証など、標準外の運転免許証(DL)も利用できますか?その場合、運転免許証の種類を区別するにはどのような方法がよいですか?

これらの免許証の種類が発行者から提供されたものである場合は、それらは運転特権の構造に含まれます。運転特権の構造は、ISO/IEC 18103-5のセクション7.2.4で定められています(https://www.iso.org/standard/69084.htmlを参照)。

米国の運転免許証について、AAMVAには「国内運転特権」と呼ばれる独自のバリエーションがあり、使用可能な場合は返されます(12ページ:https://www.aamva.org/assets/best-practices,-guides,-standards,-manuals,-whitepapers/mobile-driver-s-license-implementation-guidelines-1-2を参照)。

応答のフォーマット

セッショントランスクリプトはどこで使用されますか?

応答の暗号化を解除する際に、セッショントランスクリプトオブジェクトを作成します。セッショントランスクリプトは、HPKE復号化中に「info」パラメータとして使用され、ISO 18013-5で定義されるデバイス署名の検証の際に再度使用されます。詳しくは、「ウォレットIDリクエストの確認」をご参照ください。

IACA証明書とは何ですか?どのIACA証明書をサポートする必要がありますか?

IACA(発行機関認証局)証明書は信頼の基点であり、本人確認書類が都道府県の公安委員会/州の車両管理局や日本政府などの正当な発行者によって作成されたことを確認するために使用されます。

Verify with Wallet APIで使用されるIACA証明書は、上記のリストの通りです。ウォレットのIDから返された情報を認証するには、サーバがこれらのIACA証明書を信頼する必要があります。

Verify with Wallet APIで使用されるIACA証明書は、上記のリストの通りです。ウォレットのIDから返された情報を認証するには、サーバがこれらのIACA証明書を信頼する必要があります。

サーバで応答を検証する必要があるのはなぜですか?

本人確認書類が正当な発行者によって作成され、正しいデバイスで提示されたことを確認するには、サーバで応答を検証する必要があります。検証をスキップしたり、アプリ内で検証を実行したりすると、悪意のあるユーザーによる本人確認書類の改ざんに対して脆弱になります。

本人確認書類の発行者を確認するにはどうすればよいですか?

本人確認書類書の発行者(都道府県の公安委員会/州の車両管理局、日本政府など)は、発行機関のエレメントをリクエストすることで確認できます。または、本人確認書類の署名証明書に対応するIACA証明書から発行者を特定することもできます。