主なメリット
NFC認証を有効にする方法
ネイティブSDKとの連携(推奨)
NFC認証は、端末のNFC機能をフルに利用できるネイティブSDKで提供されます。
iOS SDKは、次のNFC関連の設定をすべて自動で処理します。
- ePassport向けのISO7816アプリケーション識別子
- エンタイトルメントと機能(Capabilities)の設定
- 視覚的なフィードバック付きのリアルタイムのチップ読み取り
Webでの連携
⚠️ ブラウザーの制限 プラットフォームの制約により、NFC認証はWebブラウザーでは利用できません。Webでの連携では、NFC認証は自動的にスキップされ、ユーザーは書類と自撮りによる標準の本人確認に進みます。
仕組み
セッションの開始
ユーザーは、お客様のアプリまたはプラットフォームから本人確認を開始します。
- ネイティブSDK: アプリ内で本人確認フローを直接起動します
- Web/モバイルWeb: ユーザーはNFC対応の本人確認のためにDiditアプリへ案内されるか、標準の本人確認を続行します
書類の撮影
ユーザーは本人確認書類を撮影し、次の情報を取得します。
- MRZ(機械読み取りゾーン) — チップへのアクセスキーの導出に使用します
- 書類の表面と裏面の画像 — 目視で確認できるデータとセキュリティ機能
- 目視で確認できるセキュリティ機能 — ホログラム、透かし、マイクロ文字
NFC対応の検出
システムが端末と書類の対応状況を自動的に確認します。
NFCが利用できない場合も、書類と生体認証による標準の本人確認がそのままスムーズに続行されます。
NFCチップの読み取り
対応する端末と書類の場合は、次の手順で進みます。
- ユーザーは書類をスマートフォンのNFCリーダーに近づけるよう案内されます
- 視覚的なフィードバックで読み取りの進行状況がリアルタイムに表示されます
- PACE/BACプロトコルを使用して、チップとの安全な通信が確立されます
データの抽出
システムはICAO 9303規格に従い、チップから包括的なデータを抽出します。
暗号による検証
抽出したデータに対して、厳格な暗号検証を行います。
デジタル署名の検証
デジタル署名の検証
各データグループのハッシュをSODに保存された署名と照合し、データの完全性を確認します。
証明書チェーンの検証
証明書チェーンの検証
書類証明書 → 発行国の署名CA → ICAO PKDルートという信頼の連鎖を検証し、CSCAマスターリストとICAO公開鍵ディレクトリ(PKD)と照合します。
証明書の失効確認
証明書の失効確認
証明書失効リスト(CRL)と照合し、証明書が失効しておらず、書類が盗難・漏えいとして届け出られていないことを確認します。
クロス検証
クロス検証
NFCから抽出したデータを、書類写真のOCRデータ、顔の生体情報の比較、MRZのチェックサム検証と突き合わせて検証します。
結果と信頼度スコア
最終的な検証結果には次の内容が含まれます。
対応書類
NFC認証は、NFCチップを搭載したePassportとeIDに対応しています。チップ搭載の書類には、通常、次のマークが付いています。
日本のマイナンバーカード(JPKI)
日本のマイナンバーカード(英語名My Number Card)にもチップがありますが、ICAO 9303準拠のものではありません。日本の公開鍵基盤であるJPKIの下で発行された証明書と、カードのPINを入力した場合にのみ署名する秘密鍵が格納されています。DiditはこれをNFCの同じステップで、ICAO 9303ではなくJPKIを使って読み取ります。どのプロトコルを使ったかは、すべてのNFC結果のchip_protocol(icaoまたはjpki)に記録されます。
要件
利用者の操作
カードを撮影する
利用者は、他の書類と同様に、ID確認ステップでマイナンバーカードを撮影します。Diditがカードを認識し、パスポートのチップ読み取りではなくJPKIのNFCステップを送信します。
カードのPINを入力する
SDKがカードの4桁のPIN(利用者証明用電子証明書の暗証番号)を求めます。NFCノードの
jpki_request_attributes設定がオン(デフォルト)の場合は、署名用パスワード(署名用PINとも呼ばれる、署名用電子証明書の暗証番号。英大文字と数字で6〜16文字)も求めます。カードをスマートフォンにかざす
SDKがカードの証明書を読み取り、カードは自身の鍵でDiditからのワンタイムチャレンジに署名します。SDKは証明書と署名をアップロードします。PINはカードにのみ送られ、Diditには送信されません。
カードは誤入力の回数を数えます。4桁のPINは連続3回、署名用パスワードは連続5回の誤入力でロックされ、ロックされた場合は所持者が住民登録のある市区町村の窓口で解除する必要があります。誤入力のあと、SDKは残りの試行回数を表示します。最後の1回は実行させません。残りが1回になった時点で入力を止め、解除方法を案内します。開始する前に、PINと署名用パスワードを手元に用意するよう利用者に案内してください。
Diditが確認する内容
各アクションはNFCノードの設定で、アクションなし、レビュー、拒否に変更できます。NFCの警告とNFC機能の設定をご覧ください。
失効ステータスが「unchecked」の意味
revocation_status: "unchecked"は、Diditが証明書チェーンとカードの署名は検証できたものの、証明書が失効しているかどうかの回答を得られなかったことを意味します。証明書は、たとえばカードの紛失が届け出られた場合などに失効します。失効したカードである可能性を排除できないため、uncheckedがgoodとして扱われることはありません。JPKI_REVOCATION_UNCHECKEDが発生し、デフォルトではNFCステップがレビューに回されます。別の結果にするにはjpki_revocation_unchecked_actionを設定します。
証明書チェーンまたは署名が無効な場合、Diditは失効について確認しません。ステータスはuncheckedのままで、チェーンまたは署名の警告のみが発生します。
所持者データとプライバシー
jpki_request_attributesがオンの場合、判定には署名用証明書に含まれる所持者の氏名、生年月日、性別、住所がjpki.attributesとして含まれます。オフの場合、利用者が入力するのは4桁のPINのみです。この場合もカードとPINは証明されますが、所持者データは含まれず、カードの写真との照合も行われません。- NFCステップが、チップから12桁の個人番号(マイナンバー)を読み取ることはありません。
- 判定に含まれるのはカードが証明した内容のみで、証明書そのもの、そのシリアル番号、署名は含まれません。