簡體   English   中英

在 BouncyCastle BCFKS 密鑰庫中存儲 X25519 密鑰對

[英]Storing a X25519 key pair in a BouncyCastle BCFKS keystore

為了與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密鑰庫? 考慮到我真的不需要證書,是否可以應用一種解決方法,只是一種將私鑰/公鑰存儲在密鑰庫中的方法?

問題是X25519證書不需要自簽名。

使用第二個偽造/一次性密鑰(fi RSA)簽署證書就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM