用于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命令的原因。

隐藏小程序的用例是什么?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...