'sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/process/maintainer-pgp-guidemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/zh_TW/process/maintainer-pgp-guidemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/it_IT/process/maintainer-pgp-guidemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ja_JP/process/maintainer-pgp-guidemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ko_KR/process/maintainer-pgp-guidemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/sp_SP/process/maintainer-pgp-guidemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh]/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/process/maintainer-pgp-guide.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h/Documentation/process/maintainer-pgp-guide.rst h]h)}(h.Documentation/process/maintainer-pgp-guide.rsth]h.Documentation/process/maintainer-pgp-guide.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hj hhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h内核维护者 PGP 指南h]h内核维护者 PGP 指南}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjxhhhhhKubh)}(hhh]h)}(hhh](h)}(h作者h]h作者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubh)}(h6Konstantin Ryabitsev h]h)}(h5Konstantin Ryabitsev h](hKonstantin Ryabitsev <}(hjhhhNhNubj))}(hkonstantin@linuxfoundation.orgh]hkonstantin@linuxfoundation.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri%mailto:konstantin@linuxfoundation.orguh1j(hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubah}(h]h ]h"]h$]h&]uh1hhjxhhhhhKubh)}(hX本文档面向 Linux 内核开发者,特别是子系统维护人员。文档中含有Linux 基金 会发布的更通用的 `保护代码完整性`_ 指南中讨论的内容子集。阅读该文档,以更 深入地讨论本指南中提到的一些主题。h](h~本文档面向 Linux 内核开发者,特别是子系统维护人员。文档中含有Linux 基金 会发布的更通用的 }(hjhhhNhNubj))}(h`保护代码完整性`_h]h保护代码完整性}(hjhhhNhNubah}(h]h ]h"]h$]h&]name保护代码完整性refuriFhttps://github.com/lfit/itpol/blob/master/protecting-code-integrity.mduh1j(hjresolvedKubhn 指南中讨论的内容子集。阅读该文档,以更 深入地讨论本指南中提到的一些主题。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjxhhubhtarget)}(hc.. _`保护代码完整性`: https://github.com/lfit/itpol/blob/master/protecting-code-integrity.mdh]h}(h]id1ah ]h"]保护代码完整性ah$]h&]jjuh1jhK"hjxhhhh referencedKubjw)}(hhh](j|)}(h&PGP 在 Linux 内核开发中的作用h]h&PGP 在 Linux 内核开发中的作用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj hhhhhKubh)}(hPGP 有助于确保 Linux 内核开发社区产出代码的完整性,并在较小程度上,通过 PGP 签名的电子邮件交换,在开发者之间建立可信的交流渠道。h]hPGP 有助于确保 Linux 内核开发社区产出代码的完整性,并在较小程度上,通过 PGP 签名的电子邮件交换,在开发者之间建立可信的交流渠道。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h7Linux 内核源代码主要有两种(维护)方式:h]h7Linux 内核源代码主要有两种(维护)方式:}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh bullet_list)}(hhh](h list_item)}(h分布式源仓库 (git)h]h)}(hjAh]h分布式源仓库 (git)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hj?ubah}(h]h ]h"]h$]h&]uh1j=hj:hhhhhNubj>)}(h定期发布快照 (tarballs) h]h)}(h定期发布快照 (tarballs)h]h定期发布快照 (tarballs)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjVubah}(h]h ]h"]h$]h&]uh1j=hj:hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j8hhhK!hj hhubh)}(hgit 仓库和 tarball 都带有创建官方内核版本的内核开发者的 PGP 签名。这 些签名提供了加密保证,即保证 kernel.org 或任何其他镜像提供的可下载版本 与这些开发者在其工作站上的版本相同。为此:h]hgit 仓库和 tarball 都带有创建官方内核版本的内核开发者的 PGP 签名。这 些签名提供了加密保证,即保证 kernel.org 或任何其他镜像提供的可下载版本 与这些开发者在其工作站上的版本相同。为此:}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hj hhubj9)}(hhh](j>)}(h-git 仓库在所有标签上提供 PGP 签名h]h)}(hjh]h-git 仓库在所有标签上提供 PGP 签名}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubj>)}(h2tarball 为所有下载提供独立的 PGP 签名 h]h)}(h1tarball 为所有下载提供独立的 PGP 签名h]h1tarball 为所有下载提供独立的 PGP 签名}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubeh}(h]h ]h"]h$]h&]jtjuuh1j8hhhK(hj hhubjw)}(hhh](j|)}(h'信任开发者,不要信基础设施h]h'信任开发者,不要信基础设施}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK,ubh)}(hXC自从 2011 年 kernel.org 核心系统遭到入侵以来,内核存档项目的主要运行原 则就是假定基础设施的任何部分都可能随时受到入侵。因此,管理员特意采取措施, 强调必须始终信任开发者,不能信任代码托管基础设施,无论后者的安全实践有多好。h]hXC自从 2011 年 kernel.org 核心系统遭到入侵以来,内核存档项目的主要运行原 则就是假定基础设施的任何部分都可能随时受到入侵。因此,管理员特意采取措施, 强调必须始终信任开发者,不能信任代码托管基础设施,无论后者的安全实践有多好。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjhhubh)}(hX:上述指导原则正是需要本指南的原因。希望确保通过对开发者的信任,我们不会简 单地将未来潜在安全事件的责任归咎于其他人。目的是提供一套指导开发者可以用 来创建安全的工作环境并保护用于建立 Linux 内核本身完整性的 PGP 密钥。h]hX:上述指导原则正是需要本指南的原因。希望确保通过对开发者的信任,我们不会简 单地将未来潜在安全事件的责任归咎于其他人。目的是提供一套指导开发者可以用 来创建安全的工作环境并保护用于建立 Linux 内核本身完整性的 PGP 密钥。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubeh}(h]id2ah ]h"]'信任开发者,不要信基础设施ah$]h&]uh1jvhj hhhhhK,ubeh}(h] pgp-linuxah ]h"]&pgp 在 linux 内核开发中的作用ah$]h&]uh1jvhjxhhhhhKubjw)}(hhh](j|)}(h PGP 工具h]h PGP 工具}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK7ubjw)}(hhh](j|)}(h 使用 GnuPG 2.2 或更高版本h]h 使用 GnuPG 2.2 或更高版本}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj hhhhhK:ubh)}(h默认情况下,你的发行版应该已经安装了 GnuPG,你只需要验证你使用的是相当新的 版本即可。要检查,请运行::h]h默认情况下,你的发行版应该已经安装了 GnuPG,你只需要验证你使用的是相当新的 版本即可。要检查,请运行:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)}(h``default-cache-ttl`` (秒): 如果在生命周期结束之前再次使用相同的 密钥,倒计时将重置为另一段时间。默认值为 600(10 分钟)。h]h)}(h``default-cache-ttl`` (秒): 如果在生命周期结束之前再次使用相同的 密钥,倒计时将重置为另一段时间。默认值为 600(10 分钟)。h](hliteral)}(h``default-cache-ttl``h]hdefault-cache-ttl}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjmubh (秒): 如果在生命周期结束之前再次使用相同的 密钥,倒计时将重置为另一段时间。默认值为 600(10 分钟)。}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKKhjiubah}(h]h ]h"]h$]h&]uh1j=hjfhhhhhNubj>)}(h``max-cache-ttl`` (秒): 无论你自输入初始密码以来多久使用过密钥, 如果最大生存时间倒计时结束,你都必须再次输入密码。默认值为 30 分钟。 h]h)}(h``max-cache-ttl`` (秒): 无论你自输入初始密码以来多久使用过密钥, 如果最大生存时间倒计时结束,你都必须再次输入密码。默认值为 30 分钟。h](jr)}(h``max-cache-ttl``h]h max-cache-ttl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh (秒): 无论你自输入初始密码以来多久使用过密钥, 如果最大生存时间倒计时结束,你都必须再次输入密码。默认值为 30 分钟。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhjubah}(h]h ]h"]h$]h&]uh1j=hjfhhhhhNubeh}(h]h ]h"]h$]h&]jtjuuh1j8hhhKKhjGhhubh)}(h如果你发现这些默认值太短(或太长),你可以编辑 ``~/.gnupg/gpg-agent.conf`` 文件以设置你自己的值::h](hF如果你发现这些默认值太短(或太长),你可以编辑 }(hjhhhNhNubjr)}(h``~/.gnupg/gpg-agent.conf``h]h~/.gnupg/gpg-agent.conf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh 文件以设置你自己的值:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKPhjGhhubj*)}(hb# 常规ttl设置为30分钟,最大ttl设置为2小时 default-cache-ttl 1800 max-cache-ttl 7200h]hb# 常规ttl设置为30分钟,最大ttl设置为2小时 default-cache-ttl 1800 max-cache-ttl 7200}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhKShjGhhubh)}(h不需要在 shell 会话开始时手动启动 gpg-agent。你可能需要检查 rc 文件来删除旧版本 GnuPG 中的所有内容,因为它可能不再做正确 的事情。h]h)}(h不需要在 shell 会话开始时手动启动 gpg-agent。你可能需要检查 rc 文件来删除旧版本 GnuPG 中的所有内容,因为它可能不再做正确 的事情。h]h不需要在 shell 会话开始时手动启动 gpg-agent。你可能需要检查 rc 文件来删除旧版本 GnuPG 中的所有内容,因为它可能不再做正确 的事情。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjubah}(h]h ]h"]h$]h&]uh1hhjGhhhhhNubeh}(h] gpg-agentah ]h"]配置 gpg-agent 选项ah$]h&]uh1jvhj hhhhhKEubeh}(h] gnupg-2-2ah ]h"] 使用 gnupg 2.2 或更高版本ah$]h&]uh1jvhjhhhhhK:ubeh}(h]id3ah ]h"] pgp 工具ah$]h&]uh1jvhjxhhhhhK7ubjw)}(hhh](j|)}(h保护你的 PGP 密钥h]h保护你的 PGP 密钥}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK^ubh)}(h本指南假定你已经拥有用于 Linux 内核开发目的的 PGP 密钥。如果你还没 有,请参阅前面提到的 "`保护代码完整性`_" 文档,以获取有关如何创建新 密钥的指导。h](h本指南假定你已经拥有用于 Linux 内核开发目的的 PGP 密钥。如果你还没 有,请参阅前面提到的 “}(hj,hhhNhNubj))}(h`保护代码完整性`_h]h保护代码完整性}(hj4hhhNhNubah}(h]h ]h"]h$]h&]name保护代码完整性jjuh1j(hj,jKubh>” 文档,以获取有关如何创建新 密钥的指导。}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK`hjhhubh)}(hT如果你当前的密钥低于 2048 位 (RSA),你还应该创建一个新密钥。h]hT如果你当前的密钥低于 2048 位 (RSA),你还应该创建一个新密钥。}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhjhhubjw)}(hhh](j|)}(h了解 PGP 子密钥h]h了解 PGP 子密钥}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj\hhhhhKgubh)}(hPGP 密钥很少由单个密钥对组成 - 通常它是独立子密钥的集合,这些子密钥 可根据其功能用于不同的目的,并在创建时分配。PGP 定义了密钥可以具有的 四种功能:h]hPGP 密钥很少由单个密钥对组成 - 通常它是独立子密钥的集合,这些子密钥 可根据其功能用于不同的目的,并在创建时分配。PGP 定义了密钥可以具有的 四种功能:}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihj\hhubj9)}(hhh](j>)}(h**[S]** 密钥可用于签名h]h)}(hjh](hstrong)}(h**[S]**h]h[S]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 密钥可用于签名}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKmhj~ubah}(h]h ]h"]h$]h&]uh1j=hj{hhhhhNubj>)}(h**[E]** 密钥可用于加密h]h)}(hjh](j)}(h**[E]**h]h[E]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 密钥可用于加密}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKnhjubah}(h]h ]h"]h$]h&]uh1j=hj{hhhhhNubj>)}(h#**[A]** 密钥可用于身份验证h]h)}(hjh](j)}(h**[A]**h]h[A]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 密钥可用于身份验证}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKohjubah}(h]h ]h"]h$]h&]uh1j=hj{hhhhhNubj>)}(h***[C]** 密钥可用于验证其他密钥 h]h)}(h)**[C]** 密钥可用于验证其他密钥h](j)}(h**[C]**h]h[C]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" 密钥可用于验证其他密钥}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKphjubah}(h]h ]h"]h$]h&]uh1j=hj{hhhhhNubeh}(h]h ]h"]h$]h&]jtjuuh1j8hhhKmhj\hhubh)}(hXZ具有 **[C]** 功能的密钥通常称为“主”密钥,但该术语具有误导性,因为 它意味着可以使用Certify密钥来代替同一链上的任何其他子密钥(如物理 “主密钥”可用于打开为其他钥匙制作的锁)。由于情况并非如此,本指南将 其称为“认证密钥”以避免任何歧义。h](h具有 }(hjhhhNhNubj)}(h**[C]**h]h[C]}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhXL 功能的密钥通常称为“主”密钥,但该术语具有误导性,因为 它意味着可以使用Certify密钥来代替同一链上的任何其他子密钥(如物理 “主密钥”可用于打开为其他钥匙制作的锁)。由于情况并非如此,本指南将 其称为“认证密钥”以避免任何歧义。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhj\hhubh)}(h%充分理解以下内容至关重要:h]h%充分理解以下内容至关重要:}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhj\hhubhenumerated_list)}(hhh](j>)}(h所有子项彼此完全独立。如果你丢失了私有子密钥,则无法从链上的任何 其他私钥恢复或重新创建它。h]h)}(h所有子项彼此完全独立。如果你丢失了私有子密钥,则无法从链上的任何 其他私钥恢复或重新创建它。h]h所有子项彼此完全独立。如果你丢失了私有子密钥,则无法从链上的任何 其他私钥恢复或重新创建它。}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjNubah}(h]h ]h"]h$]h&]uh1j=hjKhhhhhNubj>)}(hXt除 Certify 密钥外,可以有多个具有相同功能的子密钥(例如,你可 以有 2 个有效的加密子密钥、3 个有效的签名子密钥,但只有 1 个有 效的认证子密钥)。所有子密钥都是完全独立的——加密到一个 **[E]** 子密钥的信息(messages)无法使用你可能拥有的任何其他 **[E]** 子密钥解密。h]h)}(hXt除 Certify 密钥外,可以有多个具有相同功能的子密钥(例如,你可 以有 2 个有效的加密子密钥、3 个有效的签名子密钥,但只有 1 个有 效的认证子密钥)。所有子密钥都是完全独立的——加密到一个 **[E]** 子密钥的信息(messages)无法使用你可能拥有的任何其他 **[E]** 子密钥解密。h](hX除 Certify 密钥外,可以有多个具有相同功能的子密钥(例如,你可 以有 2 个有效的加密子密钥、3 个有效的签名子密钥,但只有 1 个有 效的认证子密钥)。所有子密钥都是完全独立的——加密到一个 }(hjjhhhNhNubj)}(h**[E]**h]h[E]}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubhL 子密钥的信息(messages)无法使用你可能拥有的任何其他 }(hjjhhhNhNubj)}(h**[E]**h]h[E]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh 子密钥解密。}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK{hjfubah}(h]h ]h"]h$]h&]uh1j=hjKhhhhhNubj>)}(hq单个子密钥可能具有多种功能(例如,你的 **[C]** 密钥也可以是你 的 **[S]** 密钥)。 h]h)}(hp单个子密钥可能具有多种功能(例如,你的 **[C]** 密钥也可以是你 的 **[S]** 密钥)。h](h:单个子密钥可能具有多种功能(例如,你的 }(hjhhhNhNubj)}(h**[C]**h]h[C]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 密钥也可以是你 的 }(hjhhhNhNubj)}(h**[S]**h]h[S]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 密钥)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j=hjKhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jIhj\hhhhhKyubh)}(h携带 **[C]** (证明)能力的密钥是唯一可以用来指示与其他密钥的关系 的密钥。仅 **[C]** 密钥可用于:h](h携带 }(hjhhhNhNubj)}(h**[C]**h]h[C]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh` (证明)能力的密钥是唯一可以用来指示与其他密钥的关系 的密钥。仅 }(hjhhhNhNubj)}(h**[C]**h]h[C]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 密钥可用于:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubj9)}(hhh](j>)}(h@添加或撤销具有 S/E/A 功能的其他密钥(子密钥)h]h)}(hj h]h@添加或撤销具有 S/E/A 功能的其他密钥(子密钥)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubj>)}(h6添加、更改或撤销与密钥关联的身份 (uid)h]h)}(hj7h]h6添加、更改或撤销与密钥关联的身份 (uid)}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5ubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubj>)}(h9添加或更改其本身或任何子密钥的到期日期h]h)}(hjNh]h9添加或更改其本身或任何子密钥的到期日期}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjLubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubj>)}(h4出于信任网络的目的签署其他人的密钥 h]h)}(h3出于信任网络的目的签署其他人的密钥h]h3出于信任网络的目的签署其他人的密钥}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjcubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubeh}(h]h ]h"]h$]h&]jtjuuh1j8hhhKhj\hhubh)}(h@默认情况下,GnuPG 在生成新密钥时创建以下内容:h]h@默认情况下,GnuPG 在生成新密钥时创建以下内容:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubj9)}(hhh](j>)}(h;一个子密钥同时具有认证和签名功能 (**[SC]**)h]h)}(hjh](h2一个子密钥同时具有认证和签名功能 (}(hjhhhNhNubj)}(h**[SC]**h]h[SC]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubj>)}(h/具有加密功能的单独子密钥 (**[E]**) h]h)}(h.具有加密功能的单独子密钥 (**[E]**)h](h&具有加密功能的单独子密钥 (}(hjhhhNhNubj)}(h**[E]**h]h[E]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubeh}(h]h ]h"]h$]h&]jtjuuh1j8hhhKhj\hhubh)}(h如果你在生成密钥时使用了默认参数,那么这就是你将得到的。你可以通过 运行命令来验证,例如: ``gpg --list-secret-keys``h](h如果你在生成密钥时使用了默认参数,那么这就是你将得到的。你可以通过 运行命令来验证,例如: }(hjhhhNhNubjr)}(h``gpg --list-secret-keys``h]hgpg --list-secret-keys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubj*)}(hsec ed25519 2022-12-20 [SC] [expires: 2024-12-19] 000000000000000000000000AAAABBBBCCCCDDDD uid [ultimate] Alice Dev ssb cv25519 2022-12-20 [E] [expires: 2024-12-19]h]hsec ed25519 2022-12-20 [SC] [expires: 2024-12-19] 000000000000000000000000AAAABBBBCCCCDDDD uid [ultimate] Alice Dev ssb cv25519 2022-12-20 [E] [expires: 2024-12-19]}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhKhj\hhubh)}(h在 ``sec`` 这行下面长长的一行就是你的密钥指纹-无论在下文任何地方 看到 ``[fpr]`` 都指的是这40个字符。h](h在 }(hjhhhNhNubjr)}(h``sec``h]hsec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubhX 这行下面长长的一行就是你的密钥指纹-无论在下文任何地方 看到 }(hjhhhNhNubjr)}(h ``[fpr]``h]h[fpr]}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh 都指的是这40个字符。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubeh}(h]id5ah ]h"]了解 pgp 子密钥ah$]h&]uh1jvhjhhhhhKgubjw)}(hhh](j|)}(h确保你的密码强度高h]h确保你的密码强度高}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjOhhhhhKubh)}(hGnuPG 在将私钥存储到磁盘之前使用密码对其进行加密。这样,即使你的 ``.gnupg`` 目录全部泄露或被盗,攻击者在没有事先获取密码来解密的 情况下也无法使用你的私钥。h](h^GnuPG 在将私钥存储到磁盘之前使用密码对其进行加密。这样,即使你的 }(hj`hhhNhNubjr)}(h ``.gnupg``h]h.gnupg}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj`ubhw 目录全部泄露或被盗,攻击者在没有事先获取密码来解密的 情况下也无法使用你的私钥。}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjOhhubh)}(hY你的私钥受到强密码保护是绝对必要的。要设置或更改它,请使用::h]hX你的私钥受到强密码保护是绝对必要的。要设置或更改它,请使用:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjOhhubj*)}(h$ gpg --change-passphrase [fpr]h]h$ gpg --change-passphrase [fpr]}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjOhhubeh}(h]id6ah ]h"]确保你的密码强度高ah$]h&]uh1jvhjhhhhhKubjw)}(hhh](j|)}(h$创建一个单独的签名子密钥h]h$创建一个单独的签名子密钥}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(h我们的目的是通过将你的证书密钥移动到离线媒介来保护它,因此如果你只 有组合的 **[SC]** 密钥,那么你应该创建一个单独的签名子密钥::h](hq我们的目的是通过将你的证书密钥移动到离线媒介来保护它,因此如果你只 有组合的 }(hjhhhNhNubj)}(h**[SC]**h]h[SC]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> 密钥,那么你应该创建一个单独的签名子密钥:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj*)}(h'$ gpg --quick-addkey [fpr] ed25519 signh]h'$ gpg --quick-addkey [fpr] ed25519 sign}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjhhubh)}(hGnuPG 中的 ECC 支持 请注意,如果你打算使用不支持 ED25519 ECC 密钥的硬件密钥,则 应选择“nistp256”或“ed25519”。请参阅下面有关推荐硬件设备的 部分。h](h)}(hGnuPG 中的 ECC 支持h]hGnuPG 中的 ECC 支持}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(h请注意,如果你打算使用不支持 ED25519 ECC 密钥的硬件密钥,则 应选择“nistp256”或“ed25519”。请参阅下面有关推荐硬件设备的 部分。h]h请注意,如果你打算使用不支持 ED25519 ECC 密钥的硬件密钥,则 应选择“nistp256”或“ed25519”。请参阅下面有关推荐硬件设备的 部分。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1hhjhhhhhNubeh}(h]id7ah ]h"]$创建一个单独的签名子密钥ah$]h&]uh1jvhjhhhhhKubjw)}(hhh](j|)}(h-备份你的证书密钥以进行灾难恢复h]h-备份你的证书密钥以进行灾难恢复}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(h你的 PGP 密钥上来自其他开发者的签名越多,出于灾难恢复的原因,你就越 有理由创建一个位于数字媒体之外的备份版本。h]h你的 PGP 密钥上来自其他开发者的签名越多,出于灾难恢复的原因,你就越 有理由创建一个位于数字媒体之外的备份版本。}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX创建私钥的可打印硬拷贝的最佳方法是使用 ``paperkey`` 为此目的编写 的软件。有关输出格式及其相对于其他解决方案的优势的更多详细信息,请参 阅 ``paperkey`` 参考资料。大多数发行版都应该已经打包了 Paperkey。h](h:创建私钥的可打印硬拷贝的最佳方法是使用 }(hj0hhhNhNubjr)}(h ``paperkey``h]hpaperkey}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj0ubh 为此目的编写 的软件。有关输出格式及其相对于其他解决方案的优势的更多详细信息,请参 阅 }(hj0hhhNhNubjr)}(h ``paperkey``h]hpaperkey}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj0ubhF 参考资料。大多数发行版都应该已经打包了 Paperkey。}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h5运行以下命令来创建私钥的硬拷贝备份::h]h4运行以下命令来创建私钥的硬拷贝备份:}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj*)}(hA$ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txth]hA$ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt}hjpsbah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjhhubh)}(hX!打印出该文件(或将输出直接传输到 lpr),然后用笔在纸的边缘写下你的密 码。 **强烈建议这样做**,因为密钥打印输出仍然使用该密码进行加密,并且 如果你更改了它,你将不记得创建备份时它曾经是什么 - *保证*。h](hl打印出该文件(或将输出直接传输到 lpr),然后用笔在纸的边缘写下你的密 码。 }(hj~hhhNhNubj)}(h**强烈建议这样做**h]h强烈建议这样做}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh,因为密钥打印输出仍然使用该密码进行加密,并且 如果你更改了它,你将不记得创建备份时它曾经是什么 - }(hj~hhhNhNubhemphasis)}(h*保证*h]h保证}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh。}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h将生成的打印输出和手写密码放入信封中,并存放在安全且受到良好保护的地 方,最好远离你的家,例如银行保险柜。h]h将生成的打印输出和手写密码放入信封中,并存放在安全且受到良好保护的地 方,最好远离你的家,例如银行保险柜。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h你的打印机可能不再是连接到并行端口的简单哑设备,但由于输出仍然使 用你的密码进行加密,因此即使“云端打印”的现代打印机也应该保持相 对安全的操作h]h)}(h你的打印机可能不再是连接到并行端口的简单哑设备,但由于输出仍然使 用你的密码进行加密,因此即使“云端打印”的现代打印机也应该保持相 对安全的操作h]h你的打印机可能不再是连接到并行端口的简单哑设备,但由于输出仍然使 用你的密码进行加密,因此即使“云端打印”的现代打印机也应该保持相 对安全的操作}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubeh}(h]id8ah ]h"]-备份你的证书密钥以进行灾难恢复ah$]h&]uh1jvhjhhhhhKubjw)}(hhh](j|)}(h备份整个 GnuPG 目录h]h备份整个 GnuPG 目录}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubhwarning)}(h"**!!!不要跳过这个步骤!!!**h]h)}(hjh]j)}(hjh]h!!!不要跳过这个步骤!!!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(hX6如果你需要恢复 PGP 密钥,拥有一个随时可用的备份非常重要。这与我们 所做的灾难级准备不同 ``paperkey`` 。每当你需要使用你的证书密钥时, 例如在会议和峰会后更改你自己的密钥或签署其他人的密钥时,你还将依赖 这些外部副本。h](h如果你需要恢复 PGP 密钥,拥有一个随时可用的备份非常重要。这与我们 所做的灾难级准备不同 }(hj hhhNhNubjr)}(h ``paperkey``h]hpaperkey}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubh 。每当你需要使用你的证书密钥时, 例如在会议和峰会后更改你自己的密钥或签署其他人的密钥时,你还将依赖 这些外部副本。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h首先获取一个小型 USB “拇指” 驱动器(最好是两个!),用于备份目的。 你需要使用 LUKS 对其进行加密——请参阅你的发行版文档以了解如何完成 此操作。h]h首先获取一个小型 USB “拇指” 驱动器(最好是两个!),用于备份目的。 你需要使用 LUKS 对其进行加密——请参阅你的发行版文档以了解如何完成 此操作。}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hD对于加密密码,你可以使用与 PGP 密钥相同的密码。h]hD对于加密密码,你可以使用与 PGP 密钥相同的密码。}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h加密过程完成后,重新插入 USB 驱动器并确保其正确安装。将整个 ``.gnupg`` 目录复制到加密存储::h](hW加密过程完成后,重新插入 USB 驱动器并确保其正确安装。将整个 }(hjO hhhNhNubjr)}(h ``.gnupg``h]h.gnupg}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjO ubh 目录复制到加密存储:}(hjO hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj*)}(h-$ cp -a ~/.gnupg /media/disk/foo/gnupg-backuph]h-$ cp -a ~/.gnupg /media/disk/foo/gnupg-backup}hjo sbah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjhhubh)}(hA你现在应该测试一下,确保一切依然能正常工作::h]h@你现在应该测试一下,确保一切依然能正常工作:}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj*)}(h=$ gpg --homedir=/media/disk/foo/gnupg-backup --list-key [fpr]h]h=$ gpg --homedir=/media/disk/foo/gnupg-backup --list-key [fpr]}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjhhubh)}(hXx如果没有出现任何错误,那么就可以开始了。卸下 USB 驱动器,给它贴上 明显的标签,这样下次需要使用随机 USB 驱动器时就不会把它吹走,然后 放在安全的地方 - 但不要太远,因为你每次都需要使用它时不时地用于诸 如编辑身份、添加或撤销子密钥或签署其他人的密钥之类的事情。h]hXx如果没有出现任何错误,那么就可以开始了。卸下 USB 驱动器,给它贴上 明显的标签,这样下次需要使用随机 USB 驱动器时就不会把它吹走,然后 放在安全的地方 - 但不要太远,因为你每次都需要使用它时不时地用于诸 如编辑身份、添加或撤销子密钥或签署其他人的密钥之类的事情。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]gnupgah ]h"]备份整个 gnupg 目录ah$]h&]uh1jvhjhhhhhKubjw)}(hhh](j|)}(h*从你的 homedir 中删除 Certify 密钥h]h*从你的 homedir 中删除 Certify 密钥}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj hhhhhKubh)}(h我们的主目录中的文件并没有我们想象的那么受到保护。它们可以通过多种 不同的方式泄露或被盗:h]h我们的主目录中的文件并没有我们想象的那么受到保护。它们可以通过多种 不同的方式泄露或被盗:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj9)}(hhh](j>)}(hB在制作快速主目录备份以设置新工作站时意外发生h]h)}(hj h]hB在制作快速主目录备份以设置新工作站时意外发生}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j=hj hhhhhNubj>)}(h!系统管理员的疏忽或恶意h]h)}(hj h]h!系统管理员的疏忽或恶意}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j=hj hhhhhNubj>)}(h通过不安全的备份h]h)}(hj h]h通过不安全的备份}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j=hj hhhhhNubj>)}(hL通过桌面应用程序(浏览器、pdf 查看器等)中的恶意软件h]h)}(hj h]hL通过桌面应用程序(浏览器、pdf 查看器等)中的恶意软件}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j=hj hhhhhNubj>)}(h跨越国界时通过胁迫 h]h)}(h跨越国界时通过胁迫h]h跨越国界时通过胁迫}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj- ubah}(h]h ]h"]h$]h&]uh1j=hj hhhhhNubeh}(h]h ]h"]h$]h&]jtjuuh1j8hhhKhj hhubh)}(hX使用良好的密码短语保护你的密钥极大地有助于降低上述任何风险,但密码 短语可以通过键盘记录器、肩窥或任何其他方式发现。因此,建议的设置是 从主目录中删除你的证书密钥并将其存储在离线存储中。h]hX使用良好的密码短语保护你的密钥极大地有助于降低上述任何风险,但密码 短语可以通过键盘记录器、肩窥或任何其他方式发现。因此,建议的设置是 从主目录中删除你的证书密钥并将其存储在离线存储中。}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(h请参阅上一节并确保你已完整备份 GnuPG 目录。如果你没有可用的 备份,我们要做的事情将使你的密钥毫无用处!h]h)}(h请参阅上一节并确保你已完整备份 GnuPG 目录。如果你没有可用的 备份,我们要做的事情将使你的密钥毫无用处!h]h请参阅上一节并确保你已完整备份 GnuPG 目录。如果你没有可用的 备份,我们要做的事情将使你的密钥毫无用处!}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjY ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubh)}(h-首先,确定你的证书密钥的keygrip::h]h,首先,确定你的证书密钥的keygrip:}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj*)}(h%$ gpg --with-keygrip --list-key [fpr]h]h%$ gpg --with-keygrip --list-key [fpr]}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhM hj hhubh)}(h输出将是这样的::h]h输出将是这样的:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj hhubj*)}(hXpub ed25519 2022-12-20 [SC] [expires: 2022-12-19] 000000000000000000000000AAAABBBBCCCCDDDD Keygrip = 1111000000000000000000000000000000000000 uid [ultimate] Alice Dev sub cv25519 2022-12-20 [E] [expires: 2022-12-19] Keygrip = 2222000000000000000000000000000000000000 sub ed25519 2022-12-20 [S] Keygrip = 3333000000000000000000000000000000000000h]hXpub ed25519 2022-12-20 [SC] [expires: 2022-12-19] 000000000000000000000000AAAABBBBCCCCDDDD Keygrip = 1111000000000000000000000000000000000000 uid [ultimate] Alice Dev sub cv25519 2022-12-20 [E] [expires: 2022-12-19] Keygrip = 2222000000000000000000000000000000000000 sub ed25519 2022-12-20 [S] Keygrip = 3333000000000000000000000000000000000000}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhM hj hhubh)}(h找到该线 ``pub`` 下方的keygrip项 (位于“认证密钥指纹”的正下方)。 这将直接对应于你``~/.gnupg`` 目录中的一个文件::h](h 找到该线 }(hj hhhNhNubjr)}(h``pub``h]hpub}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubh 下方的keygrip项 (位于“认证密钥指纹”的正下方)。 这将直接对应于你``~/.gnupg`` 目录中的一个文件:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj*)}(h$ cd ~/.gnupg/private-keys-v1.d $ ls 1111000000000000000000000000000000000000.key 2222000000000000000000000000000000000000.key 3333000000000000000000000000000000000000.keyh]h$ cd ~/.gnupg/private-keys-v1.d $ ls 1111000000000000000000000000000000000000.key 2222000000000000000000000000000000000000.key 3333000000000000000000000000000000000000.key}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj hhubh)}(hJ你所要做的只是删除与证书密钥 keygrip 对应的 .key 文件::h]hI你所要做的只是删除与证书密钥 keygrip 对应的 .key 文件:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj*)}(hQ$ cd ~/.gnupg/private-keys-v1.d $ rm 1111000000000000000000000000000000000000.keyh]hQ$ cd ~/.gnupg/private-keys-v1.d $ rm 1111000000000000000000000000000000000000.key}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhM!hj hhubh)}(hz现在,如果你发出命令 ``--list-secret-keys`` ,它将显示证书密钥丢 失( 表示 ``#`` 它不可用)::h](h现在,如果你发出命令 }(hj hhhNhNubjr)}(h``--list-secret-keys``h]h--list-secret-keys}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubh. ,它将显示证书密钥丢 失( 表示 }(hj hhhNhNubjr)}(h``#``h]h#}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubh 它不可用):}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM$hj hhubj*)}(hX$ gpg --list-secret-keys sec# ed25519 2022-12-20 [SC] [expires: 2024-12-19] 000000000000000000000000AAAABBBBCCCCDDDD uid [ultimate] Alice Dev ssb cv25519 2022-12-20 [E] [expires: 2024-12-19] ssb ed25519 2022-12-20 [S]h]hX$ gpg --list-secret-keys sec# ed25519 2022-12-20 [SC] [expires: 2024-12-19] 000000000000000000000000AAAABBBBCCCCDDDD uid [ultimate] Alice Dev ssb cv25519 2022-12-20 [E] [expires: 2024-12-19] ssb ed25519 2022-12-20 [S]}hj% sbah}(h]h ]h"]h$]h&]hhuh1j)hhhM'hj hhubh)}(h你还应该删除 ``~/.gnupg``目录中的所有 ``secring.gpg`` 文件 ,这些 文件可能是以前版本的 GnuPG 留下的。h](h你还应该删除 }(hj3 hhhNhNubjr)}(h.``~/.gnupg``目录中的所有 ``secring.gpg``h]h*~/.gnupg``目录中的所有 ``secring.gpg}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj3 ubhC 文件 ,这些 文件可能是以前版本的 GnuPG 留下的。}(hj3 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM.hj hhubjw)}(hhh](j|)}(h,如果你没有“private-keys-v1.d”目录h]h,如果你没有“private-keys-v1.d”目录}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjS hhhhhM2ubh)}(hX&如果你没有 ``~/.gnupg/private-keys-v1.d`` 目录,那么你的密钥仍存 储在 GnuPG v1 使用的旧文件 ``secring.gpg`` 中。对密钥进行任何更改 (例如更改密码或添加子密钥)应该会自动转换旧 ``secring.gpg`` 格式以 供使用 ``private-keys-v1.d`` 。h](h如果你没有 }(hjd hhhNhNubjr)}(h``~/.gnupg/private-keys-v1.d``h]h~/.gnupg/private-keys-v1.d}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjd ubhF 目录,那么你的密钥仍存 储在 GnuPG v1 使用的旧文件 }(hjd hhhNhNubjr)}(h``secring.gpg``h]h secring.gpg}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjd ubhf 中。对密钥进行任何更改 (例如更改密码或添加子密钥)应该会自动转换旧 }(hjd hhhNhNubjr)}(h``secring.gpg``h]h secring.gpg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjd ubh 格式以 供使用 }(hjd hhhNhNubjr)}(h``private-keys-v1.d``h]hprivate-keys-v1.d}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjd ubh 。}(hjd hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM4hjS hhubh)}(hi完成此操作后,请确保删除过时的 ``secring.gpg`` 文件,其中仍然包含你 的私钥。h](h.完成此操作后,请确保删除过时的 }(hj hhhNhNubjr)}(h``secring.gpg``h]h secring.gpg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubh, 文件,其中仍然包含你 的私钥。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM9hjS hhubeh}(h]private-keys-v1-dah ]h"],如果你没有“private-keys-v1.d”目录ah$]h&]uh1jvhj hhhhhM2ubeh}(h]homedir-certifyah ]h"]*从你的 homedir 中删除 certify 密钥ah$]h&]uh1jvhjhhhhhKubeh}(h]id4ah ]h"]保护你的 pgp 密钥ah$]h&]uh1jvhjxhhhhhK^ubjw)}(hhh](j|)}(h$将子密钥移至专用加密设备h]h$将子密钥移至专用加密设备}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj hhhhhM>ubh)}(hX尽管 Certify 密钥现在不会被泄露或被盗,但子密钥仍然位于你的主目录中。 任何设法获得这些内容的人都将能够解密你的通信或伪造你的签名(如果他们知 道密码)。此外,每次执行 GnuPG 操作时,密钥都会加载到系统内存中,并 可能被足够高级的恶意软件(例如 Meltdown 和 Spectre)从那里窃取。h]hX尽管 Certify 密钥现在不会被泄露或被盗,但子密钥仍然位于你的主目录中。 任何设法获得这些内容的人都将能够解密你的通信或伪造你的签名(如果他们知 道密码)。此外,每次执行 GnuPG 操作时,密钥都会加载到系统内存中,并 可能被足够高级的恶意软件(例如 Meltdown 和 Spectre)从那里窃取。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hj hhubh)}(hl完全保护密钥的最佳方法是将它们转移到能够进行智能卡操作的专用硬件设备上。h]hl完全保护密钥的最佳方法是将它们转移到能够进行智能卡操作的专用硬件设备上。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMEhj hhubjw)}(hhh](j|)}(h智能卡的好处h]h智能卡的好处}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj hhhhhMHubh)}(hX智能卡包含一个加密芯片,能够存储私钥并直接在卡本身上执行加密操作。由于 密钥内容永远不会离开智能卡,因此插入硬件设备的计算机的操作系统无法自行 检索私钥。这与我们之前用于备份目的的加密 USB 存储设备有很大不同——当 USB 设备插入并安装时,操作系统能够访问私钥内容。h]hX智能卡包含一个加密芯片,能够存储私钥并直接在卡本身上执行加密操作。由于 密钥内容永远不会离开智能卡,因此插入硬件设备的计算机的操作系统无法自行 检索私钥。这与我们之前用于备份目的的加密 USB 存储设备有很大不同——当 USB 设备插入并安装时,操作系统能够访问私钥内容。}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMJhj hhubh)}(hM使用外部加密 USB 介质并不能替代具有智能卡功能的设备。h]hM使用外部加密 USB 介质并不能替代具有智能卡功能的设备。}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMOhj hhubeh}(h]id10ah ]h"]智能卡的好处ah$]h&]uh1jvhj hhhhhMHubjw)}(hhh](j|)}(h可用的智能卡设备h]h可用的智能卡设备}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjT hhhhhMRubh)}(h除非你的所有笔记本电脑和工作站都有智能卡读卡器,否则最简单的方法是获 取实现智能卡功能的专用 USB 设备。有多种选择::h]h除非你的所有笔记本电脑和工作站都有智能卡读卡器,否则最简单的方法是获 取实现智能卡功能的专用 USB 设备。有多种选择::}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThjT hhubj9)}(hhh](j>)}(h`Nitrokey Start`_: 开放硬件和免费软件,日本基于FSI的 `Gnuk` 。 少数支持 ED25519 ECC 密钥的商用设备之一,但提供的安全功能最少 (例如防篡改或某些旁路攻击)。h]h)}(h`Nitrokey Start`_: 开放硬件和免费软件,日本基于FSI的 `Gnuk` 。 少数支持 ED25519 ECC 密钥的商用设备之一,但提供的安全功能最少 (例如防篡改或某些旁路攻击)。h](j))}(h`Nitrokey Start`_h]hNitrokey Start}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]nameNitrokey Startj7https://shop.nitrokey.com/shop/product/nitrokey-start-6uh1j(hjz jKubh3: 开放硬件和免费软件,日本基于FSI的 }(hjz hhhNhNubhtitle_reference)}(h`Gnuk`h]hGnuk}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjz ubh 。 少数支持 ED25519 ECC 密钥的商用设备之一,但提供的安全功能最少 (例如防篡改或某些旁路攻击)。}(hjz hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMWhjv ubah}(h]h ]h"]h$]h&]uh1j=hjs hhhhhNubj>)}(h`Nitrokey Pro 2`_: 与 Nitrokey Start 类似,但更防篡改并提供 更多安全功能。Pro 2 支持 ECC 加密 (NISTP)。h]h)}(h`Nitrokey Pro 2`_: 与 Nitrokey Start 类似,但更防篡改并提供 更多安全功能。Pro 2 支持 ECC 加密 (NISTP)。h](j))}(h`Nitrokey Pro 2`_h]hNitrokey Pro 2}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameNitrokey Pro 2j=https://shop.nitrokey.com/shop/product/nkpr2-nitrokey-pro-2-3uh1j(hj jKubhn: 与 Nitrokey Start 类似,但更防篡改并提供 更多安全功能。Pro 2 支持 ECC 加密 (NISTP)。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMZhj ubah}(h]h ]h"]h$]h&]uh1j=hjs hhhhhNubj>)}(h`Yubikey 5`_: 专有硬件和软件,但比 Nitrokey Pro 便宜,并且以 USB-C 形式提供,对于较新的笔记本电脑更有用。提供额外的安全功能, 例如 FIDO U2F 等,现在终于支持 NISTP 和 ED25519 ECC 密钥。 h]h)}(h`Yubikey 5`_: 专有硬件和软件,但比 Nitrokey Pro 便宜,并且以 USB-C 形式提供,对于较新的笔记本电脑更有用。提供额外的安全功能, 例如 FIDO U2F 等,现在终于支持 NISTP 和 ED25519 ECC 密钥。h](j))}(h `Yubikey 5`_h]h Yubikey 5}(hj hhhNhNubah}(h]h ]h"]h$]h&]name Yubikey 5j3https://www.yubico.com/products/yubikey-5-overview/uh1j(hj jKubh: 专有硬件和软件,但比 Nitrokey Pro 便宜,并且以 USB-C 形式提供,对于较新的笔记本电脑更有用。提供额外的安全功能, 例如 FIDO U2F 等,现在终于支持 NISTP 和 ED25519 ECC 密钥。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM\hj ubah}(h]h ]h"]h$]h&]uh1j=hjs hhhhhNubeh}(h]h ]h"]h$]h&]jtjuuh1j8hhhMWhjT hhubh)}(hq你的选择将取决于成本、你所在地理区域的货运便利性以及开放/专有硬件考虑 因素。h]hq你的选择将取决于成本、你所在地理区域的货运便利性以及开放/专有硬件考虑 因素。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM`hjT hhubh)}(h如果你位列于 MAINTAINERS 中或在 kernel.org 上拥有帐户,则你有 资格获得Linux 基金会提供的_`qualify for a free Nitrokey Start` 。h]h)}(h如果你位列于 MAINTAINERS 中或在 kernel.org 上拥有帐户,则你有 资格获得Linux 基金会提供的_`qualify for a free Nitrokey Start` 。h]h如果你位列于 MAINTAINERS 中或在 kernel.org 上拥有帐户,则你有 资格获得Linux 基金会提供的_`qualify for a free Nitrokey Start` 。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMehj ubah}(h]h ]h"]h$]h&]uh1hhjT hhhhhNubj)}(hM.. _`Nitrokey Start`: https://shop.nitrokey.com/shop/product/nitrokey-start-6h]h}(h]nitrokey-startah ]h"]nitrokey startah$]h&]jj uh1jhMshjT hhhhj Kubj)}(hS.. _`Nitrokey Pro 2`: https://shop.nitrokey.com/shop/product/nkpr2-nitrokey-pro-2-3h]h}(h]nitrokey-pro-2ah ]h"]nitrokey pro 2ah$]h&]jj uh1jhMthjT hhhhj Kubj)}(hD.. _`Yubikey 5`: https://www.yubico.com/products/yubikey-5-overview/h]h}(h] yubikey-5ah ]h"] yubikey 5ah$]h&]jj uh1jhMuhjT hhhhj Kubj)}(h(.. _Gnuk: https://www.fsij.org/doc-gnuk/h]h}(h]gnukah ]h"]gnukah$]h&]jhttps://www.fsij.org/doc-gnuk/uh1jhMvhjT hhhhubj)}(hr.. _`qualify for a free Nitrokey Start`: https://www.kernel.org/nitrokey-digital-tokens-for-kernel-developers.htmlh]h}(h]!qualify-for-a-free-nitrokey-startah ]h"]!qualify for a free nitrokey startah$]h&]jIhttps://www.kernel.org/nitrokey-digital-tokens-for-kernel-developers.htmluh1jhMwhjT hhhhubeh}(h]id11ah ]h"]可用的智能卡设备ah$]h&]uh1jvhj hhhhhMRubjw)}(hhh](j|)}(h配置你的智能卡设备h]h配置你的智能卡设备}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjw hhhhhMoubh)}(h当你将智能卡设备插入任何现代 Linux 工作站时,它就应该可以正常工作 (TM)。你可以通过运行来验证它::h]h当你将智能卡设备插入任何现代 Linux 工作站时,它就应该可以正常工作 (TM)。你可以通过运行来验证它:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMqhjw hhubj*)}(h$ gpg --card-statush]h$ gpg --card-status}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMthjw hhubh)}(hX 如果你看到完整的智能卡详细信息,那么你就可以开始了。不幸的是,对所有 可能无法正常工作的原因进行故障排除超出了本指南的范围。如果你在使该卡 与 GnuPG 配合使用时遇到问题,请通过常规支持渠道寻求帮助。h]hX 如果你看到完整的智能卡详细信息,那么你就可以开始了。不幸的是,对所有 可能无法正常工作的原因进行故障排除超出了本指南的范围。如果你在使该卡 与 GnuPG 配合使用时遇到问题,请通过常规支持渠道寻求帮助。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMvhjw hhubh)}(hg要配置你的智能卡,你需要使用 GnuPG 菜单系统,因为没有方便的命令行开 关::h]hf要配置你的智能卡,你需要使用 GnuPG 菜单系统,因为没有方便的命令行开 关:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMzhjw hhubj*)}(h]$ gpg --card-edit [...omitted...] gpg/card> admin Admin commands are allowed gpg/card> passwdh]h]$ gpg --card-edit [...omitted...] gpg/card> admin Admin commands are allowed gpg/card> passwd}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhM}hjw hhubh)}(hXE你应该设置用户 PIN (1)、管理员 PIN (3) 和重置代码 (4)。请确保将 这些信息记录并存储在安全的地方,尤其是管理员 PIN 码和重置代码(它允 许你完全擦除智能卡)。你很少需要使用管理员 PIN 码,如果你不记录它, 你将不可避免地忘记它是什么。h]hXE你应该设置用户 PIN (1)、管理员 PIN (3) 和重置代码 (4)。请确保将 这些信息记录并存储在安全的地方,尤其是管理员 PIN 码和重置代码(它允 许你完全擦除智能卡)。你很少需要使用管理员 PIN 码,如果你不记录它, 你将不可避免地忘记它是什么。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjw hhubh)}(h回到主卡菜单,你还可以设置其他值(例如姓名、性别、登录数据等),但这 不是必需的,并且如果你丢失智能卡,还会泄露有关智能卡的信息。h]h回到主卡菜单,你还可以设置其他值(例如姓名、性别、登录数据等),但这 不是必需的,并且如果你丢失智能卡,还会泄露有关智能卡的信息。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjw hhubh)}(h[尽管名称为“PIN”,但卡上的用户 PIN 和管理员 PIN 都不需要是数字。h]h)}(hj h]h[尽管名称为“PIN”,但卡上的用户 PIN 和管理员 PIN 都不需要是数字。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1hhjw hhhhhNubj)}(h某些设备可能要求你将子密钥移至设备上,然后才能更改密码。请检查设 备制造商提供的文档。h]h)}(h某些设备可能要求你将子密钥移至设备上,然后才能更改密码。请检查设 备制造商提供的文档。h]h某些设备可能要求你将子密钥移至设备上,然后才能更改密码。请检查设 备制造商提供的文档。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjw hhhhhNubeh}(h]id12ah ]h"]配置你的智能卡设备ah$]h&]uh1jvhj hhhhhMoubjw)}(hhh](j|)}(h!将子密钥移至你的智能卡h]h!将子密钥移至你的智能卡}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj!hhhhhMubh)}(h退出卡菜单(使用“q”)并保存所有更改。接下来,让我们将子密钥移至智能卡 上。对于大多数操作,你将需要 PGP 密钥密码和卡的管理员 PIN::h]h退出卡菜单(使用“q”)并保存所有更改。接下来,让我们将子密钥移至智能卡 上。对于大多数操作,你将需要 PGP 密钥密码和卡的管理员 PIN:}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubj*)}(hX$ gpg --edit-key [fpr] Secret subkeys are available. pub ed25519/AAAABBBBCCCCDDDD created: 2022-12-20 expires: 2024-12-19 usage: SC trust: ultimate validity: ultimate ssb cv25519/1111222233334444 created: 2022-12-20 expires: never usage: E ssb ed25519/5555666677778888 created: 2017-12-07 expires: never usage: S [ultimate] (1). Alice Dev gpg>h]hX$ gpg --edit-key [fpr] Secret subkeys are available. pub ed25519/AAAABBBBCCCCDDDD created: 2022-12-20 expires: 2024-12-19 usage: SC trust: ultimate validity: ultimate ssb cv25519/1111222233334444 created: 2022-12-20 expires: never usage: E ssb ed25519/5555666677778888 created: 2017-12-07 expires: never usage: S [ultimate] (1). Alice Dev gpg>}hj@sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj!hhubh)}(h使用 ``--edit-key`` 使我们再次进入菜单模式,你会注意到按键列表有点 不同。从现在开始,所有命令都在此菜单模式内完成,如 所示 ``gpg>``。h](h使用 }(hjNhhhNhNubjr)}(h``--edit-key``h]h --edit-key}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjNubh 使我们再次进入菜单模式,你会注意到按键列表有点 不同。从现在开始,所有命令都在此菜单模式内完成,如 所示 }(hjNhhhNhNubjr)}(h``gpg>``h]hgpg>}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjNubh。}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubh)}(h首先,让我们选择要放入卡上的密钥 - 你可以通过键入 ``key 1`` (它是 列表中的第一个, **[E]** 子密钥)来完成此操作:h](hI首先,让我们选择要放入卡上的密钥 - 你可以通过键入 }(hjhhhNhNubjr)}(h ``key 1``h]hkey 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh$ (它是 列表中的第一个, }(hjhhhNhNubj)}(h**[E]**h]h[E]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" 子密钥)来完成此操作:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubh block_quote)}(h gpg> key 1 h]h)}(h gpg> key 1h]h gpg> key 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhj!hhubh)}(h在输出中,你现在在 **[E]** 子密钥应该看到 ``ssb*`` 。意味着这个子 密钥当前被选中。它用作切换键,这意味着如果你再次输入 ``key 1`` , ``*`` 将会消失并且该键将不再被选择。h](h在输出中,你现在在 }(hjhhhNhNubj)}(h**[E]**h]h[E]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 子密钥应该看到 }(hjhhhNhNubjr)}(h``ssb*``h]hssb*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubhf 。意味着这个子 密钥当前被选中。它用作切换键,这意味着如果你再次输入 }(hjhhhNhNubjr)}(h ``key 1``h]hkey 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh , }(hjhhhNhNubjr)}(h``*``h]h*}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh. 将会消失并且该键将不再被选择。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubh)}(h2现在,让我们将该密钥移至智能卡上::h]h1现在,让我们将该密钥移至智能卡上:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubj*)}(h\gpg> keytocard Please select where to store the key: (2) Encryption key Your selection? 2h]h\gpg> keytocard Please select where to store the key: (2) Encryption key Your selection? 2}hj0sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj!hhubh)}(hX由于它是我们的 **[E]** 密钥,因此将其放入加密槽中是有意义的。当你提 交选择时,系统将首先提示你输入 PGP 密钥密码,然后输入管理员 PIN 码。 如果命令返回且没有错误,则你的密钥已被移动。h](h由于它是我们的 }(hj>hhhNhNubj)}(h**[E]**h]h[E]}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh 密钥,因此将其放入加密槽中是有意义的。当你提 交选择时,系统将首先提示你输入 PGP 密钥密码,然后输入管理员 PIN 码。 如果命令返回且没有错误,则你的密钥已被移动。}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubh)}(hs**重要提示**:现在再次键入 ``key 1`` 以取消选择第一个键,并 ``key 2`` 选择 **[S]** 密钥::h](j)}(h**重要提示**h]h 重要提示}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh:现在再次键入 }(hj^hhhNhNubjr)}(h ``key 1``h]hkey 1}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj^ubh# 以取消选择第一个键,并 }(hj^hhhNhNubjr)}(h ``key 2``h]hkey 2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj^ubh 选择 }(hj^hhhNhNubj)}(h**[S]**h]h[S]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh 密钥:}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubj*)}(hgpg> key 1 gpg> key 2 gpg> keytocard Please select where to store the key: (1) Signature key (3) Authentication key Your selection? 1h]hgpg> key 1 gpg> key 2 gpg> keytocard Please select where to store the key: (1) Signature key (3) Authentication key Your selection? 1}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj!hhubh)}(h你可以使用 **[S]** 密钥进行签名和身份验证,但我们希望确保它位于签名槽中, 因此选择 (1)。跟之前一样,如果你的命令返回且没有错误,则操作成功::h](h你可以使用 }(hjhhhNhNubj)}(h**[S]**h]h[S]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 密钥进行签名和身份验证,但我们希望确保它位于签名槽中, 因此选择 (1)。跟之前一样,如果你的命令返回且没有错误,则操作成功:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubj*)}(hgpg> q Save changes? (y/N) yh]hgpg> q Save changes? (y/N) y}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj!hhubh)}(h保存更改将删除你从主目录移动到卡上的密钥(但这没关系,因为我们还有备份, 让我们需要替换智能卡时再次执行此操作)。h]h保存更改将删除你从主目录移动到卡上的密钥(但这没关系,因为我们还有备份, 让我们需要替换智能卡时再次执行此操作)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj!hhubjw)}(hhh](j|)}(h验证密钥是否已移动h]h验证密钥是否已移动}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(h\如果你现在执行 ``--list-secret-keys`` ,你将看到输出中存在细微的差异::h](h如果你现在执行 }(hj hhhNhNubjr)}(h``--list-secret-keys``h]h--list-secret-keys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubh/ ,你将看到输出中存在细微的差异:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(hX$ gpg --list-secret-keys sec# ed25519 2022-12-20 [SC] [expires: 2024-12-19] 000000000000000000000000AAAABBBBCCCCDDDD uid [ultimate] Alice Dev ssb> cv25519 2022-12-20 [E] [expires: 2024-12-19] ssb> ed25519 2022-12-20 [S]h]hX$ gpg --list-secret-keys sec# ed25519 2022-12-20 [SC] [expires: 2024-12-19] 000000000000000000000000AAAABBBBCCCCDDDD uid [ultimate] Alice Dev ssb> cv25519 2022-12-20 [E] [expires: 2024-12-19] ssb> ed25519 2022-12-20 [S]}hj+sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(h在 ``ssb>``中的 ``>`` 输出意味着子密钥只能在智能卡上可用,如果你返回 密钥目录并查看那里的内容,你会注意到 ``.key`` 那里的文件已被存根替换::h](h在 }(hj9hhhNhNubjr)}(h``ssb>``中的 ``>``h]hssb>``中的 ``>}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj9ubh~ 输出意味着子密钥只能在智能卡上可用,如果你返回 密钥目录并查看那里的内容,你会注意到 }(hj9hhhNhNubjr)}(h``.key``h]h.key}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj9ubh# 那里的文件已被存根替换:}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(hD$ cd ~/.gnupg/private-keys-v1.d $ strings *.key | grep 'private-key'h]hD$ cd ~/.gnupg/private-keys-v1.d $ strings *.key | grep 'private-key'}hjksbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(hl输出应包含 ``shadowed-private-key`` 指示这些文件只是存根,实际内容 位于智能卡上。h](h输出应包含 }(hjyhhhNhNubjr)}(h``shadowed-private-key``h]hshadowed-private-key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjyubhD 指示这些文件只是存根,实际内容 位于智能卡上。}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]id14ah ]h"]验证密钥是否已移动ah$]h&]uh1jvhj!hhhhhMubjw)}(hhh](j|)}(h!验证智能卡是否正常工作h]h!验证智能卡是否正常工作}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(hA要验证智能卡是否按预期工作,你可以创建签名::h]h@要验证智能卡是否按预期工作,你可以创建签名:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(hS$ echo "Hello world" | gpg --clearsign > /tmp/test.asc $ gpg --verify /tmp/test.asch]hS$ echo "Hello world" | gpg --clearsign > /tmp/test.asc $ gpg --verify /tmp/test.asc}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(h在你的第一条命令执行时,应该会询问你智能卡的PIN,然后在你运行 ``gpg --verify`` 后显示"Good signature"。h](h[在你的第一条命令执行时,应该会询问你智能卡的PIN,然后在你运行 }(hjhhhNhNubjr)}(h``gpg --verify``h]h gpg --verify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh! 后显示”Good signature”。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hN恭喜,你已成功使窃取你的数字开发者身份变得极其困难!h]hN恭喜,你已成功使窃取你的数字开发者身份变得极其困难!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]id15ah ]h"]!验证智能卡是否正常工作ah$]h&]uh1jvhj!hhhhhMubeh}(h]id13ah ]h"]!将子密钥移至你的智能卡ah$]h&]uh1jvhj hhhhhMubjw)}(hhh](j|)}(h其他常见的 GnuPG 操作h]h其他常见的 GnuPG 操作}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj hhhhhMubh)}(hP以下是你需要使用 PGP 密钥执行的一些常见操作的快速参考。h]hP以下是你需要使用 PGP 密钥执行的一些常见操作的快速参考。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubjw)}(hhh](j|)}(h安装你的安全离线存储h]h安装你的安全离线存储}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj+hhhhhMubh)}(h你将需要你的证书密钥来执行以下任何操作,因此你首先需要安装备份离线存储 并告诉 GnuPG 使用它::h]h你将需要你的证书密钥来执行以下任何操作,因此你首先需要安装备份离线存储 并告诉 GnuPG 使用它:}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubj*)}(hH$ export GNUPGHOME=/media/disk/foo/gnupg-backup $ gpg --list-secret-keysh]hH$ export GNUPGHOME=/media/disk/foo/gnupg-backup $ gpg --list-secret-keys}hjJsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj+hhubh)}(h你需要确保你看到 ``sec`` 而不是 ``sec#`` 在输出中( ``#`` 意味着 密钥不可用并且你仍在使用常规主目录位置)。h](h你需要确保你看到 }(hjXhhhNhNubjr)}(h``sec``h]hsec}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjXubh 而不是 }(hjXhhhNhNubjr)}(h``sec#``h]hsec#}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjXubh 在输出中( }(hjXhhhNhNubjr)}(h``#``h]h#}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjXubhJ 意味着 密钥不可用并且你仍在使用常规主目录位置)。}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubeh}(h]id17ah ]h"]安装你的安全离线存储ah$]h&]uh1jvhj hhhhhMubjw)}(hhh](j|)}(h延长密钥有效期h]h延长密钥有效期}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(h证书密钥的默认到期日期为自创建之日起 2 年。这样做既是出于安全原因,也 是为了使过时的密钥最终从密钥服务器中消失。h]h证书密钥的默认到期日期为自创建之日起 2 年。这样做既是出于安全原因,也 是为了使过时的密钥最终从密钥服务器中消失。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubh)}(hD要将密钥的有效期从当前日期延长一年,只需运行::h]hC要将密钥的有效期从当前日期延长一年,只需运行:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubj*)}(h!$ gpg --quick-set-expire [fpr] 1yh]h!$ gpg --quick-set-expire [fpr] 1y}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(ht如果更容易记住,你也可以使用特定日期(例如你的生日、1 月 1 日或加拿大 国庆日)::h]hs如果更容易记住,你也可以使用特定日期(例如你的生日、1 月 1 日或加拿大 国庆日):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(h)$ gpg --quick-set-expire [fpr] 2025-07-01h]h)$ gpg --quick-set-expire [fpr] 2025-07-01}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(h8请记住将更新后的密钥发送回密钥服务器::h]h7请记住将更新后的密钥发送回密钥服务器:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(h$ gpg --send-key [fpr]h]h$ gpg --send-key [fpr]}hj sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubeh}(h]id18ah ]h"]延长密钥有效期ah$]h&]uh1jvhj hhhhhMubjw)}(hhh](j|)}(h-进行任何更改后更新你的工作目录h]h-进行任何更改后更新你的工作目录}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(hl使用离线存储对密钥进行任何更改后,你需要将这些更改导入回常规工作目录 中::h]hk使用离线存储对密钥进行任何更改后,你需要将这些更改导入回常规工作目录 中:}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(hB$ gpg --export | gpg --homedir ~/.gnupg --import $ unset GNUPGHOMEh]hB$ gpg --export | gpg --homedir ~/.gnupg --import $ unset GNUPGHOME}hj>sbah}(h]h ]h"]h$]h&]hhuh1j)hhhM hjhhubeh}(h]id19ah ]h"]-进行任何更改后更新你的工作目录ah$]h&]uh1jvhj hhhhhMubjw)}(hhh](j|)}(h通过 ssh 使用 gpg-agenth]h通过 ssh 使用 gpg-agent}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjThhhhhM$ubh)}(hf如果你需要在远程系统上签署标签或提交,你可以通过 ssh 转发你的 gpg-agent。h]hf如果你需要在远程系统上签署标签或提交,你可以通过 ssh 转发你的 gpg-agent。}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM&hjThhubh)}(h(请参考 GnuPG wiki 上提供的说明:h]h(请参考 GnuPG wiki 上提供的说明:}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hjThhubj9)}(hhh]j>)}(h`Agent通过SSH转发`_ h]h)}(h`Agent通过SSH转发`_h]j))}(hjh]hAgent通过SSH转发}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameAgent通过SSH转发j&https://wiki.gnupg.org/AgentForwardinguh1j(hjjKubah}(h]h ]h"]h$]h&]uh1hhhhM+hjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubah}(h]h ]h"]h$]h&]jtjuuh1j8hhhM+hjThhubh)}(hQ如果你可以修改远程端的 sshd 服务器设置,则工作会更顺利。h]hQ如果你可以修改远程端的 sshd 服务器设置,则工作会更顺利。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM-hjThhubj)}(hB.. _`Agent通过SSH转发`: https://wiki.gnupg.org/AgentForwardingh]h}(h]agentsshah ]h"]agent通过ssh转发ah$]h&]jjuh1jhM:hjThhhhj Kubeh}(h] ssh-gpg-agentah ]h"]通过 ssh 使用 gpg-agentah$]h&]uh1jvhj hhhhhM$ubeh}(h]id16ah ]h"]其他常见的 gnupg 操作ah$]h&]uh1jvhj hhhhhMubeh}(h]id9ah ]h"]$将子密钥移至专用加密设备ah$]h&]uh1jvhjxhhhhhM>ubjw)}(hhh](j|)}(h将 PGP 与 Git 结合使用h]h将 PGP 与 Git 结合使用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhM2ubh)}(hX.Git 的核心功能之一是它的分散性——一旦将仓库克隆到你的系统,你就拥有该 项目的完整历史记录,包括其所有标签、提交和分支。然而,随着数百个克隆仓 库的出现,人们如何验证他们的 linux.git 副本没有被恶意第三方篡改?h]hX.Git 的核心功能之一是它的分散性——一旦将仓库克隆到你的系统,你就拥有该 项目的完整历史记录,包括其所有标签、提交和分支。然而,随着数百个克隆仓 库的出现,人们如何验证他们的 linux.git 副本没有被恶意第三方篡改?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM4hjhhubh)}(h或者,如果在代码中发现后门,并且提交中的“Author”行表示它是由你完成的, 而你非常确定 `自己与它无关`_ ,会发生什么?h](h}或者,如果在代码中发现后门,并且提交中的“Author”行表示它是由你完成的, 而你非常确定 }(hjhhhNhNubj))}(h`自己与它无关`_h]h自己与它无关}(hjhhhNhNubah}(h]h ]h"]h$]h&]name自己与它无关j3https://github.com/jayphelps/git-blame-someone-elseuh1j(hjjKubh ,会发生什么?}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM8hjhhubh)}(hX$为了解决这两个问题,Git 引入了 PGP 集成。签名的标签通过确保其内容与创 建标签的开发人员的工作站上的内容完全相同来证明仓库的完整性,而签名的提 交使其他人几乎不可能在无法访问你的 PGP 密钥的情况下冒充你。h]hX$为了解决这两个问题,Git 引入了 PGP 集成。签名的标签通过确保其内容与创 建标签的开发人员的工作站上的内容完全相同来证明仓库的完整性,而签名的提 交使其他人几乎不可能在无法访问你的 PGP 密钥的情况下冒充你。}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hjhhubj)}(hM.. _`自己与它无关`: https://github.com/jayphelps/git-blame-someone-elseh]h}(h]id20ah ]h"]自己与它无关ah$]h&]jjuh1jhMJhjhhhhj Kubjw)}(hhh](j|)}(h"配置 git 使用你的 PGP 密钥h]h"配置 git 使用你的 PGP 密钥}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj<hhhhhMBubh)}(hX 如果你的密钥环中只有一个密钥,那么你实际上不需要执行任何额外操作,因为 它会成为你的默认密钥。但是,如果你碰巧有多个密钥,你可以告诉 git 应该 使用哪个密钥(``[fpr]`` 是你密钥的指纹)::h](h如果你的密钥环中只有一个密钥,那么你实际上不需要执行任何额外操作,因为 它会成为你的默认密钥。但是,如果你碰巧有多个密钥,你可以告诉 git 应该 使用哪个密钥(}(hjMhhhNhNubjr)}(h ``[fpr]``h]h[fpr]}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjMubh 是你密钥的指纹):}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMDhj<hhubj*)}(h+$ git config --global user.signingKey [fpr]h]h+$ git config --global user.signingKey [fpr]}hjmsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMHhj<hhubeh}(h]git-pgpah ]h"]"配置 git 使用你的 pgp 密钥ah$]h&]uh1jvhjhhhhhMBubjw)}(hhh](j|)}(h如何使用签名标签h]h如何使用签名标签}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMKubh)}(hE要创建签名标签,只需将 ``-s`` 开关传递给 tag 命令::h](h"要创建签名标签,只需将 }(hjhhhNhNubjr)}(h``-s``h]h-s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh 开关传递给 tag 命令:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMMhjhhubj*)}(h$ git tag -s [tagname]h]h$ git tag -s [tagname]}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMOhjhhubh)}(h我们的建议是始终签署 git 标签,因为这可以让其他开发人员确保他们从中提 取的 git 仓库没有被恶意更改。h]h我们的建议是始终签署 git 标签,因为这可以让其他开发人员确保他们从中提 取的 git 仓库没有被恶意更改。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMQhjhhubjw)}(hhh](j|)}(h如何验证签名标签h]h如何验证签名标签}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMUubh)}(hB要验证签名标签,只需使用以下 ``verify-tag`` 命令::h](h+要验证签名标签,只需使用以下 }(hjhhhNhNubjr)}(h``verify-tag``h]h verify-tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh 命令:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMWhjhhubj*)}(h$ git verify-tag [tagname]h]h$ git verify-tag [tagname]}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMYhjhhubh)}(h如果你从项目仓库的另一个分支中拉取标签,git 应该自动验证你拉取的顶 部的签名,并在合并操作期间向你显示结果::h]h如果你从项目仓库的另一个分支中拉取标签,git 应该自动验证你拉取的顶 部的签名,并在合并操作期间向你显示结果:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM[hjhhubj*)}(h$ git pull [url] tags/sometagh]h$ git pull [url] tags/sometag}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhM^hjhhubh)}(h#合并消息将包含如下内容::h]h"合并消息将包含如下内容:}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM`hjhhubj*)}(hiMerge tag 'sometag' of [url] [Tag message] # gpg: Signature made [...] # gpg: Good signature from [...]h]hiMerge tag 'sometag' of [url] [Tag message] # gpg: Signature made [...] # gpg: Good signature from [...]}hj9sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMbhjhhubh)}(h如果你正在验证其他人的 git 标签,那么你将需要导入他们的 PGP 密钥。 请参阅下面的":ref:`身份验证`"部分。h](ht如果你正在验证其他人的 git 标签,那么你将需要导入他们的 PGP 密钥。 请参阅下面的”}(hjGhhhNhNubh)}(h:ref:`身份验证`h]hinline)}(hjQh]h 身份验证}(hjUhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jShjOubah}(h]h ]h"]h$]h&]refdoc/translations/zh_CN/process/maintainer-pgp-guide refdomainj`reftyperef refexplicitrefwarn reftarget 身份验证uh1hhhhMihjGubh ”部分。}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMihjhhubeh}(h]id22ah ]h"]如何验证签名标签ah$]h&]uh1jvhjhhhhhMUubjw)}(hhh](j|)}(hT配置 git 始终对带注释的标签(annotated tags)进行签名annotated tagsh]hT配置 git 始终对带注释的标签(annotated tags)进行签名annotated tags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMmubh)}(h如果你要创建带注释的标签,你很可能会想要对其进行签名。要强制 git 始终签 署带注释的标签,你可以设置一个全局配置选项::h]h如果你要创建带注释的标签,你很可能会想要对其进行签名。要强制 git 始终签 署带注释的标签,你可以设置一个全局配置选项:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMohjhhubj*)}(h1$ git config --global tag.forceSignAnnotated trueh]h1$ git config --global tag.forceSignAnnotated true}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMrhjhhubeh}(h]!git-annotated-tags-annotated-tagsah ]h"]T配置 git 始终对带注释的标签(annotated tags)进行签名annotated tagsah$]h&]uh1jvhjhhhhhMmubeh}(h]id21ah ]h"]如何使用签名标签ah$]h&]uh1jvhjhhhhhMKubjw)}(hhh](j|)}(h如何使用签名的提交h]h如何使用签名的提交}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMuubh)}(hX创建签名提交很容易,但在 Linux 内核开发中使用它们要困难得多,因为它依赖 于发送到邮件列表的补丁,并且此工作流程不保留 PGP 提交签名。此外,当重新 调整仓库以匹配上游时,甚至你自己的 PGP 提交签名最终也会被丢弃。因此,大 多数内核开发人员不会费心签署他们的提交,并且会忽略他们在工作中依赖的任何 外部仓库中的签名提交。h]hX创建签名提交很容易,但在 Linux 内核开发中使用它们要困难得多,因为它依赖 于发送到邮件列表的补丁,并且此工作流程不保留 PGP 提交签名。此外,当重新 调整仓库以匹配上游时,甚至你自己的 PGP 提交签名最终也会被丢弃。因此,大 多数内核开发人员不会费心签署他们的提交,并且会忽略他们在工作中依赖的任何 外部仓库中的签名提交。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMwhjhhubh)}(h但是,如果你的工作 git 树在某些 git 托管服务(kernel.org、 infradead.org、ozlabs.org 或其他)上公开可用,那么建议你签署所有 git 提交,即使上游开发人员不直接受益于这种做法。h]h但是,如果你的工作 git 树在某些 git 托管服务(kernel.org、 infradead.org、ozlabs.org 或其他)上公开可用,那么建议你签署所有 git 提交,即使上游开发人员不直接受益于这种做法。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM}hjhhubh)}(h%我们推荐这样做的原因如下:h]h%我们推荐这样做的原因如下:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubjJ)}(hhh](j>)}(h如果需要执行代码取证或跟踪代码来源,即使是外部维护的带有 PGP 提交签名 的树对于此类问题也很有价值。h]h)}(h如果需要执行代码取证或跟踪代码来源,即使是外部维护的带有 PGP 提交签名 的树对于此类问题也很有价值。h]h如果需要执行代码取证或跟踪代码来源,即使是外部维护的带有 PGP 提交签名 的树对于此类问题也很有价值。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubj>)}(h如果你需要重新克隆本地仓库(例如,在磁盘故障后),这可以让你在恢复工 作之前轻松验证仓库的完整性。h]h)}(h如果你需要重新克隆本地仓库(例如,在磁盘故障后),这可以让你在恢复工 作之前轻松验证仓库的完整性。h]h如果你需要重新克隆本地仓库(例如,在磁盘故障后),这可以让你在恢复工 作之前轻松验证仓库的完整性。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubj>)}(hd如果有人需要挑选你的提交,这可以让他们在应用之前快速验证其完整性。 h]h)}(hc如果有人需要挑选你的提交,这可以让他们在应用之前快速验证其完整性。h]hc如果有人需要挑选你的提交,这可以让他们在应用之前快速验证其完整性。}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj1ubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubeh}(h]h ]h"]h$]h&]jjjhjjuh1jIhjhhhhhMubjw)}(hhh](j|)}(h创建签名提交h]h创建签名提交}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjOhhhhhMubh)}(h要创建签名提交,你只需将 ``-S`` 标志传递给 ``git commit`` 命令(由于 与另一个标志冲突,所以它是大写的 ``-S`` )::h](h%要创建签名提交,你只需将 }(hj`hhhNhNubjr)}(h``-S``h]h-S}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj`ubh 标志传递给 }(hj`hhhNhNubjr)}(h``git commit``h]h git commit}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj`ubhB 命令(由于 与另一个标志冲突,所以它是大写的 }(hj`hhhNhNubjr)}(h``-S``h]h-S}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj`ubh ):}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjOhhubj*)}(h$ git commit -Sh]h$ git commit -S}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjOhhubeh}(h]id24ah ]h"]创建签名提交ah$]h&]uh1jvhjhhhhhMubjw)}(hhh](j|)}(h&配置 git 始终对提交进行签名h]h&配置 git 始终对提交进行签名}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(h(你可以告诉 git 总是签署提交::h]h'你可以告诉 git 总是签署提交:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(h'git config --global commit.gpgSign trueh]h'git config --global commit.gpgSign true}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(h<确保 ``gpg-agent`` 在打开此功能之前进行配置。h]h)}(hjh](h确保 }(hjhhhNhNubjr)}(h ``gpg-agent``h]h gpg-agent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh( 在打开此功能之前进行配置。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubj)}(h.. _身份验证:h]h}(h]h ]h"]h$]h&]refidid25uh1jhMhjhhhhubeh}(h]gitah ]h"]&配置 git 始终对提交进行签名ah$]h&]uh1jvhjhhhhhMubeh}(h]id23ah ]h"]如何使用签名的提交ah$]h&]uh1jvhjhhhhhMuubjw)}(hhh](j|)}(h如何使用签名补丁h]h如何使用签名补丁}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj,hhhhhMubh)}(hXR可以使用你的 PGP 密钥来签署发送到内核开发人员邮件列表的补丁。由于现有的 电子邮件签名机制(PGP-Mime 或 PGP-inline)往往会导致常规代码审查任务 出现问题,因此你应该使用为此创建的 kernel.org 工具,该工具将加密证明签 名放入消息标头中(a-la DKIM):h]hXR可以使用你的 PGP 密钥来签署发送到内核开发人员邮件列表的补丁。由于现有的 电子邮件签名机制(PGP-Mime 或 PGP-inline)往往会导致常规代码审查任务 出现问题,因此你应该使用为此创建的 kernel.org 工具,该工具将加密证明签 名放入消息标头中(a-la DKIM):}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj,hhubj9)}(hhh]j>)}(h`Patatt Patch Attestation`_ h]h)}(h`Patatt Patch Attestation`_h]j))}(hjTh]hPatatt Patch Attestation}(hjVhhhNhNubah}(h]h ]h"]h$]h&]namePatatt Patch Attestationj https://pypi.org/project/patatt/uh1j(hjRjKubah}(h]h ]h"]h$]h&]uh1hhhhMhjNubah}(h]h ]h"]h$]h&]uh1j=hjKhhhhhNubah}(h]h ]h"]h$]h&]jtjuuh1j8hhhMhj,hhubj)}(h@.. _`Patatt Patch Attestation`: https://pypi.org/project/patatt/h]h}(h]patatt-patch-attestationah ]h"]patatt patch attestationah$]h&]jjeuh1jhMhj,hhhhj Kubjw)}(hhh](j|)}(h安装和配置 patatth]h安装和配置 patatt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(hPatatt 已针对许多发行版进行了打包,因此请先检查那里。你还可以使用 “ ``pip install patatt`` ”从 pypi 安装它。h](hcPatatt 已针对许多发行版进行了打包,因此请先检查那里。你还可以使用 “ }(hjhhhNhNubjr)}(h``pip install patatt``h]hpip install patatt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh ”从 pypi 安装它。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h如果你已经使用 git 配置了 PGP 密钥(通过``user.signingKey`` 配置参数), 则 patatt 不需要进一步配置。你可以通过在所需的仓库中安装 git-send-email 钩子来开始签署补丁::h]h如果你已经使用 git 配置了 PGP 密钥(通过``user.signingKey`` 配置参数), 则 patatt 不需要进一步配置。你可以通过在所需的仓库中安装 git-send-email 钩子来开始签署补丁:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(hpatatt install-hookh]hpatatt install-hook}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(hl现在,你使用 ``git send-email`` 发送的任何补丁都将自动使用你的加密签 名进行签名h](h现在,你使用 }(hjhhhNhNubjr)}(h``git send-email``h]hgit send-email}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubhG 发送的任何补丁都将自动使用你的加密签 名进行签名}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]patattah ]h"]安装和配置 patattah$]h&]uh1jvhj,hhhhhMubjw)}(hhh](j|)}(h检查 patatt 签名h]h检查 patatt 签名}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(h如果你用于 ``b4`` 检索和应用补丁,那么它将自动尝试验证它遇到的所有 DKIM 和 patatt 签名,例如::h](h如果你用于 }(hj hhhNhNubjr)}(h``b4``h]hb4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubhj 检索和应用补丁,那么它将自动尝试验证它遇到的所有 DKIM 和 patatt 签名,例如:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(hX$ b4 am 20220720205013.890942-1-broonie@kernel.org [...] Checking attestation on all messages, may take a moment... --- ✓ [PATCH v1 1/3] kselftest/arm64: Correct buffer allocation for SVE Z registers ✓ [PATCH v1 2/3] arm64/sve: Document our actual ABI for clearing registers on syscall ✓ [PATCH v1 3/3] kselftest/arm64: Enforce actual ABI for SVE syscalls --- ✓ Signed: openpgp/broonie@kernel.org ✓ Signed: DKIM/kernel.orgh]hX$ b4 am 20220720205013.890942-1-broonie@kernel.org [...] Checking attestation on all messages, may take a moment... --- ✓ [PATCH v1 1/3] kselftest/arm64: Correct buffer allocation for SVE Z registers ✓ [PATCH v1 2/3] arm64/sve: Document our actual ABI for clearing registers on syscall ✓ [PATCH v1 3/3] kselftest/arm64: Enforce actual ABI for SVE syscalls --- ✓ Signed: openpgp/broonie@kernel.org ✓ Signed: DKIM/kernel.org}hj*sbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(h{Patatt 和 b4 仍在积极开发中,你应该检查这些项目的最新文档以了解任 何新功能或更新功能。h]h)}(h{Patatt 和 b4 仍在积极开发中,你应该检查这些项目的最新文档以了解任 何新功能或更新功能。h]h{Patatt 和 b4 仍在积极开发中,你应该检查这些项目的最新文档以了解任 何新功能或更新功能。}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj8ubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubeh}(h]id27ah ]h"]检查 patatt 签名ah$]h&]uh1jvhj,hhhhhMubeh}(h](jid26eh ]h"](如何使用签名补丁 身份验证eh$]h&]uh1jvhjhhhhhMexpect_referenced_by_name}j^jsexpect_referenced_by_id}jjsubeh}(h]pgp-gitah ]h"]将 pgp 与 git 结合使用ah$]h&]uh1jvhjxhhhhhM2ubjw)}(hhh](j|)}(h!如何验证内核开发者身份h]h!如何验证内核开发者身份}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjmhhhhhMubh)}(h签署标签和提交很容易,但是如何验证用于签署某项内容的密钥是否属于实际的内 核开发人员而不是恶意冒名顶替者?h]h签署标签和提交很容易,但是如何验证用于签署某项内容的密钥是否属于实际的内 核开发人员而不是恶意冒名顶替者?}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjmhhubjw)}(hhh](j|)}(hA使用 WKD 和 DANE 配置auto-key-locate(自动密钥检索)h]hA使用 WKD 和 DANE 配置auto-key-locate(自动密钥检索)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhMubh)}(hX;如果你还没有广泛收集其他开发人员的公钥,那么你可以依靠密钥自动发现和自动 检索来快速启动你的密钥环。如果从头开始创建自己的信任 Web 的预期太令人畏 惧, GnuPG 可以借助其他委托信任技术(即 DNSSEC 和 TLS)来帮助你继续前 进。h]hX;如果你还没有广泛收集其他开发人员的公钥,那么你可以依靠密钥自动发现和自动 检索来快速启动你的密钥环。如果从头开始创建自己的信任 Web 的预期太令人畏 惧, GnuPG 可以借助其他委托信任技术(即 DNSSEC 和 TLS)来帮助你继续前 进。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h6将以下内容添加到你的 ``~/.gnupg/gpg.conf``::h](h将以下内容添加到你的 }(hjhhhNhNubjr)}(h``~/.gnupg/gpg.conf``h]h~/.gnupg/gpg.conf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(h0auto-key-locate wkd,dane,local auto-key-retrieveh]h0auto-key-locate wkd,dane,local auto-key-retrieve}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(hXw基于 DNS 的命名实体身份验证(“DANE”)是一种在 DNS 中发布公钥并使用 DNSSEC 签名区域保护它们的方法。Web 密钥目录(“WKD”)是使用 https 查找来达到相同目的的替代方法。当使用 DANE 或 WKD 查找公钥时,GnuPG 将分别验证 DNSSEC 或 TLS 证书,然后将自动检索的公钥添加到本地密钥环。h]hXw基于 DNS 的命名实体身份验证(“DANE”)是一种在 DNS 中发布公钥并使用 DNSSEC 签名区域保护它们的方法。Web 密钥目录(“WKD”)是使用 https 查找来达到相同目的的替代方法。当使用 DANE 或 WKD 查找公钥时,GnuPG 将分别验证 DNSSEC 或 TLS 证书,然后将自动检索的公钥添加到本地密钥环。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hKernel.org 为所有拥有 kernel.org 帐户的开发人员发布 WKD。一旦你的 ``gpg.conf`` 中进行了上述更改,你就可以自动检索 Linus Torvalds 和 Greg Kroah-Hartman 的密钥(如果你还没有它们)::h](hUKernel.org 为所有拥有 kernel.org 帐户的开发人员发布 WKD。一旦你的 }(hjhhhNhNubjr)}(h ``gpg.conf``h]hgpg.conf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjubh 中进行了上述更改,你就可以自动检索 Linus Torvalds 和 Greg Kroah-Hartman 的密钥(如果你还没有它们):}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj*)}(h9$ gpg --locate-keys torvalds@kernel.org gregkh@kernel.orgh]h9$ gpg --locate-keys torvalds@kernel.org gregkh@kernel.org}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjhhubh)}(h如果你有 kernel.org 帐户,那么你应该 `添加 kernel.org UID 到你的密钥中`_ 添加到你的密钥中,以使 WKD 对其他内核开发人员更有用。h](h1如果你有 kernel.org 帐户,那么你应该 }(hjhhhNhNubj))}(h+`添加 kernel.org UID 到你的密钥中`_h]h(添加 kernel.org UID 到你的密钥中}(hjhhhNhNubah}(h]h ]h"]h$]h&]name(添加 kernel.org UID 到你的密钥中jPhttps://korg.wiki.kernel.org/userdoc/mail#adding_a_kernelorg_uid_to_your_pgp_keyuh1j(hjjKubhN 添加到你的密钥中,以使 WKD 对其他内核开发人员更有用。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h.. _`添加 kernel.org UID 到你的密钥中`: https://korg.wiki.kernel.org/userdoc/mail#adding_a_kernelorg_uid_to_your_pgp_keyh]h}(h]kernel-org-uidah ]h"](添加 kernel.org uid 到你的密钥中ah$]h&]jj-uh1jhMhjhhhhj Kubeh}(h]wkd-dane-auto-key-locateah ]h"]A使用 wkd 和 dane 配置auto-key-locate(自动密钥检索)ah$]h&]uh1jvhjmhhhhhMubjw)}(hhh](j|)}(h,信任网 (WOT) 与首次使用信任 (TOFU)h]h,信任网 (WOT) 与首次使用信任 (TOFU)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjLhhhhhMubh)}(hXPGP 结合了称为“信任网”的信任委托机制。从本质上讲,这是一次尝试取代 HTTPS/TLS 世界对集中式证书颁发机构的需求。PGP 将这一责任留给每个 用户,而不是由各种软件制造商规定谁应该是你值得信赖的认证实体。h]hXPGP 结合了称为“信任网”的信任委托机制。从本质上讲,这是一次尝试取代 HTTPS/TLS 世界对集中式证书颁发机构的需求。PGP 将这一责任留给每个 用户,而不是由各种软件制造商规定谁应该是你值得信赖的认证实体。}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjLhhubh)}(hX不幸的是,很少有人了解信任网是如何运作的。虽然它仍然是 OpenPGP 规 范的一个重要方面,但最新版本的 GnuPG(2.2 及更高版本)已经实现了 一种称为“首次使用信任”(TOFU) 的替代机制。你可以将 TOFU 视为“类似 SSH 的信任方法”。使用 SSH,第一次连接到远程系统时,其密钥指纹会被 记录并记住。如果将来密钥发生变化,SSH 客户端将向你发出警报并拒绝连 接,迫使你决定是否选择信任更改后的密钥。同样,第一次导入某人的 PGP 密钥时,它被认为是有效的。如果将来的任何时候 GnuPG 遇到具有相同标 识的另一个密钥,则先前导入的密钥和新密钥都将被标记为无效,你将需要手 动确定保留哪一个。h]hX不幸的是,很少有人了解信任网是如何运作的。虽然它仍然是 OpenPGP 规 范的一个重要方面,但最新版本的 GnuPG(2.2 及更高版本)已经实现了 一种称为“首次使用信任”(TOFU) 的替代机制。你可以将 TOFU 视为“类似 SSH 的信任方法”。使用 SSH,第一次连接到远程系统时,其密钥指纹会被 记录并记住。如果将来密钥发生变化,SSH 客户端将向你发出警报并拒绝连 接,迫使你决定是否选择信任更改后的密钥。同样,第一次导入某人的 PGP 密钥时,它被认为是有效的。如果将来的任何时候 GnuPG 遇到具有相同标 识的另一个密钥,则先前导入的密钥和新密钥都将被标记为无效,你将需要手 动确定保留哪一个。}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjLhhubh)}(h我们建议你使用 TOFU+PGP 组合信任模型(这是 GnuPG v2 中新默认的)。 若要设置它,在 ``~/.gnupg/gpg.conf`` 中添加(或修改) ``trust-model`` 设置::h](hp我们建议你使用 TOFU+PGP 组合信任模型(这是 GnuPG v2 中新默认的)。 若要设置它,在 }(hjyhhhNhNubjr)}(h``~/.gnupg/gpg.conf``h]h~/.gnupg/gpg.conf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjyubh 中添加(或修改) }(hjyhhhNhNubjr)}(h``trust-model``h]h trust-model}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjyubh 设置:}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjLhhubj*)}(htrust-model tofu+pgph]htrust-model tofu+pgp}hjsbah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjLhhubeh}(h]wot-tofuah ]h"],信任网 (wot) 与首次使用信任 (tofu)ah$]h&]uh1jvhjmhhhhhMubjw)}(hhh](j|)}(h!使用 kernel.org 信任网仓库h]h!使用 kernel.org 信任网仓库}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhM ubh)}(hXKernel.org 维护着一个包含开发人员公钥的 git 仓库,作为复制密钥服 务器网络的替代品,而在过去几年中,该网络几乎已经陷入黑暗。有关如何将 该仓库设置为公钥来源的完整文档可以在此处找到:h]hXKernel.org 维护着一个包含开发人员公钥的 git 仓库,作为复制密钥服 务器网络的替代品,而在过去几年中,该网络几乎已经陷入黑暗。有关如何将 该仓库设置为公钥来源的完整文档可以在此处找到:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubj9)}(hhh]j>)}(h`内核开发者密钥环`_ h]h)}(h`内核开发者密钥环`_h]j))}(hjh]h内核开发者密钥环}(hjhhhNhNubah}(h]h ]h"]h$]h&]name内核开发者密钥环j)https://korg.docs.kernel.org/pgpkeys.htmluh1j(hjjKubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j=hjhhhhhNubah}(h]h ]h"]h$]h&]jtjuuh1j8hhhMhjhhubh)}(h`如果你是内核开发人员,请考虑提交你的密钥以将其包含到该密钥环中。h]h`如果你是内核开发人员,请考虑提交你的密钥以将其包含到该密钥环中。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hI.. _`内核开发者密钥环`: https://korg.docs.kernel.org/pgpkeys.htmlh]h}(h]id29ah ]h"]内核开发者密钥环ah$]h&]jjuh1jhM hjhhhhj Kubeh}(h] kernel-orgah ]h"]!使用 kernel.org 信任网仓库ah$]h&]uh1jvhjmhhhhhM ubeh}(h]id28ah ]h"]!如何验证内核开发者身份ah$]h&]uh1jvhjxhhhhhMubeh}(h]pgpah ]h"]内核维护者 pgp 指南ah$]h&]uh1jvhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j{N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjberror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}(保护代码完整性](jj4enitrokey start]j~ anitrokey pro 2]j a yubikey 5]j aagent通过ssh转发]ja自己与它无关]japatatt patch attestation]jVa(添加 kernel.org uid 到你的密钥中]ja内核开发者密钥环]jaurefids}j]jasnameids}(j<j9jjjjjjjjjj jjj j jLjIjjjj jjj j j j j j jjjQ jN jt jq j: j7 jF jC jR jO j^ j[ jk jh jjj jjjjjjjjjjjjQjNjjjjjjjgj9j6jj}jjjjjjj)j&jjj!jj^jj]jZjj~jjjUjRj4j1jIjFjAj>jjj,j)j$j!u nametypes}(j<jjjjjjj jLjjjj j j jjQ jt j: jF jR j^ jk jj jjjjjjQjjjjj9jjjjj)jj!j^j]jjjUj4jIjAjj,j$uh}(j9jxjjjj jjjjj j jjGj jjIj\jjOj jjjj jj j j jS jj jN j jq jT j7 j1 jC j= jO jI j[ jU jh jb jjw jj!jjjjjj jj+jjjNjjjTjjjgjj6j0j}j<jjjjjjj&jjjOjjjj,jZj,j~jxjjjRjj1jmjFjj>j8jjLj)jj!ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jpKsRparse_messages]transform_messages](hsystem_message)}(hhh]h)}(hhh]h*Hyperlink target "gnuk" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineMvuh1jubj)}(hhh]h)}(hhh]hGHyperlink target "qualify for a free nitrokey start" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMwuh1jubj)}(hhh]h)}(hhh]h*Hyperlink target "id25" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineMuh1jube transformerN include_log]ADocumentation/translations/zh_CN/process/maintainer-pgp-guide.rst(NNNNta decorationNhhub.