我开发了一个小程序,安装在J2A040卡上,然后是一个客户端程序,它运行良好,但我想知道,如果有人拿着这张卡并使用命令gp-l,他可以看到小程序AID,有可能禁止吗?该人员还可以键入命令00 A4 04 00 00?可以禁止这个命令吗?
public void process(APDU apdu) {
byte[] buffer = apdu.getBuffer();
// check SELECT APDU command
buffer[ISO7816.OFFSET_CLA]=(byte)(buffer[ISO7816.OFFSET_CLA]&(byte)0xFC);
if((buffer[ISO7816.OFFSET_CLA]==0)&&
(buffer[ISO7816.OFFSET_INS]==(byte)(0xA4))) return;
/* if (apdu.isISOInterindustryCLA()) {
if (buffer[ISO7816.OFFSET_INS] == (byte)(0xA4)) {
return;
} else {
ISOException.throwIt (ISO7816.SW_CLA_NOT_SUPPORTED);
}
}*/
if (buffer[ISO7816.OFFSET_CLA] != Wallet_CLA)
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
switch (buffer[ISO7816.OFFSET_INS]) {
case GET_BALANCE:
getBalance(apdu);
return;
case RESET_BALANCE:
resetBalance(apdu);
return;
case DEBIT:
debit(apdu);
return;
case CREDIT:
credit(apdu);
return;
case VERIFY:
verify(apdu);
return;
case CHANGE:
change(apdu);
return;
case VIEW_DATA:
viewdata(apdu);
case GET_CARD_STATUS:
processGetCardStatus(apdu);
return;
case SET_ATR_HISTORY:
processSetHistoryBytes(apdu);
return;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
} // end of process method
感谢您的帮助
据我所知,GlobalPlatform规范中没有隐藏小程序的官方方法。但是,只有拥有安全域的密钥集的密钥的人才能执行该命令,因为GET STATUS命令在安全通道之外是不可访问的。
但是,一般的SELECT by AID无论如何都不能以这种方式得到保护,因为这是由卡运行时环境而不是小程序处理的。也就是说,某人可以通过AID选择这个小程序,如果成功,他就知道这个小程序已经安装。
如果您想通过SELECT拒绝访问00 A4 04 00 00
,则必须强制执行一些身份验证,尽管我不知道隐藏SELECT命令的原因。
隐藏小程序的用例是什么?