Шифрование PGP с помощью BouncyCastle C # вызывает предупреждение о недействительном ключе при проверке подписи - PullRequest
4 голосов
/ 05 февраля 2009

Нам нужно зашифровать файлы PGP и отправить их по FTP третьей стороне. Файлы зашифрованы открытым ключом DH / DSS третьей стороны и подписаны нашим закрытым ключом.

Третьи лица имеют наш открытый ключ и собственный закрытый ключ. Шифрование / дешифрование работает, но третьи лица получают предупреждения, когда пытаются проверить нашу подпись.

Когда мы пытаемся расшифровать и проверить аналогично зашифрованные файлы с помощью PGP Desktop, файлы проверяются без предупреждения.

Третья сторона использует "McAfee E-Business Server"

Точное предупреждение: ВНИМАНИЕ: Плохая подпись, не соответствует содержимому файла! Плохая подпись пользователя "user name"

Код немного запутан, но Я разместил его в своем блоге . Я могу опубликовать это здесь вместо ссылки, если это более уместно.

Любое понимание того, как решить эту проблему, приветствуется.

1 Ответ

2 голосов
/ 09 февраля 2009

Хотя я не могу дать подробное объяснение деталей проблемы, вот решение, которое работает. Прежде всего, кажется, что различные реализации PGP очень чувствительны к тому, какая программа использовалась для генерации используемых ключей.

Сбой сценария:

  1. Создание ключей в PGP Desktop (RSA v4, 2048/2048)
  2. Шифрование в BouncyCastle (DH / DSS, Elgamal)
  3. Вход в BouncyCastle (с помощью ключа RSA)
  4. Успешная расшифровка и проверка подписи в PGP Desktop.
  5. Успешное дешифрование, но в 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);
...