2

JCOP カードを使用してECCキーペアを生成しました。ECPrivateKeyECPublicKeyKeyPair問題なく 作成できますが、 のCryptoException.ILLEGAL_VALUE場合は例外がスローされますgenKeyPair()。カードまたは操作の何が問題になっていますか? 何も思いつきません。どこで間違いを犯したか教えてください。とても有難い!

ところで、JCAlgTest で同じ問題が発生したことがわかりました。ここでテスト レポートを確認してください。

これが私のコードです。

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);
}
}
4

1 に答える 1

0

ECC ドメイン パラメータを設定する必要があります。そうしないと、どのパラメータを使用すればよいかわかりません (また、既知の名前付き曲線をすべてカードに持たせるのは少し難しいです。スペースは貴重です)。少なくとも公開鍵と (NXP カードの場合は)秘密鍵に対しても設定する必要があります

于 2016-03-16T08:59:48.530 に答える