智能卡中的逻辑通道

Posted

技术标签:

【中文标题】智能卡中的逻辑通道【英文标题】:Logical channels in smartcard 【发布时间】:2014-06-29 09:19:38 【问题描述】:

下图是 ubuntupcsc_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智能合约

通用标准(FTP 类)的智能卡和安全通道要求

云边端协同AI智能分析网关通道管理及人脸检测效果演示

[人工智能-深度学习-27]:卷积神经网络CNN - 核心概念(卷积滑动填充参数共享通道)

智能卡概论

12. Fabric2.2 区块链农产品溯源系统 - 智能合约开发-2