如何使用gpg中的私钥加密文件

时间:2013-01-21 07:47:57

标签: linux encryption public-key-encryption private-key gnupg

我正在为某些系统生成更新,我想加密更新以保持我的签名的机密性,完整性和有效性。我想用我的私钥加密文件并将它们发送到我的客户端,以便他们可以使用我的公钥解密它。但GPG的工作方式是使用public进行加密,使用private进行解密。我不想发送我的私钥,以便我可以更改它并将公钥发送给其他任何人。知道怎么做???

5 个答案:

答案 0 :(得分:15)

你的意思不是称为“加密”,而是用gpg术语“签名”。

签名基本上是使用您的私钥加密并使用公钥解密。

使用

 gpg --sign myfile.ext

或使用您的电子邮件客户端的签名功能。

签名显然允许任何有权访问您的“公共”密钥的人阅读您的文件内容(因为“公共”密钥通常是,嗯......,公共,这将允许所有人对内容进行解密。)

如果您正在寻找只有收件人可以解码内容的方法,那么您需要以只有收件人才能访问解密令牌的方式加密数据。显然,收件人需要有这样的令牌(即:您使用公共键进行编码,以便他们可以使用私有键进行解码)

<强>更新

简化:如果你想保证完整性(即:收件人确切知道,数据来自而没有其他人),你需要签署数据。 如果您想保证机密性(即:只有您的收件人才能读取数据),您需要加密数据。

签名加密都是一回事。 唯一的区别是,谁有权访问密钥。

使用签名,您可以使用私钥加密数据,并使用您的公钥解密(因为每个人都可以访问公钥,所以每个人都可以解密它,因此每个人都可以验证数据是否已由

签署

使用加密,您使用收件人公钥来加密数据,并使用他们的私钥对其进行解密(因此只有他们可以读取它;但是每个人都可以向他们发送加密数据,他们无法保证它真的来自发件人,但保证只有他们才能阅读它。)

如果您需要机密性和完整性,则需要同时进行签名和加密,为此,您和收件人都需要拥有(不同的)公钥/私钥对。

<强>结论

由于签名和加密都是一回事,只要您完全控制所涉及的密钥的可用性,就可以同时使用它们来保证数据的有效性和完整性。

答案 1 :(得分:8)

GnuPG要求您发布私有密钥才能加密文档,这是不正确的。您从不将私钥发布给任何人。

GnuPG支持两种不同的加密方法,非对称对称加密。

非对称加密需要知道收件人的公钥。这通常不是问题,因为名称已经表明这些密钥不是秘密,但每个人都知道。要再次解密,只能使用私钥,只有收件人才知道。使用GnuPG的非对称加密是使用--encrypt选项完成的。

如果您不知道收件人的 public 密钥,则可以使用对称加密,其中双方共享相同的密钥。当然,这需要用于传输共享秘密的安全信道。对于对称加密,请使用--symmetric选项。这里既不需要公钥也不需要私钥,但是共享密钥的安全交换使得对称加密容易受到攻击。

如果您只需要完整性问责制(如果没有检测到该文档并且您能够验证是谁创建/签署了该文档),那么您可以使用--sign选项使用私钥创建签名。每个有权访问公钥的人都可以检查此签名,以验证完整性和问责制。但请注意,每个人都可以阅读原始邮件内容,因为此签名是无加密。生成的.gpg文件看起来像二进制数据,但只包含压缩但不包含加密文本。您还可以通过指定--compress-level 0来禁用压缩,您将看到输出文件以纯文本格式包含原始邮件。因此,如果您需要机密性,请不要使用此选项。

答案 2 :(得分:2)

我正在研究类似的问题:从中央源分发软件更新,以应用于该领域的许多最终用户。最终用户需要验证更新来自官方来源(使用私钥签名),但我还希望更新以机密方式(加密)进行。

在30年前我在大学的密码学课程中,他们教过用私钥加密与签名邮件是一回事 - 当收件人使用公钥解密时,事实是:他们没有得到胡言乱语确认使用私钥加密。如果公共密钥保持在靠近背心的位置,这也提供了保密措施,&#34;这将是我的首选实施。

正如其他人所说,我已经确认gpg --sign操作不会对邮件进行加密,邮件在签名文件中以明文形式显示。为了使用gpg通过私钥签名实现某些真实性,并采用合理的保密措施,除了更新分发者的公钥之外,我已经确定了为基于字段的接收者提供他们自己的密钥对的解决方案。 。这不是一个非常安全的解决方案,任何人都可以在现场对设备进行逆向工程,并获得“秘密”#34;它将持有的密钥,因为它们可以解密签名的更新消息并查看其明文内容。他们不能做的是在其上创建一个带有经销商密钥签名的文件,因此他们无法更新他们自己的文件,这些更新将被现场的设备接受,这些设备正在寻找他们的公共加密密钥,以及来自更新分发者的私钥的签名。

这是曝光程度的问题。对于无法访问端点设备进行逆向工程的任何人来说,传输中的更新都是安全的。通过对端点的物理访问(我们无法阻止),他们最终将能够对已安装的软件进行逆向工程,甚至是更新本身,但他们永远无法签署自己的更新并将其推送到未受损害的机器。至少只要RSA是安全的。

答案 3 :(得分:0)

简单回答:忘记的想法。您只需要一个共享密钥密码。所以和你的客户在一起。打电话给他们。或者如果你是偏执狂,那就去面对面吧。同意您将分享的密码并将其保密至您需要的密码。根据我的经验,我建议一起使用diceware来选择共享密码。你们两个都保留了这个共享秘密的安全副本。如果你是偏执狂,不要写下来 - 记住它!现在,您可以使用该共享密钥作为密码来加密任何内容。任何对称加密工具都可以为您做到这一点,包括GPG

答案 4 :(得分:-4)

您可能需要为此明确目的使用单独的密钥对,并分发私有密钥,同时保持公钥密钥(是的,它与条款有关;)然后,您只需使用公钥正常加密更新,您的收件人就可以使用私钥解密它们。

相关问题