我正在使用 gpg。我的密钥环结构说明如下。
我有一个认证密钥,我有
- 加密子密钥
- 认证子密钥
为了导出子密钥,请执行以下步骤
步骤 1 此命令将列出所有公钥。我将采用公钥的密钥 ID。例如加密。
gpg --keyid-format long --with-fingerprint --list-keys
我正在使用以下命令导出子项
gpg --export --armor --output public-key.asc <keyid>!
但是我使用下面的命令检查。我可以看到它也导出了我认证的公钥。
gpg --list-packets public-key.asc | grep "\(packet\|keyid\)"
所以我的问题是
为什么它要导出认证的公钥?
将加密密钥的公钥共享给密钥服务器,是否会共享认证密钥的公钥?如果会,这样做是否存在安全问题?
答案1
为什么它要导出认证的公钥?
用户 ID 只能存在于主密钥(即所谓的“认证”)上,而不能存在于子密钥上。如果你只获取子密钥数据包,那么能费点力气从文件中分离出来,除了你之外的任何人都不会知道这是谁的密钥,除非他们记得 16 位或更多十六进制字符串与你身份的映射。会这样做的人屈指可数——在一场可怕的电动工具事故切断了你所有的手指之后。
(如果您真的想这样做,请搜索 gpgsplit;我已经看到几个 Q 或 A 解决相关案例,您应该能够概括,但我不记得它们是在这里,超级用户,security.SX 还是 unix.SX。)
标准结构的另一个特点/好处是,每个接收者只需要确定(现在 WoT 失败了,配置)一次对主密钥的信任,然后所有子密钥(包括现有子密钥和将来创建的子密钥)都会自动得到验证和信任。如果您在没有主密钥的情况下分发子密钥(复数),则每次都必须手动处理每个子密钥。
将加密密钥的公钥共享给密钥服务器,是否会共享认证密钥的公钥?如果会,这样做是否存在安全问题?
是的。绝对没有加密问题;知道您的主密钥不会以任何方式损害或削弱您的子密钥。因为如上所述,主密钥可以并且通常包含您的用户 ID,它确实允许接收或获取您的密钥(集群)的人知道它属于“谁”,至少在您向用户 ID 中输入准确且可用的信息的情况下(您不会被迫这样做)。由于目的发布或分发你的密钥通常是为了让其他人知道它是你的,这通常不被视为问题,但你对此的感受由你决定。
请注意,如果您想使用多个“角色”并阻止其他人链接它们,则仅分发子密钥并不能实现这一点;其他人可以识别出子密钥是由同一个主密钥签名/认证的,即使他们不知道该主密钥的用户 ID。