问题标签 [javacard]
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.
javacard - Sim Application Toolkit - 选择时无法显示文本(实际上什么也没有)
我尝试开发一个 Sim Application Toolkit Applet.. 在互联网上找到了许多简单的示例,但没有成功..
问题是; 我的菜单条目出现在 STK 菜单中,但如果我选择它,什么也不会发生。我尝试在事件 EVENT_MENU_SELECTION 上显示文本。(其实不光显示文字,短信、ussd、子项也不行..)
- 我有制造商提供的真实 sim 卡,可以使用身份验证密钥开发和测试一些小程序。
- 我在 Android 2.3 NFC 智能手机上对其进行了测试。
- 要将小程序加载到 SIM 中,我使用 ACR1281U 作为读取器,使用 Giesecke & Devrient JLoad 2.3.0 作为加载器。
- 在 Sim Toolkit 中默认是一个菜单项,工作正常。
这是我的示例代码..希望有人有想法..(也许加载小程序时有一些特定的安装参数?)
提前致谢, 库奇卡
digital-signature - 在 JavaCard Applet 中生成 HMAC_SHA256 签名
我正在尝试使用我自己的派生密钥S(也是字节数组)对包含inBuffer字节数组的消息进行签名。javacard (jc) 小程序模块的函数片段如下所示。我正在使用 javacard2.2.2 库来开发 jc 小程序。我正在使用 android 应用程序发送进程请求。我收到返回码“ 6A81 ”,表示“不支持功能”。现在,我不知道如何继续,因为我不明白它提到了不支持 HMAC_SHA256 或者我在函数中犯了一些错误。请帮忙。
请在这方面帮助我,或者提供任何用于实现 HMAC_SHA256 或 HMAC_SHA1 对称加密的指针。在 javacard 小程序中。
先感谢您。
java - APDU读取文件java卡程序
我使用 netbeans 制作了 java card 经典小程序
当我对读取操作进行编程时,我检查 APDU 中的第一个字节是否为 0x80,然后检查第二个0xB0
字节,然后从字节 2 和 3 中获取我将从文件中读取的偏移量,然后获取要读取的字节数从字节 4
作为默认的 APDU
0x80 0xB0 0x00 0x03 0x60
这从当前文件中读取 60 个字节,从偏移量 3 开始
当我尝试此命令时,它返回错误Input data length != Lc around line 12
。
经过一些重试后,我发现了问题
问题是编译器假设字节 4 是数据的长度,所以在我的命令中他等待 60 个字节
当我搜索时,我发现字节 4 并不意味着发送数据长度时INS=B0
我不知道为什么会这样,当我尝试调试时,编译器甚至没有进入进程函数。
我的脚本文件是
读取功能是
第一个选择程序然后选择文件然后尝试读取不起作用的数据
但是如果我这样做
0x80 0xB0 0x00 0x00 0x02 0x00 0x00
,它会从偏移量 0 读取 2 个字节写入,尽管0x00 0x00
即使在标准中也没有使用final
我的问题为什么我必须将命令中的数据设为红色数据的长度
我该如何解决这个错误?
converter - Javacard 2.2.1 转换器在 Windows 中不起作用
我正在开发一个 JC2.2.1 小程序。我面临一个非常奇怪的问题。我在 Win7 和 linux 中都有我的系统设置。奇怪的是,在 Linux 中转换和上传 CAP 文件时它工作正常。但是,当在同一个类文件上使用 windows 转换器时,成功验证后的 GPSHELL 在加载第一个块时报告 6985。
使用命令的解包版本分析两个 CAP 文件的字节码,我注意到存在细微差别(见下文)。
为什么 JC2.2.1 转换器会创建不同的字节码?任何的想法?我浪费了很多时间试图找出这样的问题。
我的 Windows 操作系统是 Win7 64 位,运行 Java 1.6 32 位和 64 位(我都测试过)
包 AID:01 02 03 04 05 06 小程序 AID:01 02 03 04 05 06 00
我已经突出显示了不同的字节**
第一加载命令(不工作)80E80000EFC48211CF010010DECAFFED01020400010601020304050602001F0010001F000B0028010600120BD30020016D000002D700140002001004010004002804020107A0000000620101020107A0000000620102020107A0000000620201 * 05 * 0106A0000001510003000B01070102030405060000010600120080030600020404000000BCFFFF00B800BF070BD30005308F00073D181D1E8C00063B7A0640188C00221F10096D0A1167001F418D00231E04191E254141311E04191E25414131191E2510116A11191E25600C116700191E25418D00231060058D00277F00281808900C87001810F2900B870105110080038D00
第一加载命令(工作)80E80000EFC48211CF010010DECAFFED01020400010601020304050602001F0010001F000B0028010600120BD30020016D000002D700140002001004010004002804020107A0000000620101020107A0000000620102020107A0000000620201 * 00 * 0106A0000001510003000B01070102030405060000010600120080030600020404000000BCFFFF00B800BF070BD30005308F00073D181D1E8C00063B7A0640188C00221F10096D0A1167001F418D00231E04191E254141311E04191E25414131191E2510116A11191E25600C116700191E25418D00231060058D00277F00281808900C87001810F2900B870105110080038D00
smartcard - 从 JavaCard 读取公民数据
我国政府已开始发行智能国民身份证 (SNIC)
我有一个智能卡读卡器 ( ACR38-IPC )
当我将我的 SNIC 插入阅读器时,Windows 检测到它并安装了驱动程序,现在它在设备管理器中显示为:ActivIdentity Mini Driver (Oberthur ID-One Cosmo V7.0 128K)
我发现它是 JavaCard v2.2.2
我想在 C# 应用程序中使用阅读器从 SNIC 读取我的国民身份证号码。
我在互联网上搜索过,但没有找到合适的答案。我不想构建一个小程序并将其加载到卡上,我只想读取存储在卡上的公民信息。
我还安装了其他国家提供给他们的公民读卡的软件,但是他们不能读我的卡。
我的主要问题是 SNIC 发卡机构没有告诉我任何关于卡的事情(完全荒谬),他们甚至没有给我我的 PIN 码(这不是很神奇吗???)(也许他们不希望公众发展使用此卡的应用程序,他们会让自己的人这样做并获得好处:裙带关系)
我只知道卡的类型,我想从卡中提取我的信息(我认为它不应该受 PIN 保护,即使我不知道 PIN 也可以读取)
请帮助我如何开始
这是我卡的 ATR 解析:ATR Parsing
signature - 验证 javacard 上的 SHA1withECDSA 签名
我有使用 BouncyCastle 由 SHA1withECDSA 算法签名的自签名证书。在 BC 下,我可以轻松验证它,但是当我在 JavaCard 上进行验证时,它每次都会向我发送错误消息(来自 NIST 的曲线 secp192r1)。证书持有普通签名(非 X9.62 意味着只有 r+s 没有任何标签)。
有我的代码来验证它(将值设为常量 - 当然用于测试)。
字节 [] 证书数据 = {...}
'...' 而不是字节以获得清晰的视图(192 位曲线可能会造成很大的混乱)。
pastebin 上带有标签说明的证书:
谢谢你的帮助
塞瓦尔
编辑:新测试:所有测试都基于相同的数据(PublicKey、PrivateKey、要签名的消息)符号是随机的,所以我将使用 2 个符号(signT - 终端 (BC) 生成的符号,signC - 芯片生成的符号)
signT 不能在 CHIP 上验证,但可以在终端上验证。signC 在芯片和终端上验证
所以我检查了API之间的交叉
指向 BC 的交叉关系运行良好
指向 CHIP 的交叉关系不起作用
一对密钥生成得很好,因为当我将 BC 生成的 PrivateKey 和 PublicKey 放入 CHIP 时,CHIP 上生成的签名可以被 CHIP 验证。
- KeyPair 生成良好
我不知道我现在应该检查什么。问题可能与在 ECDSA 步骤 e = SHA1(Message) 中填充数组有关。哈希后数组发生了什么(哈希比曲线短,卡片需要在复制前声明数组的大小)
integer - 用 byte 或 short 模拟 int 变量
int
如您所知,JavaCard 2.2.x 上没有变量。我需要我正在开发的小程序的整数变量。
我想知道如何使用和变量来模拟int
变量及其算术。byte
short
intellij-idea - IntelliJ IDEA 生成主版本 46 的类文件
我想使用 IntelliJ IDEA 进行 JavaCard 2.2.1 开发。javacard 转换器要求类文件的主要版本为 46。
所以我的问题是如何将类文件兼容设置为 1.2(这将生成具有主要版本 46 的类文件)?
以下是类文件版本供您参考:
smartcard - JavaCard:applet 的实例如何在另一个实例的上下文中调用方法?
考虑一个具有多个实例的 Java Card Classic 小程序,这些实例需要共享 byte[] 变量中的一些数据(例如持久可变,即 EEPROM/Flash),其中包含所有实例共有的信息。
一个静态的 byte[] 变量将是一个完美的选择,但这些恰好被强加给我的验证规则所禁止(我被告知:作为一种全面的方式来证明取消实例化实例会释放它在实例化时分配的内容)。
如果从属实例可以在主实例的上下文中调用小程序的方法之一(可能最初由 AID 标识,或/和/然后以某种其他方式),这将得到解决。如何才能做到这一点?有什么例子吗?
更新:this other question 中的代码旁边是做我想要的共享对象,但似乎没有在另一个实例的上下文中调用方法。
smartcard - JavaCard:CLEAR_ON_DESELECT 瞬态的覆盖和限制?
在 Java Card(我对 Classic 一直到 2.1.1 感兴趣)中,applet 所需的瞬态(RAM)通常在安装时由makeTransientByteArray()
. 该方法接受一个参数CLEAR_ON_RESET
或CLEAR_ON_DESELECT
。后者带有警告
CLEAR_ON_DESELECT
仅当创建对象的小程序与当前选定的小程序处于同一上下文中时,才能访问瞬态对象。
CLEAR_ON_DESELECT
如果在当前选定的小程序与创建对象的小程序不在同一上下文中时访问瞬态对象,Java Card 运行时环境将抛出 SecurityException 。
我的阅读是CLEAR_ON_DESELECT
(但不是CLEAR_ON_RESET
)将允许运行时覆盖两个小程序之间的瞬态(如上所述在安装时分配),只要它们没有同时被选中,这样分配m j字节的几个小程序将消耗大约 max( m j ) 瞬态字节,而不是 sum( m j )。
更新:有人告诉我,至少在某些运行时环境中,覆盖选择性地发生在从不同包分配的瞬态中。但我找不到参考,或对此类规则/机制的精确描述。
问题:这种覆盖机制有时会在运行时实现吗?如果是,什么时候发生?是否有运行时没有实现它的卡?如果是的话,除了实验之外,有没有其他方法可以判断,可能是从广告中的 Java Card 版本?
其他问题:引用的限制中的“上下文”到底是什么意思?特别是,一个小程序的另一个实例是否可以使用瞬态,并与此处CLEAR_ON_DESELECT
显示的机制分配的实例共享它?注意:我对共享瞬态的内容不感兴趣,只是为了避免两次分配,以解决运行时可能缺少覆盖的问题。
更新:我在这里问了同样的问题,得到了一个有趣的答案。