Hüpfburg PGP-Entschlüsselungsproblem

Ich hatte eine Anwendung mit Bouncy Castle für die PGP-Entschlüsselung, die in den letzten 8 Monaten ohne Probleme ausgeführt wurde. In den letzten 2 Tagen ist plötzlich ein Problem aufgetreten, bei dem die GetDataStream-Methode eine Ausnahme auslöst:

Ausnahmemeldung: "Fehler beim Einstellen der asymmetrischen Verschlüsselung".

Innere Ausnahmemeldung: "Kein RSA-Schlüssel".

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

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

Der Schlüssel ist nicht abgelaufen, er hat kein Ablaufdatum:

Ich habe keine Änderungen an der Anwendung vorgenommen, ich habe die Tasten nicht berührt, daher kann ich nicht genau verstehen, warum ein Problem aus heiterem Himmel aufgetreten ist. Irgendwelche Ideen? Ich kann die Dateien mit Kleopatra auch manuell mit denselben Schlüsseln entschlüsseln, die ich in die Anwendung geladen habe.

Update 1 - Ich habe die kostenlose Testversion für heruntergeladenOpenPGP Library für .NET, die BouncyCastle auch verwenden scheint, und ich habe keine Probleme, die Dateien mit dem gleichen Schlüssel zu entschlüsseln. Aus irgendeinem Grund hat meine Implementierung der Entschlüsselung mit BouncyCastle, die seit mehreren Monaten funktioniert hat, aus einem Grund, den ich noch nicht identifizieren konnte, aufgehört zu funktionieren.

Update 2 - Ich habe Dateien aus der letzten Woche heruntergeladen, die funktioniert haben, und ich habe auch den Quellcode von BouncyCastle heruntergeladen, damit ich schrittweise feststellen und debuggen kann, wo die Ausnahme ausgelöst wird und wie sich die Variablen zwischen einer funktionierenden Datei und einer Datei unterscheiden das geht nicht Die Ausnahme wird am Anfang der GetDataStream-Methode der PgpPublicKeyEncryptedData-Klasse ausgelöst:

byte[] plain = fetchSymmetricKeyData(privKey);

Wenn ich in diese Methode einsteige, habe ich festgestellt, dass für Dateien, die ich problemlos entschlüsseln kann, die Variable keyData.Algorithm auf "ElGamalEncrypt" festgelegt ist, während für Dateien, die die Ausnahme auslöst, die Datei keyData.Algortithm auf festgelegt ist "RsaGeneral". Warum sollten sich diese unterscheiden? Hat die Firma, die mir die Dateien geschickt hat, ihre Verschlüsselungsmethode geändert? Und wird diese Verschlüsselungsmethode von BouncyCastle nicht richtig unterstützt?

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);
    }

Wir sind uns auch nicht sicher, ob dies im Zusammenhang steht. Der Zertifikatstyp unseres Schlüssels ist DSA.

Update 3 - Ich konnte noch nicht herausfinden, wie das Problem behoben werden kann, wenn ich die aktuellen Schlüssel habe. Ich habe gestern neue Schlüssel (Typ DSA) generiert und mit den neuen Schlüsseln wurde das Problem behoben.

Update 4 - Dieses Problem ist gerade wieder aufgetreten, mit dem neuen Schlüssel, der in meinem letzten Update funktioniert hat. Der keyData.Algorithm in der PgpPublicKeyEncryptedData-Klasse wird jetzt wieder auf "RsaGeneral" anstatt auf "ElGamalEncrypt" gesetzt. Warum sollte sich die Algorithmus-Eigenschaft ändern? Ändert die Person, die die Datei verschlüsselt, etwas?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage