> ## 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 인증 API: 전자여권 및 eID 칩

> Didit의 NFC 칩 판독으로 전자여권 및 eID를 검증하세요. 암호화 검증, 위변조 방지 확인, 최고 수준의 신분증 보안 인증을 제공합니다. 호출당 $0.15.

NFC 기반 인증을 사용하면 모바일 휴대전화의 NFC 기능을 활용해 최신 여권 및 신분증에 내장된 보안 칩을 읽어 신원 문서를 검증할 수 있습니다. 이는 신분증 인증에서 사용할 수 있는 **가장 높은 수준의 보안**을 제공합니다.

NFC 인증 연동 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\````# Goal
Integrate Didit NFC Verification — cryptographic ePassport / eID chip read — into your app.

\# Delivery mode
NFC is **session-only**. There is no standalone /v3/nfc/ endpoint. The chip is read by the Didit Web/Mobile SDK during a hosted session, which uses the device's NFC radio.

\# Steps
1\. Create a workflow that includes the NFC feature (Business Console or POST /v3/workflows/). NFC normally runs alongside ID Verification: the user first photographs the document so the SDK derives BAC/PACE keys from the MRZ, then taps the chip.
2\. Create a session — POST /v3/session/ with { workflow_id, vendor_data, callback }. See /sessions-api/create-session.
3\. Open the returned session.url on a mobile device with NFC (iOS 13+/Android with NFC enabled), or mount the native SDK in your app.
4\. After completion fetch the decision — GET /v3/session/{sessionId}/decision/ (or subscribe to session.status.updated).

