首页 文章

美国Passport MRTD中的B型NFC芯片

提问于
浏览
2

我正在尝试阅读2010年发行的美国护照 . 它有一个使用B型调制的NFC芯片 . 大多数国家使用A型,所以我现在只是第一次尝试B型 .

我使用的是恩智浦PN532 NFC控制器 . 我正在使用inCommunicateThru指令而不是inDataExchange,因为我需要手动控制超时和错误处理,以成功与此型号NFC控制器上的B型芯片通信 . 我必须自己实现ISO-14443-4协议的部分内容,例如PCB,CID和CRC字节,但它似乎有效 . 我可以从标签中选择应用程序并请求挑战nonce .

问题是,即使没有预期的返回数据,也会在SW1 SW2字节之上返回大量额外数据 . 例如,响应选择的MRTD应用程序命令(INS = 0xA4),返回了许多字节:

发送4B类帧(PCB = 0A,CID = 01,CRC = 8A 2E)

  • 0A 01 00 A4 04 0C 07 A0 00 00 02 47 10 01 8A 2E

收到4B型响应帧:

  • 0A 01 62 36 82 01 38 83 02 00 11 85 01 00 84 07 A0 00 00 02 47 10 01 86 0D FF FF FF FF FF FF FF FF FF FF FF FF FF 8B 12 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 90 00

然后我尝试通过发送Type 4B Frame获得挑战nonce:

  • 0A 01 00 84 00 00 00 8E 3E

注意:出于某种原因,我需要将Le设置为00,以免给我错误的长度错误

收到4B型响应帧:

  • 0B 01 90 9C 46 70 EC 02 BF FC 6E E2 A6 40 2D A5 0C 5F 93 02 B6 EB B5 61 1B BA 90 00

前两个字节是PCB和CID,最后一个是SW1 SW2,我理解 .

BOLD 中的字节是我无法解释的 . 有没有人有美国机读旅行证件或其他B类NFC芯片可以帮助我解释这些字节的经验?是否有一个我缺乏的参考可以解释这些额外的字节?

更新2014年11月27日**

好吧不,我并不疯狂,获取挑战命令很奇怪这个护照在那个设置Le到0x08根据ICAO规范产生6700错误,但是Le = 0x00,返回了太多字节 . 使用inDataExchange(不是在CommunicateThru中)来获得挑战(例如,我得到8个字节) . 这样我就不必猜测哪个8字节是挑战 .

太棒了,现在我手持挑战和静态公钥,我可以用扩展超时模式执行相互认证指令并获取响应字节 . INS为0x82,P1,P2 = 0x00,Le,Lc = 0x28

结果是我从PN532(NFC控制器)返回0x00,但没有返回字节!甚至不是SW1或SW2 . 以下是一个例子:

发送类型4B帧:0A 01 00 82 00 00 28 73 3D 4E 2E C1 37 18 99 49 7C 4B 2A E0 79 A8 08 E2 6B 14 53 56 2C A4 66 D5 3E D8 94 56 79 50 2A 0D 6B C6 9A 75 5E B1 CB 28 11 75

收到4B型响应帧:D5 43 00

ITALIC字节是协议字节, BOLD 是实际的APDU

Does anyone know what the idiosyncrasies are in the U.S MRTD Passport issued 2008-2010?

1 回答

  • 1

    在第一个APDU响应中,您可能从芯片返回FCP和FCI数据 . 这很奇怪,因为您明确告诉应用程序您不想要它(通过在您发送的SELECT by NAME APDU中指定P2 = 0C ) .

    你得到的是ASN.1编码,检查链接here . 这些字节的解释在ISO / IEC 7816-4中 . 您可能需要以某种方式获得该标准 .

    至于获取挑战,您指定Le值为 00 . 这转换为值为256的Ne . 由于Ne是最大大小,您基本上要求eMRTD返回它可以的所有内容,最多256个字节 . 你获得的22个字节( 9000 )是民用的,它可以返回完整的256个字节 . 通常您需要8字节的挑战,因此请尝试将Le设置为 08 .

    值得注意的是,这一切都符合ISO / IEC 7816-4标准,因此您的ISO / IEC 14443 B类代码可能还不错 .

相关问题