这是 javacard 中交易机制的错误吗?
Is this a bug in Transaction mechanism in javacards?
我写了下面的程序并上传到我的卡上:
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
作为对 selection 的回应?
以上,光标闪烁约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 年的 article!
1- 为什么它不响应我的 select 命令,除了我在程序中放入的异常?
2-这是否意味着我的 javacard 易受攻击?
虽然我们无法查看卡片,但似乎更有可能 有针对此攻击的保护措施并且已触发反制措施。一个有用的对策是 "mute" 卡,因此不会将任何信息泄露给可能的攻击者。这可能意味着该卡不易受攻击。
当然没法说了,还是问店家吧
您不应在创建新对象时调用 JCSystem.abortTransaction()
,因为这可能会导致会话锁定或强制 tear/reset,就像您的情况可能发生的那样。
请参阅此 link 了解更多信息:
http://www.win.tue.nl/pinpasjc/docs/apis/jc222/javacard/framework/JCSystem.html#abortTransaction()
不,您的 JavaCard 不会直接受到攻击。但是你的设计是如果你没有正确使用这些方法。
我写了下面的程序并上传到我的卡上:
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
作为对 selection 的回应?
以上,光标闪烁约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 年的 article!
1- 为什么它不响应我的 select 命令,除了我在程序中放入的异常?
2-这是否意味着我的 javacard 易受攻击?
虽然我们无法查看卡片,但似乎更有可能 有针对此攻击的保护措施并且已触发反制措施。一个有用的对策是 "mute" 卡,因此不会将任何信息泄露给可能的攻击者。这可能意味着该卡不易受攻击。
当然没法说了,还是问店家吧
您不应在创建新对象时调用 JCSystem.abortTransaction()
,因为这可能会导致会话锁定或强制 tear/reset,就像您的情况可能发生的那样。
请参阅此 link 了解更多信息: http://www.win.tue.nl/pinpasjc/docs/apis/jc222/javacard/framework/JCSystem.html#abortTransaction()
不,您的 JavaCard 不会直接受到攻击。但是你的设计是如果你没有正确使用这些方法。