如何解决用于Java的Viewving Applet的JavaCard安全性
我开发了一个安装在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命令。
但是无论如何,不能通过这种方式保护常规的AID SELECT,因为它是由卡运行时环境而不是小应用程序处理的。即有人可以通过AID选择该applet,如果成功,他知道已经安装了该applet。
如果您不希望访问00 A4 04 00 00
SELECT,则必须执行一些身份验证,尽管我不知道隐藏SELECT命令的原因。
隐藏小程序的用例是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。