2009-02-05 3 views
4

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

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

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

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

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

Код мало связан, но I posted it on my blog. Я могу разместить его здесь вместо ссылки, если это более уместно.

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

ответ

2

Хотя я не могу дать подробное объяснение подробностей проблемы, вот решение, которое работает. Прежде всего кажется, что различные реализации 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); 
Смежные вопросы