madobet / webooru

Web Danbooru
32 stars 6 forks source link

【安全上网】GPG入门教程 #229

Open madobet opened 4 years ago

madobet commented 4 years ago
最简单好用的 VPS, 没有之一,注册立得 100 美金

本篇是上篇「如何验证身份」的后续。上篇文章有不少留言提到,验证身份可以用 GPG,GPG 比起一次性的 SHA-512 哈希串要强大的多。只要你发布了自己的公钥,就可以无限次的验证身份。而且,GPG 是非常强大的密码学软件,除了用来验证身份,它还可以加密自己的文件,或者在不安全的环境中发送加密消息。现在 GPG 软件已经有 Windows 下的图形界面,就算你不熟悉命令行,图形界面也很容易操作,如果你会用微信,就能学会 GPG。我希望本文不止是一篇验证身份的教程。由于 Windows 非常普及,很多有能量对抗党国的人士未必会用 Linux,而他们又十分需要加密技术,因此有必要写 Windows 下 GPG 的教程。

有几个名词会让人混淆:
PGP 是一款商业软件,是这个加密软件的最初叫法。
OpenPGP 是一种加密格式的交换标准。
GPG 是 GnuPG 的缩写,是按照 PGP 实现的开源版本。以后只要记住 GPG 就可以了。
本文介绍的软件叫做 GPG4Win,是 GPG for Windows 的缩写。GPG 的前身 PGP 还有一段令人唏嘘的小插曲:

由于 PGP 的加密能力实在太强,PGP 加密算法被美国政府认为是武器而禁止出口。PGP 的作者 Zimmermann 把 PGP 的代码写成一本书,尽管武器——枪支、炸药和飞机的出口是受限的,然而书本受到宪法第一修正案(言论自由部分)的保护。最后美国第六巡回法庭和第九巡回法庭做出了同样的判决:软件源代码属于言论自由,受宪法第一修正案的保护。从此之后,美国政府再也不能限制软件源码流通了。

GPG for Windows 的下载地址,下载前认准浏览器左上角的绿色锁头,防止钓鱼。

GPG 的 Windows 前端叫 Kleopatra,GPG 本身只能以命令行操作,Kleopatra 是为了方便操作 GPG 而包的一层图形外壳。在开始菜单里可以找到 Kleopatra,打开 Kleopatra 之后如下

【fig1】

GPG 看上去很复杂,但其实只有两个功能:

(1). 加密 / 解密文件
(2). 签名 / 验证文件

所有 GPG 能办到的事情都是这两条的延伸。如果你要给别人发加密邮件,就可以用 GPG 的加密功能。如果你有一两个文件需要加密,又不想用 VeraCrypt 这样的重量级工具,也不妨试试 GPG 的加密功能。如果你和别人做生意合伙记账,又不希望账本被篡改或者被抵赖,就需要 GPG 的签名功能。

VeraCrypt 和 WinRAR 的加密算法叫做【对称加密】,因为它加密和解密需要相同的密钥(姑且理解成密码)。对称加密的缺点是无法安全的分发密钥,任何知道密钥的人都可以解密你的信息。因此 VeraCrypt 只能加密自己的电脑,没法用对称加密算法去和其他人安全通信。GPG 最大的特点是【非对称加密】,关于非对称加密,请背会这句话

公钥加密,私钥解密

非对称加密加密和解密用不同的密钥。我可以自己保留解密密钥,称为【私钥】。然后我再把加密密钥公开,称为【公钥】。任何人都可以用公钥加密消息,再把加密消息发给我。但是只有我自己的私钥才能解密消息。因此可以用 GPG 在不安全的环境中通信。

这里再以 WinRAR 为例说明非对称加密的工作方式:如果 WinRAR 有非对称加密功能,那么用它加密文件需要两个密码:一个压缩密码,和一个解压密码。你可以把压缩密码发布到网上,任何人都可以用压缩密码给你发加密压缩包。但只有你自己的解压密码才能解压这些压缩包。这里压缩密码就是公钥,解压密码就是私钥,压缩密码和解压密码合在一起叫做【密钥对】。

什么叫【不安全的环境】?举一个例子说明 GPG 的用法。

1. 创建自己的密钥对

假设我打算在品葱上成立一个地下组织,密谋颠覆大清朝廷。现在有一段文字需要通知各位地下党成员:

十月十六日夜八時于武昌長沙點火為號舉事

