Генерация открытого ключа ECDSA на стороне хоста из параметра W

Я хочу отправить открытый ключ пары закрытый-открытый ключ (ECDSA), сгенерированный в моем апплете, в хост-приложение/терминал.

В RSA обычно я отправляю модуль и показатель степени и генерирую открытый ключ на стороне хоста.

В ECDSA я прочитал по ссылке, что мы можем сделать то же самое, если вы возьмете байты параметра W вне карты Нажмите здесь: Ответ Stackoverflow: закодировать открытый ключ на Java

Теперь у меня есть W байтов с карты. может кто-нибудь предложить, как создать открытый ключ из этого?


person Arjun    schedule 08.07.2015    source источник


Ответы (1)


Я написал этот метод для преобразования открытого ключа EC в объект ключа java.security.interfaces.ECPublicKey. Для этого я использую провайдера Bouncy Castle (bcprov-ext-jdk16-1.46.jar). Вы можете загрузить последнюю версию с здесь.

/**
 * This method converts the EC public key (ECPublicKey#getW()) into ECPublicKey
 * @param cardPublicKey as W
 * @param curveName (for example "P-224")
 * @return java.security.interfaces.ECPublicKey
 */
public ECPublicKey ucPublicKeyToPublicKey(byte[] cardPublicKey, String curveName) {
    //for example curveName = "P-224";
    java.security.interfaces.ECPublicKey ecPublicKey = null; // java.security.interfaces.ECPublicKey
    java.security.KeyFactory kf = null;

    org.bouncycastle.jce.spec.ECNamedCurveParameterSpec ecNamedCurveParameterSpec = ECNamedCurveTable.getParameterSpec(curveName);
    org.bouncycastle.math.ec.ECCurve curve = ecNamedCurveParameterSpec.getCurve();
    java.security.spec.EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, ecNamedCurveParameterSpec.getSeed());
    java.security.spec.ECPoint ecPoint = ECPointUtil.decodePoint(ellipticCurve, cardPublicKey);
    java.security.spec.ECParameterSpec ecParameterSpec = EC5Util.convertSpec(ellipticCurve, ecNamedCurveParameterSpec);
    java.security.spec.ECPublicKeySpec publicKeySpec = new java.security.spec.ECPublicKeySpec(ecPoint, ecParameterSpec);

    try {
        kf = java.security.KeyFactory.getInstance("EC", "BC");
    } catch (Exception e) {
        System.out.println("Caught Exception kf : " + e.toString());
    }

    try {
        ecPublicKey = (ECPublicKey) kf.generatePublic(publicKeySpec);
    } catch (Exception e) {
        System.out.println("Caught Exception public key: " + e.toString());
    }

    return ecPublicKey;
}
person rakeb.mazharul    schedule 08.07.2015