页次: 1
(噫,分类第一篇)
这些年过去,感觉越来越有必要操心一下安全与签名/认证的问题,所以有心去折腾一下GnuPG(gpg)。目的是想制作好一对(或多对,如果需要的话)密钥,将公钥发布在密钥服务器上,私钥保存在自己的电脑上。
前些年我刚接触这些概念的时候,好像还不推荐使用gpg的子密钥机制(因为「和pgp不兼容」)。但到了这一段再去查的时候,发现大量文章都在谈子密钥,尤其是涉及Yubikey之类的设备的时候。但没找到介绍为什么要用子密钥机制,以及如果用了之后会有什么后果。
所以想问个明白,然后确定自己的方案(顺便万一也有人有类似问题省得再纠结了)。我知道问题有点多……所以希望各位知道多少的帮忙回答多少……
关于gpg和密钥服务器的问题(不涉及子密钥):
吊销证书的生成过程会改变密钥内容么?为什么我看到说「上传(到密钥服务器)前先生成吊销证书」呢?
密钥的有效期是密钥内容的一部分么?我可以将密钥上传到密钥服务器后再修改有效期么(以及让其他人获取到新的有效期)?
gpg为密钥设置的密码是什么东西?是通过对私钥进行对称加密完成的么?吊销证书呢?
gpg导出私钥时会连带公钥一起包含在那个文件中么?如果不是,那么为何我在其他设备上导入时再度导入公钥会提示已经存在;如果是,那么为何帮助中仅仅说是导出私钥(故意的,还是什么时候改变的行为)?
对其他人公钥的信任是通过签名完成的么(因为我记得需要gpg --lsign)?信任度仅仅是一些离散的数值么?
能否以及如何共享或导入对其他人公钥的信任度?(不仅仅是给自己)
关于子密钥以及密钥服务器的问题:
我看到的文章们说gpg的子密钥也是一对密钥。那么它和一对独立的密钥有什么区别?换句话说:凭什么确定它就是某一主密钥的子钥?
如果我将主密钥发布在密钥服务器上,那么其他人获取到的是只有我的主密钥,还是连同我的子密钥一起?
(接上)如果我为我的主密钥新增了子密钥,我需要再次发布到密钥服务器么?其他人如何获取到?
如果我撤销了我的主密钥,子密钥也自动被撤销了么?
我是否可以在设备A上为设备B生成子密钥,将子密钥的私钥发给B,保留主密钥的私钥在A上,然后在B上使用私钥签名以及加密?签名/加密过程中,B机器是否需要知道主密钥的公钥(还是说这个公钥会随着对子密钥的传输自动传输,所以不存在这个问题)?
背景知识:
以前大一时候看过一点gpg相关东西(没记错的话是阮一峰的这篇),跟着做了一下,但没发布,就放在那了。
大二还是大三学了信息安全(基本就是密码学),知道对称和非对称加密是怎么回事。
进行过archlinux打包,知道gpg的一些简单用法(仅限本地+接收他人key)。
了解SSL的基本理念,但对TLS和SSL到底是什么关系,以及个人CA证书是什么玩意没概念。(所以问题完全不涉及CA这种东西。)
知識很重要,而相當的運用能力更重要。
离线
1 不会。因为万一以后私钥被黑了你可以赶紧注销。
2 是。推导出不可以。
3 简单的私钥保护,如果你有TPM之类的硬件加密设施则应该依赖这种安全硬件它们而不是软件对称加密以保护私钥。
4 私钥信息包含公钥信息。导出私钥是否有存储不知道。
5 是。是。
6 既不是一个合理需求,也不可以直接做到。
3 我确实不知道可以增加子密钥。
4 是。
5 表意不明。
最近编辑记录 xtricman (2019-10-08 19:27:43)
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
猜一猜 1 我想是不能确定的,也不需要确定,因为没有使用子钥匙的接口,只有使用某个主钥匙的某子钥。
2 密钥是一个整体,当然信任度不是它的一部分 你发布pub则发布了所有公钥,包括了主密钥公钥和所有子钥公钥。
https://crypto.stackexchange.com/questi … ults#61277
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
世界上有两种密钥信任体系,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,详情我不了解。
离线
CA 证书和 TLS 证书不是一回事啊
确实不一样,我打字的时候想的是PKI体系跟PGP不一样。
但是TLS握手过程应该是包括了PKI证书鉴定这个过程的。
最近编辑记录 xtricman (2019-05-09 16:05:57)
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
PGP没有子密钥这么个概念吗?那看来是GNU的扩展了
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
咦什么时候有的新版块!
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,即使过了有效期,窃取密钥的人仍然可以通过私钥续期。
离线
感谢各位的回复!
我感觉现在清晰一点了,尤其是看了xtricman给的链接以后。
所以对于子密钥问题5,回答是「自动的」:子密钥必然会绑定在一个主密钥上。
额外的,uid似乎是绑定在主密钥上的?所以没办法为每个机器生成不同uid(主要是comment)的子密钥。
另外:
6 既不是一个合理需求,也不可以直接做到。
有效期修改可以通过对自己的 key 再次签名完成。
如果可以通过再次签名延长有效期(并且其他人也可以获悉),那么就意味着这个签名是被发送到网络上(密钥服务器?)了的。那么这不就意味着也可以将我对其他人密钥的信任(因为也是签名)信息发布在密钥服务器上?所以这不就意味着向他人共享了信任信息(就只是缺少信任度等级)?
知識很重要,而相當的運用能力更重要。
离线
如果可以通过再次签名延长有效期(并且其他人也可以获悉),那么就意味着这个签名是被发送到网络上(密钥服务器?)了的。那么这不就意味着也可以将我对其他人密钥的信任(因为也是签名)信息发布在密钥服务器上?所以这不就意味着向他人共享了信任信息(就只是缺少信任度等级)?
你本地签名不会自动同步给密钥服务器,除非你有其他设施。
是,上传签名就是告诉别人你对它信任,但是这份签名包含什么我不是很确定,至少包含一份被签钥匙的hash加密,签者的公钥,有效期,我不确定不知道是不是确实不包含信任等级
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
感谢各位的回复!
我感觉现在清晰一点了,尤其是看了xtricman给的链接以后。
所以对于子密钥问题5,回答是「自动的」:子密钥必然会绑定在一个主密钥上。
额外的,uid似乎是绑定在主密钥上的?所以没办法为每个机器生成不同uid(主要是comment)的子密钥。
另外:
xtricman 说:6 既不是一个合理需求,也不可以直接做到。
zsrkmyn 说:有效期修改可以通过对自己的 key 再次签名完成。
如果可以通过再次签名延长有效期(并且其他人也可以获悉),那么就意味着这个签名是被发送到网络上(密钥服务器?)了的。那么这不就意味着也可以将我对其他人密钥的信任(因为也是签名)信息发布在密钥服务器上?所以这不就意味着向他人共享了信任信息(就只是缺少信任度等级)?
不太明白你的信任信息和信任度等级是什么。如果是指 sig1 sig2 sig3 的话,这些是被公开的。
离线
页次: 1