问题标签 [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.
nfc - 由于 RSA 密钥对生成,安装 java 卡小程序失败
我正在尝试将小程序安装到 J3A040 JCOP 卡中。
作为安装方法,我有以下内容:
安装总是失败并出现以下错误:
但是,如果我删除密钥对生成,一切正常。我已阅读卡规格,它代表:
. RSA 和 RSA CRT(1280 到 2048 位密钥)用于加密/解密以及签名生成和验证1 d。在安全环境中生成 RSA CRT 密钥(1280 到 2048 位密钥)
我想应该问题不大。
有什么猜测吗?
javacard - Java Card 小程序、安全数据传输和安全通道
我想编写我的小程序,使其 APDU 命令和状态字在我的卡和读卡器之间的传输通道中不清晰。我的意思是我不想将 APDU 命令和响应发送为第三方的纯文本。
我想我有两个选择:
- 在卡上选择我的小程序后,对于所有其他命令,对 APDU 命令的数据部分执行加密功能并在卡上对其进行解密,然后对其进行分析。请注意,我无法使用此方法对整个命令进行加密,因为结果可能与另一个 APDU 命令冲突,并且卡的 SD 将其错误地
SELECT
识别为命令。SELECT
那正确吗?
其示意图:
- 使用 SD 安全通道:据我所知,安全通道意味着:整个APDU 命令和响应以加密形式传输(即它们在源(安全域/读卡器)中加密并在目标(安全域/卡)中解密读者). 对吗?据我所知,SD 在这个机制中扮演着密码学方法的角色,我的小程序和 SD 之间的通信很简单(下图),对吧?
其示意图:
还有其他方法吗?
似乎第一个解决方案还不够好,因为:
- 我必须自己实现!:)
- 我们无法对第三方隐藏命令和响应的所有部分。(我们只能隐藏数据)
我对吗?
现在,假设我想确保我的小程序仅适用于使用安全通道传输的 APDU 命令。我想我又有两个选择:
将卡片置于
SECURED
状态。由于在这种状态下用户无法使用纯文本 APDU 命令与卡进行通信(对吗?),因此他必须使用安全通道将命令发送到我的小程序。正确的?如果不正确,有什么方法可以强制 SD 仅使用安全通道?将卡保持在任何生命周期中(例如 OP_READY),但是,在接收到任何 APDU 命令时,检查CLA部分以查看它是否是安全传输的!(有可能吗?
CLA
来自安全通道的部分 APDU 命令和其他命令之间有什么区别吗?我说的对吗?)
还有其他方法吗?
最后是主要问题:
如何使用 SD 与我的小程序进行安全通信?由于我认为我必须使用 GlobalPlatform 类(我是吗?),所以我查看了它的 API-s。我getSecureChannel
在一个名为org.globalplatform.GPSystem
. 我的方式正确吗?我必须使用这种方法吗?
我知道这可能太长无法回答,但我相信它不仅为我澄清了很多问题,也为其他未来的观众澄清了很多问题。
我感谢任何机构为我阐明这个问题。
并且一个示例小程序更可观。
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- 为什么收到卡后退0x9000
卡0x00 0x00 x00 0x00
?(我希望它返回一个异常,因为在描述中setATRHistBytes
提到该方法false
在小程序特权不是Card Reset的情况下返回)
smartcard - 定义两个对智能卡具有不同权限的管理员
假设您想在两个不同的公司之间分发卡(让他们命名为Company-A和Company-B)。这些公司必须能够在卡上安装或删除他们的 Applet,但他们不应该能够删除其他公司的 Applet。
我认为有两种解决方案:
- 在 ISD 中定义两个Key Set (分别命名为KS1和KS2),并为每个 Key Set 定义它们的相关权限,以获得所描述的条件。然后将KS1分配给 Company-A,将KS2分配给 Company-B。
- 添加不同的安全域(命名为SD1和SD2)并将SD1的密钥(可以是 ISD 吗?)提供给 Company-A,将SD2的密钥提供给 Company-B。
Q1:以上哪种解决方案是正确的?还有其他解决方案吗?如果是这样,该怎么做?【在这一步,第二部分的答案是可选的!;) ]
list
Q2:使用正确的解决方案,他们能在contents命令的输出中看到对方公司Applet的AID吗?
javacard - 被操纵的 CAP 文件是否会在安装过程中破坏 Java Card?
我有一张可以正常工作的 Java 卡:
我编写了一个简单的程序来在接收到每个命令时返回 APDU 缓冲区:
将上述程序转换为.cap
文件后,我用WinRAR打开 cap 文件并更改.CAP文件的一个字节,如下所示:
(我替换0x78
而不是在class.cap0x07
的第九次再见)。
点击放大 :
现在我尝试安装这个新的 cap 文件。但不仅安装失败,而且我无法再列出我卡的内容:
我的问题:
这个新生成的 CAP 文件在我的智能卡上发生了什么?有没有人知道原始文件和操作文件中的字节码和这个字节的含义?这是对安装操纵文件的良好逻辑响应吗?
注1:
我也尝试在我的 JCOP 卡上安装这个新的cap文件。安装再次失败,但卡静音约 15 分钟,而不是上述错误。(必须在读卡器中大约 15 分钟才能再次激活!)
笔记2:
我试图更改此文件的第 10 个字节而不是第 9 个字节。所以我换成0x01
了0x45
. 之后我成功安装了新的 CAP 文件!卡不应该在字节码验证后检测到这种操作并阻止安装吗?
javacard - 全球平台 CRS 和卡特定命令
我正在尝试从全球平台 2.2 卡的 SIM 卡中的安全元件中读取一些数据。
我的小程序 SELECT 命令成功 90,00,响应中有一些 PDOL 数据。但是,当我发送获取处理选项时,它返回 6D00。似乎安全域仍在负责并且不理解 GPO 命令。
我的调查表明,小程序特定命令需要通过安全通道,而 CRS 在基本通道上运行。即使没有通过非接触式接口访问卡,这个要求是否正确?
smartcard - JCOP 卡中的安全盒
11-12页
安全盒概念在 JCOP 2.4.2 R3 中实现。Secure Box 是一种允许运行未经认证的第三方本地代码并确保该代码不会损害、影响或操纵 JCOP 2.4.2 R3 操作系统或操作系统执行的任何小程序的结构。硬件 MMU 确保安全盒中的其他代码和/或驻留在硬件上的数据的本机代码已在硬件评估中获得认证
我有一些描述的卡,我也想有使用安全盒的经验!在Java Card v3.0.1 Specifications、Global Platform v2.2.1 card specification和JCOP v2.4.2 r3 Administrator Manual中搜索没有帮助。上述文件中几乎没有关于 Secure Box 的内容。
所以 :
有人知道如何在 JCOP 卡中使用安全盒吗?我们可以在 Secure Box 中上传什么样的程序/代码?这些程序是用 Java Card 语言编写的并且也是 CAP 文件的形式吗?或者那些是用 C++ 或汇编编写的?
如何上传并安装在卡上?而这个安全盒有什么优势呢?
smartcard - ATR 在两次复位后自动改变
我有一张JCOP V2.4.2 r3 Java 卡。当我将它插入我的ACR38阅读器并使用 OpenSC-Tool 发送两个连续的 ATR 请求时,我收到了两个不同的 ATR!那样行吗?
看:
如果我毫不拖延地重复我的请求,我将一次又一次地收到第二个 ATR:
但是,如果我等待大约 1 分钟(并且不要从读卡器中取出卡),然后再次请求 ATR,我会收到第一个短 ATR:
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 密钥。提前致谢。
javacard - Java Card 小程序可以“自动选择”自身吗?
如果我编写一个模拟相同 ISO 标准的一个或多个协议的 Java Card 小程序,有没有办法让不使用选择或不知道选择什么的协议“自动选择”小程序?因为否则我不会花 10 到 20 美元买一个测试设备,而且天知道我需要不止一个。