天天看点

使用GPG加密通讯,设置git提交验证密钥

使用命令行创建 GPG 密钥

使用以下 shell 命令:

gpg2 --full-gen-key
           

此命令生成由公钥和私钥组成的密钥对。其他人使用您的公钥来验证和/或解密您的通信。分发您的公共密钥尽可能广泛地,尤其是你知道将要收到你正宗的通信,如邮件列表谁的人。例如,Fedora 文档项目要求参与者在他们的自我介绍中包含一个 GPG 公钥。

一系列提示将指导您完成整个过程。如果需要,按Enter键分配默认值。第一个提示要求您选择您喜欢的键类型:

请选择您想要的密钥类型:
   (1) RSA 和 RSA(默认)
   (2) DSA 和 Elgamal
   (3) DSA(仅签名)
   (4) RSA(仅签名)
你的选择? 
           

在几乎所有情况下,默认值都是正确的选择。RSA/RSA 密钥不仅可以让您签署通信,还可以加密文件。

接下来,选择密钥大小:

RSA 密钥的长度可能在 1024 到 4096 位之间。此处几乎总是推荐更大的,但您的用例和安全模型可能另有规定。
你想要什么键大小?(2048)
           

同样,默认值对于几乎所有用户来说都足够了,并且代表了极强的安全级别。

接下来,选择密钥何时到期。最好选择一个到期日期而不是使用默认值,即无。 例如,如果密钥上的电子邮件地址无效,到期日期将提醒其他人停止使用该公钥。

请指定密钥的有效期。
         0 = 密钥不会过期
      <n> = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后到期
      <n>m = 密钥在 n 个月后到期
      <n>y = 密钥在 n 年后到期
密钥对什么有效?(0)
           

1y

例如,输入值使密钥有效期为一年。(如果您改变主意,您可以在生成密钥后更改此到期日期。)

gpg

程序要求签名信息之前,会出现以下提示:

这是否正确(是/否)?
           

输入

y

以完成该过程。

接下来,输入您的姓名和电子邮件地址。 请记住,此过程是关于验证您是一个真正的个体。 因此,请包括您的真实姓名。不要使用别名或句柄,因为它们会伪装或混淆您的身份。

输入您的 GPG 密钥的真实电子邮件地址。如果您选择了一个虚假的电子邮件地址,其他人将更难找到您的公钥。这使得验证您的通信变得困难。例如,如果您使用此 GPG 密钥 在邮件列表中进行自我介绍,请输入您在该列表中使用的电子邮件地址。

使用注释字段包含别名或其他信息。(有些人出于不同目的使用不同的键,并用注释标识每个键,例如“Office”或“开源项目”。)

在确认提示时,如果所有条目都正确,则输入字母O以继续,或者使用其他选项来解决任何问题。

最后,为您的密钥输入密码。该

gpg

程序要求您输入密码两次以确保您没有打字错误。

最后,

gpg

生成随机数据以使您的密钥尽可能唯一。在此步骤中移动鼠标、键入随机键或在系统上执行其他任务以加快进程。完成此步骤后,您的密钥就已完成并可以使用:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /home/liran/.gnupg/trustdb.gpg: trustdb created
gpg: key AA605BD95861C17D marked as ultimately trusted
gpg: directory '/home/liran/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/liran/.gnupg/openpgp-revocs.d/C3DE08A566518301A589E395AA605BD95861C17D.rev'
public and secret key created and signed.

pub   rsa3072 2021-08-31 [SC] [expires: 2021-09-02]
      C3DE08A566518301A589E395AA605BD95861C17D
uid                      liran (i am liran) <[email protected]>
sub   rsa3072 2021-08-31 [E] [expires: 2021-09-02]
           

导出公钥

现在您的密钥对已经生成,您需要导出公钥以分发给其他人。在终端中运行命令:

gpg --export --armor [email protected] > liran-pubkey.asc
           

“确保更改”[email protected]’生成PGP密钥时提供的电子邮件地址。现在您将在当前目录中看到一个名为我的钥匙.asc. 将此文件发送给您希望能够向您发送加密邮件的任何人。

打印公钥,并上传到 服务器

[[email protected] ~]$ gpg --armor --export [email protected]
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=x+Rh
-----END PGP PUBLIC KEY BLOCK-----
           

导入公钥

与您现在可以与其他人共享您的公钥一样,其他人也将与您共享他们的公钥。当您收到某人的公共PGP密钥时,将文件保存到一个目录,并从同一目录访问终端,运行:

gpg --import key.asc
           

