您尚未登录。

#1 2019-05-09 02:20:09

renyuneyun
会员
所在地: 地球
注册时间: 2011-09-30
帖子: 129
个人网站

个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

(噫,分类第一篇)

这些年过去,感觉越来越有必要操心一下安全与签名/认证的问题,所以有心去折腾一下GnuPG(gpg)。目的是想制作好一对(或多对,如果需要的话)密钥,将公钥发布在密钥服务器上,私钥保存在自己的电脑上。

前些年我刚接触这些概念的时候,好像还不推荐使用gpg的子密钥机制(因为「和pgp不兼容」)。但到了这一段再去查的时候,发现大量文章都在谈子密钥,尤其是涉及Yubikey之类的设备的时候。但没找到介绍为什么要用子密钥机制,以及如果用了之后会有什么后果。
所以想问个明白,然后确定自己的方案(顺便万一也有人有类似问题省得再纠结了)。我知道问题有点多……所以希望各位知道多少的帮忙回答多少……

关于gpg和密钥服务器的问题(不涉及子密钥):

  1. 吊销证书的生成过程会改变密钥内容么?为什么我看到说「上传(到密钥服务器)前先生成吊销证书」呢?

  2. 密钥的有效期是密钥内容的一部分么?我可以将密钥上传到密钥服务器后再修改有效期么(以及让其他人获取到新的有效期)?

  3. gpg为密钥设置的密码是什么东西?是通过对私钥进行对称加密完成的么?吊销证书呢?

  4. gpg导出私钥时会连带公钥一起包含在那个文件中么?如果不是,那么为何我在其他设备上导入时再度导入公钥会提示已经存在;如果是,那么为何帮助中仅仅说是导出私钥(故意的,还是什么时候改变的行为)?

  5. 对其他人公钥的信任是通过签名完成的么(因为我记得需要gpg --lsign)?信任度仅仅是一些离散的数值么?

  6. 能否以及如何共享或导入对其他人公钥的信任度?(不仅仅是给自己)

关于子密钥以及密钥服务器的问题:

  1. 我看到的文章们说gpg的子密钥也是一对密钥。那么它和一对独立的密钥有什么区别?换句话说:凭什么确定它就是某一主密钥的子钥?

  2. 如果我将主密钥发布在密钥服务器上,那么其他人获取到的是只有我的主密钥,还是连同我的子密钥一起?

  3. (接上)如果我为我的主密钥新增了子密钥,我需要再次发布到密钥服务器么?其他人如何获取到?

  4. 如果我撤销了我的主密钥,子密钥也自动被撤销了么?

  5. 我是否可以在设备A上为设备B生成子密钥,将子密钥的私钥发给B,保留主密钥的私钥在A上,然后在B上使用私钥签名以及加密?签名/加密过程中,B机器是否需要知道主密钥的公钥(还是说这个公钥会随着对子密钥的传输自动传输,所以不存在这个问题)?


背景知识:
以前大一时候看过一点gpg相关东西(没记错的话是阮一峰的这篇),跟着做了一下,但没发布,就放在那了。
大二还是大三学了信息安全(基本就是密码学),知道对称和非对称加密是怎么回事。
进行过archlinux打包,知道gpg的一些简单用法(仅限本地+接收他人key)。
了解SSL的基本理念,但对TLS和SSL到底是什么关系,以及个人CA证书是什么玩意没概念。(所以问题完全不涉及CA这种东西。)


知識很重要,而相當的運用能力更重要。

离线

#2 2019-05-09 07:26:18

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 675

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

1 不会。因为万一以后私钥被黑了你可以赶紧注销。
2 是。推导出不可以。
3 简单的私钥保护,如果你有TPM之类的硬件加密设施则不应该依赖它们而不是对称加密以保护私钥。
4 私钥信息包含公钥信息。导出私钥是否有存储不知道。
5 是。是。
6 既不是一个合理需求,也不可以直接做到。
3 我确实不知道可以增加子密钥。
4 是。
5 表意不明。


5萬人民幣買個老婆,要國產的,賣的私聊

离线

#3 2019-05-09 08:23:06

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 675

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

猜一猜 1 我想是不能确定的,也不需要确定,因为没有使用子钥匙的接口,只有使用某个主钥匙的某子钥。
2 密钥是一个整体,当然信任度不是它的一部分 你发布pub则发布了所有公钥,包括了主密钥公钥和所有子钥公钥。
https://crypto.stackexchange.com/questi … ults#61277


5萬人民幣買個老婆,要國產的,賣的私聊

离线

#4 2019-05-09 13:05:54

依云
a.k.a. 百合仙子
所在地: 一个等待妹纸出现的地方
注册时间: 2011-08-21
帖子: 5,045
个人网站

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

世界上有两种密钥信任体系,PGP 的 web of trust 和 TLS 证书的 CA。前者是社交化的,相信你所相信的人。后者是相信权威。

