2012-06-19 36 views
19

Ich hatte eine Anwendung mit Bouncy Castle für PGP Entschlüsselung, die seit den letzten 8 Monaten oder so ohne Probleme ausgeführt hat, und die letzten 2 Tage plötzlich ein Problem ist, wo die GetDataStream-Methode löst eine Ausnahme aus:Bouncy Castle PGP Entschlüsselung Problem

Ausnahmebedingungsnachricht: "Fehler beim Festlegen der asymmetrischen Chiffre".

Innerer Ausnahmetext: "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 nicht abgelaufen ist, es hat kein Verfallsdatum:

enter image description here

ich keine Änderungen an der Anwendung nicht gemacht habe, habe ich die Schlüssel nicht berührt, so dass ich kann nicht ganz verstehen, warum ein Problem aus heiterem Himmel aufgetreten ist. Irgendwelche Ideen? Ich kann die Dateien auch manuell mit Kleopatra entschlüsseln, indem ich dieselben Schlüssel verwende, die ich in die Anwendung geladen habe.

Update 1 - Ich habe die kostenlose Testversion für OpenPGP Library for .NET, die BouncyCastle auch verwenden aussieht, und ich habe keine Probleme, die Dateien mit dem gleichen Schlüssel zu entschlüsseln. Aus irgendeinem Grund hörte meine Implementierung der Entschlüsselung mit BouncyCastle, die mehrere Monate lang funktioniert hat, aus irgendeinem Grund auf, den ich noch nicht identifizieren konnte.

Update 2 - Ich zog Dateien aus der vergangenen Woche, die gearbeitet, und ich habe auch den Quellcode von BouncyCastle um heruntergeladen, dass ich durch Schritt und Debug, um zu sehen, wo die Ausnahme wirft und wie die Variablen unterscheiden zwischen einer Datei, die funktioniert, und einer Datei, die nicht funktioniert. Die Ausnahme wird zu Beginn der GetDataStream Methode der PgpPublicKeyEncryptedData Klasse geworfen werden:

byte[] plain = fetchSymmetricKeyData(privKey); 

Wenn ich in diesen Verfahrensschritt für Dateien, die ich ohne Probleme entschlüsseln kann, habe ich, dass der keyData.Algorithm bemerkt Variable wird auf "ElGamalEncrypt" gesetzt, während für Dateien, die die Ausnahme auslöst, die Datei keyData.Algortithm auf "RsaGeneral" gesetzt ist. Warum unterscheiden sich diese? Hat die Firma, die mir die Dateien sendet, 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); 
    } 

Auch, nicht sicher, ob dies verwandt ist, ist der Zertifikatstyp unseres Schlüssels DSA.

enter image description here

Update 3 - Ich war nicht in der Lage, herauszufinden, wie das Problem als der noch angesichts der aktuellen Schlüssel zu lösen. Ich habe gestern neue Schlüssel (Typ DSA) generiert und mit den neuen Schlüsseln wurde das Problem gelöst.

Update 4 - Dieses Problem ist gerade wieder aufgetreten, mit dem neuen Schlüssel, der in meinem letzten Update funktionierte. Noch einmal, der keyData.Algorithm innerhalb der PgpPublicKeyEncryptedData-Klasse wird jetzt zu "RsaGeneral" anstelle von "ElGamalEncrypt" geführt. Warum ändert sich die Eigenschaft "Algorithm"? Ändert die Person, die die Datei verschlüsselt, etwas?

+3

Bitrot. xxxxxxx – Joshua

+2

Vielleicht ist das Zertifikat mit den RSA-Schlüsseln abgelaufen? Kannst du das überprüfen? – Oleksi

+0

Ich habe das vorher überprüft und nur einen Screenshot hinzugefügt, unser Schlüssel hat kein Ablaufdatum. Außerdem kann ich die Dateien mit einem Dienstprogramm wie Kleopatra mit denselben Schlüsseln manuell entschlüsseln. Also die Schlüssel sind gut. – mservidio

Antwort

0

Sieht aus wie eine andere Partei zu anderen/anderen Schlüsseln verschlüsselt. Wahrscheinlich enthält Ihr Schlüsselbund auch RSA-Schlüssel, aber BouncyCastle verwendet nur den ersten (???). GPG verwenden, können Sie den Inhalt Ihrer verschlüsselten Datei überprüfen, indem gpg --list-Pakete Ausgabe YourEncryptedFile.pgp

Danach den gleichen Befehl ‚gut‘ Datei, anzuwenden und zu Ihren Schlüsselbunden und Schlüsselkennungen vergleichen zu welcher Datei ist verschlüsselt Da Sie DSA-Schlüssel verwenden, sollte die Datei zum ElGamal-Unterschlüssel verschlüsselt werden.

Verwandte Themen