生成ECC密钥对时获取CryptoException.ILLEGAL_VALUE

时间:2016-03-14 09:03:07

标签: smartcard javacard jcop

我使用JCOP卡生成 ECC 密钥对。我可以创建ECPrivateKeyECPublicKeyKeyPair没有任何问题,但在CryptoException.ILLEGAL_VALUE时会抛出异常genKeyPair()。我的卡或我的手术有什么问题?我不知道。你能告诉我哪里弄错了吗?非常感谢!

顺便说一句,我发现JCAlgTest遇到了同样的问题,请检查测试报告here

这是我的代码。

public void process(APDU apdu)
 {
   if (selectingApplet())
  {
    return;
  }

byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS])
{
case (byte)0x00:
    JCSystem.requestObjectDeletion();
    break;
case (byte)0x01:
    ecPubKey = (ECPublicKey) KeyBuilder.buildKey(KeyBuilder.TYPE_EC_FP_PUBLIC, KeyBuilder.LENGTH_EC_FP_160, false);
    ecPriKey = (ECPrivateKey) KeyBuilder.buildKey(KeyBuilder.TYPE_EC_FP_PRIVATE, KeyBuilder.LENGTH_EC_FP_160, false);
    break;
case (byte) 0x02:
    kp = new KeyPair(ecPubKey, ecPriKey);
    break;
case (byte) 0x03:
    try {
        kp.genKeyPair();
    } catch (CryptoException e) {
        short reason = e.getReason();
        apdu.setOutgoing();
        apdu.setOutgoingLength((short) 2);
        Util.setShort(buf, (short) 0, reason);
        apdu.sendBytes((short) 0, (short) 2);
        ISOException.throwIt((short) 0x6F00);
    }
    break;
default:
    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}

1 个答案:

答案 0 :(得分:0)

您需要设置ECC域参数,否则它不知道使用哪些(并且让卡携带所有已知的命名曲线,空间非常宝贵,这有点棘手)。您需要至少为公钥设置它们 - 在NXP卡的情况下 - 可能也用于私钥