1

据我们所知,Java Cards 不支持多线程。问题是,他们怎么可以有多个逻辑通道但不支持多线程?为什么他们需要不止一个逻辑通道?

就我而言,我有一个支持三个逻辑通道的 java 卡。我安装Applet-AApplet-B在我的卡上。然后我通过逻辑通道 1 为 Applet-A发送了一个SELECT命令,然后我通过通道 2 为 Applet-B发送了另一个SELECT命令。

此时,我可以连续向 Applet-A 和 Applet-B 发送 APDU,而无需任何其他 Select 命令。这不是多线程吗?我的意思是 JCRE 必须同时选中 Applet-A 和 Applet-B,对吗?

4

1 回答 1

2

不,它不是多线程。对于多线程,需要多个处理器线程同时运行。这意味着您也需要多个堆栈。

另一方面,对于逻辑通道,只需要小程序状态知道多个逻辑通道。在 Java Card 中,您确实支持逻辑通道,但您仍然需要设计和维护状态机。在定义逻辑通道的 ISO/IEC 7816-4 中没有规定如何划分逻辑通道之间的状态(例如认证状态)。运行时唯一需要做的就是记住逻辑通道的选择状态,正如您已经思考过的那样。

经典的 Java Card API 显然不是为多线程设计的,对于大多数智能卡来说,真正的多线程将是一个非常高的负担,尤其是在 RAM 使用方面。此外,ISO/IEC 7816-4 的半双工 APDU 接口将严重限制多线程的实用性。目前,您只能按顺序交错 APDU 命令/响应对


请注意,现在有双核智能卡处理器。但不要被外表所迷惑;这些核心基本上运行相同的线程。它们主要用于为平台增加安全性:如果发现一个处理器状态与另一个不同,则触发故障检测,平台可以启动防御措施。

于 2014-10-26T20:50:16.923 回答