PGP/GPG 使用发送者的私钥对消息进行签名。接收者可以使用发送者的公钥来验证签名,从而确认消息的来源和未被篡改。
- 安装GPG:
Linux:Windows:1
2sudo apt install -y gnupg
sudo dnf install -y gnupg
前往下载Gpg4win。 - 打开Terminal,首先创建自己的密钥对:随后会询问一些问题,例如加密方式、算法等,一般保持默认即可;然后会询问密钥对过期时间、姓名、邮箱信息等,按实际需求回答即可。
1
gpg --full-generate-key
中间会询问密码,该密码设置后务必牢记! - 查看本机已有密钥对:会得到如下信息:
1
gpg --list-secret-keys --keyid-format long
记下1
2
3
4
5
6[keyboxd]
---------
sec ed25519/KEY_ID 2025-02-24 [SC] [expires: 2028-02-24]
FINGERPRINT
uid [ultimate] lxnchan <lxnchan@outlook.com>
ssb cv25519/ANOTHER_KEY_ID 2025-02-24 [E] [expires: 2028-02-24]sec
行中的YOUR_KEY_ID
(例如,0123456789ABCDEF
)和YOUR_FINGERPRINT
。 你需要YOUR_KEY_ID
来签名和导出公钥。 - 上传Key到公钥服务器。
注意,这一步不是必须的。
1
gpg --keyserver keys.openpgp.org --send-keys YOUR_KEY_ID
上传好后可以到对应的KeyServer查看是否有你自己的公钥。常见公钥服务器请见Key server (cryptographic) - Wikipedia)。
- 签名信息:
准备好信息,我们这里假设是message.txt
:执行签名:1
2
3
4Sometimes it's the very people who no one imagines anything of
有时候正是那些意料之外的人
who do the things that no one can imagine.
做出了人们意想不到的事随后会让你输入密码,该密码在创建密钥对时设置。1
gpg --clearsign message.txt
签名完成后得到message.txt.asc
文件,该文件是文本文件,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Sometimes it's the very people who no one imagines anything of
有时候正是那些意料之外的人
who do the things that no one can imagine.
做出了人们意想不到的事
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQST2ZfLdtGdaeL2MHH5ougMZxrMzwUCZ7ySOQAKCRD5ougMZxrM
z9U8AP90qo7Ok+TBPg6yM7cVlwzgQA+3BDsGTyg0uowDsCx3ugEAuwT1NEooPvby
JCeTE99C/XMPncm4xLoAh4wlZmSNBQU=
=hz26
-----END PGP SIGNATURE----- - 验证签名:得到如下返回:
1
gpg --verify message_signed.txt
得到1
2
3gpg: Signature made 02/24/25 23:37:29
gpg: using EDDSA key 93D997CB76D19D69E2F63071F9A2E80C671ACCCF
gpg: Good signature from "lxnchan <lxnchan@outlook.com>" [ultimate]Good signature
即为签名有效且数据未被篡改,如果数据被篡改过则有BAD signature
返回:1
2
3gpg: Signature made 02/24/25 23:37:29 ̨
gpg: using EDDSA key 93D997CB76D19D69E2F63071F9A2E80C671ACCCF
gpg: BAD signature from "lxnchan <lxnchan@outlook.com>" [ultimate]