我正在为某些系统制作更新,并且我想加密更新以保持我的签名的机密性、完整性和有效性。我想用我的私钥加密文件并将它们发送给我的客户,以便他们可以用我的公钥解密它。但是 GPG 的工作方式是使用公共加密和私人解密。我不想发送我的私钥,以便我可以更改它并将公钥发送给其他任何人。知道怎么做吗???
5 回答
您的意思不是“加密”,而是 gpg 术语中的“签名”。
签名基本上是用你的私钥加密并用公钥解密。
利用
gpg --sign myfile.ext
或者使用您的电子邮件客户端的签名功能。
签名显然将允许任何有权访问您的“公共”密钥的人读取您的文件的内容(并且由于“公共”密钥通常是,嗯......,public,这将允许每个人解密内容)。
如果您正在寻找一种只有收件人才能解码内容的方法,那么您需要以只有收件人才能访问解密令牌的方式对数据进行加密。显然收件人需要有这样的令牌(即:你用他们的公钥编码,所以他们可以用他们的私钥解码)
更新
简单来说:如果你想保证完整性(即:接收者肯定知道,数据来自你而不是其他人),你需要对数据进行签名。如果要保证机密性(即:只有您的收件人可以读取数据),则需要对数据进行加密。
签名和加密实际上是一回事。唯一的区别是,谁可以访问密钥。
使用签名,您可以使用您的私钥加密数据,并且可以使用您的公钥对其进行解密(并且由于每个人都可以访问公钥,因此每个人都可以解密它,因此每个人都可以验证数据是否已由你)
使用encrypting,您使用收件人的公钥加密数据,他们使用他们的私钥解密数据(所以只有他们可以读取它;但是每个人都可以向他们发送加密数据,他们不能保证它真的来自发件人,但保证只有他们可以阅读)。
如果您需要机密性和完整性,则需要同时进行签名和加密,并且要使其正常工作,您和您的收件人都需要拥有(不同的)公钥/私钥对。
结论
由于签名和加密是同一件事,只要您完全控制所涉及密钥的可用性,您就可以使用两者来保证数据的有效性和完整性。
GnuPG 要求您发布您的私钥来加密文档是不正确的。你永远不应该向任何人公开你的私钥。
GnuPG 支持两种不同的加密方法,非对称加密和对称加密。
非对称加密需要知道收件人的公钥。这通常不是问题,因为顾名思义,这些密钥不是秘密,而是每个人都知道的。为了再次解密它,只能使用只有您的收件人知道的私钥。使用 GnuPG 的非对称加密是通过该--encrypt
选项完成的。
如果您不知道收件人的公钥,那么您可以使用双方共享相同密钥的对称加密。当然,这需要一个用于传输共享秘密的安全通道。对于对称加密,请使用该选项。这里既不需要公钥也不需要私钥,但是共享密钥的安全交换使得对称加密容易受到攻击。--symmetric
如果您只需要完整性和问责制(如果不检测文档就无法修改文档,并且您能够验证是谁创建/签署了它),那么您可以使用该选项使用您的私钥--sign
创建签名。每个有权访问您的公钥的人都可以检查此签名以验证完整性和问责制。但请注意,每个人都可以阅读您的原始邮件内容,因为此签名未加密。生成的 .gpg 文件看起来像二进制数据,但仅包含压缩但未加密的文本。您还可以通过指定禁用压缩--compress-level 0
您将看到输出文件包含您的纯文本原始消息。因此,如果您想保密,请不要使用此选项。
我正在研究一个类似的问题:从中央源分发软件更新,以应用于该领域的许多最终用户。最终用户需要验证更新是否来自官方来源(使用私钥签名),但我也希望更新以保密方式传播(加密)。
在大约 30 年前我在大学上的密码学课程中,他们教导说用一个人的私钥加密与签署一条消息是一样的——当接收者使用公钥解密时,他们没有得到胡言乱语的事实证实了使用要加密的私钥。如果公钥保持“接近背心”,这也提供了一种保密措施,这将是我的首选实施方式。
正如其他人所提到的,我已经确认 gpg --sign 操作不会加密消息,消息在签名文件中以明文形式可见。为了使用 gpg 通过私钥签名实现一定的真实性和合理的保密措施,除了更新分发器的公钥之外,我决定为基于字段的接收者提供自己的密钥对的解决方案. 这不是一个非常安全的解决方案,任何人都可以在现场对设备进行逆向工程并获得它将持有的“秘密”密钥,他们可以解密签名的更新消息并查看其明文内容。他们不能做的是创建一个带有分发者密钥签名的文件,
这是暴露程度的问题。传输中的更新对于任何无权访问端点设备进行逆向工程的人都是安全的。通过对端点的物理访问(我们无法阻止),他们最终将能够对已安装的软件,甚至更新本身进行逆向工程,但他们将永远无法签署自己的更新并将其推送到未受影响的机器上. 至少只要 RSA 是安全的。
简单的答案:忘记keys的想法。您只需要一个共享的秘密密码。所以和你的客户在一起。打电话给他们。或者,如果您偏执,请面对面进行。同意您将共享的密码短语,并根据需要保密。根据我的经验,我建议一起使用 diceware 来选择共享密码。你们俩都保留了该共享机密的安全副本。如果您是偏执狂,请不要写下来——<em>记住它!现在,您可以使用该共享密钥作为密码来加密任何内容。任何对称加密工具都可以为您做到这一点,包括 GPG。
您可能需要有一个单独的密钥对来实现该明确目的,并分发私钥,同时将公钥保密(是的,就条款而言,这是一种倒退);然后您只需使用公钥正常加密更新,您的收件人可以使用私钥解密它们。