如何将 pcsc 命令发送到 SAM 而不是在读卡器上卡



我有带SAM插槽(安全访问模块)的acr1281读卡器。我可以使用python库智能卡通过PC/sc与卡进行通信。但是我想将命令发送到插入到读取器的SAM。

如何为此"切换命令通道",甚至可能吗?智能卡库可以将控制命令发送到读取器(PC_to_RDR_Escape),但在acr1281文档中仅指定了GetFirmvareVersion命令。

我什至可以看到是否插入了SAM - 我调用SCardStatus()并在插入SAM的情况下获取0x34代码(据我所知,这是SCARD_POWERED=0x10 | SCARD_NEGOTIABLE=0x20 | SCARD_PRESENT=0x04),如果没有SAM,它是0x0c = SCARD_SWALLOWED=0x08 | SCARD_PRESENT=0x04

但是我发送的所有命令都转到MIFARE PICC放在阅读器上。我想将命令发送到插入阅读器的 SAM。

在安装了 pscss 驱动程序的 Ubuntu Linux 中,我在smartcard库中有 3 个阅读器:

from smartcard.System import readers
print(readers())
  • ACS ACR1281 1S 双读卡器 00 00
  • ACS ACR1281 1S 双读卡器 00 01
  • ACS ACR1281 1S 双读卡器 00 02

阅读器00 00对我来说是不活跃的,我认为它是针对联系人卡片的,读者00 01是针对PICC的(在我的情况下是MIFARE),读取器00 02用于 ACR 中的 SAM 插槽,

所以我用读卡器01发送卡APDU,读卡器02向SAM发送命令,成功解决了我的任务。

不知道如何自动找到它们,但我认为这个00 00等等是名称中的常量,我可以通过名称中的最后一个符号为 PICC 和 SAM 选择读者。

我连接到PICC读卡器只是通过smartcard.CardRequest.CardRequest() - 等待附近的卡。所以我必须只找到SAM阅读器并连接到它:

sam_connection = readers()[2].createConnection()
sam_connection.connect(mode=SCARD_SHARE_SHARED,
                        disposition=SCARD_LEAVE_CARD,
                        protocol=SCARD_PROTOCOL_ANY)

相关内容

  • 没有找到相关文章

最新更新