据我们所知,Java Cards不支持多线程。问题是,他们如何拥有多个逻辑通道但不支持多线程?为什么他们需要不止一个逻辑通道?
在我的情况下,我有一张支持三个逻辑通道的Java卡。我在卡片上安装了Applet-A
和Applet-B
。然后我通过逻辑通道1为Applet-A发送了一个 SELECT 命令,然后我就通过通道-2向Applet-B发送了另一个 SELECT 命令。
此时,我可以连续发送和APDU到Applet-A和Applet-B,而不需要任何其他Select命令。这不是多线程吗?我的意思是JCRE必须选择Applet-A和Applet-B,对吗?
答案 0 :(得分:2)
不,它不是多线程的。使用多线程时,需要多个处理器线程同时运行 。这意味着您还需要多个堆栈。
另一方面,对于逻辑信道,仅需要applet状态知道多个逻辑信道。在Java Card中,您确实支持逻辑通道,但仍需要设计和保留状态机。如何定义逻辑信道之间的状态 - 例如认证状态 - 在ISO / IEC 7816-4中没有规定,其中定义了逻辑信道。运行时唯一需要做的就是记住逻辑通道的选择状态,就像你已经思考过一样。
经典的Java Card API显然不是为多线程而设计的,对于大多数智能卡而言,真正的多线程将是一个非常高的负担,特别是在RAM使用方面。此外,ISO / IEC 7816-4的半双工APDU接口将严重限制多线程的有用性。目前,除了顺序交错APDU命令/响应对之外,您不能多。
请注意,现在有双核智能卡处理器。但不要被外表愚弄;这些核心基本上运行相同的线程。它们主要用于为平台增加安全性:如果发现一个处理器状态与另一个不同,则触发故障检测,平台可以启动防御措施。