品葱上时刻有大清网警在监视,显然我不能发贴通知这段消息。用私信也不安全,如果品葱服务器被安插了后门,这条明文消息就会被清政府知道,到时候就人头落地了。那么能不能用 WinRAR 加密以后再发送消息呢?当然也不行。WinRAR 加密和解密需要【相同】的密码,如果用私信发送 WinRAR 密码,那么密码仍然会被清政府截获并拿来解密消息。因此品葱是【不安全的环境】,对称加密无法在这种环境下通信。

GPG 可以在不安全环境下通信。首先,用 GPG 创建一个密钥对(就是一把公钥和一把私钥),私钥必须保密,GPG 会把它加密保存在你的电脑上,但是公钥可以公开。然后你就可以用贴子把公钥发布到品葱上,或者糊网警脸上。别人可以用你的公钥加密消息,再把消息发给你,然后你可以用自己的私钥解密信息。反过来,要给别人群发秘密消息,就要导入他们的公钥,用他们的公钥加密消息再发给他们

你的解密密钥(私钥)是不公开的,发布到网上的只有加密密钥(公钥),所以即使网警拿到了发给你的的加密消息和公开的加密密钥,也无法解密你的消息。只有你自己私有的解密密钥才能解密。同理,如果你用别人的加密密钥给别人发消息,由于你自己没有解密密钥,自己发送的消息甚至自己也不能解密!当然没有解密密钥的网警也不能解密。只有拥有私钥的收件人才能解密。

请记住:加密密钥就是公钥,解密密钥就是私钥。以下将统称为【公钥】和【私钥】。

下面讲创建密钥对的具体步骤。首先点击 GPG 页面上的【新建密钥对】,选择【创建个人 OpenPGP 密钥对】会弹出这个向导,如下图

【fig2】

这里名字和电邮都不是必填项,唯一能区分密钥对的是【密钥 ID】。你可以只填品葱网名以防泄露个人隐私。然后点开旁边的【高级设置】,如下图

【fig3】

私钥在非对称加密中非常重要,一旦私钥被人拿到,别人就可以伪造你的身份,或者解密你的信息。如果你确定自己可以保管好私钥,就取消勾选【有效期结束于】框。RSA 密钥选 4096bit。

目前所有的非对称加密算法都有可能被量子计算机解密,如果 RSA 密钥长度是 N,那么量子计算机就需要 2N 个逻辑量子位才能解密 RSA,解密 4096bit 的 RSA 密钥需要 8192 个逻辑量子位的计算机,现在量子计算机最多不过十几个 logical qbit,离 8192 还差几百倍,在大清灭亡前不用担心非对称加密的安全性。

开始创建密钥时 GPG 会要求你输入 Passphase 来保护私钥(很好的功能!),Passphase 和 password 基本一样,但是 Passphase 里面可以使用空格,安全性比 password 好。以后所有涉及到私钥的操作都需要输入 Passphase。创建好密钥对之后的 GPG 如下图。这里【指纹】和上篇中的 SHA-512 字符串是一个东西,用来保证公钥没有被篡改。如果别人伪造了一个公钥,那么这个公钥指纹就会发生变化。

如果你不知道什么叫【吊销证书】,就不要把公钥上传到【公钥服务器】,不过公钥贴到品葱是安全的。这里直接点击【完成】就可以。

【fig4】

GPG 主界面上会列出你拥有的密钥,自己的【密钥对】以加粗黑体显示,导入的别人的公钥以正常字体显示。GPG 主界面如下图。

【fig5】

在密钥上右击,选择【导出】,就可以导出密钥对里的公钥。选择【导出绝密密钥】可以导出密钥对里的私钥。私钥绝对不能透露给别人,也不要明文保存私钥

公钥和私钥的默认导出格式都是 asc 文件,asc 文件是纯文本,可以用记事本查看。这里以纯文本导出 SONG JIAOREN 的公钥(public key):

-—-BEGIN PGP PUBLIC KEY BLOCK—–

