Хотя я не могу дать подробное объяснение деталей проблемы, вот решение, которое работает.
Прежде всего, кажется, что различные реализации PGP очень чувствительны к тому, какая программа использовалась для генерации используемых ключей.
Сбой сценария:
- Создание ключей в PGP Desktop (RSA v4, 2048/2048)
- Шифрование в BouncyCastle (DH / DSS, Elgamal)
- Вход в BouncyCastle (с помощью ключа RSA)
- Успешная расшифровка и проверка подписи в PGP Desktop.
- Успешное дешифрование, но в McAfee Business Server происходит сбой проверки подписи.
Чтобы McAfee Business Server успешно проверил ключи, либо создайте ключи в BouncyCastle, используя код из исходного кода BouncyCastle. (Org.BouncyCastle.Bcpg.OpenPgp.Examples.RsaKeyRingGenerator)
Этот код можно изменить, если вам нужны конкретные свойства ключа.
Другой альтернативой является использование McAfee Business Server для генерации ключей. Для этого вам нужен доступ к программному обеспечению. Я сделал свои тесты с пробной версией. (Что, кстати, было боль в шее, чтобы встать и бежать)
Обновление: я выполнил все свои тесты на E-Business Server 8.5.3 (пробная версия). Я дошел до того, что смог зашифровать и войти в Bounty, расшифровать и проверить в E-Business Server. Оказывается, третья сторона использует E-Business Server 7.0, который отказался проверить подпись.
Чтобы все заработало, нам нужно было создать подписи V3.
Мы изменились с:
PgpSignatureGenerator pgpSignatureGenerator = new PgpSignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);
до
PgpV3SignatureGenerator pgpV3SignatureGenerator = new PgpV3SignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);