Python 从ePassport读取EF.COM时无法使用RAPD U 6988读取二进制文件(不正确的安全消息数据对象)

Python 从ePassport读取EF.COM时无法使用RAPD U 6988读取二进制文件(不正确的安全消息数据对象),python,nfc,smartcard,apdu,Python,Nfc,Smartcard,Apdu,首先,我知道这可能看起来像是: …但我在这个过程中又前进了一步 我正在尝试使用python和PN7120 nfc阅读器读取MRTD(ePassport)。我用它作为基础 我知道读卡器没问题,因为我可以使用安卓设置用同一台设备阅读护照 我遵循并模拟了“工作示例”(附录D,同一文件) 问题 当使用真正的passport时,“选择小程序”、“获取挑战”、“执行bac”和“选择文件”步骤工作正常,但读取二进制结果为69 88(不正确的安全消息数据对象) 当我通过注入ksmac/ssc模拟“工作示例”时,

首先,我知道这可能看起来像是:

…但我在这个过程中又前进了一步

我正在尝试使用python和PN7120 nfc阅读器读取MRTD(ePassport)。我用它作为基础

我知道读卡器没问题,因为我可以使用安卓设置用同一台设备阅读护照

我遵循并模拟了“工作示例”(附录D,同一文件)

问题

当使用真正的passport时,“选择小程序”、“获取挑战”、“执行bac”和“选择文件”步骤工作正常,但读取二进制结果为69 88(不正确的安全消息数据对象)

当我通过注入ksmac/ssc模拟“工作示例”时,我得到了与第75页(AppD-7)g点所述完全相同的ProtectedAPDU结果

此外,“选择文件”步骤几乎使用了与成功(RADPU 90 00)完全相同的过程(请参阅)

我至少两次将每件事都与极端细节进行了比较,真的看不出下一步该往哪里看。我希望有人能提供一些建议或见解

相关日志(末尾出错)

谢谢

找到了答案:


由于二进制/十六进制/字符串转换错误(),选择文件响应的SM验证步骤被跳过,因此SSC没有正确增加。

我得到了两个受保护APDU的完全相同的结果。但是,您不应该在零位启动SSC吗(如果这是BAC之后的安全消息传递)?不必担心SSC零位。BAC以基于交换的随机数的值启动SSC。
Calculate Session Keys (KSenc and KSmac) using Appendix 5.1
        KSenc: 3DE649F8AEA41C04FB6D4CD9043757AD
        KSmac: 8C34AD61974F68CEBA3E0EAEA1456476
Calculate Send Sequence Counter
        SSC: AB1D2F337FD997D6

Reading Common
Select File
    APDU 00 A4 02 0C 02 [011E]
Mask class byte and pad command header
        CmdHeader: 0CA4020C80000000
Pad data
        Data: 011E800000000000
Encrypt data with KSenc 3DE649F8AEA41C04FB6D4CD9043757AD
        EncryptedData: FF0E241E2F94B508
Build DO'87
        DO87: 870901FF0E241E2F94B508
Concatenate CmdHeader and DO87
        M: 0CA4020C80000000870901FF0E241E2F94B508
Compute MAC of M
        Increment SSC with 1
                SSC: AB1D2F337FD997D7
        Concatenate SSC and M and add padding
                N: AB1D2F337FD997D70CA4020C80000000870901FF0E241E2F94B5088000000000
        Compute MAC over N with KSmac 8C34AD61974F68CEBA3E0EAEA1456476
                CC: 22FF803EC3104336
Build DO'8E
        DO8E: 8E0822FF803EC3104336
Construct and send protected APDU
        ProtectedAPDU: 0CA4020C15870901FF0E241E2F94B5088E0822FF803EC310433600
[SM] - 0C A4 02 0C 15 [870901FF0E241E2F94B5088E0822FF803EC3104336] 00
[SM] - [990290008E08AAEA3B783FD6CA9D] 90 00
Receive response APDU of MRTD's chip
        RAPDU: 990290008E08AAEA3B783FD6CA9DC29000

Read Binary
    APDU 00 B0 00 00  [] 04
Mask class byte and pad command header
        CmdHeader: 0CB0000080000000
Build DO'97
        DO97: 970104
Concatenate CmdHeader and DO97
        M: 0CB0000080000000970104
Compute MAC of M
        Increment SSC with 1
                SSC: AB1D2F337FD997D8
        Concatenate SSC and M and add padding
                N: AB1D2F337FD997D80CB00000800000009701048000000000
        Compute MAC over N with KSmac 8C34AD61974F68CEBA3E0EAEA1456476
                CC: 68DD9FD88472834A
Build DO'8E
        DO8E: 8E0868DD9FD88472834A
Construct and send protected APDU
        ProtectedAPDU: 0CB000000D9701048E0868DD9FD88472834A00
[SM] - 0C B0 00 00 0D [9701048E0868DD9FD88472834A] 00
[SM] - [] 69 88 //SM data objects incorrect