mQINBF2J2PMBEADcIvz2Te79LqjHrrskiDby26FAI7Yw0A4I5J71woC+mm3GN9eC
sg5IOJN1IhKmeI2+qmzLY9d7mDN6OfQRHXRl2OHviiCiFElb01KbxbSBnOvzhkqU
Nyjz3R80PISFOplnctwkvalBGmAAZE6Bbp+YFqUHjGTSGkUQYqcuTxN6Wsk+YrVJ
hu0SYpU9g/y1CnlW6VOHJwYV2lCTnGhv1E4vq7skIt5Wqi7xNnIqsQfyNAhSeySU
815rS04m/pLYCoj4dN+Lc/ziTIApWeEvTNqq9cb0etbqxVFuTiZeTwFeB/H143eC
DHEcBEBpUnnEjr4Y9Bgf24jg2kdmwXoH/rbCcrI6NjJ91Q5EMTxawc/Wv2zC5Qzt
a1MGiXdq/0l+Rx6wnxT0pawT0Yovs38wKQjjpg/bFk/zkbC0p3a35g0KGbwdNYkP
zgoXM2tFgIc3gQA2YyX6mNMRsW+b+I2/ccQT+HQGBGKteCqOirGvPRXIjwigFflY
TfL06ZADhRSjJoMjwHkXjMAXkFv0lCaTTQHj8TaOsZftrCaydBqLbCFMoItl89fb
eyzL+Tll6YzuKx7fUAd6QiCWwWAkOLKzRhrq0BPprFEpCG0ipAbVsVsaDapQs7/Y
TU9zUGTzAPGLtQ4hwZsc1l/Jw3Up8CJ1MmRxcQ9ZMilhur6v0C1z/JzZfQARAQAB
tCpTT05HIEpJQU9SRU4gPHNvbmdqaWFvcmVuQHRvbmdtZW5naHVpLm9yZz6JAk4E
EwEIADgWIQT2HD5N40Nhy167/BNj3pJd3MnTrgUCXYnY8wIbIwULCQgHAgYVCgkI
CwIEFgIDAQIeAQIXgAAKCRBj3pJd3MnTrvc7D/9Uc1UMRc+rmSSw1GVKUuUcA7FE
b2I12ARa3ZTBo++dAd48MiPkClVZM/DTOYBvacQOeVHu8W9B5VkDg5wL8vM9QJVA
L+k7QOSJqx2QQWlQl1IP3654exe9OT3PQrbyjWiGonn+Wa21gu2Z9YZHYBEU94lg
rSdYNA4or5CHa1Ma9U6GyADZNDN+bcDuofEEmcXDzygXpq7i50elCDkpIw0Kz7C1
CEchRXtIZn+k8UE1ZFWm167SqlDLTKCWCWBGLt3pXD7YjjYA754ohqokCJub0tDN
NF2lDi5yK/G1O+XvBGCyeqVPsN/e20q7WnbRLjP2Rxt5GTAt6WyRjex7jfP0gucp
uDzGN6YzJ/rPOeH+62zrJEbK89RBSA/xfmVdmHqDS3j6KGysB5Y4rKUchxpcby1a
O/sF8Awg19j5lxzesijxnzCVGNKY5K4bh/bE3JKNR85D9XHqN/mrbuDq8egXFsdi
1SIwHGjCbhNS9daCkXq3LrhT0q7vvxC5NwMFlPU8+wIoUFa+y12crav0Ty+HaMpn
DJngApvZ/rBrtby6zxfVJxOssrL8k9ot7Gz3g66sClW9qZ5XX/mRtDYu7PbHtfZr
OCWuVzQZx0ODto/xl2nXdAq1u8lzALRGZY3lSq6iLUA72+AsQ9CVz1YtBwj0ur2V
GvGT6TNAdke36aYXUbkCDQRdidjzARAAxIMWnQGqRqqLVv1nZnATrRd8t8W/DSXK
EjG+xWOzrFwQCwqMUZo9ygY/H81eNBAn6FXr+1p3ZfaR/ZHERLSWx4OSueWffazd
+CRl1xOoqmd6gv25Sa6bt8SA/h7B8vtGpuR/XK2m4O6D7i6RyEQwyRtUA+QH0VEb
620rKHj0FlGntMOvz27z6YfSnZnQ96sk3+cor5nl1hbuVFjPz/ve67QpLRmjD2hX
3jglXqY7Uvnvct9JLHzeVgvQ5icjjx4ecPzuB1xxKrlAzNAiFWAEtXmISdJR/enV
5sl8EAdf+A8s1s2JBzIMUZIq0mLSAnD7IOBuj9xhKdyoX1JQyLyW+uyIFWnZm/vn
KjUU//SHmLYKex6yDt2UshyCjCy8nHBk9wWxc0h2U1VU80Wd6+4qI6qjN6ZKtvX8
EjFeJnONoZESiCEgrDXqxLpOeY0BKqGRersGMTtyygt0xhrqI1s88KYmoGHVGX7H
1vSuVfMUC6Ucxv8bjpQ9dK54w8/PGRiwOIiySqlnwaxQHecIT+aq9RWLLyoJsaaC
+N7fBsu4nM8+hhnyL+4HVnGKx6PLh6uPOoiqOjv03MoFNCvzl9njOk3PfVTaA4Cy
MbMhTeiyysrKG0imwy06N2iEelITWg7FSQvyoRySygclV1KrvCXOXLzTwmx44xqL
b+X/mDAP+lEAEQEAAYkCNgQYAQgAIBYhBPYcPk3jQ2HLXrv8E2Pekl3cydOuBQJd
idjzAhsMAAoJEGPekl3cydOuWSkP/0FxZevwInI9+WAiPFK1bsT+IKZSr598fq77
ID5As0CfUO7scHtr4n1Mhauk7W8NeUz0MIxRcb8zD2vhA56nl45BQ89h8cT1At4u
taWNeR69B8YYzKobIiDFCa7pB7IGoc7rT5bGG4xBd3i4bpBMSsjT/pzhBVkzkLV7
7N6FHqAAuGZt7V2IuAB070XgTqWSCx1kTaVmKQKvNcl1klDTvKIboczTle/q+oin
jpjRkyv5SnFIymNLwhGBsx6QZAZZIaIP+AeVySyX44QN64b9caa980EZhOYOD99s
fyiAP3Xgb9Jy5CrR4Vu+y55a9rBn1c4rhgLHhazELvOGacwNlXIwApQ8v76lWuWb
Ic4p/cpy7SIBke71D+kHq8Opw/usV9LSHBMn8suSJtHGMZns0Ru7zwLcJo06J2de
sO0f91rqgCw0VggiOALh3VMateYt6AUJFl6GcKMNhxeGCwufVo68mIEpvfM7cuR7
b/dmuTYtL7OPUfk1G7JRo+haQMw702TbPRyJ0W5YpsDR+aS9dmNN0DhSQF3QIbLU
XoMPVzZ99j/SBAtTzXffLb0wH1rEHZ/JbWNJ/DTMEI3mt0IRWhEUmEuahFtatZaj
Z3qUiA1Pm120Mp7kxDWo0xpP+8PwRw/VZ3QOqVFTmuejE7A/a9eYG9zdJ4OxiW9F
GFvdRWiC
\=wMTG
-—-END PGP PUBLIC KEY BLOCK—–

