我正在为一些系统制作更新,希望通过加密来保持机密性、完整性和签名的有效性。我想用我的私钥加密文件并将其发送给客户,以便他们可以使用我的公钥进行解密。但GPG的工作方式是使用公钥加密和私钥解密。我不想发送我的私钥,以便我可以更改它并向其他人发送公钥。有什么想法吗?
我正在为一些系统制作更新,希望通过加密来保持机密性、完整性和签名的有效性。我想用我的私钥加密文件并将其发送给客户,以便他们可以使用我的公钥进行解密。但GPG的工作方式是使用公钥加密和私钥解密。我不想发送我的私钥,以便我可以更改它并向其他人发送公钥。有什么想法吗?
你的意思在gpg术语中不叫做"加密",而是叫做"签名"。
签名基本上是用你的私钥进行加密,然后用公钥进行解密。
使用:
gpg --sign myfile.ext
或者使用您的电子邮件客户端的签名功能。
签名显然会让所有拥有您的“公钥”的人都能读取文件内容(由于“公钥”通常是公开的,这将允许每个人解密内容)。
如果您正在寻找一种只有收件人才能解密内容的方法,那么您需要以一种只有收件人可以访问解密令牌的方式加密数据。显然,收件人需要拥有这样的令牌(也就是说,您使用他们的公钥进行编码,因此他们可以使用自己的私钥进行解码)。
更新
简而言之:如果您想保证完整性(即:收件人确实知道数据来自您而不是其他人),则需要签名数据。 如果您想保证机密性(即:只有您的收件人可以阅读数据),则需要加密数据。
无论是签名还是加密,它们其实都是同一件事情。 唯一的区别在于,谁可以访问密钥。
使用签名时,您使用私钥加密数据,可以使用公钥解密(由于每个人都可以访问公钥,因此每个人都可以解密它,从而每个人都可以验证数据已由您签名)。
使用加密时,您使用收件人的公钥加密数据,他们使用自己的私钥解密它(所以只有他们能读取它;但是任何人都可以向他们发送加密的数据,他们无法保证它确实来自发件人,但可以确保只有他们能读取它)。
如果您需要机密性和完整性,需要同时进行签名和加密,并且为此,您和您的收件人都需要拥有(不同的)公钥/私钥对。
结论
由于签名和加密其实是相同的,只要您完全掌控涉及的密钥的可用性,就可以使用两者来保证数据的有效性和完整性。