Bouncy Castle PGP Проблема с расшифровкой
У меня было приложение, использующее Bouncy Castle для расшифровки PGP, которое без проблем работало в течение последних 8 месяцев или около того, и последние 2 дня неожиданно возникла проблема, когда метод GetDataStream выдает исключение:
Сообщение об исключении: «Ошибка установки асимметричного шифра».
Внутреннее сообщение об исключении: «Не ключ RSA».
private static PgpObjectFactory getClearDataStream(PgpPrivateKey privateKey, PgpPublicKeyEncryptedData publicKeyED)
{
// Exception throws here.
Stream clearStream = publicKeyED.GetDataStream(privateKey);
PgpObjectFactory clearFactory = new PgpObjectFactory(clearStream);
return clearFactory;
}
Срок действия ключа не истек, срок его действия не истек:
Я не вносил никаких изменений в приложение, я не касался клавиш, поэтому я не совсем понимаю, почему возникла проблема. Есть идеи? Я также могу вручную расшифровать файлы, используя Kleopatra, используя те же ключи, которые я загружаю в приложение.
Update 1 - Я скачал бесплатную пробную версию дляБиблиотека OpenPGP для .NET, который также использует BouncyCastle, и у меня нет проблем с расшифровкой файлов с использованием того же ключа. По какой-то причине моя реализация дешифрования с использованием BouncyCastle, которая работала в течение нескольких месяцев, перестала работать по какой-то причине, которую я пока не смог определить.
Update 2 - Я извлек файлы с прошлой недели, которые работали, и я также загрузил исходный код BouncyCastle, чтобы я мог пройти и отладить, чтобы увидеть, куда выдается исключение и как отличаются переменные между файлом, который работает, и файлом это не работает. Исключение выдается в начале метода GetDataStream класса PgpPublicKeyEncryptedData:
byte[] plain = fetchSymmetricKeyData(privKey);
Когда я вступаю в этот метод, для файлов, которые я могу дешифровать без проблем, я заметил, что для переменной keyData.Algorithm установлено значение «ElGamalEncrypt», тогда как для файлов, которые выдает исключение, устанавливается файл keyData.Algortithm. на "RsaGeneral". Почему они отличаются? Компания, отправляющая мне файлы, изменила метод шифрования? И этот метод шифрования не поддерживается должным образом BouncyCastle?
private byte[] fetchSymmetricKeyData(PgpPrivateKey privKey)
{
IBufferedCipher c1 = GetKeyCipher(keyData.Algorithm);
try
{
c1.Init(false, privKey.Key);
}
catch (InvalidKeyException e)
{
throw new PgpException("error setting asymmetric cipher", e);
}
Кроме того, не уверен, что это связано, тип сертификата нашего ключа DSA.
Update 3 - Мне пока не удалось выяснить, как решить проблему с учетом текущих ключей. Вчера я сгенерировал новые ключи (типа DSA), и с новыми ключами проблема была решена.
Update 4 - Эта проблема только что возникла снова, с новым ключом, который работал в моем последнем обновлении. Еще раз, keyData.Algorithm в классе PgpPublicKeyEncryptedData просматривается как "RsaGeneral". вместо "ElGamalEncrypt" сейчас. Почему изменится свойство Алгоритма? Человек, шифрующий файл, что-то меняет?