使用BouncyCastle C#进行PGP加密会导致签名验证无效密钥警告

时间:2009-02-05 19:54:09

标签: c# bouncycastle pgp

我们需要PGP加密文件并通过FTP将它们发送给第三方。文件使用第三方的DH / DSS公钥加密,并使用我们的私钥进行签名。

第三方拥有我们的公钥和他们自己的私钥。加密/解密有效,但第三方在尝试验证我们的签名时会收到警告。

当我们尝试使用PGP Desktop解密和验证类似的加密文件时,文件会在没有警告的情况下进行验证。

第三方正在使用“McAfee E-Business Server”

确切的警告是: 警告:签名错误,与文件内容不匹配! 来自用户“用户名”的错误签名

代码有点牵扯,但是I posted it on my blog。如果更合适的话,我可以在这里发布而不是链接。

对于如何解决这个问题的任何见解表示赞赏。

1 个答案:

答案 0 :(得分:2)

虽然我无法详细解释问题的细节,但这是一个有效的解决方案。 首先,似乎不同的PGP实现对于使用哪个程序来生成正在使用的密钥非常敏感。

失败的情况:

  1. 在PGP Desktop(RSA v4,2048/2048)中创建密钥
  2. BouncyCastle加密(DH / DSS,Elgamal)
  3. 登录BouncyCastle(使用RSA密钥)
  4. PGP Desktop中的解密和签名验证成功。
  5. 解密成功,但McAfee Business Server中的签名验证失败。
  6. 为了使McAfee Business Server成功验证密钥,可以使用BouncyCastle源代码中的代码在BouncyCastle中创建密钥。(Org.BouncyCastle.Bcp​​g.OpenPgp.Examples.RsaKeyRingGenerator) 如果您需要特定的密钥属性,可以更改此代码。

    另一种方法是使用McAfee Business Server生成密钥。为此,您需要访问该软件。我用试用版进行了测试。 (顺便说一句,这是颈部起床和跑步的痛苦)

    更新:我在E-Business Server 8.5.3(试用版)上完成了所有测试。我达到了可以加密并登录Bounty并在E-Business Server中解密和验证的程度。事实证明第三方正在使用拒绝验证签名的E-Business Server 7.0。 为了使一切正常,我们需要创建V3签名。

    我们改变了:

    PgpSignatureGenerator pgpSignatureGenerator = new PgpSignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);
    

    PgpV3SignatureGenerator pgpV3SignatureGenerator = new PgpV3SignatureGenerator(m_encryptionKeys.SecretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);