私は、PGP 復号化に Bouncy Castle を使用するアプリケーションを使用しており、過去 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 を使用してファイルを手動で復号化することもできます。
更新 1 - OpenPGP Library for .NETの無料試用版をダウンロードしました。これは BouncyCastle も使用しているようですが、同じキーを使用してファイルを復号化しても問題はありません。数か月動作していた BouncyCastle を使用した復号化の実装が、何らかの理由で動作しなくなりましたが、まだ特定できていません。
更新 2 - 機能した先週のファイルを取得しました。また、BouncyCastle のソース コードもダウンロードして、ステップスルーしてデバッグし、例外がスローされている場所と、機能するファイルと機能するファイルとの間で変数がどのように異なるかを確認できるようにしました。動かないファイル。PgpPublicKeyEncryptedData クラスの GetDataStream メソッドの先頭で例外がスローされています。
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 です。
更新 3 - 現在のキーが与えられた時点で、問題を解決する方法を理解できませんでした。昨日新しいキー (タイプ DSA) を生成しましたが、新しいキーで問題は解決されました。
更新 4 - この問題は、前回の更新で機能した新しいキーで再び発生しました。繰り返しになりますが、PgpPublicKeyEncryptedData クラス内の keyData.Algorithm は、「ElGamalEncrypt」ではなく「RsaGeneral」に表示されます。Algorithm プロパティが変更されるのはなぜですか? ファイルを暗号化している人は何かを変更していますか?