标签: globalplatform

Java Card:applet可以由其他applet安装吗?

在Java Card中,通常可以从卡上现有应用程序的上下文中安装新应用程序,例如通过应用程序定义的消息传递格式发送新代码,然后使用某些卡创建新的应用程序实例经理API?

或者这只能在外部使用相应的APDU吗?

如果这是Java Card和/或GlobalPlatform规范未涵盖的内容,是否可以使用特定于供应商的方法来完成?

javacard globalplatform

5
推荐指数
2
解决办法
395
查看次数

验证Java Card applet代码库的真实性,而无需信任applet本身

我们正在开发一个基于JavaCard的安全敏感应用程序.我们的目标是允许客户端代码与基于GlobaPlatform 2.2+的JavaCard applet进行通信,以使自己确信它实际上正在与需要与之交谈的JavaCard applet的特定(且可验证)版本进行通信.换句话说,我们正在寻找一种"平台完整性"机制,以确保JavaCard applet代码不可能由"内部人员"代替/修改(例如,即使是开发applet的我们).

起初我们希望使用GP规范中描述的安装收据机制,但我们被告知这不适用于该情况.

那么客户端代码是否有办法向卡片查询applet代码库(即安装的.cap文件)的真实性(例如简单哈希),而无需查询和信任JavaCard applet本身?

authentication integrity smartcard javacard globalplatform

5
推荐指数
0
解决办法
226
查看次数

删除数据字段中带有 SSD AID 的 APDU 命令,返回 6985

我有一个包含 SSD(补充安全域)的 Javacard,我想删除它。通常,当我想从我的卡中删除小程序或包时,我会在成功的相互验证过程后发送以下DELETE APDU命令(不需要 MAC 或数据字段加密,对于DELETE APDU命令就足够了):Security Level == 0

--> 80 E4 00 00 LC 4F <AID Len> <AID>
<-- 90 00
Run Code Online (Sandbox Code Playgroud)

上面的命令适用于普通小程序。但是当我将我的SSD的AID放入其中时,该卡以69 85个状态字响应,这意味着“不满足使用条件”。.

由于在我的卡中启用了委托管理功能,并且 ISD 中加载了公共令牌密钥和收据密钥,我认为上述错误可能是由于未在DELETE APDU命令中使用删除令牌。所以我计算了删除令牌如下:

全球平台卡规范 2.2.0.7:图 C-8:删除令牌计算 在此处输入图片说明

DeleteToken = RSA_Sign("00 00 LC 4F <SSD AID Len> <SSD AID>", TokenPrivateKey)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下命令删除 SSD:

--> 80 E4 00 00 <LC+Len(DeleteToken)> 4F <SSD AID Len> <SSD …
Run Code Online (Sandbox Code Playgroud)

javacard globalplatform

5
推荐指数
1
解决办法
158
查看次数

如何检查 INITIALIZE UPDATE 和 EXTERNAL AUTHENTICATE 的正确性?

在此处输入图片说明

我通过 opensc-tool将80 50 00 00 08 00 00 00 00 00 00 00 00[ INITILIZE UPDATE Command] 发送到我的 java 卡,并从卡接收00 00 11 60 01 00 8A 79 0A F9 FF 02 00 11 79 11 36 5D 71 00 A5 A5 EC 63 BB DC 05 CC[ Init Response ] 作为其响应。

正如你看到的:

在命令中,我00 00 00 00 00 00 00 00作为Host Challenge发送,并在响应中:

00 00 11 60 01 00 8A 79 0A F9= …

cryptography apdu smartcard javacard globalplatform

4
推荐指数
1
解决办法
7787
查看次数

NFC SIM 卡有内置天线吗?如何在 SIM 卡上安装小程序?

我搜索了 NFC SIM 卡,并在这里和那里找到了关于它们的解释

对于那些想要使用近场通信技术但目前没有兼容 NFC 的智能手机的人,还有其他方法可以在您的手机上启用 NFC,而无需将其换成昂贵的新型号。SIM 卡和 SD 卡都可以配备 NFC 芯片,一些公司目前提供或准备提供这些选项,以便更多客户可以开始使用 NFC 技术。

我现在的问题是:

  1. NFC SIM 卡是否也有内置天线,或者手机必须为 NFC SIM 本身提供 NFC 天线?
  2. 如果NFC SIM没有内置天线并且手机需要为SIM提供天线,(这意味着手机必须兼容NFC,对吗?)为什么我们需要NFC SIM?难道我们不能简单地用手机的NFC芯片代替SIM卡的NFC芯片。
  3. 换句话说,有没有手机外面有NFC天线,但没有NFC芯片?或者有什么方法可以在旧手机上添加天线以便在其中使用 NFC SIM?

无论如何,假设我想在我的 SIM 卡上安装以下小程序(其源代码):

import sim.toolkit.ToolkitInterface;
import sim.toolkit.ToolkitRegistry;
...
import javacard.framework.ISOException;

public class STKTest extends Applet implements ToolkitInterface {

public static void install(byte[] bArray, short bOffset, byte bLength) {
    // GP-compliant JavaCard applet registration
    new STKTest().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
//this method handles standard APDU …
Run Code Online (Sandbox Code Playgroud)

nfc javacard handset sim-card globalplatform

4
推荐指数
1
解决办法
1477
查看次数

如何减小javacard applet的大小

我写了一个在磁盘上有19 KB大小的applet.它有三个类.第一个是从Applet扩展的,第二个是静态函数,第三个是我在applet中创建实例的类.

我有三个问题:

  1. 有没有办法找出我的javacard中的applet实例占用了多少大小?
  2. 有没有减少javacard applet(.cap文件)大小的工具?
  3. 你能解释一下帮助我减少applet大小的规则吗?

applet smartcard javacard globalplatform

4
推荐指数
1
解决办法
447
查看次数

直接访问applet而无需选择AID

通常,当您启动JavaCard智能卡并希望与applet通信时,必须首先使用其AID选择applet.

卡上电时是否有任何方法可以选择"默认小程序"?

我真正想做的是能够在选择卡后立即发送我的应用程序级APDU,而不需要完成应用程序选择过程.

这可能吗?如果是这样,怎么样?

permissions apdu smartcard javacard globalplatform

4
推荐指数
1
解决办法
124
查看次数

仅允许在 GlobalPlatform 2.2.1 管理的 JavaCard 上安装签名小程序

我想提供一个 JavaCard,以便它只允许安装由某个密钥签名的小程序。我不确定这个签名是否是 cap 文件格式的一部分。我已经可以通过从 GlobalPlatformPro 获取的代码从 Android 设备安装 cap 文件。GlobalPlatformPro README ( https://github.com/martinpaljak/GlobalPlatformPro/blob/master/README.md ) 提到了应用程序签名。但我不确定这是完成我需要做的事情的方法。我什至不确定这是可能的。

  1. 我如何准备一张只允许安装已签名的 cap 文件的卡?
  2. 如何创建这样的 cap 文件?

我已经可以用某个密钥锁定卡,然后安装任何cap文件都需要这个密钥。但这意味着我需要将密钥与 cap 文件一起分发,以便可以安装它。这不是一个选项,因为它会破坏密钥。

javacard globalplatform

4
推荐指数
1
解决办法
106
查看次数

通过非接触式或 NFC 的 ATS(应答选择)与通过接触卡的 ATR(应答重置)之间的区别

非接触式读卡器和接触式读卡器上同一张卡的ATS和应该相同吗?双接口卡上的 JavaCard 应用程序是否会做出不同的响应影响该小程序的执行?ATRATSATR

这里还有另一个问题:接触式卡和非接触式(RF)卡之间的差异似乎表明如果它们使用相同的传输协议,它们可以是相同的。

举一个具体的例子,我有一个 JavaCard J3H145,它pcsc_scan在非接触式读卡器和接触式读卡器上提供不同的 ATR(通过 显示)。这是否意味着阅读器正在自行执行某些操作(Identiv 3700f)?我有几个 javacard 小程序,可以通过接触方式工作,但不能通过非接触方式工作。当我追踪 ADPU 的pcscd所有内容时Attempting PTS to T=1(这是否需要读者翻译T=CL?)。


编辑:额外研究

有一些相关的问题开始讲述这个故事:

  1. 从 ATR 确定卡类型

ATR详细说明了和ATQ-A之间的转换过程ATQ-B,而

  1. 根据接口的不同,智能卡具有不同的历史字节
  2. 如何更改小程序的权限和卡历史字节?

显示历史字节可以从 GP API 更改(因此ATS/ATR是可编辑的),所以我假设有一种方法可以手动修复它们。

我也在 PN532 屏蔽上测试了 J3H145(测试我的特定阅读器翻译),并且我得到了看似被截断ATR: 3B 80 80 01 01 (ISO 14443 Type B without historical bytes)和过度接触的信息(当一切正常时!)ATR: 3B DC 18 …

smartcard javacard contactless-smartcard globalplatform

4
推荐指数
1
解决办法
7335
查看次数

为什么我需要删除小程序的包才能删除我的小程序?

我有一个空的 Javacard,如下所示:

user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
     Privs:    SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
Run Code Online (Sandbox Code Playgroud)

我在上面安装了一个奇怪的小程序:

user@system$ java -jar gp.jar --install applet.cap
CAP loaded
user@system$ 
Run Code Online (Sandbox Code Playgroud)

好了,小程序安装成功了:

user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
     Privs:    SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement

APP: 01020304050601(SELECTABLE)

PKG: 010203040506(LOADED)

user@system$ 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试删除小程序时,我失败了:

user@system$ java -jar gp.jar --delete 01020304050601 --debug --verbose

# Successful Mutual Authentication with Security Level = 01 (CMAC)

A>> 84F28002 0A 4F00<CMAC> 00
A<< E3114F08A0000000030000009F700101C5019E 9000

A>> 84F24002 0A 4F00<CMAC> 00
A<< E3104F07010203040506019F700107C50100 …
Run Code Online (Sandbox Code Playgroud)

javacard globalplatform

4
推荐指数
1
解决办法
352
查看次数