【问题标题】:How to verify the PIN of a smart card with Python?如何使用 Python 验证智能卡的 PIN?
【发布时间】:2017-03-24 07:56:24
【问题描述】:

我需要您的帮助来验证智能卡的 PIN。我正在使用Pythonpyscard。 我知道我必须使用APDU 命令并且我必须使用ScardTransmit() 发送它,但我找不到要使用的 APDU。例如:

SCardTransmit(hcard,dwActiveProtocol, 
              [0x00, 0x20, 0x00, 0x01, 0x06, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x00])

(因此使用 PIN=123456)将仅返回一个 6A 88 - 未找到参考数据

我想知道:有没有办法获得有关commands 的一些提示,以便与特定智能卡一起使用查看其ATR?即:INS字段中的命令“20”(APDU由CLA,INS P1,P2,DATA组成)是ISO定义来验证PIN的,但是如果我做错了什么怎么理解呢?

谢谢。

P.S.:顺便说一下,P2="00" 我得到 6A 83,找不到记录。

【问题讨论】:

    标签: python smartcard apdu pyscard


    【解决方案1】:

    这可能会有所帮助...对于 GSM 卡,我们始终使用 8 个字节的数据长度,即 VERIFY_CHV = [0xA0, 0x20, 0x00, 0x01, 0x08]

    后面的 PIN 数据根据实际的 pin 长度用 0xFF 填充。 即如果 pin = 123456 那么 LJUST_PIN_HEX = [0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xFF, 0xFF ]

    APDU 将是 VERIFY_CHV + LJUST_PIN_HEX

    【讨论】:

      【解决方案2】:

      如果您的智能卡应用程序(您事先选择的 DF)有一个 ID 为 1 的 PIN(您在 P2 中提供),那么您的 APDU 将是正确的。您可以设置最高有效位来告诉命令在 MF 中搜索 PIN 1。

      【讨论】:

      • 等等:有没有办法了解将哪个命令发送到智能卡?也许阅读ATR?我将不得不处理许多不同类型的智能卡,我想开发一个“通用”工具,能够做两个“简单”的事情:读取 PAN(卡的序列号)并验证密码。
      • 拜托#ALe,有没有一个文档可以让我找到一些关于什么是 DF、如何选择它以及什么是 MF 的信息?我真的是智能卡的新手......我试图用 for 循环猜测正确的代码,但它没有用。我所需要的只是在 python 中构建一个类似于通用应用程序的东西,以验证 pin 并获取 PAN,如果您能告诉我在哪里学习以及学习什么,我将非常感激......
      • @Bya:不,ATR 绝不是足够的(但可能会给出微弱的提示);起点是 ISO 7816,第 4 部分以及 [智能卡] 中的大多数初学者问题。
      • 感谢@guidot,我查看了ISO7816-4,但实际上除了 CLA 84 之外,所有命令都不起作用 -> 获取随机数......在我的情况下非常没用。跨度>
      【解决方案3】:

      存在哪些 PIN(也可能根本不存在),并且如果卡片具有文件系统(它们所在的 DF),则由卡片的个性化定义。如果没有进一步的细节,答案必须非常笼统,例如尝试不同的 P2 值(最高 0x1F)。

      另一方面,一旦验证了 PIN 码,如果没有有关卡个性化的详细信息,您就不太可能取得进一步的进展,因此可能现在就开始了解。

      【讨论】:

      • 谢谢。我使用for l in range(255): hresult, response = SCardTransmit(hcard, dwActiveProtocol, [0x00, 0x20, 0x00, int(hex(l), 16), 0x06, 0x31, 0x37, 0x30, 0x32, 0x37, 0x35, 0x02]) 尝试了所有可能的 P2 值,但没有一个起作用。我知道这张卡有一个 PIN,因为我可以通过我的 java 小程序访问它。
      • 您将 l 转换为十六进制,然后再转换回整数?您的卡可能使用不为零的 CLA 字节。
      • int(hex(l), 16) 将转换为 int 类的对象,但以 16 为基数。谢谢@guidot,感谢您告诉我的内容,我现在可以理解没有意思(除了用户手册,针对每张卡...)了解如何与智能卡进行通信...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多