对应的公钥指纹是

F61C3E4DE34361CB5EBBFC1363DE925DDCC9D3AE

可以把公钥贴到任何地方,无需担心泄密。

这一节的末尾的注意事项:
GPG 公钥私钥都可以导出成文本文件 (asc 文件),私钥需要备份,但绝对不要导出成文本。GPG 提供了一种加密格式. gpg 来保存私钥。

2. 导入别人的公钥(Public key)

要验证别人的身份,或者给别人发加密消息,就要导入别人的公钥。比如现在有一个人叫 JIANG YIWU,他在网上发布了自己的公钥和公钥指纹:

-—-BEGIN PGP PUBLIC KEY BLOCK—–

mQENBF4MeaIBCAC6KOX6SbB4/82G9IUQB3dkabLMyh8cuPIaAjXZdKu8f+xInS8B
H8iPTcFYym4VD2I3xqhAc9a91ZzvoO/hYRmn0QvFDPMM94Gee9H3+pYVa9VZIEPJ
tWh/DTJrhlyRgBoxrQenPdE+zTwKMrjKx9I7dnPEFeuaQekOZhLPUjO76kXXtw8l
UgWHHkQU+Ve6pvuDSrJdN3KOwk51M1wywcmlABoB3ETOwTm7bMhkdX7kLPiJ399p
DpH99FBsMcuMJ0Iq5XAoGVtzMsSv/REzcLDJIdPziuZsLb5oOhXLotMufgCAsXOq
uYbpFqoEWonnKZMs1wbLMHNGgBc8kNIpUnozABEBAAG0JkpJQU5HIFlJV1UgPGpp
YW5neWl3dUB0b25nbWVuZ2h1aS5vcmc+iQFUBBMBCAA+FiEEZdGwgapXznrIb+GY
dyyfEFMHBXUFAl4MeaICGwMFCQPDWB4FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AA
CgkQdyyfEFMHBXWoEgf9GG1klAWOr/pRSCuHA4XNfS4c1gbG5tV0BnB4pGxowjBc
+ymKgtUwc4FqAS006fph3sYBKQtHBotnv4aKRanh7mXpjBOh6JZGRO97MBiJvzWM
BodWfjEopNVUkz5gDpx1gnpAKOF11Yn9nJmku+OmeXZy8ZV2y9kzSUGDUDfK89pG
oVlbojQS12aHC8DUU/vz73zg5Zx7/YndnanHPGZiAP57iUfJRgT9PIoM2i619f6O
JiA6uDAqGzRQkqmdq76i0u1zr8DMUZiN7yr7FGTwT2lZXvbEmdyAgn0egQKGcLAp
C2IhrjnJj0z9BEFe0HW5+jbK4hp/xtVLqlAdl+pT67kBDQReDHmiAQgA1zGp7px9
KBfY4HR2Yc1Z1XX+CDO9J+sgNdTiBGdiX836Gq4D2mJGL8kXyCtFpG9DUW/wwAC9
5nKCZHF091IgEtVNPcY+nWK3Ce+8H6axJSPiG0cCsgEKEjzO10NTbr5UcbUciUvr
nSXaIRAk6wJJcUv5AZCdaucTxIUGgej/43mrnt4s0DPq9b4IGUjNaayxwyhhOVED
+Kc+/5h7TVuQpqy78F9DprvZS3MwEOfRLm3wd5WyCq5g5dsGY36zcnRkBBliYMX4
ofDe/GlWRZmXtIJB1iWDJr6BEBpddSCjq9q+wkOnXIDnHi+kM02Uf9Xtam2uR9ws
l5kS9nF3GBrmfwARAQABiQE8BBgBCAAmFiEEZdGwgapXznrIb+GYdyyfEFMHBXUF
Al4MeaICGwwFCQPDWB4ACgkQdyyfEFMHBXV2iAgAtV+jIQ3kL+i/DTgDq/7LRH+C
D1Sk1xLWA7PkoYRtqYmdgubzSv+FY0Z3f61nCBdxwQXaXISi/+V49wNX44F/zovf
beLJ6lrAU67vGHM4uyFWbEA1ric9/w7yLvv5L4YoE8kBOYqsvG1ZFTjxkshH8DSz
TBoXeJ1C+d4AcOOjh50DwPTQEk63n+tAVESzG2To86wlVEzTcDukhfNAEV+750jv
iCcGchhuIwCBiqUZCrWct+qDqvs7dZ+QZ5WMAE7B3hWLg8ktzPIwKVc/lGqy0hMe
xrngX7TQij+/RTGNUx29K1Zj0nu6Cu7O7QieJBSFmB7c7P0IPnTCB6dhNwvHeQ==
\=6Zf2
-—-END PGP PUBLIC KEY BLOCK—–

