引脚验证命令 returns 90 00

Pin verify command returns 90 00

我想验证智能卡上的 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

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

  • 63 Cx 仅 returned,如果在没有数据的情况下发送 VERIFY 并且 尚未授予访问权限。

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

一个正确的验证(即用验证数据验证)显然必须 return 90 00 来表示验证成功。 98 04 是 GSM 特定的 ("proprietary") return 代码,您不会在 ISO 7816 中找到解释。

您的智能卡似乎是 GSM SIM 卡。 class字节明明有MSB设置,所以不遵循ISO 7816。这种情况下,你应该参考3GPP TS 11.11(可以从this link下载)。

Verify 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)成功 SELECT 的响应中找到,或者通过发送 STATUS 命令(INS 'F2')。字节 19 的低半字节包含 CHV1/PIN1 的剩余尝试、PUK1 的字节 20、PIN2 的字节 21 和 PUK2 的字节 22。更多详细信息,请参阅第 9.2.1 节。


补充说明:

  1. 如果卡是 USIM,VERIFY 命令遵循 ISO 7816。您可以使用 CLA '00' 并在这张卡中找到 63CX 状态字。
  2. PIN1 启用或禁用可以从 SELECT 目录字节 14 检查。 b8=0:CHV1 启用; b8=1: CHV1 禁用。