问题标签 [globalplatform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
409 浏览

nfc - 由于 RSA 密钥对生成,安装 java 卡小程序失败

我正在尝试将小程序安装到 J3A040 JCOP 卡中。

作为安装方法,我有以下内容:

安装总是失败并出现以下错误:

但是,如果我删除密钥对生成,一切正常。我已阅读卡规格,它代表:

. RSA 和 RSA CRT(1280 到 2048 位密钥)用于加密/解密以及签名生成和验证1 d。在安全环境中生成 RSA CRT 密钥(1280 到 2048 位密钥)

我想应该问题不大。

有什么猜测吗?

0 投票
4 回答
3132 浏览

javacard - Java Card 小程序、安全数据传输和安全通道

我想编写我的小程序,使其 APDU 命令和状态字在我的卡和读卡器之间的传输通道中不清晰。我的意思是我不想将 APDU 命令和响应发送为第三方的纯文本。

我想我有两个选择:

  1. 在卡上选择我的小程序后,对于所有其他命令,对 APDU 命令的数据部分执行加密功能并在卡上对其进行解密,然后对其进行分析。请注意,我无法使用此方法对整个命令进行加密,因为结果可能与另一个 APDU 命令冲突,并且卡的 SD 将其错误地SELECT识别为命令。SELECT那正确吗?

其示意图:

在此处输入图像描述

  1. 使用 SD 安全通道:据我所知,安全通道意味着:整个APDU 命令响应以加密形式传输(即它们在源(安全域/读卡器)中加密并在目标(安全域/卡)中解密读者). 对吗?据我所知,SD 在这个机制中扮演着密码学方法的角色,我的小程序和 SD 之间的通信很简单(下图),对吧?

其示意图: 在此处输入图像描述

还有其他方法吗?

似乎第一个解决方案还不够好,因为:

  1. 我必须自己实现!:)
  2. 我们无法对第三方隐藏命令和响应的所有部分。(我们只能隐藏数据)

我对吗?

现在,假设我想确保我的小程序仅适用于使用安全通道传输的 APDU 命令。我想我又有两个选择:

  1. 将卡片置于SECURED状态。由于在这种状态下用户无法使用纯文本 APDU 命令与卡进行通信(对吗?),因此他必须使用安全通道将命令发送到我的小程序。正确的?如果不正确,有什么方法可以强制 SD 仅使用安全通道?

  2. 将卡保持在任何生命周期中(例如 OP_READY),但是,在接收到任何 APDU 命令时,检查CLA部分以查看它是否是安全传输的!(有可能吗?CLA来自安全通道的部分 APDU 命令和其他命令之间有什么区别吗?我说的对吗?)

还有其他方法吗?

最后是主要问题:

如何使用 SD 与我的小程序进行安全通信?由于我认为我必须使用 GlobalPlatform 类(我是吗?),所以我查看了它的 API-s。我getSecureChannel在一个名为org.globalplatform.GPSystem. 我的方式正确吗?我必须使用这种方法吗?

我知道这可能太长无法回答,但我相信它不仅为我澄清了很多问题,也为其他未来的观众澄清了很多问题。

我感谢任何机构为我阐明这个问题。

并且一个示例小程序更可观。

0 投票
2 回答
1496 浏览

javacard - 如何更改小程序的权限和卡的历史字节?

我已经认为更改历史字节仅限于预个性化步骤。但是,我今天在 GlobalPlatform API 中发现了一个名为setATRHistBytes的方法。

这是它的描述(GlobalPlatform 2.2 Page 172):

设置ATRHistBytes

public static boolean setATRHistBytes(byte[] baBuffer, short sOffset, bytebLength)

对于符合 ISO/IEC 7816-4 的接触式卡和符合 ISO/IEC 14443-3 的 A 类非接触式卡,此方法设置历史字节。字节序列将在随后的上电或复位时可见。

笔记:

• OPEN 在 GlobalPlatform Registry 中定位当前小程序上下文的条目,并验证应用程序是否具有当前卡 I/O 接口的卡重置权限;

• OPEN 负责同步ATR 格式字符T0 中的历史字节长度。

参数:

baBuffer - 包含历史字节的源字节数组。必须是全局数组。

sOffset - 源字节数组中历史字节的偏移量。

bLength - 历史字节数。

回报:

如果设置了历史字节,则为 true,如果应用程序没有所需的权限,则为 false

现在我想更改卡的历史字节。所以我编写了下面的程序并成功地将其转换为它的cap文件:

正如您在上面看到的,它的编写方式是在接收到任何 APDU 命令时分配0102030405060708090A历史字节INS=0X00

问题是我不知道如何为这个小程序设置卡重置权限。我知道我必须在安装步骤中指定权限,但我不知道怎么做!通常我使用GlobalPlatformPro工具上传我的小程序。在它支持的参数中,我看不到任何相关参数:

请注意,我正常安装了小程序,但是当它在接收该命令时返回0x9000时,它无法更改历史字节,我需要为我的小程序设置卡重置权限:

问题:

1- 如何更改/设置我的小程序的权限?

2- 为什么收到卡后退0x90000x00 0x00 x00 0x00?(我希望它返回一个异常,因为在描述中setATRHistBytes提到该方法false在小程序特权不是Card Reset的情况下返回)

0 投票
1 回答
113 浏览

smartcard - 定义两个对智能卡具有不同权限的管理员

假设您想在两个不同的公司之间分发卡(让他们命名为Company-ACompany-B)。这些公司必须能够在卡上安装或删除他们的 Applet,但他们不应该能够删除其他公司的 Applet。

