智能卡中的逻辑通道
Posted
技术标签:
【中文标题】智能卡中的逻辑通道【英文标题】:Logical channels in smartcard 【发布时间】:2014-06-29 09:19:38 【问题描述】:下图是 ubuntu 中 pcsc_scan
的输出,正如您在 ATR 分析 中看到的,我的 javacard 支持 3 个逻辑通道。
这是 ISO 7816-4 的一部分,其中提到了 CLA 中的低半字节,表示逻辑通道号:
问题是:为什么当我想通过另一个逻辑通道而不是基本逻辑通道发送 INITIAL-UPDATE APDU 命令时,它会失败?
使用CLA = 80
进行初始更新[基本逻辑通道]
< 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 or 82
进行初始更新[补充逻辑通道]
< 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
,[= 不支持逻辑通道]。为什么?
更新:
"如果一个javacard有两个/三个逻辑通道,那意味着我们可以同时选择两个/三个applet", 这是对的吗? 如果是,拥有多个频道的其他好处是什么?如果不是,这个频道是干什么用的?
【问题讨论】:
【参考方案1】:这取决于如何处理 ISO 7816-4 的解释。 ISO 7816-4 对智能卡的内部状态几乎没有规定。将这个具体问题留给解释显然已经足够模糊了。
现在通常您可以使用 MANAGE CHANNEL (INS = 70h) APDU 拥有多个逻辑通道。您不能通过指定 CLA 字节中的位来简单地切换到另一个通道;通道需要先打开。此外,并没有说身份验证或文件系统状态由新通道接管。
您应该将逻辑通道视为同时运行多个应用程序的选项,其中逻辑通道用于在单个(半双工)通信通道上交错命令。如果您的终端 (PC) 上有不同的服务需要智能卡通信,这将非常有用。
显然逻辑通道有很大的缺点;您需要保持每个逻辑通道的状态。可能,您可能还需要混合状态(即 PIN VERIFY 可用于两个通道)。这对于瞬态内存 (RAM) 的使用来说是一个非常具体的问题。
通常您只会看到带有 2 个逻辑通道的卡。大多数情况下,只会使用其中一个。 99% 的情况下最好只允许对单个服务的独占访问,并让智能卡服务按顺序运行。请注意,现在许多卡的运行速度为 30 MHz 或更高,但总共只有 8 KiB 的 RAM。
您可以尝试使用 MANAGE CHANNEL,但可能是您的 ATR 在欺骗您,并且并非所有应用程序都支持逻辑通道(例如 Global Platform Card Manager)。另请注意,全球平台使用专有的 APDU 命令/响应(CLA 中设置的最高位 = 80h),因此正式而言,您只有全球平台规范可供参考。
【讨论】:
谢谢你亲爱的owlstead。我通过 Opensc-tool 发送80 70 00 00 01
APDU 以打开逻辑通道,但我收到6E00
响应 [Class not supporter]
在ISO-7816中提到,在上面的APDU [MANAGE CHANNEL]中,P1=00
是为了opening一个逻辑通道,P1=80
用于 关闭 一个逻辑通道 [with CLA=70
] 。并且作为一个新问题:在这种情况下,我的卡支持三个逻辑通道,哪个将使用MANAGE CHANNEL
命令打开/关闭?我的意思是,我没有在命令中输入要打开/关闭的通道数。那么哪一个...?
您的 CLA 不应为 80
。 MANAGE CHANNEL 在 ISO 7816-4 中定义,因此 CLA 的最高位应为0
。请改用00 70 00 01
。以上是关于智能卡中的逻辑通道的主要内容,如果未能解决你的问题,请参考以下文章
Hyperledger Fabric教程--部署Fabric智能合约