smartcard - 智能卡中的逻辑 channel

标签 smartcard javacard apdu globalplatform

下图是ubuntupcsc_scan的输出,正如您在ATR分析中看到的,我的javacard支持3个逻辑 channel 。

enter image description here

这是ISO 7816-4的一部分,提到了CLA中的低半字节,指示逻辑 channel 号:

enter image description here

问题是:为什么当我想通过基本逻辑 channel 之外的另一个逻辑 channel 发送 INITIAL-UPDATE APDU 命令时,它会失败?

使用CLA = 80进行初始更新[基本逻辑 channel ]

< 80 50 00 00 08 00
< 00 00 00 00 00 00 00 00
> 611C

< 00 C0 00 00 00 1C 
> 00 11 60 01 03 8A 79 0A F9 FF 02 00 35 F3 92 EC 2B 6F F5 10 2E BD 74 41 2F 25 B4
> 90 00

使用CLA = 81或82进行初始更新[补充逻辑 channel ]

< 81 50 00 00 08 00
< 00 00 00 00 00 00 00 00
> 6881

< 82 50 00 00 08 00
< 00 00 00 00 00 00 00 00
> 6881

如您所见,我收到了 SW = 6881,[= 不支持逻辑 channel ]。为什么?


更新:

“如果javacard有两个/三个逻辑 channel ,这意味着我们可以同时选择两个/三个小程序”, 这是正确的吗? 如果是,拥有多个 channel 还有哪些其他好处?如果不是,这个 channel 是做什么用的?

最佳答案

这取决于 ISO 7816-4 的解释如何处理。 ISO 7816-4 对智能卡内部状态的规定很少。它确实非常模糊,无法对这个具体问题进行解释。

现在,通常您可以通过使用 MANAGE CHANNEL (INS = 70h) APDU 拥有多个逻辑 channel 。您不能通过指定 CLA 字节中的位来简单地切换到另一个 channel ; channel 需要先打开。此外,并没有说身份验证或文件系统状态将由新 channel 接管。

您应该将逻辑 channel 视为同时运行多个应用程序的选项,其中逻辑 channel 用于在单个(半双工)通信 channel 上交错命令。如果您的终端 (PC) 上有需要智能卡通信的不同服务,这非常有用。

显然逻辑 channel 有很大的缺点;您需要保留每个逻辑 channel 的状态。您可能还需要混合状态(即 PIN 验证可能用于两个 channel )。这是一个与 transient 内存 (RAM) 使用有关的非常具体的问题。

通常您只会看到具有 2 个逻辑 channel 的卡。大多数时候,只会使用其中之一。 99% 的情况下,最好只允许对单个服务进行独占访问,并让智能卡服务按顺序运行。请注意,许多卡现在运行频率为 30 MHz 或以上,但总共仍然只有 8 KiB。

您可以尝试使用MANAGE CHANNEL,但是您的ATR 可能对您撒谎,并且并非所有应用程序都支持逻辑 channel (例如Global Platform Card Manager)。另请注意,Global Platform 使用专有的 APDU 命令/响应(CLA 中设置的最高位 = 80h),因此正式而言,您只能引用 Global Platform 规范。

关于smartcard - 智能卡中的逻辑 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474723/

相关文章:

smartcard - 智能卡 : Get certificates content with APDU commands

linux - Centos Apache - 在进行身份验证之前检测是否插入了智能卡

applet - `Signature.init()` 是否重写持久内存?

安卓 NFC : Tag lost when APDU command sent to a smart card

java - 如果命令数据超过3个字节,如何获取?

usb - 通过 CCID 的 ISO/IEC 7816 命令

python - 如何在 python 中创建 sha1 哈希

c - 是否可以使用 Java 以外的任何其他语言对启用 "Java Card"的智能卡进行编程?

javacard - 如何开始使用Javacard?

java - 如何使用java在智能卡上安装applet