GPG
GnuPG(GNU Privacy Guard,GPG)是一种加密软件,它是PGP加密软件的满足GPL协议的替代物。GnuPG依照由IETF制定的en:OpenPGP技术标准设计。GnuPG是用于加密、数字签章及产生非对称匙对的软件。GPG 兼容 PGP(Pretty Good Privacy)的功能。
本手册提供对 GPG 的使用方法入门指引,可能与其他 en:OpenPGP 系统存在少量出入。若您没有 GPG 软件,请参考#获取 GnuPG。#图形化操作也许比本文叙述的命令行方式更易懂。
本文并不是 GPG 的完整文档,并且为方便入门而改变了编排方式。要获得一份完整文档,请尝试 man gpg # 或者 gpg2
,info gnupg
或者访问官方文档。要获得命令行帮助,请使用 gpg --help
。本文所使用的指纹等敏感十六进制值均来自随机生成器。
生成密钥对
[编辑]在 GPG 2.1 或以上的版本中,可以使用较新的 ECDSA+ECDH 算法,用更短的密钥长度换取和 RSA 相近的安全性。在 --gen-key 前加上 --expert 即可看到选项。要注意支持这种算法的 OpenPGP 程序暂时较少。 |
GPG 一般使用诸如 RSA 和 ECC 一类的不对称加密算法。在这一类算法中,一对密钥被生成使用,其中公钥公开发布,私钥则由所有者自行保存。公钥所加密的内容可以用私钥解密,但公钥不能解开公钥加密的数据,反之亦然。
gpg --gen-key
运行这个命令来生成一对密钥。一旦您完成了这个向导,您就获得了一对用于加密和签名的密钥。接下来查看公钥和私钥:
haoqiang@tanux:~$ gpg -k # 公钥 (Public Key) /home/haoqiang/.gnupg/pubring.gpg ------------------------------- pub 4096R/D1101D36 2014-10-09 [有效至:2016-10-08] uid Haoqiang Tan (LearnC) <haoqiang@tancc.org> sub 4096R/3976FF14 2014-10-09 [有效至:2016-10-08] haoqiang@tanux:~$ gpg -K # 私钥 (Secret Key) /home/haoqiang/.gnupg/secring.gpg ------------------------------- sec 4096R/D1101D36 2014-10-09 [有效至:2016-10-08] uid Haoqiang Tan (LearnC) <haoqiang@tancc.org> ssb 4096R/3976FF14 2014-10-09
不出意外的话,您将会看到类似这样的输出。为了好记,这两个参数也有 --list-public-keys
和
--list-secret-keys
的别名可以选用。
为了方便互相识别,PGP 密钥具有指纹功能,一种鉴别位置不同的两个密钥是否相同的常用密码学技术,用于不可能逐位 对比两个密钥的情况。指纹是利用 PGP 公钥计算得到的长度较短方便比对的字符串。有些人会选择把指纹印在自己的名片上, 方便区分验证。
haoqiang@tanux:~$ gpg --fingerprint # [UID],可选项 /home/haoqiang/.gnupg/pubring.gpg ------------------------------- pub 4096R/D1101D36 2014-10-09 [有效至:2016-10-08] 密钥指纹 = 1A9E 5E2B 73E9 DDC7 D5AC 8119 D56A 80AF D110 1D36 uid Haoqiang Tan (LearnC) <haoqiang@tancc.org> sub 4096R/3976FF14 2014-10-09 [有效至:2016-10-08]
UID 可以是 uid
中任意可以唯一确认密钥组的信息,例如 Haoqiang
, LearnC
, D11101D36
, 1a9e5e2b73e9ddc7d5ac8119d56a80afd1101d36
。
密钥管理
[编辑]导入导出
[编辑]使用 gpg --import
即可令 gpg 开始读取标准输入来导入密钥。如前文所述,你可以使用管道。
gpg --export [UID]
可令 gpg 导出某个公钥。可以使用 -o filename
来指定输出目标。
密钥服务器
[编辑]编辑密钥
[编辑]使用 gpg --edit-key [UID]
编辑密钥。以下为部分常用命令:
- quit
- 不保存退出
- save
- 保存并退出
- help
- 显示帮助。
- sign
- 为这些 UID 签名。
- tsign
- 签名时签入信任等级。
- adduid
- 添加一个 UID 信息——这样你就可以一对密钥对应多个 UID 的邮箱信息了。
吊销密钥
[编辑]经由上传吊销证书至PKI可以宣告此公钥不再被使用。
签名和验证
[编辑]签名是 GPG 的一个常用例子,可以理解为将一段信息的散列值用私钥加密保存以便他人用公钥验证身份。GPG 帮助里这么写道:
-s, --sign [文件名] 生成一份签名 --clearsign [文件名] 生成一份明文签名 …… -o, --output 文件名 指定输出文件(不指定则输出到标准输出)
当你使用 -s,数据会被压缩从而显得不可读。[文件名]
表示指定文件是可选的。
如果你不指定文件名,GPG 会尝试从 标准输入 中读取数据。如果你没有管道,
那么标准输入就是你的键盘,而你应该在换行后按下 Ctrl-d (= EOF, Windows 上为 C-z) 结束。这样的签名的最主要作用就是
防止他人冒充。要验证他人的签名,使用 gpg --verify [文件名]
,用法基本
一致。
加密和解密
[编辑]加密
[编辑]gpg --recipient user_id --output file_name --encrypt file_name
--recipient
参数后跟对方的用户ID;--output
参数后面跟导出的文件名;--encrypt参数后跟要加密的文件。
这里应该注意一个问题,就是你要确定你使用的公钥的可靠性。
附录
[编辑]获取 GnuPG
[编辑]GnuPG 的官方网站为 gnupg.org。
- Windows:使用 gpg4win 包,或安装 Cygwin 内的软件包 GnuPG。
- OS X:GPGTools 提供较好的支持版本和友好的 GUI 界面。
- Linux 或其他 UNIX:使用包管理器搜索并安装,或者编译源代码。
图形化操作
[编辑]GnuPG 存在多种图形化前端,一般以证书管理器和电子邮件客户端插件组成,有的也包含文件管理器菜单拓展。这些工具的基本原理和命令行上的相类,但使用起来更加简便清晰。
站点
[编辑]- Keybase 是一个与社交网络较深融合的 PGP 密钥交换验证网站。