尝试使用 ICAO 9303 BAC 从 National eID (T=0) 读取数据

Trying to read data from National eID (T=0) using ICAO 9303 BAC

一直在尝试使用 ACS ACR1281 1S 双 Reader ICC 从我的国家 eID 中读取数据。它需要基本访问控制 (BAC) 身份验证。我能够正确地进行身份验证,但是当我尝试 Select EF.COM (01 1E) 使用符合 ICAO Doc 9303 第 11 部分规范的安全消息

时出现错误

下面是我发送的 APDU 命令

Select EF.COM

// Send APDU
00 A4 02 0C 02 01 1E 00 
// APDU Response
90 00

a) Mask class byte and pad command header:
 CmdHeader = ‘0CA4020C80000000’
b) Pad data:
 Data = ‘011E800000000000’
c) Encrypt data with KSEnc:
 EncryptedData = ‘6375432908C044F6’
d) Build DO‘87’:
 DO87 = ‘8709016375432908C044F6’
e) Concatenate CmdHeader and DO‘87’:
 M = ‘0CA4020C800000008709016375432908C044F6’
 App D-6 Machine Readable Travel Documents
f) Compute MAC of M:
    i) Increment SSC with 1:
    SSC = ‘887022120C06C227’
    ii) Concatenate SSC and M and add padding:
    N = ‘887022120C06C2270CA4020C800000008709016375432908C044F68000000000’
    iii) Compute MAC over N with KSMAC:
    CC = ‘BF8B92D635FF24F8’
g) Build DO‘8E’:
 DO8E = ‘8E08BF8B92D635FF24F8’
h) Construct and send protected APDU:
 ProtectedAPDU = ‘0CA4020C158709016375432908C044F68E08BF8B92D635FF24F800’

// Send APDU
00 A4 02 0C 15 87 09 01 7C 76 3C 70 98 06 45 BD 8E 08 20 42 68 2C D0 BE 14 A0 00
// APDU Response
6A 87

KsEnc 和KsMac 是在外部验证0x82 后计算的会话密钥。但我一直收到 6A 87 - Lc 与 P1-P2 不一致的反馈。我正在使用 PCSC 5.0.0 库与卡 (ICC) 通信。我不确定我在哪里遗漏了它,请帮助。

Henry,从你对@guidot 的最新评论看来你发送了两次 SELECT EF.COM?首先没有安全消息,这将破坏您使用 BAC 建立的可信通道,然后是安全 APDU,然后它会尝试使用不再存在的会话密钥/可信通道。