> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# NFC認証の警告とエラーコード一覧

> DiditのNFCモジュールが出力するすべての警告（チップ読み取りのスキップや未検証、OCRとチップの不一致、証明書の期限切れなど）について、原因、重大度、対処法を解説します。

## 概要

NFCレポートの警告は、Diditがチップの読み取りと検証の過程で検出したすべての状態を示します。警告は`nfc_verifications[]`の各項目にある`warnings[]`配列に格納され（[NFCレポート](https://docs.didit.me/ja/core-technology/nfc-verification/report-nfc-verification.md)を参照）、`feature`は`"NFC"`に設定されます。各エントリは共通の[警告オブジェクト](https://docs.didit.me/ja/reference/data-models.md#警告オブジェクト)の形式に従います：`feature`、`risk`、`additional_data`、`log_type`、`short_description`、`long_description`、`node_id`。

各警告は3つの層で構成されます。

1. **`risk`コード**：コード内で照合に使える安定した識別子です（以下に記載のコード）。
2. **`log_type`**：`information`、`warning`、`error`のいずれかです。ワークフローでそのリスクに設定したアクションから導出されます：**No action** → `information`、**Review** → `warning`、**Decline** → `error`。
3. **判定への影響**：同じ設定済みアクションがNFCレポートの`status`も決定します。確認アクションでは`In Review`に、却下アクションでは`Declined`に変わります。

この方法で設定できるNFCリスクは4つ（`SKIPPED_NFC_VALIDATION`、`NFC_CHIP_NOT_VERIFIED`、`NFC_TRUST_ANCHOR_MISSING`、`NFC_AND_OCR_DATA_NOT_SAME`）で、これに加えて5つの[日本のマイナンバーカード](#日本のマイナンバーカード-jpki)のリスクがあり、それぞれに個別の設定があります。2つの証明書リスク（`DSC_CERTIFICATE_REVOKED`、`DSC_CERTIFICATE_EXPIRED`）は**情報提供のみ**です。常に`log_type: "information"`が付与され、それ自体でNFCのステータスを変更することはありません。

NFCモジュールが生成するリスクコードの全一覧を以下に示します。これ以外のNFCリスクコードは存在しません。

## 発生する警告

| `risk` | 原因 | 重大度（`log_type`） | ステータスへの影響 | 対処方法 |
| - | - | - | - | - |
| `SKIPPED_NFC_VALIDATION` | チップの読み取りがスキップされました。ワークフローでスキップが許可されており（`allow_nfc_skip`）ユーザーがスキップをタップした場合、またはクライアントがNFCを読み取れずにスキップした場合に発生します。正確な理由は`additional_data.skip_reason`に記録され（[スキップの理由](#スキップ理由)を参照）、警告の`long_description`はこの理由に応じて決まります。 | **skip NFC action**設定（`skip_nfc_action`）に従います。information、warning、errorのいずれかです。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | ポリシーでNFCが必須の場合は、スキップ時のアクションをDeclineに設定し（またはスキップ自体を禁止し）、NFC対応デバイスから再試行するようユーザーに案内してください。それ以外の場合はNo actionのままにして、OCRのみの検証にフォールバックさせます。 |
| `NFC_CHIP_NOT_VERIFIED` | チップは読み取られましたが、トラストアンカーの欠落と明示的に特定された場合以外の理由で暗号学的検証に失敗しました。Data Groupのハッシュ、SODの署名、またはその他のパッシブ認証のチェックが検証されませんでした。 | **unverified chip action**設定（`unverified_chip_action`）に従います。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | 無効または改ざんされた可能性のあるチップとして扱ってください。どのチェックが失敗したかは`authenticity`と`certificate_summary.validation`で確認できます。 |
| `NFC_TRUST_ANCHOR_MISSING` | チップのDocument Signer Certificate（DSC）が、Diditのトラストストアにない世代のCountry Signing Certification Authority（CSCA）に属しています（`certificate_summary.validation.csca_missing`が`true`）。そのため、DiditはSODの信頼チェーンを確立できません。 | **unverified chip action**設定（`unverified_chip_action`）に従います。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | これはトラストストアのカバー範囲の不足であり、チップが改ざんされた証拠ではありません。代替のチェックで書類を確認し、欠落しているCSCAを調査できるよう、発行国を添えてDiditサポートにお問い合わせください。 |
| `NFC_AND_OCR_DATA_NOT_SAME` | チップから読み取ったMRZが、書類の表面からOCRで読み取ったMRZと一致しません（正規化後に`<`の埋め文字を無視して比較）。改ざんの強いシグナルです。 | **data inconsistency action**設定（`inconsistent_data_action`）に従います。これは本人確認のデータ整合性チェックを制御するのと同じ設定です。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | 反証がない限り改ざんとして扱ってください。通常はDeclineに設定します。`additional_data`ペイロードには、手動で比較できるようOCRのMRZ行（`ocr_mrz`、配列）とチップのMRZ（`nfc_mrz`、単一の文字列）が含まれます。 |
| `DSC_CERTIFICATE_REVOKED` | このチップに署名したDocument Signer Certificateが、発行国のCertificate Revocation List（CRL）に掲載されています。 | 常に`information`です。 | なし。この警告だけでNFCのステータスが変わることはありません。 | 署名鍵が侵害された可能性を示す強いシグナルです。必要に応じて、独自のロジックでこれらのセッションを手動レビューに回してください。なお、このチップでは通常、設定可能な`NFC_CHIP_NOT_VERIFIED`も発生します。 |
| `DSC_CERTIFICATE_EXPIRED` | DSCの有効期間が過ぎています（`certificate_summary.validation.dsc_expired`が`true`）。 | 常に`information`です。 | なし。この警告だけでNFCのステータスが変わることはありません。 | 古い書類でよく見られます。失効の場合と同様に、期限切れのDSCはSODの完全な検証にも失敗するため、`NFC_CHIP_NOT_VERIFIED`が同時に発生し、設定したアクションが適用されます。 |
| `JPKI_CERTIFICATE_INVALID` | マイナンバーカード：カードから読み取った証明書が、その種類に対応するJPKI認証局に信頼チェーンにつながっていない、有効期間外である、またはその種類のマイナンバーカード証明書ではありません。失敗した証明書は`additional_data.certificate_types`に一覧表示され、その理由は`jpki.certificates[].failure`に示されます。 | `jpki_certificate_invalid_action`に従います（デフォルトはDecline）。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | 無効または改ざんされたカードとして扱ってください。カードの証明書が期限切れの場合もここに該当します。保有者は市区町村で証明書を更新します。 |
| `JPKI_SIGNATURE_INVALID` | マイナンバーカード：ワンタイムチャレンジに対するカードの署名が証明書で検証されないため、カードの所持と暗証番号の知識が証明されません。カードを一度も読み取らずにNFCステップが終了した場合にも発生します（その場合`additional_data.certificate_types`は空になります）。 | `jpki_signature_invalid_action`に従います（デフォルトはDecline）。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | このカードの読み取りを証明として受け入れないでください。実物のカードで再試行するよう本人に依頼してください。 |
| `JPKI_CERTIFICATE_REVOKED` | マイナンバーカード：失効確認で証明書が失効していると報告されました。たとえば、カードの紛失届が出された場合や保有者の登録情報が変更された場合です（`jpki.revocation_status`が`revoked`）。 | `jpki_certificate_revoked_action`に従います（デフォルトはDecline）。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | このカードを受け入れないでください。 |
| `JPKI_REVOCATION_UNCHECKED` | マイナンバーカード：証明書と署名は検証されましたが、失効確認の応答が得られなかったため（`jpki.revocation_status`が`unchecked`）、失効したカードである可能性を排除できません。チェーンまたは署名の検証がすでに失敗している場合は発生しません。 | `jpki_revocation_unchecked_action`に従います（デフォルトはReview）。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | 失効確認の応答がない検証済みカードをどの程度信頼するかを判断し、それに応じてアクションを設定してください。 |
| `JPKI_AND_OCR_DATA_NOT_SAME` | マイナンバーカード：署名用証明書に記載された氏名、生年月日、性別または住所が、同じカードの券面画像から読み取ったデータと異なります。`additional_data.fields`には異なる属性の名前のみが示され、その値は示されません。 | `jpki_inconsistent_data_action`に従います（デフォルトはReview）。 | 設定可能です。No action、Review、Declineのいずれかを選択します。 | 判定の前に`jpki.attributes`と本人確認のデータを比較してください。一般的でない文字を含む氏名は、証明書に代替文字が格納されているために異なる場合があります（`jpki.attributes.name_substitute_characters`）。 |

> [!NOTE]
>
> `SKIPPED_NFC_VALIDATION`は`NFC_CHIP_NOT_VERIFIED`および`NFC_TRUST_ANCHOR_MISSING`と同時には発生しません。チップ検証の警告は、チップの読み取りがスキップされなかった場合にのみ評価されるためです。また、2つのチップ検証の警告も互いに同時には発生しません。

## 説明文字列の一覧

APIは、各リスクについて以下の`short_description`と`long_description`の文字列をそのまま返します。

| `risk` | `short_description` | `long_description` |
| - | - | - |
| `SKIPPED_NFC_VALIDATION` | NFC検証のスキップ | 理由ごとに異なります。[スキップ理由](#スキップ理由)を参照してください。スキップ理由が導入される前に記録された旧セッションでは、「技術的な問題またはNFC非対応などにより、近距離無線通信(NFC)チップの検証プロセスが完了しませんでした。」にフォールバックします。 |
| `NFC_CHIP_NOT_VERIFIED` | NFCチップ未検証 | 近距離無線通信(NFC)チップが、トラストアンカーの欠落と明示的に特定された場合以外の理由でパッシブ認証に失敗しました。チップのデータまたは署名が無効であるか、改ざんされている可能性があります。 |
| `NFC_TRUST_ANCHOR_MISSING` | NFCトラストアンカー利用不可 | 発行国の国別署名認証局(CSCA)のトラストアンカーが利用できないため、近距離無線通信(NFC)チップを検証できませんでした。これはトラストストアの対応範囲の不足であり、チップが改ざんされた証拠ではありません。 |
| `NFC_AND_OCR_DATA_NOT_SAME` | NFCとOCRのデータ不一致 | 近距離無線通信(NFC)チップのデータとOCRのデータが一致しません。書類の改ざんまたはデータの不整合の可能性があります。 |
| `DSC_CERTIFICATE_REVOKED` | 文書署名者証明書の失効 | ePassportのチップデータの署名に使用された文書署名者証明書(DSC)が、発行国の証明書失効リスト(CRL)により失効しています。署名鍵が漏洩した可能性があります。 |
| `DSC_CERTIFICATE_EXPIRED` | 文書署名者証明書の期限切れ | ePassportのチップデータの署名に使用された文書署名者証明書(DSC)が期限切れです。証明書の有効期間が過ぎています。 |
| `JPKI_CERTIFICATE_INVALID` | マイナンバーカードの証明書が無効 | マイナンバーカードのチップから読み取った証明書が無効です。公的個人認証サービス(JPKI)の認証局までチェーンしていない、有効期間外である、または要求された種類のマイナンバーカード証明書ではない、のいずれかに該当します。 |
| `JPKI_SIGNATURE_INVALID` | マイナンバーカードの署名が無効 | マイナンバーカードがワンタイムの検証チャレンジに対して作成した署名が、カードの証明書で検証できません。そのため、カードを所持し、暗証番号を知っていることが証明されていません。 |
| `JPKI_CERTIFICATE_REVOKED` | マイナンバーカードの証明書の失効 | 失効確認により、マイナンバーカードから読み取った証明書が失効していると報告されました。たとえば、カードの紛失届が出された場合や、所有者の登録情報が変更された場合などです。 |
| `JPKI_REVOCATION_UNCHECKED` | マイナンバーカードの失効状態が未確認 | マイナンバーカードの証明書と署名は検証されましたが、失効状態を確認できませんでした。そのため、失効したカードである可能性を排除できません。 |
| `JPKI_AND_OCR_DATA_NOT_SAME` | マイナンバーカードのチップとOCRのデータ不一致 | マイナンバーカードの署名用証明書に記載された氏名、生年月日、性別または住所が、カードの画像から読み取ったデータ(OCR)と一致しません。すり替えまたはデータの不整合の可能性があります。 |

## スキップ理由

`SKIPPED_NFC_VALIDATION`警告には`additional_data.skip_reason`が含まれます。これは、NFCが実行されなかった理由を正確に示す7つの安定したコードのいずれかです(スキップ理由が導入される前に記録されたセッションでは、`additional_data`が`null`の場合があります。過去の判定を処理する際は、このフィールドを省略可能なものとして扱ってください)。同じ分類は、判定ペイロードのセッションレベルの`nfc_skip_reason`としても表示されます。これには、そもそもNFC認証を実行できなかったため(チップのない書類、Web連携)、NFCレポートも警告も存在しないセッションも含まれます。

| `skip_reason` | 意味 | `long_description` |
| - | - | - |
| `USER_SKIPPED` | 対応デバイスでNFCの読み取りが提示されましたが、ユーザーがスキップを選択しました。 | 対応デバイスでNFCチップの読み取りステップが提示されましたが、ユーザーはスキップを選択しました(スキップはワークフロー設定で許可されています)。 |
| `DOCUMENT_WITHOUT_CHIP` | 書類の仕様上、読み取り可能なNFCチップがありません(ICAO 9303準拠の電子書類ではありません)。 | この書類には読み取り可能なNFCチップがないため、NFC認証を実行できませんでした。この書類はICAO 9303準拠の電子書類ではありません。 |
| `CHIP_CERTIFICATE_UNAVAILABLE` | チップは存在しますが、書類の発行期間をカバーする発行国の署名証明書(CSCA)がないため、署名を検証できません。 | この書類の発行期間をカバーする発行国の署名証明書(CSCA)を利用できず、チップの署名を検証できないため、NFC認証を実行できませんでした。 |
| `DEVICE_WITHOUT_NFC` | ネイティブSDKが、スマートフォンで利用可能なNFCリーダーがないと報告しました。 | ユーザーのデバイスが利用可能なNFCリーダーがないと報告したため、NFC認証を実行できませんでした。 |
| `INTEGRATION_WITHOUT_NFC_ACCESS` | 認証がネイティブSDKを介さずに(たとえばWebブラウザで)実行されたため、スマートフォンのNFCリーダーにアクセスできませんでした。 | 認証がネイティブモバイルSDKを介して実行されなかったためスマートフォンのNFCリーダーにアクセスできず、NFC認証を実行できませんでした(WebブラウザではNFCチップを読み取れません)。 |
| `MRZ_KEY_UNAVAILABLE` | 書類のMRZからチップのアクセスキー(BAC/PACEのシード)を導出できませんでした。 | 書類の機械読取領域(MRZ)からチップのアクセスキーを導出できなかったため、NFC認証を実行できませんでした。 |
| `JPKI_UNAVAILABLE` | 書類は日本のマイナンバーカードであり、そのチップはJPKIを通じて読み取られますが、この認証ではJPKIを利用できませんでした。JPKIが有効になっていないか、アプリで使用しているネイティブSDKのリリースではマイナンバーカードを読み取れません。他のチップと同様に、ブラウザで認証されたマイナンバーカードには`INTEGRATION_WITHOUT_NFC_ACCESS`が、NFC非搭載のスマートフォンで認証されたものには`DEVICE_WITHOUT_NFC`が付与されます。 | このマイナンバーカードはJPKIを通じて読み取られますが、この認証ではJPKIを利用できなかったため、NFC認証を実行できませんでした。JPKIが有効になっていないか、アプリのSDKではマイナンバーカードを読み取れません。 |

> [!NOTE]
>
> NFCレポートとその`SKIPPED_NFC_VALIDATION`警告は、クライアントがNFCステップに到達し、明示的にスキップした場合にのみ存在します(通常は`USER_SKIPPED`、またはスキャン時にリーダーが利用できないと判明した場合は`DEVICE_WITHOUT_NFC`)。NFCステップが提示される前に回避された場合(チップのない書類、証明書の欠如、NFC機能を利用できないとの報告、MRZからアクセスキーを導出できないこと、JPKIの利用不可)は、レポートも警告も作成されません。理由はセッションレベルの`nfc_skip_reason`フィールドにのみ表示され、セッションステータスには影響しません。

## 設定

3つのワークフロー設定で、NFC警告の振り分け方法を制御します。それぞれ**No action**、**Review**、**Decline**のいずれかに設定できます。

1. **Skip NFC action**(`skip_nfc_action`):`SKIPPED_NFC_VALIDATION`に適用されます。ユーザーがスキップできるのは、`allow_nfc_skip`が有効な場合のみです。
2. **Unverified chip action**(`unverified_chip_action`):`NFC_CHIP_NOT_VERIFIED`と`NFC_TRUST_ANCHOR_MISSING`の両方に適用されます。そのため、セッションステータスの挙動は同じままで、リスクコードによって検証が失敗した理由がわかります。
3. **Data inconsistency action**(`inconsistent_data_action`):`NFC_AND_OCR_DATA_NOT_SAME`に適用されます。これは本人確認で使用されるデータ不一致の設定と同じものです。

2つの`DSC_CERTIFICATE_*`リスクにはアクション設定がなく、常に情報提供のみとなります。日本のマイナンバーカードのリスクには、次のセクションに記載する5つの追加設定があります。

## 日本のマイナンバーカード (JPKI)

日本のマイナンバーカードはICAO 9303ではなくJPKIを通じて読み取られる(`chip_protocol: "jpki"`)ため、上記のICAOのリスクが発生することはありません。代わりに、その読み取りでは次の5つのリスクが発生し、それぞれNFCノードに専用の設定があります。

| 設定 | リスク | デフォルト |
| - | - | - |
| `jpki_certificate_invalid_action` | `JPKI_CERTIFICATE_INVALID` | 却下 |
| `jpki_signature_invalid_action` | `JPKI_SIGNATURE_INVALID` | 却下 |
| `jpki_certificate_revoked_action` | `JPKI_CERTIFICATE_REVOKED` | 却下 |
| `jpki_revocation_unchecked_action` | `JPKI_REVOCATION_UNCHECKED` | 確認 |
| `jpki_inconsistent_data_action` | `JPKI_AND_OCR_DATA_NOT_SAME` | 確認 |

マイナンバーカードの読み取りがスキップされた場合は、他のチップと同様に`SKIPPED_NFC_VALIDATION`が発生し、`skip_nfc_action`に従います。読み取りの仕組みについては、[日本のマイナンバーカード (JPKI)](https://docs.didit.me/ja/core-technology/nfc-verification/overview.md#日本のマイナンバーカード-jpki)を参照してください。

> [!WARNING]
>
> JPKIを通じたマイナンバーカードの読み取りは、本番環境ではまだ有効になっていません。有効になるまでは、マイナンバーカードはスキップ理由`JPKI_UNAVAILABLE`でNFCステップをスキップし、これらのリスクはいずれも発生しません。

## 例

### レビュー中: チップを検証できなかった場合

```json theme={null}
{
  "warnings": [
  {
    "feature": "NFC",
    "risk": "NFC_CHIP_NOT_VERIFIED",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "NFC chip not verified",
    "long_description": "The Near Field Communication (NFC) chip failed passive authentication for a reason other than an explicitly identified missing trust anchor. The chip data or signature could be invalid or altered.",
    "node_id": "nfc_primary"
  },
  {
    "feature": "NFC",
    "risk": "DSC_CERTIFICATE_EXPIRED",
    "additional_data": null,
    "log_type": "information",
    "short_description": "Document Signer Certificate expired",
    "long_description": "The Document Signer Certificate (DSC) used to sign the ePassport chip data has expired, meaning the certificate's validity period has passed.",
    "node_id": "nfc_primary"
  }
]
}
```

この例では、未検証チップに対するアクションが「レビュー」に設定されているため、`NFC_CHIP_NOT_VERIFIED`は`log_type: "warning"`となり、NFCレポートのステータスは`In Review`になります。期限切れDSCのエントリーは情報提供のみを目的としたものです。

### 却下: チップとOCRの不一致

```json theme={null}
{
  "warnings": [
  {
    "feature": "NFC",
    "risk": "NFC_AND_OCR_DATA_NOT_SAME",
    "additional_data": {
      "ocr_mrz": ["P<ESPDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", "AAB000123ESP9005154M3001017<<<<<<<<<<<<<<04"],
      "nfc_mrz": "P<ESPDOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<<<<AAB000254ESP9005154M3001017<<<<<<<<<<<<<<06"
    },
    "log_type": "error",
    "short_description": "NFC and OCR data not same",
    "long_description": "The Near Field Communication (NFC) chip data and the OCR data don't match, indicating potential document tampering or data inconsistency.",
    "node_id": "nfc_primary"
  }
]
}
```

この例では、データ不整合に対するアクションが「却下」に設定されているため、警告は`log_type: "error"`となり、NFCレポートのステータスは`Declined`になります。`ocr_mrz`はMRZの各行を要素とする配列であるのに対し、`nfc_mrz`はチップから読み取ったMRZを連結した単一の文字列である点に注意してください。

### レビュー中: 失効確認の応答がないマイナンバーカード

```json theme={null}
{
  "warnings": [
  {
    "feature": "NFC",
    "risk": "JPKI_REVOCATION_UNCHECKED",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "My Number Card revocation status not checked",
    "long_description": "The certificate and signature of the My Number Card were verified, but its revocation status could not be checked, so a revoked card cannot be ruled out.",
    "node_id": "nfc_primary"
  }
]
}
```

この例では、`jpki_revocation_unchecked_action`がデフォルトの「レビュー」のままであるため、警告は`log_type: "warning"`となり、NFCレポートのステータスは`In Review`になります。カード自体の真正性は証明されており、`jpki.chain_valid`と`jpki.signature_valid`はいずれも`true`です。

## 警告の種類

各リスクには、アプリケーションの設定に基づいて重大度が割り当てられます。重大度は次の3つです。

## 関連情報

* [NFCレポート](https://docs.didit.me/ja/core-technology/nfc-verification/report-nfc-verification.md)：レポートの完全なスキーマとステータス。
* [Webhook](https://docs.didit.me/ja/integration/webhooks.md)：`status.updated`はセッションのステータスが変わるたびに送信されます。セッションが承認済み、却下、レビュー中、放棄のいずれかになると、判定ペイロード(NFCの警告を含む)が添付されます。
* [データモデル: NFC認証](https://docs.didit.me/ja/reference/data-models.md#nfc認証)：フィールドごとの正式なスキーマ。
* [データモデル: Warningオブジェクト](https://docs.didit.me/ja/reference/data-models.md#警告オブジェクト)：`warnings[]`の各エントリーの構造。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.