一些关于gpg的问题

一些关于gpg的问题, 是自己在使用gpg中产生的疑问.

在搜索的时候发现, 就中文资料是基本上没有, 只有英文资料…

1. gpg显示的密钥信息都什么意思?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
❯ gpg -K
/Users/root/.gnupg/pubring.kbx
-----------------------------
sec rsa4096 2017-11-22 [SC]
CFED195E075BE71B221A2432315F3A656223B79B
uid [ unknown] comwrg <xcomwrg@gmail.com>
ssb rsa4096 2017-11-22 [E]


~ master*
❯ gpg -k
/Users/root/.gnupg/pubring.kbx
-----------------------------
pub rsa4096 2017-11-22 [SC]
CFED195E075BE71B221A2432315F3A656223B79B
uid [ unknown] comwrg <xcomwrg@gmail.com>
sub rsa4096 2017-11-22 [E]

sec, uid, ssb, pub, sub 的意思

sec, SECret key, 表明是私钥
uid, 拥有者的信息, 姓名和邮箱
ssb, Secret SuBkey, 子私钥

pub, PUBlic key, 表明是公钥
sub, public SUBkey, 子公钥

[SC] 和 [E] 的意思

S, Sign, 表示可以用来签名
C, Certify, 表示可以用来验证签名
E, Encrypt, 表示可以用来加密
A, Authentication, 表示可以用来认证

所以[SC]的意思就是这个钥可以用来签名和验证签名
同样[E]的意思表示这个钥可以用来加密

2. 子钥是什么?

我们看主私钥的标志是[SC], 代表了主钥只可以签名和验证签名, 那为什么不可以加密呢?
然后我们在看子钥的标志是[E], 表示可以加密

这样的话, 其实gpg最基本的结构其实就仅仅只有主钥, 这个主钥有签名和验证签名两个功能, 在加入子钥的时候, 主钥会对子钥签名, 这样就可以保证这个子钥是属于这个主钥的

在这样的逻辑结构下, 我们就可以加入子钥了, 并可以给予子钥相应的权限

不过, 为什么话说回来, 为什么需要子钥呢, 直接一个主钥不就可以了吗?

具体参考https://wiki.debian.org/Subkeys 这里说明了为什么需要子钥匙

有很多的好处, 由于主钥和子钥是分离的, 我们可以通过主钥来撤销子钥, 以及延长子钥的过期时间通过主钥(假如就一个钥匙的话, 肯定无法做到), 等等

3. gpg如何判断过期的

这个问题,,,我想错方向了, 一开始我想的是这个gpg如何阻止签名的, 这个时间可以伪造啊, 后来一想, 不对啊, 就算你在过期的时间签名了, 但是别人那里会显示过期的…

4. gpg私钥泄露了, 我该这么办

刚开始接触的gpg的时候, 其实自己就想问这个问题了

大概就是向私钥服务器发布撤销证书吧

如果是子私钥泄露了, 就撤销子钥, 这个损失其实不是很大

如果是主私钥泄露了, 就撤销主钥, 这个大概是凉凉的节奏

5. 如果保证私钥的安全

这个问题我也一直在思考, 就现在的开发环境下, 如果保证自己的电脑用的软件没有后门, 因为日常实在是要安装和用到太多太多的软件了, 没办法确保安全, 除非断网开发… 而且, 经过我的测试, 脚本是可以直接执行gpg --export-secret-keys的, 个人认为有两种办法

  1. 保证主私钥的安全, 把主私钥隔离起来, 只在绝对安全的主机内导入主私钥
  2. 给私钥上passphrase, 这样就算拷贝走, 也没发直接用

Reference

Author: comwrg
Link: https://comwrg.github.io/2019/01/06/some-questions-about-gpg/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.