接触 PGP 相关的信息已经好久了,然而从来没有成功的系统得出一个总结性质的清单。在此汇总一下
1 、 GPG 的说明
GNU Privacy Guard(GnuPG 或 GPG)是一种加密软件,它是 PGP 加密软件的满足 GPL 的替代物。 GnuPG 依照由 IETF 订定的 OpenPGP 技术标准设计 [5] 。 GnuPG 用于加密、数字签名及产生非对称钥匙对的软件。
2 、 GPG 密钥的创建
GPG 版本大于 2.1 后关于命令参数和文件信息都有了一些变化,本文采用 2.2 版本配置。同时留一下所有的命令列表(更多命令可以参考 man gpg)
root@server:~# gpg --help gpg (GnuPG) 2.2.4 libgcrypt 1.8.1 Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: /root/.gnupg 支持的算法: 公钥: RSA, ELG, DSA, ECDH, ECDSA, EDDSA 对称加密: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 散列: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 压缩: 不压缩, ZIP, ZLIB, BZIP2 Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data 指令: -s, --sign make a signature --clear-sign make a clear text signature -b, --detach-sign 生成一份分离的签名 -e, --encrypt 加密数据 -c, --symmetric 仅使用对称加密 -d, --decrypt 解密数据 (默认) --verify 验证签名 -k, --list-keys 列出密钥 --list-signatures 列出密钥和签名 --check-signatures 列出并检查密钥签名 --fingerprint 列出密钥和指纹 -K, --list-secret-keys 列出私钥 --generate-key 生成一副新的密钥对 --quick-generate-key quickly generate a new key pair --quick-add-uid quickly add a new user-id --quick-revoke-uid quickly revoke a user-id --quick-set-expire quickly set a new expiration date --full-generate-key full featured key pair generation --generate-revocation 生成一份吊销证书 --delete-keys 从公钥钥匙环里删除密钥 --delete-secret-keys 从私钥钥匙环里删除密钥 --quick-sign-key quickly sign a key --quick-lsign-key quickly sign a key locally --sign-key 为某把密钥添加签名 --lsign-key 为某把密钥添加本地签名 --edit-key 编辑某把密钥或为其添加签名 --change-passphrase change a passphrase --export 导出密钥 --send-keys 把密钥导出到某个公钥服务器上 --receive-keys 从公钥服务器上导入密钥 --search-keys 在公钥服务器上搜寻密钥 --refresh-keys 从公钥服务器更新所有的本地密钥 --import 导入/合并密钥 --card-status 打印卡状态 --edit-card 更改卡上的数据 --change-pin 更改卡的 PIN --update-trustdb 更新信任度数据库 --print-md print message digests --server 以服务器的方式运行 --tofu-policy VALUE set the TOFU policy for a key 选项: -a, --armor 输出经 ASCII 封装 -r, --recipient USER-ID encrypt for USER-ID -u, --local-user USER-ID use USER-ID to sign or decrypt -z N set compress level to N (0 disables) --textmode 使用标准的文本模式 -o, --output FILE write output to FILE -v, --verbose 详细模式 -n, --dry-run 不做任何改变 -i, --interactive 覆盖前先询问 --openpgp 行为严格遵循 OpenPGP 定义 (请参考在线说明以获得所有命令和选项的完整清单) Examples: -se -r Bob [file] sign and encrypt for user Bob --clear-sign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints 请向 <https://bugs.gnupg.org> 报告程序缺陷。 请向 <[email protected]> 反映简体中文翻译的问题。
root@server:~# gpg --list-keys gpg: directory '/root/.gnupg' created gpg: keybox '/root/.gnupg/pubring.kbx' created gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库 root@server:~# gpg --expert --full-generate-key gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 请选择您要使用的密钥种类: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (仅用于签名) (4) RSA (仅用于签名) (7) DSA (自定义用途) (8) RSA (自定义用途) (9) ECC and ECC (10) ECC (sign only) (11) ECC (set your own capabilities) (13) Existing key 您的选择? 8 RSA 密钥可能的操作: 签名 验证 加密 认证 目前允许的操作: 签名 验证 加密 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? s RSA 密钥可能的操作: 签名 验证 加密 认证 目前允许的操作: 验证 加密 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? e RSA 密钥可能的操作: 签名 验证 加密 认证 目前允许的操作: 验证 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? q RSA 密钥长度应在 1024 位与 4096 位之间。 您想要用多大的密钥尺寸?(3072) 4096 您所要求的密钥尺寸是 4096 位 请设定这把密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 0 密钥永远不会过期 以上正确吗?(y/n) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <[email protected]>" 真实姓名: Name 电子邮件地址: [email protected] 注释: 您选定了这个用户标识: “Name <[email protected]>” 更改姓名 (N) 、注释 (C) 、电子邮件地址 (E) 或确定 (O)/退出 (Q)? O 我们需要生成大量的随机字节。这个时候您可以多做些琐事 (像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 gpg: 密钥 D099D5CE******** 被标记为绝对信任 gpg: directory '/root/.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/************************D099D5CE********.rev' 公钥和私钥已经生成并经签名。 pub rsa4096 2018-12-31 [C] ************************D099D5CE******** uid Name <[email protected]>
3 、 GPG 密钥的主+子使用方式
由于 GPG 是互联网中作为电子身份的重要凭依,所以 GPG 的安全性就需要额外注意
举个例子,你出于某种情况将主私钥泄露出去,这时候你只能通过吊销证书,然后生成一个新的 key 来实现更换 GPG 密钥。但是实际上 GPG 可以采用主+子的方式进行管理,这时候你平时藏好你用不到的主私钥,即使子私钥泄露了你可以直接换一个新的,而由于主公钥没有变化所以其他人是可以直接认出来你的身份。
为了安全的使用 PGP,一般采取 C + A + E + S 的方式使用,也就是你需要创建三个子密钥,将主私钥藏起来平时用子私钥,以及更换子私钥的使用密码。有问题的时候可以用主私钥进行子密钥的重置。(在 GPG 的密钥中,加密=E,签名=S,验证=A)
gpg --expert --edit-key ************************D099D5CE********
这里留一下所有的命令列表
gpg> help quit 离开这个菜单 save 保存并离开 help 显示这份在线说明 fpr 显示密钥指纹 grip show the keygrip list 列出密钥和用户标识 uid 选择用户标识 N key 选择子钥 N check 检查签名 sign 为所选用户标识添加签名 [* 参见下面的相关命令] lsign 为所选用户标识添加本地签名 tsign 为所选用户标识添加信任签名 nrsign 为所选用户标识添加不可吊销签名 adduid 增加一个用户标识 addphoto 增加一个照片标识 deluid 删除选定的用户标识 addkey 添加一个子钥 addcardkey 在智能卡上添加一把密钥 keytocard 将一把密钥移动到智能卡上 bkuptocard 将备份密钥转移到卡上 delkey 删除选定的子钥 addrevoker 增加一把吊销密钥 delsig 删除所选用户标识上的签名 expire 变更密钥或所选子钥的使用期限 primary 将所选的用户标识设为首选用户标识 pref 列出首选项 (专家模式) showpref 列出首选项 (详细模式) setpref 设定所选用户标识的首选项 keyserver 设定所选用户标识的首选公钥服务器的 URL notation 为所选用户标识的设定注记 passwd 更改密码 trust 更改信任度 revsig 吊销所选用户标识上的签名 revuid 吊销选定的用户标识 revkey 吊销密钥或选定的子钥 enable 启用密钥 disable 禁用密钥 showphoto 显示选定的照片标识 clean 压缩不可用的用户标识并删除不可用的签名 minimize 压缩不可用的用户标识并删除所有签名
root@server:~# gpg --expert --edit-key ************************D099D5CE******** gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 私钥可用。 sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 [ 绝对 ] (1). Name <[email protected]> gpg> adduid 真实姓名: Name 电子邮件地址: [email protected] 注释: 您选定了这个用户标识: “Name <[email protected]>” 更改姓名 (N) 、注释 (C) 、电子邮件地址 (E) 或确定 (O)/退出 (Q)? O sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 [ 绝对 ] (1) Name <[email protected]> [ 未知 ] (2). Name <[email protected]> gpg> uid 1 sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 [ 绝对 ] (1)* Name <[email protected]> [ 未知 ] (2). Name <[email protected]> gpg> primary sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 [ 绝对 ] (1). Name <[email protected]> [ 未知 ] (2) Name <[email protected]> gpg> save root@server:~# root@server:~# gpg --armor --export-secret-keys ************************D099D5CE******** > gpg-secret-main.asc root@server:~# gpg --expert --edit-key ************************D099D5CE******** gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 私钥可用。 sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 [ 绝对 ] (1). Name <[email protected]> gpg> addkey 请选择您要使用的密钥种类: (3) DSA (仅用于签名) (4) RSA (仅用于签名) (5) ElGamal (仅用于加密) (6) RSA (仅用于加密) (7) DSA (自定义用途) (8) RSA (自定义用途) (10) ECC (sign only) (11) ECC (set your own capabilities) (12) ECC (encrypt only) (13) Existing key 您的选择? 8 RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 签名 加密 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? e RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 签名 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? q RSA 密钥长度应在 1024 位与 4096 位之间。 您想要用多大的密钥尺寸?(3072) 4096 您所要求的密钥尺寸是 4096 位 请设定这把密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 5y 密钥于 2023 年 12 月 31 日 星期日 00 时 14 分 46 秒 CST 过期 以上正确吗?(y/n) y 真的要建立吗?(y/N) y 我们需要生成大量的随机字节。这个时候您可以多做些琐事 (像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 ssb rsa4096/C91597B6******** 创建于:2018-12-31 有效至:2023-12-30 可用于:S [ 绝对 ] (1). Name <[email protected]> [ 未知 ] (2) Name <[email protected]> gpg> addkey 请选择您要使用的密钥种类: (3) DSA (仅用于签名) (4) RSA (仅用于签名) (5) ElGamal (仅用于加密) (6) RSA (仅用于加密) (7) DSA (自定义用途) (8) RSA (自定义用途) (10) ECC (sign only) (11) ECC (set your own capabilities) (12) ECC (encrypt only) (13) Existing key 您的选择? 8 RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 签名 加密 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? s RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 加密 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? q RSA 密钥长度应在 1024 位与 4096 位之间。 您想要用多大的密钥尺寸?(3072) 4096 您所要求的密钥尺寸是 4096 位 请设定这把密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 5y 密钥于 2023 年 12 月 31 日 星期日 00 时 15 分 36 秒 CST 过期 以上正确吗?(y/n) y 真的要建立吗?(y/N) y 我们需要生成大量的随机字节。这个时候您可以多做些琐事 (像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 ssb rsa4096/C91597B6******** 创建于:2018-12-31 有效至:2023-12-30 可用于:S ssb rsa4096/3EA0CDDB******** 创建于:2018-12-31 有效至:2023-12-30 可用于:E [ 绝对 ] (1). Name <[email protected]> [ 未知 ] (2) Name <[email protected]> gpg> addkey 请选择您要使用的密钥种类: (3) DSA (仅用于签名) (4) RSA (仅用于签名) (5) ElGamal (仅用于加密) (6) RSA (仅用于加密) (7) DSA (自定义用途) (8) RSA (自定义用途) (10) ECC (sign only) (11) ECC (set your own capabilities) (12) ECC (encrypt only) (13) Existing key 您的选择? 8 RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 签名 加密 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? a RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 签名 加密 认证 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? s RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 加密 认证 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? e RSA 密钥可能的操作: 签名 加密 认证 目前允许的操作: 认证 (S) 选择是否用于签名 (E) 选择是否用于加密 (A) 选择是否用于认证 (Q) 已完成 您的选择? q RSA 密钥长度应在 1024 位与 4096 位之间。 您想要用多大的密钥尺寸?(3072) 4096 您所要求的密钥尺寸是 4096 位 请设定这把密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 5y 密钥于 2023 年 12 月 31 日 星期日 00 时 16 分 23 秒 CST 过期 以上正确吗?(y/n) y 真的要建立吗?(y/N) y 我们需要生成大量的随机字节。这个时候您可以多做些琐事 (像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 sec rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 ssb rsa4096/C91597B6******** 创建于:2018-12-31 有效至:2023-12-30 可用于:S ssb rsa4096/3EA0CDDB******** 创建于:2018-12-31 有效至:2023-12-30 可用于:E ssb rsa4096/E2DFFF22******** 创建于:2018-12-31 有效至:2023-12-30 可用于:A [ 绝对 ] (1). Name <[email protected]> [ 未知 ] (2) Name <[email protected]> gpg> save root@server:~#
刚刚完成了主+子密钥的第一部分创建子密钥,现在我们继续往下进行。
root@server:~/.gnupg# gpg --list-secret-keys /root/.gnupg/pubring.kbx ------------------------ sec rsa4096 2018-12-31 [C] ************************D099D5CE******** uid [ 绝对 ] Name <[email protected]> uid [ 绝对 ] Name <[email protected]> ssb rsa4096 2018-12-31 [S] [有效至:2023-12-30] ssb rsa4096 2018-12-31 [E] [有效至:2023-12-30] ssb rsa4096 2018-12-31 [A] [有效至:2023-12-30] # 查看所有私钥的 Grip 信息,可以在 ~/.gnupg/private-keys-v1.d/ 目录下找到对应私钥文件 root@server:~# gpg --with-keygrip --list-secret-key /root/.gnupg/pubring.kbx ------------------------ sec rsa4096 2018-12-31 [C] ************************D099D5CE******** Keygrip = E6B460********************************** uid [ 绝对 ] Name <[email protected]> uid [ 绝对 ] Name <[email protected]> ssb rsa4096 2018-12-31 [S] [有效至:2023-12-30] Keygrip = 6ACA02********************************** ssb rsa4096 2018-12-31 [E] [有效至:2023-12-30] Keygrip = AC3943********************************** ssb rsa4096 2018-12-31 [A] [有效至:2023-12-30] Keygrip = 1F2627********************************** # 删除主私钥,如果之前没有备份过请重新备份。 root@server:~# rm ~/.gnupg/private-keys-v1.d/E6B460**********************************.key # 删除后可以看到主私钥的位置多了一个"#"代表这个私钥缺失。 root@server:~# gpg --list-secret-keys /root/.gnupg/pubring.kbx ------------------------ sec# rsa4096 2018-12-31 [C] ************************D099D5CE******** uid [ 绝对 ] Name <[email protected]> uid [ 绝对 ] Name <[email protected]> ssb rsa4096 2018-12-31 [S] [有效至:2023-12-30] ssb rsa4096 2018-12-31 [E] [有效至:2023-12-30] ssb rsa4096 2018-12-31 [A] [有效至:2023-12-30] # 删除主私钥后我们可以修改剩下的子私钥密码了,这里我们修改全部的子私钥密码 #(如果想每个不同你需要先删掉其他的等改完后再导入回来) root@server:~# gpg --edit-key ************************D099D5CE******** passwd gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Secret subkeys are available. pub rsa4096/D099D5CE******** 创建于:2018-12-31 有效至:永不过期 可用于:C 信任度:绝对 有效性:绝对 ssb rsa4096/C91597B6******** 创建于:2018-12-31 有效至:2023-12-30 可用于:S ssb rsa4096/3EA0CDDB******** 创建于:2018-12-31 有效至:2023-12-30 可用于:E ssb rsa4096/E2DFFF22******** 创建于:2018-12-31 有效至:2023-12-30 可用于:A [ 绝对 ] (1). Name <[email protected]> [ 绝对 ] (2) Name <[email protected]> gpg: key D099D5CE********/D099D5CE********: error changing passphrase: 没有秘匙 gpg>save 密钥没有变动所以不需要更新。 root@server:~# # 最后我们导出所有的密钥,注意由于已经删除了主私钥所以 --export-secret-keys 和 --export-secret-subkeys 没有区别 root@server:~# gpg -a --export ************************D099D5CE******** > gpg-public-use.asc root@server:~# gpg -a --export-secret-subkeys ************************D099D5CE******** > gpg-secret-use.asc root@server:~# gpg -a --export-secret-subkeys C91597B6********! > gpg-secret-sub-s.asc root@server:~# gpg -a --export-secret-subkeys 3EA0CDDB********! > gpg-secret-sub-e.asc root@server:~# gpg -a --export-secret-subkeys E2DFFF22********! > gpg-secret-sub-a.asc
4 、 GPG 密钥的管理
查看当前设备的所有公钥
gpg --list-keys
查看当前设备的所有私钥
gpg --list-secret-keys
查看当前设备的所有私钥(包含 Grip ID)
gpg --with-keygrip --list-secret-keys
编辑指定的公钥私钥对
gpg --armor --expert --edit-key ************************D099D5CE********
将指定公钥组保存成明文文件 gpg-public.asc(主+子全部)
gpg --armor --export ************************D099D5CE******** > gpg-public.asc
将指定私钥组保存成明文文件 gpg-secret.asc(主+子全部)
gpg --armor --export-secret-keys ************************D099D5CE******** > gpg-secret.asc
将不包含主私钥的指定私钥组保存成明文文件 gpg-secret-sub.asc(子全部)
gpg --armor --export-secret-subkeys ************************D099D5CE******** > gpg-secret-sub.asc
将指定子私钥保存成明文文件 gpg-secret-sub-1.asc(子密钥十六位 ID 后面加一个感叹号)
gpg --armor --export-secret-subkeys C91597B6********! > gpg-secret-sub-1.asc
从本地系统删除指定的公钥(主+子全部)
gpg --delete ************************D099D5CE********
从本地系统删除指定的私钥(主+子全部)
gpg --delete-secret-keys ************************D099D5CE********
从本地系统删除指定的私钥(指定)(V2.2 之后版本可用)
gpg --with-keygrip --list-secret-keys rm -f ~/.gnupg/private-keys-v1.d/6ACA02**********************************.key
信任外部的 GPG 密钥(edit 模式下)
gpg> trust Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) 1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu
4 、 GPG 密钥的吊销
吊销证书一般推荐生成一个,这样在你万一私钥出问题的情况下,你可以通过吊销证书去停用该主密钥(相当于换身份了)
生成一个吊销证书,你需要一对主公钥私钥。
使用一个吊销证书,你需要一个主公钥,和一份吊销证书。
而如果你只是不想使用了之前的密钥对,你可以先将该密钥的信息修改成垃圾信息,然后清空所有有效 uid 和所有 subkey ,并将截止时间修改为第二天,然后上传到公钥服务器。第二天的时候额外上传吊销证书,这样可以既保证密钥服务器的信息不乱,也可以吊销这个密钥(更方便是从来也不上传到密钥服务器)
root@server:~# gpg --gen-revoke ************************D099D5CE******** > gpg-revoke.asc sec rsa4096/D099D5CE******** 2018-12-31 Name <[email protected]> 要为这把密钥建立一份吊销证书吗?(y/N) y 请选择吊销的原因: 0 = 未指定原因 1 = 密钥已泄漏 2 = 密钥被替换 3 = 密钥不再使用 Q = 取消 (也许您会想要在这里选择 1) 您的决定是什么? 3 请输入描述 (可选);以空白行结束: > Delete > 吊销原因:密钥不再使用 Delete 这样可以吗? (y/N) y 已强行使用 ASCII 封装过的输出。 已建立吊销证书。 请把这个文件转移到一个可隐藏起来的介质 (如软盘) 上;如果坏人能够取得这 份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏 到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万 小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他 人也能够看得到的地方! root@server:~# cat gpg-main-revoke.asc -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: This is a revocation certificate ****** ****** ****** ****** ****** ****** -----END PGP PUBLIC KEY BLOCK-----
打算撤销时,将撤销证书导入本地 GPG 库中,撤销本地公钥
gpg --import gpg-revoke.asc
最后将已经被撤销的公钥发送到公钥服务器上即可
gpg --send-keys ************************D099D5CE********
一段时间后查看公钥服务器即可看到对应公钥有 revoked 字样。
(撤销证书不能发给别人,任何拥有该证书的人都可以进行撤销公钥操作)
gpg --search-keys Name
gpg: searching for "Name" from hkp server keys.gnupg.net (1) Name <[email protected]> 4096 bit RSA key D099D5CE, created: 2010-01-01 (revoked)
当然你也可以通过直接搜索密钥 ID 的方式查找制定密钥
gpg --search-keys ************************D099D5CE********
6 、 GPG 密钥的上传与下载
上传密钥前一定要慎重,上传后的密钥没有任何方式能删除,只能修改信息,如果该密钥 revoke 你没有任何方式可以更改信息。
上传密钥的命令如下(发送公钥给本地默认服务器)
gpg --send-keys ************************D099D5CE********
Ubuntu 的默认服务器是 hkps://subkeys.pgp.net
CentOS 的默认服务器是 hkps://keys.gnupg.net
中科大的默认服务器是 hkps://pgp.ustc.edu.cn
OpenGPG 的默认服务器是 hkps://hkps.pool.sks-keyservers.net
GnuPG 更改密钥服务器的方式
修改~/.gnupg/gpg.conf 添加下面的信息(只能有一个 keyserver)
keyserver hkps://pgp.ustc.edu.cn
7 、其他链接
YubiKey 与 OpenPGP 一起使用 [ 链接 ]
GnuPG Command [ 链接 ]
Use Subkeys [ 链接 ]
Arch GPG [ 链接 ]
用 PGP 保护代码完整性 [ 链接 ]
How to use a GPG key for SSH authentication [ 链接 ]
Thunderbird Enigmail GnuPG - 更安全电子邮件 [ 链接 ]
GPG 入门指南(加密/签名)[ 链接 ]