android - 与机读旅行证件交互时,选择的 Android 设备的不同响应

标签 android protocols nfc apdu contactless-smartcard

我目前正在开发一个 Android 应用程序,用于读取电子护照和其他支持 NFC 的文档。

我已经在多个 Android 设备上测试了代码,但发现其中 1 个无法成功读取文档。

以电子护照为例,它正确传达了Select Application调用并返回状态码90 00。 我也收到有效的 BAC 质询,但当我调用 EXTERNAL AUTHENTICATE 时,它返回状态代码 69 86(不允许命令(无当前 EF))。我所有其他测试电话都返回状态代码 90 00。

我的问题是为什么单一型号的手机会给我不同的 APDU 响应。我试图阅读 Android 中的 NFC 硬件,但没有找到关于为什么会发生这种情况的答案。我只能假设这可能是一个协议(protocol)问题?

如果有人能阐明这一点,我将不胜感激。

最佳答案

在不分析实际通信的情况下,只能推测那里发生了什么。然而,有两个潜在的原因:

  1. 您遇到的情况,可能是由 Android 标记存在检查机制引起的。默认情况下,如果您发送命令的速度不够快,Android 会将您的通信与其存在检查机制交织在一起。在某些设备上,此存在性检查使用在基本逻辑 channel 上发送的 APDU。因此,它们由护照上的机读旅行证件申请接收和处理,并可能导致状态变化。参见 Android IsoDep command chaining failure .

  2. 机读旅行证件上的加密操作比其他操作需要更多的功能。如果您的护照需要的电量超过该特定测试设备提供的电量(请记住,NFC 手机设计用于读取低功率 NFC 标签,而不是与能量贪婪的非接触式智能卡交互),与护照的通信可能会丢失,或者在最坏的情况,可能会导致智能卡应用程序发生意外状态更改(尽管智能卡芯片通常设计为在这些情况下强制执行重置)。

关于android - 与机读旅行证件交互时,选择的 Android 设备的不同响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50471620/

相关文章:

android - 使用 Flying Saucer 从 html 创建 pdf,渲染器问题

android - TabHost.newTabSpec 中使用的参数标记的用法是什么

swift - 如何使用类型为 "Cannot invoke ' 的参数列表修复 '(eventStore: EventStoring)' createEvent'

android - FitBit 如何完全接管 NFC?

nfc - 使用 PN532 读取电子护照,继续获取 SW1 SW2 = 0x69 0x88(不正确的安全消息数据对象)

Android NFC 最大接收缓冲区大小

Android 7 JobScheduler 在相机拍摄新照片时获取事件

android - onStop() 触发时我必须保留 Activity 数据吗?

ios - 为动态创建的 UIPickerView 添加协议(protocol)

ios - 试图快速理解协议(protocol)和委托(delegate)