【问题标题】:PGP Encryption with BouncyCastle C# causes invalid key warning on signature verification使用 BouncyCastle C# 进行 PGP 加密会导致签名验证时出现无效密钥警告
【发布时间】:2009-02-05 19:54:08
【问题描述】:

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

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

当我们尝试使用 PGP Desktop 解密和验证类似加密的文件时,文件验证时不会发出警告。

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

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

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

感谢任何有关如何解决此问题的见解。

【问题讨论】:

    标签: c# bouncycastle pgp


    【解决方案1】:

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

    失败的场景:

    1. 在 PGP 桌面(RSA v4、2048/2048)中创建密钥
    2. 在 BouncyCastle 中加密(DH/DSS、Elgamal)
    3. 登录 BouncyCastle(使用 RSA 密钥)
    4. 在 PGP Desktop 中解密和签名验证成功。
    5. McAfee Business Server 中解密成功,但签名验证失败。

    为了使 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);
    

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2017-06-29
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      相关资源
      最近更新 更多