- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是是否有可能从小程序本身的代码中锁定小程序,作为对代码中检测到的操作的对策。
显而易见的选择是使用 GPSystem.lockCard();
它有效,但是我想知道是否可以只锁定小程序。我还可以从相关安全域的经过身份验证的 session 中锁定小程序本身。但是从小程序代码本身是否可能。看来,鉴于 GPSystem.setCardContentState();
与 GPSystem.APPLICATION_LOCKED
一起使用的方法,所以我也测试过,但它不起作用。
重读GP卡规范2.2 PDF的说明:
The OPEN shall reject any transition request from the Life Cycle State LOCKED;
The OPEN shall reject any transition request to the Life Cycle State LOCKED
最佳答案
看看这个机制如何从 GlobalPlatform Card 规范 2.1.1 演变到 2.2.1(在 2.3 中仍然相同)很有趣:
The Card Issuer has a mechanism to disable the continued execution status of an on-card Application. This mechanism may be invoked from within the OPEN based on exceptions handled by the OPEN or from the use of externally invoked commands. The Card Issuer is the only entity that may initiate the locking of an Application.
GPSystem.setCardContentState()
明确定义为仅允许更改应用程序特定的生命周期状态(值介于 0x07
和 0x7F
之间,最低 3 位设置)。由于APPLICATION_LOCKED
的常数在后面的规范中是 0x80
不允许设置此状态。在此方法的注释中也明确说明了这一点:
- The OPEN shall reject any transition request to the Life Cycle States INSTALLED or LOCKED.
The card has a mechanism to disable and subsequently re-enable the continued execution status of an on-card Application. This mechanism may be invoked from within the OPEN based on exceptions handled by the OPEN or from the use of externally invoked commands. An Application with Global Lock privilege, the Application itself or a directly or indirectly associated Security Domain are the only entities that may initiate the locking of an Application.
GPSystem.setCardContentState()
还是不太清楚。首先,该方法的描述仍然指出只有 0x07
之间的值。和 0x7F
必须允许设置最低 3 位:This method sets the Application specific Life Cycle State of the current applet context. Application specific Life Cycle States range from 0x07 to 0x7F as long as the 3 low order bits are set.
- The OPEN shall reject any transition request to the Life Cycle State INSTALLED;
- The OPEN shall reject any transition request from the Life Cycle State LOCKED;
APPLICATION_LOCKED
.GPRegistryEntry.setState()
.此方法的文档指出:
- A transition request to Life Cycle state other than APPLICATION_LOCKED and APPLICATION_UNLOCKED shall be accepted only if the invoking Application corresponds to this GPRegistryEntry;
- An Application shall be able to lock and shall not be able to unlock itself;
setCardContentState()
的同一张卡上工作会很有趣。失败的:GPSystem.getRegistryEntry(null).setState(GPSystem.APPLICATION_LOCKED);
null
似乎没有什么区别或 JCSystem.getAID()
用作 getRegistryEntry()
的参数.APPLICATION_LOCKED
成功地将状态设置为锁定(0x80)。然后将状态设置为 previous_state | 0x80
.尝试设置具有高位设置的其他状态值(例如 0x8F)不起作用(正如我预期的那样)。GPSystem.setCardContentState()
被改变(再次)。更改说明清楚地表明该方法已更新,现在允许应用程序锁定自身(导出文件版本 1.5。映射到 GP 2.2.1):
- export file version 1.5: this method now allows the application associated with the current applet context to lock itself.
This method allows the application associated with the current applet context to change its state to an application specific life cycle state or to lock itself. An application cannot unlock itself using this method.
APPLICATION_LOCKED
:
bState
- an application specific life cycle state (0x07 to 0x7F with 3 low order bits set), orAPPLICATION_LOCKED
(0x80).
GPSystem.setCardContentState()
将它们自己的生命周期状态更改为锁定。 .APPLICATION_LOCKED
成功地将状态设置为锁定(0x80)。然后将状态设置为 previous_state | 0x80
.尝试设置具有高位设置的其他状态值(例如 0x8F)不起作用(正如我预期的那样)。APPLICATION_LOCKED
的情况下,您可以采取哪些措施来克服您的问题, 是使用特定于应用程序的生命周期状态:
public class LockableApplet extends Applet {
[... applet installation / instantiation code ...]
private static final byte APPLICATION_STATE_UNLOCKED = (byte)0x07;
private static final byte APPLICATION_STATE_LOCKED = (byte)0x7F;
public boolean select() {
if (GPSystem.getCardContentState() == APPLICATION_STATE_LOCKED) {
return false;
}
return true;
}
public void process(APDU apdu) {
if (selectingApplet()) {
return;
}
if (GPSystem.getCardContentState() == APPLICATION_STATE_LOCKED) {
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
}
[... applet logic code ...]
}
}
GPSystem.setCardContentState(APPLICATION_STATE_LOCKED);
关于security - 如何自锁 Javacard 小程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37143978/
我已经开始使用 JavaCards 并试图掌握 CLA 字节的含义。 如果阅读RFC 5.4.1 Class byte 5.4.1 Class byte According to table 8 us
我有一张 Gemalto Top DL v2 java 卡。当我 list 内容时,卡中加载了很多包: GlobalPlatformPro:> gp -visa2 -key 47454D5850524
我想读取 Java 卡上的 TLV 编码证书(NXP JCOP J3D081、JCOP 版本 2.4.2、Java 卡版本 3.0.1 Classic)。 cap 文件已成功创建,但当我尝试将其安装到
我想知道 JavaCard 中的 Util.* 函数是否通常是抗侧 channel 的。 是否存在一些具有侧 channel 抗性 Util.* 功能的 JavaCard? 我查看了几个公共(publ
我想配置一个 JavaCard,以便它只允许安装由特定 key 签名的小程序。我不确定这个签名是否是 cap 文件格式的一部分。我已经可以通过 GlobalPlatformPro 中的代码从 Andr
在尝试反编译 capfile 时研究 JCVM 规范,我想到了以下问题: 描述符组件(6.13)说: The Descriptor Component provides sufficient info
如您所知,OTA 消息或无线消息是特制的二进制 SMS 消息,移动运营商使用这些消息向 SIM 卡发送 APDU 命令以进行管理。例如,他们可以使用此类消息在 SIM 卡上安装或删除小程序。 我想知道
我正在寻找一个使用Java Card在SIM卡上运行的简单初学者程序。谁能给我一些入门的基本信息?我已经看过一些关于工具包api的描述,但是我正在寻找类似的东西:sim卡支持哪些功能,如何将我的代码上
我有一个空的 Javacard,如下所示: user@system$ java -jar gp.jar --list ISD: A000000003000000 (OP_READY) Pri
我是智能卡开发的新手。请帮助我了解如何开始。 Javacard和JCOP之间有什么关系? 如何将JCOP版本映射到GlobalPlatform Card Specification? 例如,JCOP
我正在尝试理解java卡的概念,我有一些疑问,我想与大家分享,也许你能给我任何最好的建议。 //Jcop- 我在某处读到 Java Card OpenPlatform (JCOP) 是由 IBM Zü
java卡现在有什么用?该文档要么非常旧,要么非常稀疏。谷歌搜索了一段时间后,这是我的想法: eID:使用私钥签署文档哈希,由中央机构(政府)颁发 - 签署法律文件 唯一 ID - 通过 ID 识别(
我想在 Linux 计算机上生成证书,将其传输到卡并在那里加密。然后将其存储并稍后取回。我想知道如何在卡上获取 4k RSA 数据之类的东西。它可以与 APDU 配合使用吗? 最佳答案 证书一般不需要
我尝试使用oracle java card development kit 3.0.5u2命令行工具。 我用的是netbeans生成的cap文件 我用 verifycap.bat在我的帽子上以及 sd
有人可以给我一些关于如何使用 javacard 签名并验证它的小建议吗?我想我在签名生成和验证方面做错了: ... SignatureMessageRecovery sig; ... private
我正在尝试在卡上签署一条消息并在卡外验证它。 结果总是假的。 我可能获取的模数和指数不正确。有什么想法吗? Java 小程序代码: protected MainApplet() { try {
我想开发一个使用 java 卡的生物识别指纹认证,我发现 javacard 2.2 提供了 APIs (javacardx.biometry) 来做到这一点,但我没有找到任何关于Match On Ca
我注意到我的智能卡(带有 Omnikey 5121 读卡器的 NXP J2E145、J3A081、J3C145)上出现了一些非常奇怪的行为:调用 JavaCard 方法后立即断电 JCSystem.r
我有一个包含我的小程序的双接口(interface) Java 卡。我想对来自不同接口(interface)的单个命令有两个不同的 APDU 响应。 例如,当从接触界面接收到命令时,我想用“Con
我一直在查看 JavaCard API 和示例,但找不到对更高级别数据集合(如 List、ArrayList、HashMaps 等)的任何引用? 我错过了什么吗? 我知道 JavaCard 环境的资源
我是一名优秀的程序员,十分优秀!