У меня было приложение с использованием Bouncy Castle для расшифровки PGP, которое прошло без каких-либо проблем в течение последних 8 месяцев или около того, и последние 2 дня неожиданно возникла проблема, когда Метод GetDataStream генерирует исключение:Bouncy Castle PGP Decryption Issue
Сообщение об исключении: «установка асимметричного шифра».
Внутреннее сообщение об исключении: «Не ключ 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 Library for .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), а с новыми ключами проблема была решена.
Обновление 4 - Эта проблема только что появилась, с новым ключом, который работал в моем последнем обновлении. Еще раз, keyData.Algorithm в классе PgpPublicKeyEncryptedData теперь рассматривается как «RsaGeneral» вместо «ElGamalEncrypt». Почему свойство Algorithm изменилось? Является ли человек, который шифрует файл, что-то меняет?
Bitrot. xxxxxxx – Joshua
Возможно, срок действия сертификата с ключами RSA истек? Вы можете это проверить? – Oleksi
Я проверил это ранее и просто добавил скриншот, у нашего ключа нет даты истечения срока действия. Кроме того, я могу вручную дешифровать файлы с помощью такой утилиты, как Kleopatra, используя те же клавиши. Значит, ключи хорошие. – mservidio