ECDSA를 사용하여 서명 코드를 구현하려고합니다. 하지만 설치 단계에서 항상 오류 SW (6F00)가 표시됩니다. 매개 변수를 여러 번 변경해 보았습니다. (예 : ALG_EC_FP/ALG_EC_F2M, LENGTH_EC_FP_xxx/LENGTH_EC_F2M_xxx) 내 코드에서 내 실수를 말씀해 주시겠습니까? (버전 - JCDK 2.2.1, JDK 1.4.2)Javacard에서 ECDSA를 사용하여 서명하는 방법
package Test;
import javacard.framework.*;
import javacard.security.*;
import javacardx.crypto.*;
public class Test extends Applet{
private byte[] PLAINTEXT ;
private ECPrivateKey objECDSAPriKey=null; // Object for ECDSA Private Key
private ECPublicKey objECDSAPubKey=null; // Object for ECDSA Public Key
private KeyPair objECDSAKeyPair=null; // Object for ECDSA Key Pair
private Signature objECDSASign=null; // Object for ECDSA Signature
final static short BAS = 0;
//------------------------------------------------------------------------
public static void install(byte[] bArray, short bOffset, byte bLength){
new Test(bArray, bOffset, bLength);
}
private Test(byte bArray[], short bOffset, byte bLength){
PLAINTEXT = new byte[0x100] ; // Data file
Util.arrayFillNonAtomic(PLAINTEXT, BAS, (short)0x100, (byte)0);
// Error position (6F00)
objECDSAKeyPair= new KeyPair(KeyPair.ALG_EC_FP, KeyBuilder.LENGTH_EC_FP_192); // Error position (6F00)
// Create Signature Object
objECDSASign = Signature.getInstance(Signature.ALG_ECDSA_SHA, false);
register();
}
//------------------------------------------------------------------------
public void process(APDU apdu){
byte buf[] = apdu.getBuffer();
switch(buf[1])
{
case (byte)0xA4: break;
case (byte)0x46:
objECDSAKeyPair.genKeyPair();
objECDSAPriKey = (ECPrivateKey)objECDSAKeyPair.getPrivate();
objECDSAPubKey = (ECPublicKey)objECDSAKeyPair.getPublic();
break;
case (byte)0x2E:
short Le = apdu.setOutgoing();
short sSignLen=0 ;
// Init with Private Key
objECDSASign.init(objECDSAPriKey, Signature.MODE_SIGN);
//objECDSASign.init(objECDSAKeyPair.getPrivate(), Signature.MODE_SIGN);
// Sign Data
sSignLen = objECDSASign.sign(PLAINTEXT, BAS, Le, buf, BAS);
apdu.setOutgoingLength(sSignLen);
apdu.sendBytes(BAS, sSignLen);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
return;
} }
나는 JCOP 카드의 사양을 가지고, 나는 사양에 카드 지원 ECC 읽어 보시기 바랍니다. 하지만 사양이 카드의 사양이고 카드가 ECC를 실제로 지원하는지 의심 스럽습니다. 그 방법을 확인할 수 있습니까 ???
미리 감사드립니다.
당신이 명확히 수 있을까? GlobalPlatform 카드 매니저를 통한 애플릿 설치 중? 그렇다면 패키지를로드하는 동안 또는 애플릿을 설치 (선택 가능)하는 동안? 또는 사용자 정의 APDU 명령 중 하나를 애플릿에 보낼 때? –
이 설치 단계에서 --------> objECDSAKeyPair = new KeyPair (KeyPair.ALG_EC_FP, KeyBuilder.LENGTH_EC_FP_192); 그리고 매개 변수를 변경했지만 오류가 발생했습니다 (6F00) – user2642459