SSL 和 TLS 的区别在于,前者是 Netscape 搞的,后者是 IETF 标准化之后改进的版本。
CA 证书和 TLS 证书不是一回事啊。CA 即 certificate authority,是证书颁发机构。你信任 CA 的证书,就信任了这个 CA 颁发的所有证书。对于常见的网络协议中的认证(HTTP、FTP、SMTP、POP、IMAP、XMPP 等等的加密版)来说,它们的证书最重要的是用于确认你连接的目标确定拥有那个域名(DV 证书),或者确实是你想要连接的机构(OV 和 EV 证书)。不过 OV 证书你必须手动去查看,EV 证书会显示机构名称,然而当你看到的时候连接已经建立、数据已经传输了。当然 TLS 还会保证数据的私密性和完整性,不过这两点不需要证书的参与。
TLS 的非对称加密用于握手阶段。双方会推导出一个临时的会话密钥用于加密数据,而这个加密是对称的。这就是为什么你看到的 TLS 加密方法那么长一串,它描述了是怎么握手的,用什么非对称加密和什么对称加密算法。

TLS 通常是交互式的(双方建立连接然后对话),而 PGP 都是非交互式的,像信件那样丢给对方就完事了。不过也有基于证书的加密/签名方案 S/MIME,详情我不了解。

离线

#5 2019-05-09 16:01:58

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 675

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

依云 说:

CA 证书和 TLS 证书不是一回事啊

确实不一样,我打字的时候想的是PKI体系跟PGP不一样。
但是TLS握手过程应该是包括了PKI证书鉴定这个过程的。

最近编辑记录 xtricman (2019-05-09 16:05:57)


5萬人民幣買個老婆,要國產的,賣的私聊

离线

#6 2019-05-09 16:11:50

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 675

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

PGP没有子密钥这么个概念吗?那看来是GNU的扩展了


5萬人民幣買個老婆,要國產的,賣的私聊

离线

#7 2019-05-09 22:44:14

zsrkmyn
lazy...
注册时间: 2013-05-05
帖子: 327

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

咦什么时候有的新版块!

2. 有效期修改可以通过对自己的 key 再次签名完成。比如之前设置了有效期为无限期限,之后对自己的 key 签名一次,设置有效期到 2020 年是可以的,但是同理,会看到新的签名记录。也可以通过这种方法延长有效期。比如我在 3 月的 selfsig 设置了有效期:
https://pgp.surfnet.nl/pks/lookup?op=vi … FBC0BFAC35

或者 hexchain 通过自签名延长有效期:
https://pgp.surfnet.nl/pks/lookup?op=vi … 08E0BC48DF

但个人感觉这种方法不靠谱,原因是如果有人窃取了你的私钥,而你又丢失了你的 revoke key,即使过了有效期,窃取密钥的人仍然可以通过私钥续期。

离线

#8 2019-05-10 07:23:25

renyuneyun
会员
所在地: 地球
注册时间: 2011-09-30
帖子: 129
个人网站

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

感谢各位的回复!

我感觉现在清晰一点了,尤其是看了xtricman给的链接以后。

所以对于子密钥问题5,回答是「自动的」:子密钥必然会绑定在一个主密钥上。

额外的,uid似乎是绑定在主密钥上的?所以没办法为每个机器生成不同uid(主要是comment)的子密钥。


另外:

xtricman 说:

6 既不是一个合理需求,也不可以直接做到。

zsrkmyn 说:

有效期修改可以通过对自己的 key 再次签名完成。

如果可以通过再次签名延长有效期(并且其他人也可以获悉),那么就意味着这个签名是被发送到网络上(密钥服务器?)了的。那么这不就意味着也可以将我对其他人密钥的信任(因为也是签名)信息发布在密钥服务器上?所以这不就意味着向他人共享了信任信息(就只是缺少信任度等级)?


知識很重要,而相當的運用能力更重要。

离线

#9 2019-05-10 08:00:41

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 675

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

renyuneyun 说:

如果可以通过再次签名延长有效期(并且其他人也可以获悉),那么就意味着这个签名是被发送到网络上(密钥服务器?)了的。那么这不就意味着也可以将我对其他人密钥的信任(因为也是签名)信息发布在密钥服务器上?所以这不就意味着向他人共享了信任信息(就只是缺少信任度等级)?

你本地签名不会自动同步给密钥服务器,除非你有其他设施。
是,上传签名就是告诉别人你对它信任,但是这份签名包含什么我不是很确定,至少包含一份被签钥匙的hash加密,签者的公钥,有效期,我不确定不知道是不是确实不包含信任等级


5萬人民幣買個老婆,要國產的,賣的私聊

离线

#10 2019-05-11 19:54:30

zsrkmyn
lazy...
注册时间: 2013-05-05
帖子: 327

Re: 个人使用如何选择GnuPG密钥方案?使用子密钥还是不用?

renyuneyun 说:

感谢各位的回复!

我感觉现在清晰一点了,尤其是看了xtricman给的链接以后。

所以对于子密钥问题5,回答是「自动的」:子密钥必然会绑定在一个主密钥上。

额外的,uid似乎是绑定在主密钥上的?所以没办法为每个机器生成不同uid(主要是comment)的子密钥。


另外:

xtricman 说:

6 既不是一个合理需求,也不可以直接做到。

zsrkmyn 说:

有效期修改可以通过对自己的 key 再次签名完成。

如果可以通过再次签名延长有效期(并且其他人也可以获悉),那么就意味着这个签名是被发送到网络上(密钥服务器?)了的。那么这不就意味着也可以将我对其他人密钥的信任(因为也是签名)信息发布在密钥服务器上?所以这不就意味着向他人共享了信任信息(就只是缺少信任度等级)?

不太明白你的信任信息和信任度等级是什么。如果是指 sig1 sig2 sig3 的话,这些是被公开的。

离线

页脚