GNU Privacy Guard加密指南

加密技术可以保证你的文件使用加密形式存储,不管你是要把它公开到因特网,备份到服务器,用U盘携带,还是保存在笔记本里。加密你的数据,意味着除非是你认可的接收者,其他人都不可以读取,这样可以防止信息泄漏。

GPG (GNU Privacy Guard)

GPG是GNU Privacy Guard的缩写。它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。一开始,用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥,然后用公钥加密信息,再发送给接收者。当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的。

GPG 使用公钥和私钥

公钥是你共享出来的一个公开密钥,它可以被发给任何你希望收到加密信息的人,他们可以使用你的公钥来加密信息。公钥本身不能用来解密自己加密过的信息,只有你自己——那个拥有对应私钥的人——能够解密。私钥是你自己的私人密码,可以用来解密用你的公钥加密过的信息。如果你把私钥泄漏给别人,那么他将可以解密并查看那些使用你的公钥加密过的信息。

在终端里使用GPG

如今大多数的Linux发行版都默认包含了GPG。想检查一下的话,打开终端并输入:

1
2
$ gpg --version 

然后你应该看到版本。如果是这样的话,你不需要做其他事情了。否则,你需要从你的发行版软件仓库里安装GPG。

生成密钥

想使用GPG来加密你的通讯,你需要先创建一对密码。首先,打开终端并运行下面的命令:

1
2
$ gpg --gen-key 

然后会有如下提示:

1
2
3
4
5
6
Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection?

这里要选择数字1,因为它可以用来加密和解密,第二和第三个选项只能让你给信息签名。按下数字1,然后按回车。

然后会有如下提示:

1
2
3
4
1 DSA key-pair will have 1024 bits.
2 ELG-E keys may be between 1024 and 4096 bits long.
3 What key-size do you want? (2048)

这里最好输入“2048”,就像GPG推荐的那样。如果你不希望你的密钥过期的话(在后面的提示里,选择0)。如果有提示说信息是否正确的话,回答Yes,然后输入你的真实名字,email地址,以及一个说明(可选的)。如果一切顺利,按下“哦”(对应着OK)然后回车。

在这之后,会提示你输入一个密码,密码会要求重复输入一次。通常,请使用一个难于破解的加强密码,而不推荐用名字/地址/生日/单词等等来做密码。

在输好密码之后,请按照终端里的提示信息做:我们需要生成大量的随机数,建议您在生成素数的过程中做一下这些动作(敲击键盘,移动鼠标,读写硬盘),这样会让随机数生成器有机会获取更大的熵。

生成好密钥以后,你应该会看到一条类似的提示信息:gpg: key 083C39A4 marked as ultimately trusted. public and secret key created and signed.

密钥服务器

密钥服务器是用来发布你的公钥,并将其分发到其他人的服务器,这样其他用户可以轻松的根据你数据库中的名字(或者e-mail地址)来获取你的公钥,并给你发送加密信息。这样可以避免把公钥直接拷贝给你的朋友的方式,而让其他人直接通过在线数据库来找到你。

上传你的公钥到密钥服务器:

1
2
$ gpg --send-keys --keyserver [keyservers.address.com] [yourpublicid] 

你需要把keyservers.address.com替换成你选择的服务器(或者用mit.edu,它会跟其他服务器做同步),还需要把命令行中的yourpublicid替换成你的。最终执行的命令看上去会大概是下面这样子:

1
2
$ gpg --send-keys --keyserver hkp://pgp.mit.edu 083C39A4 

加密文件

如果你想给你的朋友发送一个用他的公钥加密过的文件,可以用下面的命令:

1
2
$ gpg -o encrypted_file.gpg --encrypt -r key-id original.file 

命令解释:

1
2
3
4
5
-o encrypted_file.gpg = 指定输出文件
--encrypt = 做加密
-r = 接收者的KEY-ID,比如这里就填你朋友的KEY-ID。
original.file = 指定要加密的文件

解密文件

如果有人给你发送了一个用你的公钥加密过的文件,你可以按下面的方式解密:

1
2
$ gpg --decrypt filename.gpg 

对称加密

你还可以使用GPG做对称加密,来给文件加上一个密码。这种不同于公钥加密的方式,在对称加密中,同一个密钥用于加密和解密。这种方式在处理信息的时候会简单点,但是保密性没那么好,因为需要把密码告诉接收者。下面是用密码加密文件的命令:

1
2
$ gpg -c filename.txt 

解密这个文件,用下面的命令:

1
2
$ gpg filename.txt 

然后,会提示你输入密码,之后就开始解密文件。

文档数字签名

数字签名非常类似于你在信件或者重要文件的末尾签上自己的名字,它表示这份文件确实是由你发出来的。通过数字签名,它会计算整个文件内容的SHA1哈希值,然后把这个值附加到签名末尾。如果文件内容被篡改,签名的校验就会失败,可以用来鉴定伪造。如果用户自己在签名后编辑了这份文件,签名校验也会失败,因为此时文件的SHA1哈希值已经和之前签名时不同了。

对一份文件做数字签名,运行下面的命令:

1
2
$ gpg --clearsign filename.txt 

生成销毁密钥

销毁密钥可以在你的私钥泄漏或者怀疑泄漏的时候,吊销你的公钥。使用下面的命令创建一个销毁密钥:

1
2
$ gpg --output revoke.asc --gen-revoke keyid 

把销毁密钥保存到一个安全的地方,任何人都可以用它让你的密钥失效。(你可以用对称加密方式来加密你的销毁密钥文件。)

在终端里使用GPG的一些技巧

通过下面的命令可以查看你已经导入的GPG密钥:

1
2
$ gpg --list-keys 

之后应该会列出来用你e-mail注册的密钥列表(因为这里只有一个密钥,它只列出了你自己的密钥),然后,你可以看到自己的KEY-ID,就可以通过上文介绍的命令提交给密钥服务器。

显示你的密钥链中的私钥和公钥。

1
2
3
$ gpg --list-public-keys # 会列出来公钥
$ gpg --list-secret-keys # 会列出来私钥

导入密钥

1
2
$ gpg --import KEYFILE 

命令中的KEYFILE应该是需要导入的公钥文件名。(如果文件不在主目录中,使用cd命令切换到该文件的目录下,再执行上面的命令)

导出公钥到文件

用下面的命令可以将你的公钥导出为ASCII格式:

1
2
$ gpg --export -a > publickey.asc 

* * * * *

关于Richard White

Richard是一位技术爱好者,在不止一个场合他被称为极客。他还是三本书的作者,最近的一本《数字时代的隐私》即将在2014年5月份出版精装本。他还是数字时代网站的主编和驱动者,数字时代的目的是提供资源和工具来实现和维护匿名,安全和隐私。Ricard经常写一些和隐私相关的文章,最近忙着写《CLI艺术》,收集开源的命令行软件。关于GNU Privacy Guard的更多信息以及如何使用GPG软件的图形界面工具,你可以访问White的数字时代网站。


via: http://distrowatch.com/weekly.php?issue=20140407

译者:zpl1025 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

文章目录
  1. GPG (GNU Privacy Guard)
  2. GPG 使用公钥和私钥
  3. 在终端里使用GPG
  4. 生成密钥
  5. 密钥服务器
  6. 加密文件
  7. 解密文件
  8. 对称加密
  9. 文档数字签名
  10. 生成销毁密钥
  11. 在终端里使用GPG的一些技巧
  12. 导入密钥
  13. 导出公钥到文件
  14. 关于Richard White
|