3

我想验证智能卡上的 PIN1 并读取重试计数器。根据 ISO 7816-4 第 54 页(1),在验证命令后,重试计数器存储在 SW2 的 2 LSB(SW1 应为 63),但如果密码正确,我有 SW1 SW2 = 90 00:

>> Reset
<<  3b 19 94 80 67 94 08 01 03 02 01 03
>>  ff 00 ff
<<  ff 00 ff
>>  a0 a4 00 00 02
<<  a4
>>  3f 00
<<  9f 16
>>  a0 f2 00 00 16
<<  f2 00 00 63 f4 3f 00 01 00 00 00 00 00 09 33 03 0a 08 00 83 8a 83 8a 90 00
0: pin enabled...
>>  a0 20 00 01 08
<<  20
>>  31 31 31 31 ff ff ff ff
<<  90 00

如果 PIN1 不正确,则为 98 04:

>>  a0 20 00 01 08
<<  20
>>  31 31 31 32 ff ff ff ff
<<  98 04

我错过了什么?

(1) http://www.embedx.com/pdfs/ISO_STD_7816/info_isoiec7816-4%7Bed2.0%7Den.pdf

4

2 回答 2

7

您的智能卡似乎是 GSM SIM 卡。类字节显然有 MSB 集,因此它不遵循 ISO 7816。在这种情况下,您应该参考 3GPP TS 11.11(可以从此链接下载)。

验证 CHV 命令在第 9.2.9 节、第 8.9 节和第 11.3.1 节中进行了描述。

此命令可能返回的一些状态字是:

  1. '9000': 成功的 CHV 验证
  2. '9804': CHV 验证不成功,至少还剩一次尝试。
  3. '9840': CHV 阻塞
  4. '9808':与 CHV 状态相矛盾(即验证当前禁用的 PIN)
  5. '91XX': CHV 验证也成功,但有主动命令未决。

剩余的尝试次数可以在成功选择目录(MF 或 DF)的响应中找到,或者通过发送 STATUS 命令(INS 'F2')来找到。字节 19 的低半字节包含 CHV1/PIN1 的剩余尝试、PUK1 的字节 20、PIN2 的字节 21 和 PUK2 的字节 22。有关详细信息,请参阅第 9.2.1 节。


补充说明:

  1. 如果卡是 USIM,VERIFY 命令遵循 ISO 7816。您可以使用 CLA'00'并在此卡中查找63CX状态字。
  2. 可以从 SELECT 目录字节 14 检查 PIN1 启用或禁用。 b8=0:启用 CHV1;b8=1:CHV1 禁用。
于 2015-07-02T04:55:02.913 回答
2

虽然我不完全理解您的转储格式,但请注意以下几点:

  • 只有在没有数据的情况下发送 VERIFY并且尚未授予访问权限时,才会返回 63 Cx 。

  • 每个卡操作系统都可以自由地实现这个重试计数器响应。

一个正确的验证(即用验证数据进行验证)显然必须返回 90 00 以表明验证成功。98 04 是 GSM 特定(“专有”)返回码,您不会在 ISO 7816 中找到解释。

于 2015-06-30T14:49:40.950 回答