【问题标题】:Using two public keys to encrypt a file使用两个公钥加密文件
【发布时间】:2012-12-14 21:03:28
【问题描述】:

我不确定这是否是这个问题的正确位置,因为这可能更像是一个基于理论的问题。但我也对以下的 C# 实现感兴趣。以及它的可行性如何

我打算使用 PGP 对文件进行加密和解密。是否可以使用两个公钥(我的公钥和接收者的公钥)加密文件,以便我能够使用其中一个私钥解密文件。 这种情况可行吗? 那么我应该采取什么方向来正确实施相同的方法。 任何帮助将不胜感激

【问题讨论】:

  • 不是相当于每个文件存储两份,一份用key_1加密,一份用key_2加密吗?
  • 这可以通过 PGP 实现,正如 Victor 的回答在下面解释的那样。混合方法的工作方式是生成随机对称密钥,并使用 AES 之类的东西进行批量加密。然后随机会话密钥在每个收件人的公钥下加密,因此您仍然只有 1 个消息副本,但可以被多方读取。它也明显更快,因为公钥算法往往非常慢,因此您希望尽量减少它处理的数据。

标签: cryptography public-key-encryption pgp


【解决方案1】:

在高级别(如果您使用任何 PGP API),是的,您可以将两个或更多公共 PGP 密钥传递给 OpenPGP API(或软件)并加密数据。然后,您将能够使用与任何使用的公共 PGP 密钥相对应的 PGP 密钥来解密数据。

在较低级别 - OpenPGP 总是生成一个对称密钥来加密数据,然后使用一个或多个公共 PGP 密钥对该密钥进行加密,因此使用多少个密钥没有区别。

现在,使用什么取决于您使用的平台和开发环境(因为这是一个编程站点,我们假设您要在代码中加密数据)。对于 Linux 和 C,存在 GnuPG 库。对于 Java 和 C#,BouncyCastle 中有一些 PGP 支持。最后,我们的 SecureBlackbox 库的 OpenPGPBlackbox 为多种平台和语言(包括 .NET、VCL、ActiveX 和 C++)提供了完整的 OpenPGP 功能。

附带说明,您接受的答案是完全错误的,因此我强烈建议您不接受它。

【讨论】:

  • 我能够理解您的回答并完成我的工作。 !谢谢
【解决方案2】:

看看这个维基页面:

http://en.wikipedia.org/wiki/Pretty_Good_Privacy

你会看到实际数据是用随机密钥加密/解密的,而这个随机密钥是用相应的公钥/私钥加密/解密的。

因此,您不必使用两个密钥来加密文件(数据)。您仍然使用一个随机密钥加密数据。唯一的区别是您使用多个公钥(例如您的和接收者的)加密这个随机密钥。

因此,你们中的任何人都可以使用私钥解密随机密钥并解密数据。

【讨论】:

    【解决方案3】:

    这个问题也可能属于 crypto.stackexchange.com,但在这里也可以。我不确定您是否了解 PGP 的原理。公钥用于加密,私钥用于解密。因此,如果您使用您的公钥对其进行加密,则接收者将使用他/她的私钥来解密和/或签名。

    我建议您阅读有关 RSA 或 ElGamal 算法的更多信息。希望对你有帮助:

    这两种算法都提供了一个很好的起点。或者您可能想加入斯坦福大学提供的一些在线课程:

    【讨论】:

    • vlad,谢谢您的回复。你的链接信息量很大。我只是想知道是否可以使用两个公钥加密文件,这两个公钥可以使用任何一个密钥解密,而不需要两个密钥。我的目标是为各种客户端使用多个公钥加密文件,以便所有人都可以使用他们的私钥解密。我只是想知道这是否可行
    • 确实有可能。我不记得正确的算法,但 bruce schneier 的书正在展示它。 “应用密码学”在这里将对您有所帮助。但它比你想象的要复杂。用两个公钥加密需要用两个私钥解密。创建私钥和/或公钥之间的关系是必要的。可以在 icar 上找到另一个信息文档:iacr.org/archive/eurocrypt2000/1807/18070262-new.pdf
    【解决方案4】:

    我可以看到它工作的唯一方法是拥有一个包含两个文件的 zip 或 tar 存档:一个使用密钥 1 加密,另一个使用密钥 2。

    如果文件是文本,您可以将同一原始文件的两个不同加密版本粘贴到一个文档中。

    没有办法加密文件,因此可以使用我知道的两个不同的密钥对其进行解密。

    【讨论】:

    • 正确的做法是生成一个随机对称密钥用于批量加密,然后在每个接收者的公钥下加密会话密钥。公钥算法无论如何都无法处理重要数据,因此最好使用混合方法。
    猜你喜欢
    • 2017-01-04
    • 2011-03-30
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多