Хранение пары ключей 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) работает нормально.

Другие вопросы по тегам