GPG 密钥的创建、管理和使用

接触 PGP 相关的信息已经好久了,然而从来没有成功的系统得出一个总结性质的清单。在此汇总一下


1、GPG 的说明

GNU Privacy Guard(GnuPG 或 GPG)是一种加密软件,它是 PGP 加密软件的满足 GPL 的替代物。GnuPG 依照由 IETF 订定的 OpenPGP 技术标准设计 [5]。GnuPG 用于加密、数字签名及产生非对称钥匙对的软件。


2、GPG 密钥的创建

GPG 版本大于 2.1 后关于命令参数和文件信息都有了一些变化,本文采用 2.2 版本配置。同时留一下所有的命令列表(更多命令可以参考 man gpg)

[email protected]:~# 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]> 反映简体中文翻译的问题。

[email protected]:~# gpg --list-keys
gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库

[email protected]:~# 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    压缩不可用的用户标识并删除所有签名

[email protected]:~# 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
[email protected]:~# 
[email protected]:~# gpg --armor --export-secret-keys ************************D099D5CE******** > gpg-secret-main.asc

[email protected]:~# 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
[email protected]:~#

刚刚完成了主+子密钥的第一部分创建子密钥,现在我们继续往下进行。

[email protected]:~/.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/ 目录下找到对应私钥文件
[email protected]:~# 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**********************************

# 删除主私钥,如果之前没有备份过请重新备份。
[email protected]:~# rm ~/.gnupg/private-keys-v1.d/E6B460**********************************.key

# 删除后可以看到主私钥的位置多了一个"#"代表这个私钥缺失。
[email protected]:~# 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]

# 删除主私钥后我们可以修改剩下的子私钥密码了,这里我们修改全部的子私钥密码
#(如果想每个不同你需要先删掉其他的等改完后再导入回来)
[email protected]:~# 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
密钥没有变动所以不需要更新。
[email protected]:~# 

# 最后我们导出所有的密钥,注意由于已经删除了主私钥所以 --export-secret-keys 和 --export-secret-subkeys 没有区别
[email protected]:~# gpg -a --export ************************D099D5CE******** > gpg-public-use.asc
[email protected]:~# gpg -a --export-secret-subkeys ************************D099D5CE******** > gpg-secret-use.asc
[email protected]:~# gpg -a --export-secret-subkeys C91597B6********! > gpg-secret-sub-s.asc
[email protected]:~# gpg -a --export-secret-subkeys 3EA0CDDB********! > gpg-secret-sub-e.asc
[email protected]:~# 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 ,并将截止时间修改为第二天,然后上传到公钥服务器。第二天的时候额外上传吊销证书,这样可以既保证密钥服务器的信息不乱,也可以吊销这个密钥(更方便是从来也不上传到密钥服务器)


[email protected]:~# 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 封装过的输出。
已建立吊销证书。

请把这个文件转移到一个可隐藏起来的介质 (如软盘) 上;如果坏人能够取得这
份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏
到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万
小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他
人也能够看得到的地方!
[email protected]:~# 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 入门指南(加密/签名)[ 链接 ]

点赞