我想使用外部EC密钥对(主密钥)将私钥从HSM中包装出来,然后验证我是否可以恢复它。
包装如下:
CKM_ECDH1_DERIVE
。该机制的派生参数是:派生函数CKD_SHA256_KDF
、共享数据和公共数据(公共数据取自公共EC主密钥)。CKM_AES_GCM
、CKM_AES_KEY_WRAP_PAD
或CKM_AES_CBC_PAD
之类的机制包装私钥。然后我想验证包装的私有是否是预期的。
我正在尝试使用这样的东西(我不知道用什么作为算法参数规范
的实例):
KeyAgreement agreement = KeyAgreement.getInstance("ECCDHwithSHA256CKDF", "BC");
AlgorithmParameterSpec someAlgorithmParamSpec;
agreement.init(externalEcMasterKey.getPrivate(), someAlgorithmParamSpec);
agreement.doPhase(internalEcKeyPair.asJavaPublic(), true);
SecretKey agreedKey = agreement.generateSecret("AES[256]");
我不知道用EC键包装,所以我知道上面描述的三个步骤是否正确。
我需要帮助使用BC来恢复已包装的内容。
提前谢谢
解密加密的私钥如下:
byte[] ivbuf = new byte[16];
new SecureRandom().nextBytes(ivbuf);
IvParameterSpec iv = new IvParameterSpec(ivbuf);
String algorithm = “AES/CBC/PKCS5Padding”; // CKM_AES_GCM, CKM_AES_KEY_WRAP_PAD or CKM_AES_CBC_PAD
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, aesSecretKey, iv);
byte[] plainText = cipher.doFinal(encryptedPrivateKeyByteArray);
return new String(plainText);