我认为有两种解决方案:

  1. 在 ISD 中定义两个Key Set (分别命名为KS1KS2),并为每个 Key Set 定义它们的相关权限,以获得所描述的条件。然后将KS1分配给 Company-A,将KS2分配给 Company-B。
  2. 添加不同的安全域(命名为SD1SD2)并将SD1的密钥(可以是 ISD 吗?)提供给 Company-A,将SD2的密钥提供给 Company-B。

Q1:以上哪种解决方案是正确的?还有其他解决方案吗?如果是这样,该怎么做?【在这一步,第二部分的答案是可选的!;) ]

listQ2:使用正确的解决方案,他们能在contents命令的输出中看到对方公司Applet的AID吗?

0 投票
1 回答
428 浏览

javacard - 被操纵的 CAP 文件是否会在安装过程中破坏 Java Card?

我有一张可以正常工作的 Java 卡:

我编写了一个简单的程序来在接收到每个命令时返回 APDU 缓冲区:

将上述程序转换为.cap文件后,我用WinRAR打开 cap 文件并更改.CAP文件的一个字节,如下所示:

(我替换0x78而不是在class.cap0x07的第九次再见)。

点击放大 :

在此处输入图像描述

现在我尝试安装这个新的 cap 文件。但不仅安装失败,而且我无法再列出我卡的内容:

我的问题:

这个新生成的 CAP 文件在我的智能卡上发生了什么?有没有人知道原始文件和操作文件中的字节码和这个字节的含义?这是对安装操纵文件的良好逻辑响应吗?

注1:

我也尝试在我的 JCOP 卡上安装这个新的cap文件。安装再次失败,但卡静音约 15 分钟,而不是上述错误。(必须在读卡器中大约 15 分钟才能再次激活!)

笔记2:

我试图更改此文件的第 10 个字节而不是第 9 个字节。所以我换成0x010x45. 之后我成功安装了新的 CAP 文件!卡不应该在字节码验证后检测到这种操作并阻止安装吗?

0 投票
2 回答
475 浏览

javacard - 全球平台 CRS 和卡特定命令

我正在尝试从全球平台 2.2 卡的 SIM 卡中的安全元件中读取一些数据。

我的小程序 SELECT 命令成功 90,00,响应中有一些 PDOL 数据。但是,当我发送获取处理选项时,它返回 6D00。似乎安全域仍在负责并且不理解 GPO 命令。

我的调查表明,小程序特定命令需要通过安全通道,而 CRS 在基本通道上运行。即使没有通过非接触式接口访问卡,这个要求是否正确?

0 投票
1 回答
714 浏览

smartcard - JCOP 卡中的安全盒

JCOP V2.4.2 修订版 3 安全目标:

11-12页

安全盒概念在 JCOP 2.4.2 R3 中实现。Secure Box 是一种允许运行未经认证的第三方本地代码并确保该代码不会损害、影响或操纵 JCOP 2.4.2 R3 操作系统或操作系统执行的任何小程序的结构。硬件 MMU 确保安全盒中的其他代码和/或驻留在硬件上的数据的本机代码已在硬件评估中获得认证

我有一些描述的卡,我也想有使用安全盒的经验!在Java Card v3.0.1 SpecificationsGlobal Platform v2.2.1 card specification和JCOP v2.4.2 r3 Administrator Manual中搜索没有帮助。上述文件中几乎没有关于 Secure Box 的内容。

所以 :

有人知道如何在 JCOP 卡中使用安全盒吗?我们可以在 Secure Box 中上传什么样的程序/代码?这些程序是用 Java Card 语言编写的并且也是 CAP 文件的形式吗?或者那些是用 C++ 或汇编编写的?

如何上传并安装在卡上?而这个安全盒有什么优势呢?

0 投票
1 回答
982 浏览

smartcard - ATR 在两次复位后自动改变

我有一张JCOP V2.4.2 r3 Java 卡。当我将它插入我的ACR38阅读器并使用 OpenSC-Tool 发送两个连续的 ATR 请求时,我收到了两个不同的 ATR!那样行吗?

看:

如果我毫不拖延地重复我的请求,我将一次又一次地收到第二个 ATR:

但是,如果我等待大约 1 分钟(并且不要从读卡器中取出卡),然后再次请求 ATR,我会收到第一个短 ATR:

0 投票
1 回答
1920 浏览

javacard - 测试 EMV 卡的 RSA 密钥

根据 EMV 标准,我们需要两个 RSA 密钥。

1)颁发者 RSA 密钥(将使用 1408 位)

2) ICC RSA 密钥(将使用 1152 位)

这里 Issuer RSA 私钥用于计算 ICC 公钥证书。EMV 卡包含在 SDA/DDA 中使用的各种标签8F,例如90(颁发者公钥证书) (ICC PUBLIC KEY CERTIFICATE)等。9F46

其实我想用java语言个性化一张EMV卡,想自己处理所有的计算。这需要 RSA 密钥(SDA/DDA 需要 RSA Stuff)

EMV 也有 DGI8201-8205

包含 CRT 格式的 ICC RSA 私钥。

我知道这很复杂,但这是深入了解 EMV 技术的唯一方法。任何人都可以告诉我如何获得可以解决我的目的并可以在 EMV 计算中使用它的 RSA 密钥。提前致谢。

0 投票
3 回答
543 浏览

javacard - Java Card 小程序可以“自动选择”自身吗?

如果我编写一个模拟相同 ISO 标准的一个或多个协议的 Java Card 小程序,有没有办法让不使用选择或不知道选择什么的协议“自动选择”小程序?因为否则我不会花 10 到 20 美元买一个测试设备,而且天知道我需要不止一个。