更改 JavaCard 的 ATR

问题描述 投票:0回答:2

我正在研究 Javacard 和智能卡的用途 不同的 ATR。我想通过 python 将这些卡的 ATR 更改为 与这些卡上默认的 OEM ATR 不同。我 找到了一种改变卡的 ATR 的方法,但是,它正在利用 在线脚本 - 这真的没有帮助。

下面是我发现使用 PyResMan 更改 ATR 的脚本 脚本模式,但是,它只设置为一个atr,这是一个银行,我 没有用处。

我在网上找到的脚本:{ (开头数字显示行号)

  1. 00A4040010************************************

  2. 00F00000

  3. C0D6029A02F807

  4. C0D601240108

  5. C0D601470108

  6. C0D601260403600000

  7. C0D601490403600000

  8. C0D6012201FE

  9. C0D601360E0D80318065B0893501F183009000

  10. C0D601590E0D80318065B0893501F183009000

  11. C0D603010101

  12. C0D6030510404142434445464748494A4B4C4D4E4F

  13. C0D6031d0101

  14. C0D6032110404142434445464748494A4B4C4D4E4F

  15. C0D603390101

  16. C0D6033D10404142434445464748494A4B4C4D4E4F

}

这个脚本的问题是我只知道前 2 个是什么 行确实如此,并且第 9 行和第 10 行是实际包含 ATR 变化过程的数据。我需要知道如何改变 ATR 使用正则表达式形式的 ATR。

如果有人知道解码此脚本并能够编辑它的方法, 或者知道更简单的方法来更改未融合或非融合的 ATR 预预定制的 javacard,请告诉我!我一直在研究 这些已经一个多月了,但找不到实际的答案 有效。

python smartcard javacard
2个回答
1
投票

为智能卡设置 ATR 主要不是 Javacard 规范的领域。目前,没有通用规范或方法来为所有智能卡设置 ATR,因为没有通用方法来初始化或个性化智能卡本身,而这主要是特定于供应商的。

您在网上找到的脚本属于NXP Javacard,该信息不是标准化的,据我所知也不适合公众使用,因此删除了一些合理的信息。请联系您的卡供应商以获取有关如何更改 ATR 的信息(这可能不可能或不容易)。


0
投票

我刚刚发现这篇文章,因为不久前我遇到了同样的问题,我设法理解了脚本的作用。

注:

更改卡的 ATR 可能会使其无法被读卡器识别,从而有效地使其变砖。更改 ATR 的历史字节应该是安全的,但在尝试更改其任何其他部分时要小心。

正如 Paul Bastian 指出的那样,这不是标准程序,并且仅适用于特定的 NXP Javacard。我为我的 NXP J2A040 Javacard 使用了类似的脚本。

理解脚本

您的示例中卡的 ATR 为:

3B 6D 00 00 80 31 80 65 B0 89 35 01 F1 83 00 90 00

  1. 将TK密钥发送到卡进行身份验证。
  2. 重置命令。
  3. 应将卡身份设置为T=1(01)。
  4. 与暖 ATR 的 4 相同。
  5. 设置 ATR 的“第一部分”(T0、TA*、TB*、TC*、TD* 字节)。
  6. 与暖 ATR 的 7 相同。
  7. 设置ATR的历史字节。
  8. 与暖 ATR 的 9 相同。
  9. 将ENC键设置为默认值。
  10. 将 MAC 密钥设置为默认值。
  11. 将 DEK 密钥设置为默认值。

我不确定 12 14 16 的顺序。

设置新的 ATR

示例中:

C0D601260403600000

04 是提供的数据的长度,而 03 是 ATR 的十六进制字节长度。 60 是 T0 字节。具体来说,6(二进制为 0110)表示存在 T0 之后的四个字节中的哪一个。在这种情况下,TA1和TD1不存在(0),而TB1和TC1为(1)。 你应该像这样构建你的命令。

C0D60126{ATRLength+1}{ATRLength}{T0}{Rest of the ATR}

历史字节也类似:

C0D60136{ATRLength+1}{ATRLength}{ATR}
© www.soinside.com 2019 - 2024. All rights reserved.