curl (create session):
\```bash
curl -X POST 'https://verification.didit.me/v3/session/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"workflow_id": "YOUR_WORKFLOW_ID",
"vendor_data": "user-123",
"callback": "https://yourapp.com/post-kyc"
}'
\```

\# Decision shape
The NFC result is returned under the plural array `nfc_verifications[]` on the decision payload.

\> Heads-up: the V3 schema deliberately keeps the **plural-array** name `nfc_verifications[]` even though early integrators occasionally hit a singular `nfc_verification` key. Always read from the plural array — it is the canonical, multi-instance shape and matches every other feature.

\# Status enum (per nfc_verifications[].status)
"Not Started" | "In Progress" | "Approved" | "In Review" | "Declined" | "Abandoned" | "Kyc Expired"

\# Warnings (LogWarningChoices.NFC)
The warnings[] array on each nfc_verification includes risk codes such as:
NFC_NOT_READ, NFC_DATA_INVALID, NFC_DATA_DOES_NOT_MATCH_OCR, NFC_BAC_FAILED, NFC_PASSIVE_AUTHENTICATION_FAILED, NFC_ACTIVE_AUTHENTICATION_FAILED, NFC_CHIP_CLONED, NFC_DOCUMENT_REVOKED.
Full catalogue: /core-technology/nfc-verification/warnings-nfc-verification.

\# Failure modes to handle
\- Device has no NFC chip or NFC is disabled — the SDK falls back to OCR + face match; nfc_verifications[] will be empty.
\- The user fails to hold the chip long enough — status="Declined" with NFC_NOT_READ or NFC_BAC_FAILED. Allow a retry.
\- nfc_verifications[].status="Declined" with NFC_DATA_DOES_NOT_MATCH_OCR — the chip and the printed data disagree (likely tampered document). Do not approve.
\- Passive Authentication failed — the chip's signing certificate did not chain back to a trusted CSCA. Stop the flow.

\# Japan My Number Card (JPKI)
\- The My Number Card is read through JPKI, not ICAO 9303: native SDKs only, and the person enters the card PIN. Its item has chip_protocol "jpki", its evidence under jpki (chain_valid, signature_valid, revocation_status good | revoked | unchecked, attributes, attributes_match_ocr), and null ICAO fields (chip_data, authenticity, certificate_summary).
\- iOS host apps add D392F000260100000001 to com.apple.developer.nfc.readersession.iso7816.select-identifiers.
\- Not enabled in production yet: until it is, a My Number Card in a native SDK on an NFC phone skips NFC with nfc_skip_reason JPKI_UNAVAILABLE.

\# See also
\- Canonical schema: /reference/data-models#nfc-verification
\- Per-feature report: /core-technology/nfc-verification/report-nfc-verification
\- Risk catalogue: /core-technology/nfc-verification/warnings-nfc-verification
\- Supported documents: /core-technology/nfc-verification/supported-documents-nfc-verification
\- Full integration playbook: /integration/integration-prompt````

\</pre>



      
      

붙여넣을 곳

![NFC 상호작용](https://didit-public-assets.s3.eu-west-1.amazonaws.com/icons/docs/nfc-id.gif)***## 주요 이점| 이점 | 설명 |
| - | - |
| **최고 수준의 보안** | 정부 발급 기관의 암호화 서명을 직접 검증합니다 |
| **손쉬운 사용** | NFC 지원 휴대전화에서 자동으로 작동합니다 |
| **위·변조 방지** | 육안으로 보이지 않는 문서 조작을 감지합니다 |
| **포괄적인 데이터** | OCR만으로는 얻을 수 없는 추가 데이터를 추출합니다 |
| **유연한 대체 수단** | NFC를 사용할 수 없는 경우 표준 인증으로 안전하게 대체됩니다 |***## NFC 인증 활성화 방법### 네이티브 SDK 연동 (권장)NFC 인증은 기기의 NFC 기능에 대한 완전한 접근을 제공하는 **네이티브 SDK**를 통해 지원됩니다.| 플랫폼 | NFC 지원 | 문서 |
| - | - | - |
| **iOS** | ✅ 완전 지원 | [iOS SDK 문서](https://docs.didit.me/ko/integration/native-sdks/ios-sdk.md) |
| **Android** | ✅ 완전 지원 | [Android SDK 문서](https://docs.didit.me/ko/integration/native-sdks/android-sdk.md) |iOS SDK는 다음을 포함한 모든 NFC 구성을 자동으로 처리합니다.- 전자여권(ePassport)용 ISO7816 애플리케이션 식별자
- 권한 및 기능 설정
- 시각적 피드백과 함께 실시간 칩 읽기### 웹 연동> ⚠️ **브라우저 제한 사항**
>
> NFC 인증은 플랫폼 제한으로 인해 **웹 브라우저에서 사용할 수 없습니다**.
>
> | 브라우저 | NFC 지원 |
> | - | - |
> | **Chrome (Android)** | 실험적 Web NFC API - 불안정하며 명시적 권한 필요 |
> | **Safari (iOS)** | Web NFC API 미지원 |
> | **기타 브라우저** | 지원하지 않음 |
>
> 웹 연동의 경우 NFC 인증은 자동으로 건너뛰며, 사용자는 표준 문서 + 셀피 인증을 진행합니다.***## 작동 방식**1. 세션 시작**사용자는 앱 또는 플랫폼을 통해 인증 프로세스를 시작합니다:- **네이티브 SDK**: 앱에서 직접 인증 워크플로를 실행합니다
- **웹/모바일 웹**: 사용자가 Didit 앱을 사용하여 NFC 기반 인증을 진행하도록 안내하거나, 표준 인증으로 계속 진행합니다**2. 문서 사진 촬영**사용자가 신분증을 촬영하여 다음 항목을 캡처합니다:- **MRZ**(기계 판독 영역) — 칩 액세스 키를 도출하는 데 사용됩니다
- **문서 앞면 및 뒷면 이미지** — 시각적 데이터 및 보안 기능
- **시각적 보안 기능** — 홀로그램, 워터마크, 미세 인쇄**3. NFC 지원 감지**시스템이 기기 및 문서 호환성을 자동으로 확인합니다:| 검사 항목 | 설명 |
| - | - |
| **문서 유형** | NFC 칩이 내장된 전자여권/전자신분증(eID)인가요? |
| **기기 지원 여부** | 휴대폰이 NFC 읽기를 지원하나요? |
| **권한** | 필요한 NFC 권한이 부여되었나요? |> [!NOTE]
>
> NFC를 사용할 수 없는 경우 표준 문서 + 생체 인증으로 원활하게 계속 진행됩니다.**4. NFC 칩 읽기**호환되는 기기 및 문서의 경우:1) 사용자가 휴대폰의 NFC 리더 근처에 문서를 놓도록 안내합니다
2) 시각적 피드백을 통해 실시간 읽기 진행 상황을 표시합니다
3) PACE/BAC 프로토콜을 사용하여 칩과의 보안 통신을 설정합니다**5. 데이터 추출**시스템이 **ICAO 9303** 표준에 따라 칩에서 포괄적인 데이터를 추출합니다:| 데이터 그룹 | 내용 | 설명 |
| - | - | - |
| **SOD** | 문서 보안 객체 | 모든 데이터 그룹에 대한 디지털 서명 |
| **DG1** | 개인 데이터 | 성명, 신분증 번호, 생년월일, 만료일 |
| **DG2** | 얼굴 이미지 | 소지자의 고해상도 디지털 사진 |
| **DG7** | 서명 | 소지자 서명의 디지털 표현 |
| **DG11-14** | 추가 데이터 | 지문, 홍채 스캔이 포함될 수 있음(저장된 경우) |**6. 암호학적 검증**추출된 데이터는 엄격한 암호학적 검증을 거칩니다:> [accordion] 디지털 서명 검증
>
> 각 데이터 그룹의 해시를 SOD에 저장된 서명과 비교하여 검증함으로써 데이터 무결성을 보장합니다.> [accordion] 인증서 체인 유효성 검사
>
> CSCA 마스터 목록 및 ICAO Public Key Directory와 대조하여 **문서 인증서 → 국가 서명 CA → ICAO PKD 루트** 신뢰 체인을 검증합니다.> [accordion] 인증서 폐기 확인
>
> 인증서가 폐기되지 않았는지, 문서가 도난당했거나 보안이 침해된 것으로 신고되지 않았는지 확인하기 위해 인증서 폐기 목록(CRL)과 대조하여 검증합니다.> [accordion] 교차 검증
>
> NFC로 추출한 데이터를 문서 사진의 OCR 데이터, 얼굴 생체 정보 대조 및 MRZ 체크섬 검증과 교차 검증합니다.**7. 결과 및 신뢰도 점수**최종 인증 결과에는 다음이 포함됩니다:| 출력 항목 | 설명 |
| - | - |
| **NFC 인증 상태** | 성공, 실패 또는 건너뜀 |
| **데이터 일치도 점수** | NFC 데이터가 시각적 데이터와 얼마나 일치하는지 |
| **인증서 유효성 검사** | 전체 체인 검증 상태 |
| **신뢰도 향상** | NFC는 전체 인증에 상당한 신뢰도를 더합니다 |***## 지원되는 문서NFC 인증은 NFC 칩이 포함되어 있고 일반적으로 문서에 다음 기호가 표시된 **전자여권** 및 **전자신분증(eID)**에서 작동합니다:![ePassport Logo](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/epassport-logo.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=89cd90281e6ff1cd96f5a3d6a2200cad)2006년 이후 발급된 대부분의 여권에는 NFC 칩이 포함되어 있습니다. 국가 신분증의 지원 여부는 국가마다 다릅니다. [지원되는 문서](https://docs.didit.me/ko/core-technology/nfc-verification/supported-documents-nfc-verification.md)에서 전체 내용을 확인하세요.일본 마이넘버카드는 다른 종류의 칩을 사용하며 ICAO 9303 대신 JPKI를 통해 판독합니다. 자세한 내용은 [일본 마이넘버카드(JPKI)](#일본-마이넘버카드-jpki)를 참조하세요.***## 일본 마이넘버카드(JPKI)일본의 마이넘버카드(マイナンバーカード)에는 칩이 내장되어 있지만, ICAO 9303 규격은 아닙니다. 이 카드에는 일본의 공개 키 인프라인 JPKI에 따라 발급된 인증서와, 소지자가 카드 PIN을 입력해야만 서명할 수 있는 개인키가 포함되어 있습니다. Didit은 ICAO 9303 대신 JPKI를 통해 동일한 NFC 단계에서 카드를 읽으며, 모든 NFC 결과는 `chip_protocol`(`icao` 또는 `jpki`)에 사용된 프로토콜을 명시합니다.> [!WARNING]
>
> **아직 사용할 수 없습니다.** JPKI를 통한 마이넘버카드 인식은 프로덕션 환경에서 아직 활성화되지 않았습니다. 활성화되기 전까지는 네이티브 SDK에서 캡처된 마이넘버카드가 `JPKI_UNAVAILABLE` 건너뛰기 사유와 함께 NFC 단계를 건너뛰며, 기존과 동일하게 문서 캡처 및 얼굴 대조를 통해 카드가 인증됩니다.### 요구 사항| 요구 사항 | 세부 정보 |
| - | - |
| **문서** | 일본 마이넘버카드에만 해당합니다. 일본 여권은 ICAO 9303 칩 판독 방식을 유지합니다. |
| **연동** | 마이넘버카드를 읽을 수 있는 네이티브 SDK 릴리스(iOS, Android 또는 이를 기반으로 빌드된 React Native 및 Flutter SDK). SDK는 Didit에 JPKI 판독이 가능함을 알립니다. 이전 릴리스는 `JPKI_UNAVAILABLE`과 함께 단계를 건너뜁니다. 웹 및 WebView 연동 환경에서는 `INTEGRATION_WITHOUT_NFC_ACCESS`와 함께 단계를 건너뜁니다. |
| **기기** | NFC 리더기가 장착된 스마트폰. 리더기가 없으면 `DEVICE_WITHOUT_NFC`와 함께 단계를 건너뜁니다. |
| **iOS 호스트 앱** | 앱의 ISO7816 select identifiers에 `D392F000260100000001`을 포함해야 합니다. [iOS NFC 설정](https://docs.didit.me/ko/integration/native-sdks/ios-sdk.md#nfc-설정)을 참조하십시오. |
| **개인** | 카드의 4자리 PIN을 알고 있어야 하며, 워크플로에서 소지자 정보를 요청하는 경우에는 서명용 비밀번호도 알고 있어야 합니다. |### 개인이 진행하는 과정**1. 카드 촬영**일반적인 문서와 마찬가지로 신분증 인증 단계에서 개인이 마이넘버카드를 촬영합니다. Didit은 카드를 인식하고 여권 칩 판독 대신 JPKI NFC 단계를 전송합니다.**2. 카드 PIN 입력**SDK가 카드의 4자리 PIN(利用者証明用電子証明書の暗証番号) 입력을 요청합니다. NFC 노드의 `jpki_request_attributes` 설정이 활성화되어 있으면(기본값), 서명 PIN이라고도 불리는 서명용 비밀번호(署名用電子証明書の暗証番号, 영문 대문자 및 숫자 6\~16자) 입력도 함께 요청합니다.**3. 카드를 스마트폰에 태그**SDK가 카드의 인증서를 읽고, 카드는 자체 키를 사용하여 Didit의 일회용 챌린지에 서명합니다. SDK는 인증서와 서명을 업로드합니다. PIN은 카드에만 전달되며 Didit에는 절대 전송되지 않습니다.> [!NOTE]
>
> 카드는 입력 실패 횟수를 기록합니다. 4자리 PIN은 연속 3회, 서명용 비밀번호는 연속 5회 잘못 입력하면 잠기며, 잠긴 PIN이나 서명용 비밀번호는 소지자의 관할 지방자치단체 사무소에서 초기화해야 합니다. 잘못 입력한 후에는 SDK에 남은 시도 횟수가 표시됩니다. SDK는 마지막 시도를 실행하지 않습니다. 1회만 남았을 때는 시도를 중단하고 개인에게 초기화 장소를 안내합니다. 시작하기 전에 PIN과 서명용 비밀번호를 미리 준비하도록 사용자에게 안내하십시오.### Didit 검증 항목| 검증 | Didit 검증 내용 | 실패 시 경고 (기본 작업) |
| - | - | - |
| **인증서 체인** | 모든 인증서가 해당 유형의 JPKI 인증 기관에 연결되어 있고, 유효 기간 내에 있으며, 마이넘버카드 인증서인지 여부(`jpki.chain_valid`). | `JPKI_CERTIFICATE_INVALID` (거부) |
| **카드와 PIN** | 일회용 챌린지에 대한 카드의 서명이 인증서를 사용해 검증되는지 여부(`jpki.signature_valid`). 카드는 PIN을 입력해야만 서명하므로, 이를 통해 개인이 카드를 소지하고 PIN을 알고 있음을 증명합니다. | `JPKI_SIGNATURE_INVALID` (거부) |
| **폐기** | 폐기된 인증서가 없는지 여부(`jpki.revocation_status`). | `revoked`인 경우 `JPKI_CERTIFICATE_REVOKED` (거부), `unchecked`인 경우 `JPKI_REVOCATION_UNCHECKED` (검토) |
| **소지자 정보** | 서명 인증서의 성명, 생년월일, 성별, 주소가 동일한 카드 사진에서 판독된 데이터와 일치하는지 여부(`jpki.attributes_match_ocr`, `jpki.mismatched_attributes`). | `JPKI_AND_OCR_DATA_NOT_SAME` (검토) |각 작업은 NFC 노드의 설정 항목이므로 **조치 없음**, **검토**, **거부**로 변경할 수 있습니다. [NFC 경고](https://docs.didit.me/ko/core-technology/nfc-verification/warnings-nfc-verification.md#일본-마이넘버카드-jpki) 및 [NFC 기능 구성](https://docs.didit.me/ko/management-api/workflows/feature-configs.md#nfc-/-전자여권)을 참조하십시오.### 폐기 미확인 상태의 의미`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자리 개인번호(마이넘버)를 절대 읽지 않습니다.
- 결정 결과에는 카드가 증명한 내용만 보고되며, 인증서 자체나 일련번호, 서명은 보고되지 않습니다.전체 결과는 [NFC 인증 보고서](https://docs.didit.me/ko/core-technology/nfc-verification/report-nfc-verification.md#일본-마이넘버카드-jpki)에 설명되어 있습니다.***## 연동 예시### iOS SDK (현재 지원)```swift theme={null}
import DiditSdk

// NFC is automatically enabled when the document supports it
let config = DiditSdk.Configuration(
    // NFC configuration is handled automatically
    // Just ensure your app has the required entitlements
)

let result = try await DiditSdk.shared.startVerification(
    with: sessionId,
    configuration: config
)
```**[전체 iOS SDK 문서 →](https://docs.didit.me/ko/integration/native-sdks/ios-sdk.md)**### Android SDK (현재 지원)```kotlin theme={null}
import me.didit.sdk.DiditSdk

// NFC is automatically enabled when the document supports it
DiditSdk.startVerification(
    token = "your-session-token"
) { result ->
    handleResult(result)
}
```**[Android SDK 문서 →](https://docs.didit.me/ko/integration/native-sdks/android-sdk.md)*****## 보안 아키텍처```
┌─────────────────────────────────────────────────────────────┐
│                    NFC Verification Flow                     │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────┐    ┌──────────┐    ┌──────────────────────┐  │
│  │ Document │───▶│  Phone   │───▶│   Didit Backend      │  │
│  │ NFC Chip │    │ NFC Read │    │                      │  │
│  └──────────┘    └──────────┘    │  ┌────────────────┐  │  │
│                                   │  │ ICAO PKD       │  │  │
│                                   │  │ Validation     │  │  │
│                                   │  └────────────────┘  │  │
│                                   │  ┌────────────────┐  │  │
│                                   │  │ CSCA Master    │  │  │
│                                   │  │ List Check     │  │  │
│                                   │  └────────────────┘  │  │
│                                   │  ┌────────────────┐  │  │
│                                   │  │ CRL Revocation │  │  │
│                                   │  │ Check          │  │  │
│                                   │  └────────────────┘  │  │
│                                   └──────────────────────┘  │
│                                              │               │
│                                              ▼               │
│                                   ┌──────────────────────┐  │
│                                   │  Verification Result │  │
│                                   │  + Confidence Score  │  │
│                                   └──────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
```***## 자주 묻는 질문<details>
  <summary>**사용자의 휴대전화가 NFC를 지원하지 않으면 어떻게 되나요?**</summary>

  인증 플로우가 NFC 지원 여부를 자동으로 감지합니다. 지원되지 않는 경우, 사용자는 표준 문서 + 셀피 인증을 진행합니다. 추가적인 NFC 신뢰도 향상은 적용되지 않지만 인증은 여전히 안전하게 완료됩니다.
</details><details>
  <summary>**문서에 NFC 칩이 없으면 어떻게 되나요?**</summary>

  많은 문서(특히 구형 여권 및 일부 국가 신분증)에는 NFC 칩이 없습니다. 시스템이 이를 감지하여 표준 인증으로 원활하게 계속 진행합니다.
</details><details>
  <summary>**NFC 인증은 정확도를 얼마나 향상시키나요?**</summary>

  NFC 인증은 문서를 발급한 정부로부터 직접 문서의 진위에 대한 암호학적 증명을 제공합니다. 이를 통해 인증 결과에 대한 신뢰도를 크게 높이고 육안 검사를 통과할 수 있는 정교한 위조를 적발합니다.
</details><details>
  <summary>**NFC 인증은 필수인가요?**</summary>

  아닙니다. NFC는 보완 기능이며 필수가 아닙니다. 위험 허용 범위에 따라 인증 워크플로에서 NFC를 필수로 요구하거나, 지원 시 우선 사용하도록 하거나, 완전히 건너뛰도록 구성할 수 있습니다.
</details>


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