GnuPG简介与使用

什么是GnuPG

引用自官网的一句话:

GnuPG is a complete and free implementation of the OpenPGP standard as defined by RFC4880 (also known as PGP).

简单来说,你可以把它理解成linux下的一款基于公私钥体系、免费且功能强大的加解密、签名的软件。

加密原理

首先需要理解的一点是,如果你直接使用RSA这种公私钥加密机制来对整个文件进行加密,速度会非常非常非常慢,所以实际中使用的是,随机生成一串字符串,然后利用这个字符串来对文件进行对称加密(对称加密的速度远远快于公私钥加密),然后再用公钥对这个随机的字符串进行加密(因为这个随机的字符串相比你要加密的东西小的多),最后再把这个加密完的随机字符串和密文放在一起组成加密之后的文件。

GnuPG的使用

安装

  1. 通过源码的方式安装,可以在这个网站上下载。
  2. 【推荐】通过包管理工具进行下载:sudo apt-get install gnupg 或者sudo yum install gnupg

密钥生成

gpg --gen-key进入密钥生成。它会问你加密和签名的方法,多少位以及密钥过期的时间,都是简单的英语,应该很好理解。然后会要求你输入你的真名、Email和注释,这个由于是你自己填写的,所以只要你自己能区分就行,还是建议真名不要填写自己的名字。填完之后GnuPG会要求你填写一个Passphrase,这个是用来保护你的私钥的(以后任何时候使用私钥都会需要你输入这个Passphrase,所以请牢记),最后会根据你的真名、Email和注释生成hash码来作为你的user id(当然你的真名、你的Email也是可以作为user id的)

输出密钥

输出公钥:gpg --armor --output public-key.txt --export user-id

输出私钥(会要求输入Passphrase,一般没事请不要生成私钥):gpg --armor --output private-key.txt --export-secret-keys user-id

公钥服务器

公钥服务器的作用就是来传播你的公钥,但是我试了下面几个,都不太好用,不是down掉了就是速度贼慢…

1
2
3
http://keyserver.ubuntu.com/
https://pgp.mit.edu/
http://keys.gnupg.net/

所以如果你真的要传播你的公钥,你可以直接email发送或者别的什么途径传播,反正公钥随便任何人看。

导入他人的公钥

假设你收到了你朋友发送给你的邮件,附件里是他的公钥(当然前提是你已经相信这是他发的了),你可以通过gpg --import public-key.txt来导入他的公钥,便于之后用这个公钥进行加密。

导入自己的私钥

有的时候需要(其实也几乎没这个需求)几台电脑共享一个私钥,就是我一个人有几台电脑,我需要用同一把公钥钥匙进行加密,这样就需要用同一把私钥进行解密,所以需要导入私钥gpg --allow-secret-key-import --import private-key.txt

加密、解密和签名

用指定的公钥进行加密:gpg --recipient user-id --output file-encrypted.txt --encrypt file.txt

用私钥进行解密:gpg --output file.txt --decrypt file-encrypted.txt

用私钥进行签名:gpg --sign file.txt

对一个签名文件进行确认:gpg --verify file.txt.gpg

一个真实的例子

其实一般在现实中,我们用到的比较多的还是在下载软件的时候,来确认这个软件的真实可靠性。这里我以下载Python为例。

1573785867733

可以在官网上找到发布者的key id,然后进入到对应的下载页面后,会有一栏是签名文件的下载栏,如红框所示

1573785994743

与软件同时下载下来之后就可以验证是否是对应的发布者发布的了。

1573786193559