【问题标题】:Getting 0x6A88 error after trying mutual authentication with java smartcardio尝试使用 java smartcardio 进行相互身份验证后出现 0x6A88 错误
【发布时间】:2014-09-16 16:11:52
【问题描述】:

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

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

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

然后我计算一切,密钥种子,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 进行相互身份验证时遇到同样的问题?

有人找到解决方案了吗?

【问题讨论】:

  • 什么协议的相互认证?你会通过 AID 进行 SELECT 吗?
  • 是的,我有,忘了把它放在我的问题中。但是你给我一个线索,说明我的问题是什么,我选择了一个小程序,但是我必须在另一个小程序中进行相互身份验证。我会更新我的帖子。谢谢@owlstead
  • 谢谢@owlstead!我试图在错误的小程序上进行相互身份验证。

标签: java smartcard javacard pcsc


【解决方案1】:

我的问题是我试图在错误的小程序上进行相互身份验证。刚刚在get challenge APDU前选择了正确的applet id,终于搞定了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多