【问题标题】:Running certain APDUs fails, stating Failed to transmit with protocol T0. Falscher Parameter运行某些 APDU 失败,说明使用协议 T0 传输失败。 Falscher 参数
【发布时间】:2021-12-09 21:00:32
【问题描述】:

我在使用 ACS ACR38U-I1、Python 3.7 和 pyscard 在 Windows 10 下访问 SLE4428 卡时遇到问题。我正在使用制造商目前为 Windows 提供的最新驱动程序。

主要问题是运行某些 APDU 失败,说明 Failed to transmit with protocol T0. Falscher Parameter(= 错误参数,错误代码 87)。然而,在 Raspberry Pi 上使用相同的阅读器运行完全相同的代码可以完美运行。我没有在 Pi 上安装任何特定的驱动程序。

我正在使用此代码运行 APDU:

    from smartcard.CardType import AnyCardType
    from smartcard.CardConnection import CardConnection
    from smartcard.CardRequest import CardRequest
    
    cardtype = AnyCardType()
    cardrequest = CardRequest(timeout=1, cardType=cardtype)
    cardservice = cardrequest.waitforcard()
    cardservice.connection.connect(CardConnection.T0_protocol)
    apdu = [0xff, 0xb0, 0x00, 0x00, 0xff] #READ_MEMORY_CARD
    response, sw1, sw2 = cardservice.connection.transmit(apdu, CardConnection.T0_protocol)
    print('response: ', response, ' status words: ', "%x %x" % (sw1, sw2))

此代码在两个平台上都可以正常工作。尝试使用身份验证 [0xff, 0x20, 0x00, 0x01, 0x03, 0xff, 0xff] 但是会导致 在 Windows 上描述的崩溃。我已经尝试了常用的 Windows 驱动程序以及使用不同的协议,但没有成功。

另一个 Windows 独有的奇怪行为:插入卡时,读卡器的 LED 快速闪烁,大约需要 9 秒才能访问卡。

这是我第一次尝试与硬件接口,所以这可能是显而易见的,但我无法弄清楚。对于已知可在此配置中工作的(仍然可用的)阅读器,我将不胜感激。

【问题讨论】:

  • WRT 到闪烁:您可能需要禁用以禁用 Windows 中的证书传播服务,看看是否有帮助。关于认证 APDU:第 5 个字节的值为 0x03,这意味着 Nc 的值为 3,但您仅在命令数据中提供 2 个字节(0xFF 和 0xFF)。
  • 禁用证书传播服务对阅读器无响应的情况有所帮助:新插入阅读器并禁用服务后,前 3-4 张卡仍会导致 LED 闪烁并且访问速度很慢。不过,在前几个之后,卡可以立即访问,并且读卡器 LED 保持亮起。

标签: driver smartcard apdu smartcard-reader pyscard


【解决方案1】:

根据 ISO 7816-4,APDU CLA 值“FF”是不允许的。 PC/SC 读卡器制造商有时支持 CLA=FF 的 APDU 命令,以实现一些特定功能,例如访问 MIFARE 卡或调整通信协议设置。

【讨论】:

  • 问题中提到的 SLE4428is 是一张存储卡...鉴于这个问题,我想知道作者是否还不知道这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多