使用 gp 查看小程序的 Javacard 安全性
Javacard security for viewving applet with gp
我开发了一个小程序安装在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无论如何也不能这样保护,因为这是由卡片运行时环境处理的,而不是小程序。 IE。有人可以通过 AID select 这个小程序,如果成功,他就知道这个小程序已安装。
如果你想禁止访问 00 A4 04 00 00
a SELECT 你必须强制执行一些身份验证,虽然我不知道隐藏 SELECT 命令的原因。
隐藏小程序的用例是什么?
我开发了一个小程序安装在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无论如何也不能这样保护,因为这是由卡片运行时环境处理的,而不是小程序。 IE。有人可以通过 AID select 这个小程序,如果成功,他就知道这个小程序已安装。
如果你想禁止访问 00 A4 04 00 00
a SELECT 你必须强制执行一些身份验证,虽然我不知道隐藏 SELECT 命令的原因。
隐藏小程序的用例是什么?