NFC 芯片验证
NFC 用手机读取电子护照或带芯片身份证内部经过签名的芯片 - 这是目前最强的证件检查方式,也是西班牙金融监管机构判定其安全性至少不逊于线下当面核验的方式。
NFC 读取护照或带芯片身份证中经过加密签名的芯片,并验证其签名链条能否追溯到签发国。 它需要一部带有 NFC 硬件的手机,因此是通过原生 SDK 而不是普通浏览器页面来实现的 - 并且当芯片无法读取时,会自动回退到普通的照片核验。 每次成功读取收费 $0.15,不在免费额度范围内。
#NFC 实际能证明什么
普通的证件核验读取的是印刷表面。 NFC 读取的是芯片,而芯片由签发该证件的政府签名。 这意味着 NFC 能证明两件照片无法证明的事情:
- 数据确实来自签发机构,因为签名可以一路追溯到该国家的证书颁发机构。
- 证件没有被篡改,因为篡改会破坏签名 - 包括肉眼无法察觉的篡改。
这是 Didit 提供的可信度最高的证件检查方式。 它还会返回印刷表面上没有的数据,包括芯片自带的证件照。
经过为期一年的受监督测试,西班牙的国库总局(Tesoro Público)、西班牙银行 (Banco de España)、SEPBLAC 和 CNMV 得出结论:Didit 的 NFC + 活体检测核验方案 至少和线下当面核验证件一样安全,符合反洗钱规定。 参见认证与合规。
#NFC 在哪里可用,哪里不可用
NFC 需要手机的 NFC 无线电模块,这意味着它需要一个能够调用该模块的应用环境:
| 接入方式 | NFC 是否可用? |
|---|---|
| 原生移动端 SDK(iOS、Android、React Native、Flutter) | 可用 |
| 手机上的浏览器页面 | 不可用 - 普通网页无法读取芯片 |
| 桌面端 | 不可用 |
如果你想在流程中使用 NFC,就需要让核验运行在嵌入了某个原生 SDK 的应用内部。 不存在一个供托管式网页会话把用户转交过去、完成芯片读取步骤的 Didit 消费者应用。
#回退机制是自动的
当 NFC 不可用时 - 证件没有芯片、手机没有 NFC 硬件、无线电模块被关闭,或者用户无法把手机稳定地贴住证件 - 流程会自动回退到标准的基于照片的证件检查加人脸比对。 会话仍会正常完成;只是 NFC 结果数组会以空数组的形式返回。
正是这个回退机制,让大范围启用 NFC 变得安全可行。 但如果你的政策是"要么读芯片,要么不通过",你就必须覆盖这个默认行为: 把 NFC 步骤配置为在芯片未通过验证时拒绝,并从工作流中移除照片拍摄路径。 否则,跳过 NFC 的用户仍然可以通过照片路径通过核验。
#如何解读结果
每次 NFC 尝试都有自己的状态和警告。以下几项需要特别关注:
| 警告 | 含义 | 应对方式 |
|---|---|---|
NFC_NOT_READ | 芯片从未被读取到 - 通常是因为手机移动了 | 让用户重试;这不是欺诈信号 |
NFC_BAC_FAILED | 用从印刷数据推导出的密钥无法打开芯片 | 通常是 MRZ 的 OCR 读取有误;请重试 |
NFC_DATA_DOES_NOT_MATCH_OCR | 芯片数据与印刷数据不一致 | 应视为证件被篡改。请勿批准 |
NFC_PASSIVE_AUTHENTICATION_FAILED | 芯片签名未能链接到受信任的签发机构 | 停止流程 |
NFC_CHIP_CLONED | 检测到芯片克隆信号 | 停止流程 |
NFC_DOCUMENT_REVOKED | 证件已被签发机构吊销 | 停止流程 |
需要牢记的区分:NFC_NOT_READ 和 NFC_BAC_FAILED 属于可用性失败,应当给予重试。
其余属于完整性失败,应当拒绝。
面向开发者:结果字段是复数形式的数组 nfc_verifications[]。部分早期集成会查找单数形式的
nfc_verification 键,但这个键并不存在。
#帮助用户真正读取到芯片
芯片并不位于证件的正中央,手机的天线也不位于手机的正中央。给用户的两条最有用的指示是:
- 把证件平放在桌面上,把手机搭在证件上,而不是双手同时拿着它们。
- 让手机绕着证件缓慢移动,直到连接成功 - 在大多数手机上,天线靠近机身背面的顶部边缘。
手机壳和厚钱包夹在手机和证件之间,同样会阻碍读取。
#费用
NFC 每次成功核验收费 $0.15,不包含在免费额度中。 它与身份证件核验分开计费,因此一个既读取了芯片、又运行了标准证件检查的会话会被同时计入两项费用。 参见哪些属于计费核验。
#哪些证件带有芯片
近十年签发的大多数护照,以及数量不断增长的一部分国民身份证和居留许可证。 其覆盖范围比 OCR 覆盖范围要窄,这正是因为它取决于实体证件本身是否带有芯片。 最新列表见文档站点:NFC 支持的证件。