指纹:

65D1B081AA57CE7AC86FE198772C9F1053070575

把上面 “—–BEGIN PGP PUBLIC KEY BLOCK—–” 和 “—–END PGP PUBLIC KEY BLOCK—–”这两行和这两行之间的全部内容复制到记事本里,然后保存类型选择【所有文件】,文件名叫 JIANGYIWU.asc

然后在 GPG 的主界面上,点击【导入】,导入公钥文件。这时会弹出一个框问你是否信任这个公钥,点击【是】,就会出来认证证书的窗口。如下图。

【fig6】

最上面的【Fingerprint】就是这份公钥的指纹。这时需要核对 JIANG YIWU 之前公布的公钥指纹和这里 GPG 计算出的指纹,如果两者一致,就可以信任这个公钥。点击【认证】即可。

3. 加密和签名

注意这里的标题是【加密和签名】。GPG 里面加密和签名可以一步完成,十分简单。这里以加密文本消息为例,点击界面上的【记事本】,输入要加密的文字:

十月十六日夜八時于武昌長沙點火為號舉事

【fig7】

点开旁边的【收件人】,选择签名身份,这里我们以 SONG JIAOREN 的身份向 JIANG YIWU 发送加密消息,如图,【签名身份】是你自己的身份,【为他人加密】是你的收件人的身份,这里可以填多个收件人。当然,你需要先导入这些收件人的公钥,才能向他们发加密消息

这里很有意思的选项是【为我加密】,如果不勾选这一项,你就没法查看自己加密的消息了,这就是非对称加密的特点。当然这个选项在某些情况下很有用,如果你被清政府抓住,衙役也没法解密你发送的消息。

【fig8】

加密完成的消息长这样,可以安全地私信别人

-—-BEGIN PGP MESSAGE—–

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
KV5Qt7nvTO9q1n+C
\=xkfT
-—-END PGP MESSAGE—–

如何签名:

如果【为自己加密】和【为别人加密】这两项都不勾选,就可以对一段文字签名,防止消息被篡改。签名不需要导入别人的公钥。但是需要发布自己的公钥,否则别人无法验证。

上面文字以 SONG JIAOREN 的签名是

-—-BEGIN PGP SIGNED MESSAGE—–
Hash: SHA256

十月十六日夜八時于武昌長沙點火為號舉事
-—-BEGIN PGP SIGNATURE—–

