【安全上网】GPG入门教程
原文链接
作者:沉默的广场
本篇是上篇「如何验证身份」的后续。上篇文章有不少留言提到,验证身份可以用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的下载地址,下载前认准浏览器左上角的绿色锁头,防止钓鱼。
https://www.gpg4win.org/get-gpg4win.html
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—–
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
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文件备份到其它地方。
4. 解密和验签
非对称加密的规则是【公钥加密,私钥解密】(为了加深理解,各位可以想想如果反过来会发生什么),因此发给你的加密消息一定用了你之前发布的公钥,你需要用自己的私钥解密。
假设现在的身份是JIANG YIWU,因此有JIANG YIWU的私钥。把上面的加密消息复制到GPG的【记事本】里面,点击【解密/验证记事本内容】,就可以看到加密消息。
现在解密上面那一段加密消息,如下图
【fig9】
解密完成
【fig10】
如何检验签名:
签名的规则是【私钥加签,公钥验签】(想想反过来会发生什么),你需要先导入别人的公钥,才能验证这个人的签名。
假如你已经导入了SONG JIAOREN的公钥,就可以检验这段话的真实性。把这段文字从”—–BEGIN PGP SIGNED MESSAGE—–“开始,复制到”—–END PGP SIGNATURE—–“这一行(包括开头和结尾的两行),再粘贴到GPG记事本里,点击【解密/验证记事本内容】,如果内容没有被篡改。GPG就和上图一样显示一个绿色的框,提示这是有效的签名,并且显示签署人和签署日期。
如果你下载了GPG,就可以导入SONG JIAOREN的公钥,你可以试着改动一下SONG JIAOREN发出的文字,并验证一下上面的消息。任何对这段文字的改动都会导致GPG验证失败。
================
5. 身份验证
身份验证是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) 其他人用【导入别人的公钥】这一段的方法导入用户之前发布的公钥,再用【解密和验签】这一段的方法验证。如果签名没有问题就说明是本人。
这种方法也可以在网络的其它地方证明身份。
6. 总结
- 给别人发消息:导入别人的公钥 -> 用公钥加密消息 -> 发送消息
- 接收别人的消息:创建密钥对 -> 发布自己的公钥 -> 别人用这个公钥发来消息 -> 你用自己的私钥解密消息
- 给消息签名:创建密钥对 -> 发布自己的公钥 -> 用自己的私钥给消息签名 -> 把消息和它的签名一起发布
- 验证别人的签名:导入别人的公钥 -> 接收消息和它的签名 -> 用公钥验证消息
从上面可以看出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证书的危害可以看编程随想的博文《CNNIC干过的那些破事儿》。
这几年国产证书有卷土重来的趋势,见这个《国产证书的再次崛起:GDCA成功进入Mozilla根证书库》。由于tor浏览器本身基于firefox,如果firefox内置国产证书,那么用tor上网也不安全。一定要手动拉黑tor浏览器内置的国产证书。
编者按: Tor(Firefox)中内置的国产证书包括GDCA(Guang Dong Certificate Authority) 和CFCA(China Financial Certification Authority)。
可以打开选项(Options) 中的隐私和安全(Privacy & Security) 页面,拉到最下,查看证书(View Certificates)。在Authorities下找到目标证书。
如果希望移除一个证书,选择目标证书,点击删除或不信任(Delete or Distrust),再点击OK即可移除。
文章版权归原作者所有。