这将把此人的公共PGP密钥导入gnupg,允许您开始向他们发送加密消息。您可以随时查看gnupg中当前可用的所有PGP密钥的列表:

gpg --list-keys
           

您将看到一组类似于下面的条目,gnupg中每个键对应一个条目:

gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2021-09-02
/home/liran/.gnupg/pubring.kbx
------------------------------
pub   rsa3072 2021-08-31 [SC] [expires: 2021-09-02]
      C3DE08A566518301A589E395AA605BD95861C17D
uid           [ultimate] liran (i am liran) <[email protected]>
sub   rsa3072 2021-08-31 [E] [expires: 2021-09-02]
           

您需要注意的唯一信息是条目的名称和电子邮件地址,其中说明了该密钥的所有者。加密邮件时,您只需要收件人的电子邮件地址。

通过pgp加密消息

例如,您可能需要将一些敏感信息发送给您的web设计师,他是您已在电子邮件地址下导入的PGP密钥designe[email protected]。键入所需的消息并将其保存到文本文件中,例如。消息.txt. 在终端和目录内消息.txt请运行以下命令:

gpg -e -a -r '[email protected]' message.txt
           

让我们快速分解上述命令:

  • -e指定我们正在加密数据
  • -a表示我们希望输出为ASCII或纯文本格式
  • -r代表收件人,所以后面跟着设计师的电子邮件地址
  • 最后是我们想要加密的消息文件

很可能这会要求您确认您确实希望加密到这个公钥,您只需点击Y键就可以了。一个新的消息.txt.asc文件将被创建,如果您在文本编辑器中打开该文件,您将看到类似的内容:

-----BEGIN PGP MESSAGE-----
hQGMAzCBDnMltq9zAQv/ZHQ3tJq+feazdLa3thzQE2bhPx+7WaPZcX7SdkoyuKvw
 9faS7h9OwBjQ4vUyDKespSq3ZNf1pRgNoXijjs3MGEi5IsYxDgNWo1ZJv2qQqp36
 .....
 -----END PGP MESSAGE-----
           

这是新生成的加密形式的消息。您可以将此文件附加到电子邮件中,也可以将此文件的内容复制并粘贴到电子邮件的正文内容中。

然后,接收者将能够使用他们的私钥对消息进行解密,从而确保在传输过程中看到此消息的任何人都无法查看纯文本版本。

加密二进制文件

上面的部分解释了如何加密文本消息,但是二进制文件呢?它的工作原理基本相同,例如加密一个名为图片.zip,在终端中运行命令:

gpg -e -r '[email protected]' images.zip
           

唯一的区别是-a选项与输出文件的名称一起被删除。然后像以前一样,如果提示确认公钥的使用,只需按Y键即可。

一个名为图片.zip.gpg将被创建,这是我们的zip文件的加密版本,我们可以通过电子邮件作为附件发送给我们的设计师。然后他们可以使用私钥解密ZIP文件。

解密消息

您还需要一种方法来解密发送给您的消息。请记住,为了让某人向您发送加密邮件,您必须首先与他们共享您的公共PGP密钥。您将得到一个加密的文本块,它看起来与加密消息相同,例如:

-----BEGIN PGP MESSAGE-----
hQGMAzCBDnMltq9zAQv/ZHQ3tJq+feazdLa3thzQE2bhPx+7WaPZcX7SdkoyuKvw
 9faS7h9OwBjQ4vUyDKespSq3ZNf1pRgNoXijjs3MGEi5IsYxDgNWo1ZJv2qQqp36
 .....
 -----END PGP MESSAGE-----
           

将此文本块保存到文件中,例如消息.asc,并在终端中运行命令:

gpg -d message.asc > message.txt
           

系统将提示您输入密码,该密码与最初生成PGP密钥对时提供的密码相同。成功输入密码后消息.txt将创建一个文件,其中包含明文形式的消息的解密版本。就这些!

gpg加密git

配置 git 签名时使用的 key,,如果不知道

KEYID

可以通过

gpg --list-key

查看。

git config --global user.signingkey YOUR_KEYID
           

设置 git 自动签名

git config --global commit.gpgSign true
git config --global tag.forceSignAnnotated true
           

恭喜,你的通讯现在安全了!

通过本指南,您了解了通过PGP加密正确保护通信安全所需的一切。您已经学习了如何生成PGP密钥对、导出要共享给其他人的公钥、导入其他人的公钥,以及如何加密和解密消息。

下次您需要通过电子邮件发送敏感信息时,您现在可以放心,只有预期的收件人才能看到邮件的内容,使邮件远离不受欢迎的客人。加密快乐!