iQIzBAEBCAAdFiEE9hw+TeNDYcteu/wTY96SXdzJ064FAl4MhLEACgkQY96SXdzJ
066fEA/+IWYpNt4Jjmkm38IC1Svr6PZgR5Sl4N8fjot+bduQ1XDx5ZdUscA+VC60
E8JS7N706ofe5EW2z5Xz6jqZNVwJViIO3JLvfeENB3PEmQLCSVX1r+8fP0yzFodu
lJNojAhd2hR5JvJVd7D63g8tOEmxCb3lvGFS8E3gkCvI+CrpE235MDRyf0Xei9+4
Q1wXrEGHpHpQN4okaKLZBVypvbacuFn7rrCLLc2f8USCDOGyj/dlondBDxbi8dzN
UV4OzFoZCK9aZrhKotCNlPpugMo5mmfw7e/YIkh1x93ADI/OCjB0vK+ZlPIh3asF
Pys3ld2ATsFocoXgFw5O+gAL/XNRIHmsL04XHDFNRiJh6L+cCY9sfsw00yFFiZmF
rGncxrgZijXGP0rFSNMzz17stce0jKo73NLD1S/PP8RMgMCdAMVNx6HHTM5hpzAG
obuYeXr+yoZ+PZc2RheKGtKYjtHL6XIKhDp2Fv1eaA56+DQZaVGtpBtrohLbjtwL
UgPojX1eq3TG5/YCLn9EPr3YBTP+ZABbuTxRxwyjk7nOp7+7HsJYUoB6p2ABqeuj
CqyRZZg2ie+UnkQauIIG2Mc1pbPIhpwm2/99MpvWY215jxqiK7dDMOrMuUdp/lI4
zMUZYZ7UtCBNSZs3GF9/kdOxeLGADWUCMTC/wZZz4reK6Fccgp0=
\=r/f7
-—-END PGP SIGNATURE—–

这段消息在签名以后,别人就无法篡改它。在下面的【验签】一段可以看到,即使上面的消息被改动一个字,验签的时候 GPG 就会提示验证失败。如果用 GPG 的这个功能来记账,就可以防止账本被篡改,这就是【数字签名】

GPG 还可以加密文件和文件夹,可以作为 VeraCrypt 和~ WinRAR~ 的轻量级替代。具体方法和加密文本差不多,这里就不多说了。

注意:如果你的私钥文件丢失,那就无法解密文件。就算记得 Passphrase 也没用!可以用. gpg 格式导出私钥,.gpg 格式是加密的,只有你的 Passphrase 可以解开。然后把加密的 gpg 文件备份到其它地方。

3. 解密和验签

非对称加密的规则是【公钥加密,私钥解密】(为了加深理解,各位可以想想如果反过来会发生什么),因此发给你的加密消息一定用了你之前发布的公钥,你需要用自己的私钥解密。

假设现在的身份是 JIANG YIWU,因此有 JIANG YIWU 的私钥。把上面的加密消息复制到 GPG 的【记事本】里面,点击【解密 / 验证记事本内容】,就可以看到加密消息。

现在解密上面那一段加密消息,如下图

【fig9】

解密完成

【fig10】

如何检验签名:

签名的规则是【私钥加签,公钥验签】(想想反过来会发生什么),你需要先导入别人的公钥,才能验证这个人的签名。

假如你已经导入了 SONG JIAOREN 的公钥,就可以检验这段话的真实性。把这段文字从 “—–BEGIN PGP SIGNED MESSAGE—–” 开始,复制到 “—–END PGP SIGNATURE—–” 这一行(包括开头和结尾的两行),再粘贴到 GPG 记事本里,点击【解密 / 验证记事本内容】,如果内容没有被篡改。GPG 就和上图一样显示一个绿色的框,提示这是有效的签名,并且显示签署人和签署日期。

如果你下载了 GPG,就可以导入 SONG JIAOREN 的公钥,你可以试着改动一下 SONG JIAOREN 发出的文字,并验证一下上面的消息。任何对这段文字的改动都会导致 GPG 验证失败。

\================

4. 身份验证

身份验证是 GPG 签名的附带作用,比 SHA-512 要复杂一些,步骤是:

(1) 我用大号在某个贴子里发布自己的 GPG 公钥:

-—-BEGIN PGP PUBLIC KEY BLOCK—–

QN4okaKLZBVypvbacuFn7rrCLLc2f8USCDOGyj/dlondBDxbi8dzN
UV4OzFoZCK9aZrhKotCNlP…….(太长省略)
-—-END PGP PUBLIC KEY BLOCK—–

(2) 我因为潜在的安全风险暂时退葱,主号临时封禁。

(3) 确保安全后,用小号注册。按照【加密和签名】这一节的方法,【签名】并发布一段话

-—-BEGIN PGP SIGNED MESSAGE—–
Hash: SHA256

我胡汉三又回来啦!
-—-BEGIN PGP SIGNATURE—–

