Transactions 这是javacards中事务机制中的错误吗?

Transactions 这是javacards中事务机制中的错误吗?,transactions,smartcard,javacard,Transactions,Smartcard,Javacard,我编写了以下程序并将其上传到我的卡上: package transactionMechanismBugCheck; import javacard.framework.APDU; import javacard.framework.Applet; import javacard.framework.ISOException; import javacard.framework.JCSystem; public class TransactionMechanismBugCheck extend

我编写了以下程序并将其上传到我的卡上:

package transactionMechanismBugCheck;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import javacard.framework.JCSystem;

public class TransactionMechanismBugCheck extends Applet {
    short[] arrayS;
    byte[] arrayB;

    private TransactionMechanismBugCheck() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {
        new TransactionMechanismBugCheck().register();
    }

    public void process(APDU arg0) throws ISOException {

        short[] arraySlocal=null;

        JCSystem.beginTransaction();
            arrayS=new short[1];
            arraySlocal=arrayS;
        JCSystem.abortTransaction();

        ISOException.throwIt((short)0x9001); 
    } 
}
安装程序:

gp: gp -list
AID: A000000151000000 (|....Q...|)
     ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected,
 CVM (PIN) management

AID: A0000001515350 (|....QSP|)
     ExM LOADED: (none)
     A000000151535041 (|....QSPA|)


gp: gp -install d:\transactionMechanismBugCheck.cap

gp: gp -list
AID: A000000151000000 (|....Q...|)
     ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected,
 CVM (PIN) management

AID: 010203040506 (|......|)
     App SELECTABLE: (none)

AID: A0000001515350 (|....QSP|)
     ExM LOADED: (none)
     A000000151535041 (|....QSPA|)

AID: 0102030405 (|.....|)
     ExM LOADED: (none)
     010203040506 (|......|)


gp:
问题是:为什么我没有收到选择响应的
SW=0x9001

在上面,光标闪烁约10秒,然后出现下面一行:

OSC: opensc-tool -s 00A4040006010203040506
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 06 01 02 03 04 05 06
APDU transmit failed: Transmit failed

OSC:
请注意,我读到这是2009年

1-为什么它不响应我的select命令,但我在程序中输入的除外?


2-这是否意味着我的javacard易受攻击?

虽然我们无法查看该卡,但似乎有更高的可能性可以防止此攻击,并且触发了对策。一个有用的对策是“静音”卡,这样就不会有信息泄露给可能的攻击者。这可能意味着该卡不易受攻击


当然没有办法确定,请询问供应商。

在创建新对象时,您不应该调用
JCSystem.abortTransaction()
,因为这可能会导致会话锁定或强制撕裂/重置,就像您的情况一样

有关更多信息,请参阅此链接:


不,您的JavaCard没有直接易受攻击。但是,如果您没有正确使用这些方法,您的设计就会失败。

我扮演的角色是攻击者,而不是程序员。我想知道,如果有人以这种方式编写了一个程序,他是否可以获得其他小程序的信息?如果Java卡API本身强制执行卡撕裂,我会非常惊讶:)