首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在BouncyCastle BCFKS密钥库中存储X25519密钥对

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

Stack Overflow用户
提问于 2021-04-25 17:43:06
回答 1查看 183关注 0票数 0

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

代码语言:javascript
复制
// Generate a key pair
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("X25519", BouncyCastleProvider.PROVIDER_NAME);
keyPairGenerator.initialize(new XDHParameterSpec(XDHParameterSpec.X25519));
KeyPair keyPair = keyPairGenerator.generateKeyPair();

使用此密钥对,我现在可以成功地执行密钥协商:

代码语言:javascript
复制
// 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密钥库中,以供将来使用,如下所示:

代码语言:javascript
复制
// 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密钥库?考虑到我并不真的需要证书,只需要一种在密钥库中存储私钥/公钥的方法,我是否可以申请一个解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-28 05:13:03

问题是X25519证书不需要自签名。

使用第二个伪造/一次性密钥签署证书(f.i.RSA)运行得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67251917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档