iQIzBAEBCAAIHmsL04XHDFNRiJh6L+cCY9sfsw00yFFiZmF
rGncxrgZijXz17stce0jKo73NLD1…….(太长省略)
-—-END PGP SIGNATURE—–

(4) 其他人用【导入别人的公钥】这一段的方法导入用户之前发布的公钥,再用【解密和验签】这一段的方法验证。如果签名没有问题就说明是本人。

这种方法也可以在网络的其它地方证明身份。

5. 总结

(1). 给别人发消息:导入别人的公钥 -> 用公钥加密消息 -> 发送消息

(2). 接收别人的消息:创建密钥对 -> 发布自己的公钥 -> 别人用这个公钥发来消息 -> 你用自己的私钥解密消息

(3). 给消息签名:创建密钥对 -> 发布自己的公钥 -> 用自己的私钥给消息签名 -> 把消息和它的签名一起发布

(4). 验证别人的签名:导入别人的公钥 -> 接收消息和它的签名 -> 用公钥验证消息

\=============

从上面可以看出 GPG 的玩法非常多。GPG 进一步的用法还有:吊销证书、管理密钥、使用【主密钥】保护私钥安全。如果有发加密邮件的需求,网上还有很多结合 GPG 和 ThunderBird 发加密邮件的教程,如果会用 GPG 的基本操作,这些应该不难。

作为练习,可以在 GPG4win 的网站上验证一下刚才下载的 gpg4win 安装包。

a. 首先导入 GPG 官方的公钥:
从网页往下找,找到 Intevation File Distribution Key 这个链接,点击下载 ASC 文件,这就是公钥,把它导入 GPG。

b. 接下来 GPG 会要求你确认公钥指纹:Intevation File Distribution Key 链接后面会写着 Fingerprint:XXXXX,核对指纹无误后点击【导入】。

c. 在 GPG 的下载链接上  找到 OpenPGP signature 这个下载链接,下载. sig 签名文件

d. 把. sig 文件和下载的安装包放在同一个文件夹,点击【解密 / 校验】,选择. sig 文件,就可以校验安装包。

最后说一下国产证书的危险性。在验证公钥时,有时会遇到连公钥指纹都不可信的情况。一种解决方法是,用 SHA-512 给公钥算一个哈希值,再找一个大家都信任的人,比如用 @Admin 的私钥加密这个哈希值,并把加密后的 Hash 附在公钥文件的末尾,这就是【数字证书】。如果 Admin 不可信,那么用他的私钥加密的所有公钥文件都将不可信。过去 12306 强推 CNNIC 证书,就是党国在试图当这里的 Admin,控制网络中所有的加密信息,关于 CNNIC 证书的危害可以看编程随想的博文《》。

这几年国产证书有卷土重来的趋势,见这个《国产证书的再次崛起:GDCA 成功进入 Mozilla 根证书库》。由于 tor 浏览器本身基于 firefox,如果 firefox 内置国产证书,那么用 tor 上网也不安全。一定要手动拉黑 tor 浏览器内置的国产证书。

品葱用户 waliesi 评论于 2020-01-01

手机也是一样的功能吗?

品葱用户 广场青年 评论于 2020-01-01

技術貼子一定要強推,已推薦

品葱用户 沉默的广场 waliesi 评论于 2020-01-01

手机也是一样的功能吗?

安卓手机上好像没有 gpg,基本就是筛子

品葱用户 waliesi 沉默的广场 评论于 2020-01-01

安卓手机上好像没有 gpg,基本就是筛子

那这普及面不广,仅限于有电脑的群体

品葱用户 沉默的广场 waliesi 评论于 2020-01-02

那这普及面不广,仅限于有电脑的群体

安卓系统非常不安全。如果信息十分重要,即使 gpg 有安卓版也不能用。

品葱用户 twin 评论于 2020-01-02

有需要的話,建議弄一個跟 CDEncrypt 類似的網頁版本工具,全平台都可以免安裝使用。
和 CDEncrypt 一樣使用瀏覽器自帶的 RSA 加密和簽名功能即可(SubtleCrypto API),甚至可以考慮提交到 CDEncrypt 項目。

品葱用户 币圈奇葩 8964 评论于 2020-01-01

发干货了,这事 ao 的,,,
虽然我币圈人对 GPG 有所了解,但写 GPG 教程实在是太麻烦了,就一直懒得写,你帮我写了,我表示感谢,,,

品葱用户 Glassdoor_67 沉默的广场 评论于 2020-01-01

安卓系统非常不安全。如果信息十分重要,即使 gpg 有安卓版也不能用。

这种说法不太同意了,安卓好歹是 Linux 内核。依旧遵循使用者越多越容易发现漏洞的原则在发展,国产手机又是去谷歌框架的定制化安卓。安全和便利终将有个博弈平衡点去做工程实现,无限制抬杠只会在争吵中迷失自我。

品葱用户 Resistance 沉默的广场 评论于 2020-01-02

安卓系统非常不安全。如果信息十分重要,即使 gpg 有安卓版也不能用。

用【开源】的 Custom ROM,不安装国产 App,还是比较安全滴。

品葱用户 Resistance 沉默的广场 评论于 2020-01-02

安卓手机上好像没有 gpg,基本就是筛子

Android 有 gpg,Termux 里面可以安装。
有一些 App 可以方便地使用 GPG,俺用的是 OpenKeychain 这就 App。

另,
命令行的 gpg 建议用

gpg –full-gen-key –expert

然后选择 ECC 提高安全性。

品葱用户 chemie 评论于 2020-01-03

谢谢作者分享。
虽然看的很吃力,但还算搞明白了。等下就去推广。

品葱用户 admin 评论于 2020-01-02

感谢详细的讲解,我觉得这个知识对品葱非常有用,我暂时置顶了。(by Alleria 好奇试一下” 以 admin 发表”)

品葱用户 meta_chaos 评论于 2020-01-03

关于安卓,大家可以参照 tor project 的这篇博文:
https://blog.torproject.org/mission-impossible-hardening-android-security-and-privacy

个人总结:
不只是安卓,移动设备(mobile devices)本身就是不安全的,你在墙内,就不应该用手机冲塔。

品葱用户 逃离索多玛 评论于 2020-01-03

技术贴,自己暂时用不上但是也要支持一下。

品葱用户 沉默的广场 chemie 评论于 2020-01-02

谢谢作者分享。虽然看的很吃力,但还算搞明白了。等下就去推广。

感谢反馈,我感觉文字标记有些滥用,重新修改了一下。

品葱用户 Glassdoor_67 meta_chaos 评论于 2020-01-03

关于安卓,大家可以参照 tor project 的这篇博文:https://blog.torprojec...

我也看了,有看懂代码和数学公式的能力,找一台不明显的手机自己动手削减代码库。一样能实现高度的安全性,你的总结报告不够深度。

品葱用户 meta_chaos Glassdoor_67 评论于 2020-01-02

我也看了,有看懂代码和数学公式的能力,找一台不明显的手机自己动手削减代码库。一样能实现高度的安全性,…

唔,怎么港,有时间有精力有能力当然可以自补漏洞,甚至自己造手机都行,但是窝萌还是要讲究成本和收益的。
这种操作过于复杂,而且安全性终究还是没有什么保障。
对于一般路过网民,学习一下共产党,一刀切才是最好的。
而且还能减少自己丸手机的时间,一举多得。

品葱用户 太 2 假人 评论于 2020-01-03

GPG 是很好的工具。

要注意将自己的私钥要妥善保存,最好将后缀改为. dll 之类的系统常见文件后缀。

如果能有一台专门的机器或者专门的虚拟机装 GPG 最好。

私钥备份不光要加密保存,还要注意混淆,如果能隐写在图片或者其他文件中最佳。

品葱用户 Resistance Glassdoor_67 评论于 2020-01-02

我也看了,有看懂代码和数学公式的能力,找一台不明显的手机自己动手削减代码库。一样能实现高度的安全性,…

这个 “高度的安全性” 有多高?
手机的风险包括:有一堆传感器、无法像电脑那样搞【操作系统虚拟机】隔离、“全盘加密” 也不是那么靠谱、固件(firmware)不开源。

品葱用户 Glassdoor_67 Resistance 评论于 2020-01-03

这个 “高度的安全性” 有多高?手机的缺点包括:有一堆传感器,无法像电脑那样搞【操作系统虚拟机】隔离,“…

找个手机维修店让老板挑断主板上不希望用到的传感器,全盘加密有点牛刀杀鸡了。

还记得有个叫:USB 杀手,用电容器储能一次性击穿主板上各种芯片。比软件上玩花招直接多了,伪装成充电宝好了!相信自己有插一下搞破坏的时间,电器工程师一抓一大把可以帮忙实现。

品葱用户 存在者 09 评论于 2020-01-03

非常详细实用的帖子,学习,这才是有营养的帖子。

品葱用户 robin_comic 评论于 2020-01-03

爲什麼我在 Firefox 和 Google 裏都能找到這張證書
GDCA TrustAUTH R5 ROOT

点击品葱原文参与讨论

https://project-gutenberg.github.io/Pincong/post/ccf18592b981cef27cbbb8afa8755110/