Проблема расшифровки PGP Bouncy Castle

У меня было приложение, использующее Bouncy Castle для расшифровки PGP, которое работало без каких-либо проблем в течение последних 8 месяцев или около того, а последние 2 дня внезапно возникла проблема, когда метод GetDataStream выдает исключение:

Exception Message: "ошибка установки асимметричного шифра".

Внутреннее сообщение об исключении: «Не ключ RSA».

private static PgpObjectFactory getClearDataStream(PgpPrivateKey privateKey, PgpPublicKeyEncryptedData publicKeyED)
{
    // Exception throws here.
    Stream clearStream = publicKeyED.GetDataStream(privateKey);

    PgpObjectFactory clearFactory = new PgpObjectFactory(clearStream);
    return clearFactory;
}

Срок действия ключа не истек, у него нет срока годности:

enter image description here

Я не вносил никаких изменений в приложение, не трогал ключи, поэтому не совсем понимаю, почему возникла проблема на ровном месте. Есть идеи? Я также могу вручную расшифровать файлы с помощью Kleopatra, используя те же ключи, которые я загружаю в приложение.

Обновление 1— я загрузил бесплатную пробную версию для библиотеки OpenPGP для .NET, которая также использует BouncyCastle, и у меня нет проблем с расшифровкой файлов с использованием того же ключа. По какой-то причине моя реализация расшифровки с помощью BouncyCastle, которая работала несколько месяцев, перестала работать по какой-то причине, которую я пока не смог определить.

Обновление 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.

enter image description here

Обновление 3— пока не могу понять, как решить проблему с текущими ключами. Я сгенерировал новые ключи (типа DSA) вчера, и с новыми ключами проблема была решена.

Обновление 4— эта проблема возникла снова с новым ключом, который работал в моем последнем обновлении. Еще раз, keyData.Algorithm в классе PgpPublicKeyEncryptedData теперь рассматривается как «RsaGeneral» вместо «ElGamalEncrypt». Почему свойство алгоритма должно измениться? Человек, шифрующий файл, что-то меняет?

19
задан 15 revs 9 July 2012 в 19:03
поделиться