将X25519密钥对存储在BouncyCastle BCFKS密钥库中



为了与Curve25519执行Diffie-Hellman密钥协商,我使用BouncyCastle 1.68生成以下密钥对:

// Generate a key pair
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("X25519", BouncyCastleProvider.PROVIDER_NAME);
keyPairGenerator.initialize(new XDHParameterSpec(XDHParameterSpec.X25519));
KeyPair keyPair = keyPairGenerator.generateKeyPair();

使用这个密钥对,我现在能够成功地执行密钥协议:

// Perform a (dummy) key agreement
KeyAgreement keyAgreement = KeyAgreement.getInstance("X25519", BouncyCastleProvider.PROVIDER_NAME);
keyAgreement.init(keyPair.getPrivate());
keyAgreement.doPhase(keyPair.getPublic(), true);
byte[] secret = keyAgreement.generateSecret();

现在,我想将这个密钥对安全地存储在BCFKS密钥库中,以备将来使用,类似于以下内容:

// Create a key store for the key pair
KeyStore keyStore = KeyStore.getInstance("BCFKS", BouncyCastleProvider.PROVIDER_NAME);
keyStore.load(null, "keyStorePassword".toCharArray());
// Put the key pair in the key store as a PrivateKeyEntry
final X509Certificate selfSignedCertificate = generateSelfSignedCertificate(keyPair); // TODO: How to generate a certificate?
final KeyStore.PrivateKeyEntry entry = new KeyStore.PrivateKeyEntry(keyPair.getPrivate(), new Certificate[]{selfSignedCertificate});
keyStore.setEntry("alias", entry, new KeyStore.PasswordProtection("keyEntryPassword".toCharArray()));

除了KeyStore.PrivateKeyEntry构造函数需要证书(而不是公钥(,并且X25519根据定义不能用于对证书进行签名。(尝试使用java.lang.IllegalArgumentException: Unknown signature type requested: X25519创建签名器自然失败(

我是不是遗漏了一些明显的东西,或者目前没有简单的方法将X25519密钥对放入BCFKS密钥库中?考虑到我并不真的需要证书,只是一种将私钥/公钥存储在密钥库中的方法,我是否可以应用一种变通方法?

Java密钥库不能直接存储公钥,只能存储在证书中。

与其对X25519证书进行自签名(这是不可能的,因为密钥不能用于签名(,不如使用第二个伪造/一次性密钥(例如RSA(对其进行签名。

相关内容

  • 没有找到相关文章

最新更新