Хранение пары ключей X25519 в хранилище ключей BouncyCastle BCFKS
В целях выполнения ключевого соглашения Диффи-Хеллмана с
Curve25519
, Я создаю следующую пару ключей, используя
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
конструктор ожидает сертификат (в отличие от открытого ключа) и по определению не может использоваться для подписи сертификата. (Попытка создать подписывающего с его помощью, естественно, терпит неудачу с
java.lang.IllegalArgumentException: Unknown signature type requested: X25519
)
Я упускаю здесь что-то очевидное, или в настоящее время нет возможности поставить
X25519
пара ключей в
BCFKS
хранилище ключей? Могу ли я применить обходной путь, учитывая, что мне действительно не нужен сертификат, а просто способ хранить частные / открытые ключи в хранилище ключей?
1 ответ
Дело в том, что
X25519
сертификат не обязательно должен быть самоподписанным.
Подпись сертификата с использованием второго фиктивного / одноразового ключа (fi RSA) работает нормально.