尝试使用java smartcardio进行相互身份验证后出现0x6A88错误

时间:2014-09-12 05:19:48

标签: java smartcard javacard pcsc

我一直在尝试在Java上进行相互身份验证,这就是我正在做的事情:

首先我要求挑战并获得随机数。

TRX --> 0084000008
REC <-- 4E621D238C8B185F 9000 

然后我计算一切,Key seed,enc,mac并发送相互授权命令:

TRX --> 0082000028[seed enc mac ... bytes transformed]00
REC <-- 6A88

我总是收到0x6A88,我在网上发现它意味着“找不到参考数据或参考数据”。

但奇怪的是,我的prois实现已经在C#上工作的代码到Java,我们一边测试它,我们用密钥等获得相同的数据,我发现当我要发送时相互身份验证(0x82)命令我得到了0x6A88错误。

以下是一些源代码,我想表明我尝试过使用和不使用beginExclusive()和endExclusive(),但是没有用。

public CardTerminal getCardTerminal() throws Exception {
    CardTerminal ct = null;
    TerminalFactory terminalFactory = TerminalFactory.getDefault();        
    CardTerminals cardTerminals = terminalFactory.terminals();
    // Searches for first card terminal available on the PC
    if (cardTerminals.list().isEmpty() == false) {
        ct = cardTerminals.list().get(0);
    }
    return ct;
}

public void test() throws Exception {
    CardTerminal cardTerminal;
    Card card;
    MyManager instance;

    cardTerminal = getCardTerminal(); 
    instance = new DpiV2Manager();

    card = cardTerminal.connect("T=1");
    card = connect(cardTerminal);
    card.beginExclusive();
    CardChannel cardChannel = card.getBasicChannel();

    // Inside this method I do the get challange, mutual auth, etc
    instance.readGeneralData(cardChannel); 

    card.endExclusive();
    card.disconnect(true);
}

有没有人对Java进行相互身份验证有同样的问题?

有人找到了解决方案吗?

1 个答案:

答案 0 :(得分:0)

我的问题是我试图在错误的applet上进行相互身份验证。我在get challenge APDU之前选择了正确的applet id,最后得到了它。