Невозможно сохранить сгенерированный secp256k1 закрытый ключ с помощью Java-библиотеки Amazoun CloudHSM

Когда я пытаюсь импортировать закрытый ключ secp256k1 в мой экземпляр CloudHSM, я получаю сообщение об ошибке "java.security.InvalidKeyException: ключ является экземпляром CaviumKey и не может быть импортирован". Импорт секретного ключа secp256r1 работает нормально.

Я использую предоставленные примеры в качестве руководства ( https://github.com/aws-samples/aws-cloudhsm-jce-examples), и кажется, что метод exportKey не преобразует ключ в privateKey, но возвращает Вместо этого CaviumKey (я связался со строкой в ​​методе ниже).

https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java#L278

/**
 * Export an existing persisted key.
 * @param handle The key handle in the HSM.
 * @return Key object
 */
private static Key exportKey(long handle) {
    try {
        byte[] keyAttribute = Util.getKeyAttributes(handle);
        CaviumKeyAttributes cka = new CaviumKeyAttributes(keyAttribute);
        System.out.println(cka.isExtractable());
        byte[] encoded = Util.exportKey( handle);
        if(cka.getKeyType() == CaviumKeyAttributes.KEY_TYPE_AES) {
            Key aesKey = new SecretKeySpec(encoded, 0, encoded.length, "AES");
            return aesKey;
        }
        else if(cka.getKeyType() == CaviumKeyAttributes.KEY_TYPE_RSA && cka.getKeyClass() == CaviumKeyAttributes.CLASS_PRIVATE_KEY) {
            PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(encoded));
            return privateKey;
        }
        else if(cka.getKeyType() == CaviumKeyAttributes.KEY_TYPE_RSA && cka.getKeyClass() == CaviumKeyAttributes.CLASS_PUBLIC_KEY) {
            PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(encoded));
            return publicKey;
        } else if(cka.getKeyType() == CaviumKeyAttributes.KEY_TYPE_EC && cka.getKeyClass() == CaviumKeyAttributes.CLASS_PRIVATE_KEY) {
            PrivateKey privateKey = KeyFactory.getInstance("EC").generatePrivate(new PKCS8EncodedKeySpec(encoded));
            return privateKey;
        }
        else if(cka.getKeyType() == CaviumKeyAttributes.KEY_TYPE_EC && cka.getKeyClass() == CaviumKeyAttributes.CLASS_PUBLIC_KEY) {
            PublicKey publicKey = KeyFactory.getInstance("EC").generatePublic(new X509EncodedKeySpec(encoded));
            return publicKey;
        }
    } catch (BadPaddingException | CFM2Exception e) {
        e.printStackTrace();
    } catch (InvalidKeySpecException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

Эта функция возвращает PrivateKey, который все еще является экземпляром CaviumKey, который выдает ошибку при попытке импорта в HSM через библиотеки Cavium.

Кто-нибудь имеет представление о том, почему это происходит или как я мог это исправить?

0 ответов

Вы пробовали вместо EC использовать CaviumKeyAttributes.KEY_TYPE_ECDSA?

Другие вопросы по тегам