gpg - OpenPGP 加密和签名工具
概要
gpg [--homedir dir] [--options file] [options] command [args]
描述
gpg 是 GNU Privacy Guard (GnuPG) 的 OpenPGP 部分。它是一个工具,用于使用 OpenPGP 标准提供数字加密和签名服务。 gpg 具有完整的密钥管理功能,以及您期望的 OpenPGP 实现中的所有功能。
GnuPG 有两个主要版本:GnuPG 1.x 和 GnuPG 2.x。 GnuPG 2.x 支持现代加密算法,因此应优先使用 GnuPG 2.x。 只有当您的平台不支持 GnuPG 2.x,或者您需要支持 GnuPG 2.x 已经弃用的某些功能(例如,解密使用 PGP-2 密钥创建的数据)时,才需要使用 GnuPG 1.x。
如果您正在寻找 GnuPG 的版本 1,您可能会发现该版本安装在名称为 gpg1 下。
返回值
如果没有任何严重错误,程序返回 0;如果至少有一个签名无效,则返回 1;对于致命错误,返回其他错误代码。
请注意,签名验证需要准确了解已签名内容以及由谁签名。 因此,仅使用返回代码不是通过脚本验证签名的一种适当方法。 适当使用状态代码,或者使用 gpgv 工具,该工具旨在简化脚本的签名验证。
警告
为您的用户帐户使用一个好的密码,并确保始终修复您的计算机上的所有安全问题。 此外,还要采取严格的物理保护措施来保护您的计算机。 考虑使用一个好的密码短语作为最后的手段来保护您的私钥,以防您的计算机被盗。 重要的是,您的私钥绝不能泄露。 使用一个便于携带的令牌或智能卡来存储私钥通常是一个可取的做法。
如果您要验证分离签名,请确保程序知道这一点;要么在命令行中提供两个文件名,要么使用“-”来指定 STDIN。
对于 gpg 的脚本化或其他无人值守使用,请确保使用机器可解析的接口,而不是默认接口,因为默认接口是为人类的直接使用而设计的。 机器可解析的接口提供了一个稳定且文档完善的 API,该 API 与区域设置或 gpg 的未来更改无关。 要启用此接口,请使用选项 --with-colons 和 --status-fd。 对于某些操作,选项 --command-fd 可能会很有用。 请参阅此手册页和“DETAILS”文件,了解该接口的规范。 请注意,GnuPG 的“信息”页面以及 GnuPG 手册的 PDF 版本都包含一个关于 GnuPG 的无人值守使用的章节。 或者,可以使用 GPGME 库作为构建在该接口之上的高级抽象。
互操作性
GnuPG 试图成为一个非常灵活的 OpenPGP 标准实现。特别是,GnuPG 实现了标准中的许多可选部分,例如 SHA-512 散列,以及 ZLIB 和 BZIP2 压缩算法。重要的是要知道,并非所有 OpenPGP 程序都实现这些可选算法,并且通过使用 GnuPG 中的 --cipher-algo、--digest-algo、--cert-digest-algo 或 --compress-algo 选项强制使用它们,有可能创建一个完全有效的 OpenPGP 消息,但收件人无法读取该消息。
有数十种 OpenPGP 程序可用,并且每个程序都支持这些可选算法的略微不同的子集。例如,直到最近,没有(未经修改的)PGP 版本支持 BLOWFISH 密码算法。使用 BLOWFISH 的消息,PGP 用户根本无法读取。默认情况下,GnuPG 使用标准的 OpenPGP 首选项系统,该系统始终会执行正确的操作,并创建可供所有收件人使用的消息,而无需考虑他们使用的 OpenPGP 程序。只有在您真正了解自己在做什么的情况下,才覆盖此安全默认设置。
如果您绝对必须覆盖安全默认设置,或者给定密钥上的首选项由于某种原因无效,那么最好使用 --pgp6、--pgp7 或 --pgp8 选项。这些选项是安全的,因为它们不会强制使用任何违反 OpenPGP 的特定算法,而是将可用算法减少到“PGP 安全”列表。
命令
命令与选项的区别在于,一次只能使用一个命令。通常,不相关的选项会被静默忽略,并且可能不会对其正确性进行检查。
^ pg 可以在没有命令的情况下运行。在这种情况下,它会打印一个警告并执行一个合理的动作,具体取决于它接收到的输入文件的类型(解密加密消息、验证签名、列出包含密钥的文件等)。
如果您遇到任何问题,请在调用时添加 --verbose 选项,以查看更多诊断信息。
不特定于功能的命令
--version
打印程序版本和许可信息。请注意,您不能缩写此命令。
--help
-h 打印一个用法消息,总结最有用的命令行选项。请注意,您不能随意缩写此命令(尽管您可以使用其简短形式 `-h`)。
--warranty
打印保修信息。
--dump-options
打印所有可用选项和命令的列表。请注意,您不能缩写此命令。
用于选择操作类型的命令
--sign
-s 对消息进行签名。此命令可以与 `--encrypt`(签名并加密消息)、`--symmetric`(签名并使用对称加密加密消息),或同时使用 `--encrypt` 和 `--symmetric`(签名并加密消息,可以使用密钥或密码短语进行解密)结合使用。签名密钥默认选择,也可以使用 `--local-user` 和 `--default-key` 选项显式设置。
--clear-sign
--clearsign
创建明文签名。明文签名中的内容无需任何特殊软件即可读取。仅需要 OpenPGP 软件来验证签名。明文签名可能会修改行尾的空白字符以实现跨平台兼容性,并且不打算使其可逆。签名密钥默认由系统选择,也可以使用 --local-user 和 --default-key 选项显式设置。
--detach-sign
-b 创建分离签名。
--encrypt
-e 将数据加密到一个或多个公钥。此命令可以与 --sign(签名并加密消息)、--symmetric(加密消息,该消息可以使用密钥或密码进行解密),或者 --sign 和 --symmetric(用于签名消息,该消息可以使用密钥或密码进行解密)结合使用。--recipient 和相关选项指定用于加密的公钥。
--symmetric
-c 使用密码进行对称加密。默认使用的对称密码是 AES-128,但可以使用 --cipher-algo 选项进行选择。此命令可以与 --sign(用于签名和对称加密的消息)、--encrypt(用于可以通过密钥或密码解密的消息),或者 --sign 和 --encrypt(用于签名消息,该消息可以通过密钥或密码解密)结合使用。gpg 会缓存用于对称加密的密码,因此解密操作可能不需要用户输入密码。可以使用 --no-symkey-cache 选项来禁用此功能。
--store
仅存储(创建一个简单的文字数据包)。
--decrypt
-d 解密命令行中指定的文件(或如果没有指定文件,则从 STDIN 读取),并将其写入 STDOUT(或使用 --output 选项指定的文件)。如果解密的文件已签名,则签名也会被验证。此命令与默认操作不同,因为它绝不会写入文件中包含的文件名,并且它会拒绝不以加密消息开头的任何文件。
--verify
假定第一个参数是已签名文件,并在不生成任何输出的情况下对其进行验证。如果没有提供任何参数,则签名包将从 STDIN 读取。如果只提供一个参数,则预期指定的包含完整的签名。
如果提供多个参数,则第一个参数应指定包含分离签名的文件,其余文件应包含签名的数据。要从 STDIN 读取签名数据,请使用“-”作为第二个文件名。出于安全原因,分离签名不会从 STDIN 读取签名材料,除非明确指定。
注意:如果未使用 `--batch` 选项,gpg 可能会假设单个参数是一个包含分离签名的文件,并尝试通过删除某些后缀来查找匹配的数据文件。强烈建议不要使用此历史功能来验证分离签名;您应该始终显式指定数据文件。
注意:在验证纯文本签名时,gpg 仅验证构成纯文本签名数据的内容,而不验证纯文本签名或紧随其后的分隔符行之外的任何其他数据。可以使用 `--output` 选项来写入实际的已签名数据,但这种格式也存在其他问题。建议避免使用纯文本签名,而应使用分离签名。
注意:使用 `--batch` 选项时,签名验证将在第一个无效签名处停止。这对于无人值守处理来说是一个安全的默认设置,但有时需要所有签名的状态。要覆盖此早期退出行为,请使用 `--proc-all-sigs` 选项。
注意:要检查文件是否由特定密钥签名,可以使用 `--assert-signer` 选项。或者,可以使用 `gpgv` 工具。`gpgv` 旨在将签名数据与受信任密钥列表进行比较,并且仅在签名有效时才返回成功。它有自己的手册页。
`--multifile`
此选项会修改某些其他命令,以允许在命令行中处理多个文件,或者从 STDIN 读取,每个文件名位于单独的一行。这允许一次处理许多文件。`--multifile` 当前可与 `--verify`、`--encrypt` 和 `--decrypt` 一起使用。请注意,`--multifile --verify` 不能与分离签名一起使用。
`--verify-files`
与 `--multifile --verify` 相同。
`--encrypt-files`
与 `--multifile --encrypt` 相同。
`--decrypt-files`
与 `--multifile --decrypt` 相同。
`--list-keys`
`-k`
`--list-public-keys`
列出指定的密钥。如果没有指定密钥,则列出配置的公钥环中的所有密钥。
切勿在脚本或其他程序中使用此命令的输出。输出仅供人类使用,并且其格式可能会发生变化。`--with-colons` 选项以稳定的、可由机器解析的格式输出,供脚本和其他程序使用。
`--list-secret-keys`
`-K`
列出指定的私钥。如果没有指定密钥,则列出所有已知的私钥。`#` 符号位于初始标签 `sec` 或 `ssb` 之后,表示私钥或子密钥当前无法使用。我们还说该密钥已离线(例如,可以通过使用 `--export-secret-subkeys` 命令导出密钥来使主密钥离线)。`>` 符号位于这些标签之后,表示密钥存储在智能卡上。另请参阅 `--list-keys`。
`--check-signatures`
`--check-sigs`
与 `--list-keys` 相同,但也会验证并列出密钥签名。请注意,为了提高性能,不会显示签名密钥的撤销状态。此命令与使用 `--list-keys` 和 `--with-sig-check` 具有相同的效果。
状态验证的状态通过紧跟在“sig”标签后面的标志(因此在下面描述的标志之前)来指示。“!”表示签名已成功验证,“-”表示签名无效,“%”表示在检查签名时发生错误(例如,不支持的算法)。未提供公钥的签名不列出;要查看它们的 keyid,可以使用命令 --list-sigs。
对于列出的每个签名,签名状态标志和 keyid 之间有几个标志。这些标志提供了关于每个密钥签名的附加信息。从左到右,它们是 1-3 代表证书检查级别(参见 --ask-cert-level),“L”表示本地或不可导出的签名(参见 --lsign-key),“R”表示不可撤销的签名(参见 --edit-key 命令 “nrsign”),“P”表示签名包含策略 URL(参见 --cert-policy-url),“N”表示签名包含注释(参见 --cert-notation),“X”表示已过期的签名(参见 --ask-cert-expire),以及数字 1-9 或“T”表示 10 及以上,用于指示信任签名级别(参见 --edit-key 命令 “tsign”)。
--locate-keys
--locate-external-keys
定位作为参数给定的密钥。此命令基本上使用与用于密钥加密的相同算法,因此可用于查看 gpg 可能会使用哪些密钥。特别是,如果参数包含有效的电子邮件地址,则使用 --auto-key-locate 中定义的外部方法来定位密钥。仅列出公钥。
--locate-external-keys 变体不考虑本地存在的密钥,因此可用于强制通过定义的外部方法刷新密钥。如果给定了指纹,并且 --auto-key-locate 中定义的方法定义了 LDAP 服务器,则从这些资源中获取密钥;定义的非 LDAP 密钥服务器将被跳过。
--show-keys
此命令将 OpenPGP 密钥作为输入,并以与 --list-keys 命令对本地存储的密钥执行的操作相同的方式打印有关它们的信息。此外,还启用了列表选项 show-unusable-uids、show-unusable-subkeys、show-notations 和 show-policy-urls。与自动处理一样,此命令应与 --with-colons 选项结合使用。
--fingerprint
列出所有密钥(或指定的密钥),以及它们的指纹。这与 --list-keys 的输出相同,但会额外输出一行指纹。也可以与 --check-signatures 结合使用。如果此命令执行两次,则还会列出所有辅助密钥的指纹。此命令还会强制对指纹进行美观打印,即使密钥 ID 格式设置为“none”。
--list-packets
仅列出数据包序列。 此命令仅用于调试。 当与选项 --verbose 一起使用时,实际的 MPI 值将被转储,而不仅仅是它们的长度。 请注意,此命令的输出可能会在新版本中更改。
--edit-card
--card-edit
显示一个菜单,用于处理智能卡。 子命令“help”提供有关可用命令的概述。 有关详细说明,请参阅 Card HOWTO。 请注意,可以使用命令“openpgp”来切换到智能卡的 OpenPGP 应用程序,默认情况下,智能卡会呈现另一个应用程序(例如 PIV)。
--card-status
显示智能卡的内容。
--change-pin
显示一个菜单,允许更改智能卡的 PIN。 此功能也作为子命令“passwd”与 --edit-card 命令一起提供。
--delete-keys name
从公钥环中删除密钥。 在批处理模式下,需要使用 --yes,或者必须通过指纹指定密钥。 这是防止意外删除多个密钥的安全措施。 如果使用感叹号语法,并且使用子密钥的指纹,则仅删除该子密钥;如果使用感叹号语法,并且使用主密钥的指纹,则删除整个公钥。
--delete-secret-keys name
从私钥环中删除密钥。 在批处理模式下,必须通过指纹指定密钥。 可以使用 --yes 选项来建议 gpg-agent 不要请求确认。 采取这种额外的预防措施,因为 gpg 无法确定私钥(由 gpg-agent 控制)是否仅用于给定的 OpenPGP 公钥。 如果使用感叹号语法,并且使用子密钥的指纹,则仅删除该子密钥的私钥部分;如果使用感叹号语法,并且使用主密钥的指纹,则仅删除主密钥的私钥部分。
--delete-secret-and-public-key name
与 --delete-key 相同,但如果存在私钥,则首先将其删除。 在批处理模式下,必须通过指纹指定密钥。 可以使用 --yes 选项来建议 gpg-agent 不要请求确认。
--export
导出所有密钥,包括来自所有密钥环(默认密钥环和通过 --keyring 选项注册的密钥环)的密钥,或者如果给出了至少一个名称,则导出给定名称的密钥。 导出的密钥将写入 STDOUT 或通过 --output 选项指定的文件。 与 --armor 选项结合使用,可以将这些密钥通过电子邮件发送。
--send-keys keyIDs
类似于 --export,但将密钥发送到密钥服务器。 可以使用指纹而不是密钥 ID。 不要将您的完整密钥环发送到密钥服务器——仅选择由您创建或更改的密钥。 如果没有提供 keyIDs,则 gpg 不执行任何操作。
请注意:密钥服务器本质上是只写系统,因此无法删除已发送到密钥服务器的密钥。
--export-secret-keys
--export-secret-subkeys
与 --export 相同,但导出的是私钥。导出的密钥将写入 STDOUT 或通过 --output 选项指定的文件。该命令通常与 --armor 选项一起使用,以便轻松地将密钥打印出来以进行纸质备份;但是,paperkey 工具在创建纸质备份方面做得更好。请注意,如果将导出的密钥通过不安全的通道发送,则导出私钥可能会带来安全风险。
该命令的第二种形式具有特殊的属性,可以使主密钥的私钥部分变得无用;这是 GNU 对 OpenPGP 的扩展,其他实现可能无法成功导入此类密钥。其预期用途是在专用机器上生成包含附加签名子密钥的完整密钥。然后,该命令将密钥(不包括主密钥)导出到主机器。
GnuPG 可能会要求您输入密钥的密码。这是必需的,因为私钥的内部保护方法与 OpenPGP 协议指定的保护方法不同。
--export-ssh-key
此命令用于以 OpenSSH 公钥格式导出密钥。它需要通过通常的方式指定一个密钥,并将最新的具有身份验证功能的子密钥导出到 STDOUT 或通过 --output 选项指定的文件。该输出可以直接添加到 ssh 的“authorized_key”文件中。
通过使用以密钥 ID 或指纹后缀加一个感叹号 (!) 的方式指定要导出的密钥,可以导出特定的子密钥或主密钥。这甚至不需要密钥具有身份验证功能标志。
--import
--fast-import
导入/合并密钥。这会将给定的密钥添加到密钥环中。快速版本当前只是同义词。
还有一些其他选项可以控制此命令的工作方式。其中最值得注意的是 --import-options merge-only 选项,它不会插入新的密钥,而是仅合并新的签名、用户 ID 和子密钥。
--receive-keys keyIDs
--recv-keys keyIDs
从密钥服务器导入具有给定 keyIDs 的密钥。
--refresh-keys
从密钥服务器请求更新,以更新已存在于本地密钥环中的密钥。这对于使用最新的签名、用户 ID 等更新密钥非常有用。不带任何参数调用此命令将刷新整个密钥环。
--search-keys names
在密钥服务器上搜索给定的名称。此处给定的多个名称将连接在一起,以创建密钥服务器的搜索字符串。请注意,密钥服务器以不同且更简单的方式搜索名称,而 GPG 搜索名称的方式则更为复杂。最佳选择是使用电子邮件地址。由于数据隐私原因,密钥服务器甚至可能不允许按用户 ID 或电子邮件地址进行搜索,因此可能仅在与 --recv-key 命令一起使用时,按密钥指纹或密钥 ID 搜索时才返回结果。
--fetch-keys URIs
检索位于指定 URI 的密钥。请注意,不同安装的 GnuPG 可能支持不同的协议(HTTP、FTP、LDAP 等)。使用 HTTPS 时,此命令使用系统提供的根证书。
--update-trustdb
执行信任数据库维护。此命令遍历所有密钥并构建信任网络。这是一个交互式命令,因为它可能需要询问密钥的“ownertrust”值。用户必须对她信任所显示密钥所有者以正确认证(签名)其他密钥的程度进行估计。GnuPG 仅在密钥尚未分配“ownertrust”值时才询问该值。可以使用 --edit-key 菜单随时更改已分配的值。
--check-trustdb
执行信任数据库维护,无需用户交互。有时必须更新信任数据库,以便跟踪已过期密钥或签名以及信任网络中随之而来的更改。通常,GnuPG 会计算何时需要进行此操作,并自动执行,除非设置了 --no-auto-check-trustdb。此命令可用于随时强制执行信任数据库检查。处理方式与 --update-trustdb 相同,但它会跳过尚未定义“ownertrust”的密钥。
对于 cron 任务,此命令可以与 --batch 结合使用,在这种情况下,仅当需要检查时才执行信任数据库检查。即使在批处理模式下,也可以使用该选项 --yes 来强制执行。
--export-ownertrust
将 ownertrust 值发送到 STDOUT。这对于备份目的很有用,因为这些值是唯一无法从损坏的 trustdb 中重新创建的值。示例: gpg --export-ownertrust > otrust.txt
--import-ownertrust
使用存储在文件中的 ownertrust 值(如果未提供,则使用 STDIN)更新 trustdb;现有值将被覆盖。如果 trustdb 严重损坏,并且您拥有最新的 ownertrust 值备份(例如,在 ‘otrust.txt’ 文件中),则可以使用以下命令重新创建 trustdb: cd ~/.gnupg rm trustdb.gpg gpg --import-ownertrust < otrust.txt
--rebuild-keydb-caches
在从版本 1.0.6 升级到 1.0.7 时,应使用此命令在密钥环中创建签名缓存。在其他情况下,它也可能很有用。
--print-md algo
--print-mds
为给定的所有文件或 STDIN 打印算法 algo 的消息摘要。使用第二种形式(或已弃用的 "*" 表示 algo),将打印所有可用算法的摘要。
--gen-random 0|1|2|16|30 count
输出给定质量级别 0、1 或 2 的 count 个随机字节。如果未提供 count 或为零,则将输出无限的随机字节序列。如果与 --armor 结合使用,则输出将以 base64 编码。特殊的级别 16 使用质量级别 1,并输出一个无限的十六进制编码的字节流。特殊的级别 30 以 30 个 zBase-32 字符的形式输出随机数。
--gen-prime mode bits
请参考源代码,Luke :-)。输出格式可能会随着任何版本的发布而改变。
--enarmor
--dearmor
将任意输入打包或解包为 OpenPGP ASCII 盔甲。这是 GnuPG 对 OpenPGP 的扩展,通常用处不大。--dearmor 命令也可以用于解包 PEM 盔甲。
--unwrap
此选项修改 --decrypt 命令,以输出已删除加密层的原始消息。因此,输出将是一个 OpenPGP 数据结构,通常意味着一个已签名的 OpenPGP 消息。请注意,此选项可能会或可能不会删除加密层下方的压缩层,而压缩层通常存在于那里。
--tofu-policy {auto|good|unknown|bad|ask} keys
为与指定密钥关联的所有绑定设置 TOFU 策略。有关策略含义的更多信息,请参见:[trust-model-tofu]。密钥可以通过其指纹(首选)或密钥 ID 来指定。
如何管理您的密钥
本节解释了用于密钥管理的主要命令。
--quick-generate-key user-id [algo [usage [expire]]]
--quick-gen-key
这是一个简单的命令,用于生成具有一个用户 ID 的标准密钥。与 --generate-key 相比,密钥是直接生成的,无需回答一堆提示。除非给出了 --yes 选项,否则如果给定的用户 ID 已经存在于密钥环中,密钥创建将被取消。
如果直接在控制台上使用此命令,且没有特殊选项,则需要回答“继续?”之类的确认提示。如果用户 ID 已经存在于密钥环中,将显示第二个提示,以强制创建密钥。
如果给出了 algo 或 usage,则仅创建主密钥,并且不会显示任何提示。要指定到期日期,但仍然创建主密钥和子密钥,请为 algo 和 usage 使用“default”或“future-default”。有关这些可选参数的描述,请参见 --quick-add-key 命令。usage 还可以接受“cert”值,这可用于创建仅用于认证的主密钥;默认情况下,它创建用于认证和签名的密钥。
expire 参数可用于指定密钥的到期日期。支持几种格式;通常使用 ISO 格式“YYYY-MM-DD”或“YYYYMMDDThhmmss”。要使密钥在 N 秒、N 天、N 周、N 个月或 N 年后到期,请使用“seconds=N”、“Nd”、“Nw”、“Nm”或“Ny”。不指定值,或使用“-”,则密钥将在合理的默认间隔内到期。可以使用“never”、“none”来表示没有到期日期。
如果此命令与 --batch 结合使用,并且 --pinentry-mode 设置为循环模式,并且使用了一个密码选项(--passphrase、--passphrase-fd 或 --passphrase-file),则将使用提供的密码作为新密钥的密码,并且代理不会要求输入密码。要创建一个没有密码保护的密钥,可以使用 --passphrase ''。
要从当前插入的智能卡中的密钥创建 OpenPGP 密钥,可以使用特殊的字符串“card”作为算法。如果智能卡具有加密密钥和签名密钥,gpg 将识别它们并创建一个 OpenPGP 密钥,该密钥包含通常的主密钥和一个子密钥。这仅适用于某些智能卡。请注意,交互式 --full-gen-key 命令允许以更大的灵活性选择智能卡密钥,从而实现相同的功能。
可以使用“default”并使用 --default-new-key-algo 选项更改默认参数,来使用非默认算法创建主密钥和子密钥。
^ -quick-set-expire fpr expire [*|subfprs]
当提供两个参数时,直接设置主密钥的到期时间,该主密钥由 fpr 标识。要删除到期时间,可以使用 0。当提供三个参数且第三个参数为星号时,所有未撤销且尚未到期的子密钥的到期时间将被设置。当提供两个以上的参数,并为 subfprs 提供一个或多个指纹列表时,所有与这些指纹匹配的未撤销的子密钥的到期时间将被设置。
^ -quick-add-key fpr [algo [usage [expire]]]
直接将子密钥添加到由指纹 fpr 标识的密钥中。如果不提供可选参数,则添加加密子密钥。如果提供了任何参数,则添加更具体的子密钥。
algo 可以是任何受支持的算法或曲线名称,格式与密钥列表中使用的格式相同。要使用默认算法,可以使用字符串“default”或“-”。支持的算法包括“rsa”、“dsa”、“elg”、“ed25519”、“cv25519”和其他 ECC 曲线。例如,字符串“rsa”添加一个使用默认密钥长度的 RSA 密钥;字符串“rsa4096”请求密钥长度为 4096 位。字符串“future-default”是未来版本的 gpg 中可能用作默认算法的算法的别名。要列出支持的 ECC 曲线,可以使用命令 gpg --with-colons --list-config curve。
根据给定的 algo,子密钥可以是加密子密钥或签名子密钥。如果算法能够进行签名和加密,并且需要这种子密钥,则必须提供 usage 字符串。该字符串可以是“default”或“-”,以保持默认设置,也可以是逗号分隔的列表(或空格分隔的列表),其中包含以下关键字:“sign”用于签名子密钥,“auth”用于身份验证子密钥,以及“encr”用于加密子密钥(“encrypt”可以用作“encr”的别名)。有效的组合取决于算法。
expire 参数可用于指定密钥的到期日期。支持多种格式;通常使用 ISO 格式“YYYY-MM-DD”或“YYYYMMDDThhmmss”。要使密钥在 N 秒、N 天、N 周、N 个月或 N 年后到期,请使用“seconds=N”、“Nd”、“Nw”、“Nm”或“Ny”。不指定值,或使用“-”,则密钥将在合理的默认间隔后到期。可以使用值“never”或“none”来设置无到期日期。
--quick-add-adsk fpr adskfpr
直接将附加解密子密钥添加到由指纹 fpr 标识的密钥。
adskfpr 是另一个密钥的加密子密钥的指纹。子密钥通常在此处使用,因为默认情况下,主密钥没有加密功能。使用带有列表命令的 --with-subkey-fingerprint 选项来显示子密钥指纹。如果字符串 "default" 用作 adskfpr,则会添加所有配置了 --default-new-key-adsk 的缺失 ADSK。
--generate-key
--gen-key
使用当前默认参数生成一个新的密钥对。这是创建新密钥的标准命令。除了密钥之外,还会创建一个吊销证书,并将其存储在 GnuPG 主目录下的“openpgp-revocs.d”目录中。
--full-generate-key
--full-gen-key
使用对话框生成新的密钥对,其中包含所有选项。这是 --generate-key 的扩展版本。
还有一个功能,允许您以批处理模式创建密钥。请参阅手册的“非交互式密钥生成”部分,了解如何使用此功能。
--generate-revocation name
--gen-revoke name
为完整的密钥生成吊销证书。要仅吊销子密钥或密钥签名,请使用 --edit 命令。
此命令仅创建吊销证书,以便在需要吊销密钥时可以使用。要实际吊销密钥,需要将创建的吊销证书与要吊销的密钥合并。这可以通过使用 --import 命令导入吊销证书来完成。然后,需要发布吊销的密钥,最好通过将其发送到密钥服务器(使用 --send-key 命令),并通过导出(--export)到文件,然后将其发送给经常通信的合作伙伴。
--generate-designated-revocation name
--desig-revoke name
生成密钥的指定吊销证书。这允许用户(在密钥持有人的许可下)吊销其他人的密钥。
--edit-key
呈现一个菜单,该菜单使您可以执行大多数密钥管理相关任务。它需要指定命令中的密钥。
uid n 切换选择用户 ID 或带索引 n 的照片用户 ID。使用 * 选择所有,使用 0 取消选择所有。
key n 切换选择带索引 n 或密钥 ID n 的子密钥或密钥。使用 * 选择所有,使用 0 取消选择所有。
sign 对用户的密钥进行签名。如果该密钥尚未由默认用户(或使用 -u 给出的用户)签名,则程序会再次显示密钥的信息,以及其指纹,并询问是否应该对其进行签名。此问题将针对所有使用 -u 指定的用户重复。
lsign 与 "sign" 相同,但签名被标记为不可导出,因此永远不会被其他人使用。这可用于使密钥仅在本地环境中有效。
nrsign 与 "sign" 相同,但签名被标记为不可撤销,因此永远无法撤销。
tsign 创建信任签名。此签名结合了认证的概念(如常规签名)和信任(如 "trust" 命令)。它通常在不同的社区或组中用于实现受信任的介绍者的概念。有关更多信息,请阅读 RFC-4880 中的“信任签名”和“正则表达式”部分。
请注意,“l”(用于本地/不可导出)、“nr”(用于不可撤销)和“t”(用于信任)可以自由组合并作为前缀添加到“sign”中,以创建任何类型的签名。
如果指定了 `--only-sign-text-ids` 选项,则任何非基于文本的用户 ID(例如,照片 ID)将不会被选中进行签名。
delsig 删除签名。请注意,一旦签名发送到公共网络(例如,发送到密钥服务器),就无法撤销签名。在这种情况下,最好使用 `revsig`。
revsig 撤销签名。对于通过其中一个私钥生成的每个签名,GnuPG 会询问是否应生成撤销证书。
check 检查所有选定用户 ID 上的签名。使用额外的 `selfsig` 选项,仅显示自签名。
adduid 创建额外的用户 ID。
addphoto 创建照片用户 ID。这将提示输入一个将嵌入到用户 ID 中的 JPEG 文件。请注意,非常大的 JPEG 文件会产生非常大的密钥。 此外,请注意,有些程序会以未更改的方式显示您的 JPEG 文件(GnuPG),而有些程序会将它缩放到适合对话框中(PGP)。
showphoto 显示选定的照片用户 ID。
deluid 删除用户 ID 或照片用户 ID。请注意,一旦用户 ID 发送到公共网络(例如,发送到密钥服务器),就无法撤销用户 ID。在这种情况下,最好使用 `revuid`。
revuid 撤销用户 ID 或照片用户 ID。
primary 将当前用户 ID 标记为主要用户 ID,从所有其他用户 ID 中删除主要用户 ID 标志,并将所有受影响的自签名的时间戳提前一秒。请注意,将照片用户 ID 设置为主要用户 ID 会使其成为所有其他照片用户 ID 的主要用户 ID,并将常规用户 ID 设置为主要用户 ID 会使其成为所有其他常规用户 ID 的主要用户 ID。
keyserver 为指定的用户 ID 设置首选密钥服务器。这允许其他用户知道您希望他们从哪里获取您的密钥。有关更多信息,请参阅 `--keyserver-options honor-keyserver-url`。
notation 为指定的用户 ID 设置名称=值 标注。有关更多信息,请参阅 `--cert-notation`。 设置一个值为“none”会删除所有标注,设置一个以减号 (-) 开头的标注会删除该标注,设置一个仅带有名称(不带 =value)且以减号 (-) 开头的标注会删除所有具有该名称的标注。
pref 列出所选用户 ID 的偏好设置。这会显示实际的偏好设置,不包括任何隐含的偏好设置。
showpref
为所选用户 ID 显示更详细的偏好设置列表。如果尚未包含在偏好设置列表中,则会显示有效的偏好设置,包括 3DES(密码)、SHA-1(摘要)和非压缩(压缩)的隐含偏好设置。此外,还会显示首选密钥服务器和签名表示法(如果有)。
setpref string
为所有(或仅为所选)用户 ID 设置偏好设置列表。不带参数调用 setpref 会将偏好设置列表设置为默认值(要么是内置的,要么是通过 --default-preference-list 设置的),并且使用“none”作为参数调用 setpref 会设置一个空偏好设置列表。使用 gpg --version 获取可用算法的列表。请注意,虽然您可以更改属性用户 ID(也称为“照片 ID”)上的偏好设置,但 GnuPG 不会通过属性用户 ID 选择密钥,因此这些偏好设置将不会被 GnuPG 使用。请注意,此命令的非交互式版本可用作 --quick-update-pref。
当设置偏好设置时,应按希望其他人用于加密发送到您密钥的消息时使用的顺序列出算法。如果您不包含 3DES,它将被自动添加到末尾。请注意,有许多因素会影响算法的选择(例如,您的密钥可能不是唯一的接收者),因此用于向您发送消息的远程 OpenPGP 应用程序可能或可能不会完全遵循您为给定消息选择的顺序。但是,它只会选择存在于每个接收者密钥的偏好设置列表中的算法。另请参见下面的“与其他 OPENPGP 程序的互操作性”部分。
addkey 向此密钥添加子密钥。
addcardkey
在卡上生成子密钥并将其添加到此密钥。
keytocard
将选定的秘密子密钥(如果没有选择子密钥,则为主要密钥)传输到智能卡。如果密钥可以成功存储在卡上,并且您稍后使用保存命令,则密钥环中的秘密密钥将被替换为存根。只有某些类型的密钥才能传输到卡。一个子菜单允许您选择将密钥存储到哪个卡上。请注意,无法将密钥从卡中取出——如果卡损坏,您的秘密密钥将丢失,除非您已在其他地方备份。
bkuptocard file
将给定的文件恢复到卡上。此命令可用于将备份密钥(如在卡初始化期间生成)恢复到新卡。在大多数情况下,这将是加密密钥。您应该仅使用相应的公共密钥,并确保给定的文件确实是要恢复的备份。然后,您将选择 2 作为加密密钥。首先,系统将要求您输入备份密钥的密码,然后输入卡的管理员 PIN。
keytotpm
将选定的子密钥(或者如果没有选择子密钥,则将主密钥)转移到 TPM 形式。密钥环中的私有密钥将被 TPM 形式的密钥替换,该密钥只能由创建它的特定 TPM 读取(因此,密钥文件现在将被锁定到包含 TPM 的笔记本电脑)。只有某些密钥类型可以转移到 TPM(所有 TPM 2.0 系统都必须具有 rsa2048 和 nistp256 算法,但较新的 TPM 可能具有更多算法)。请注意,密钥本身不会被转移到 TPM 中,而只是在 TPM 中对其进行加密,因此如果删除密钥文件,密钥将会丢失。一旦转移到 TPM 形式,密钥文件就无法再转换为非 TPM 形式,并且当 TPM 损坏时,密钥也将失效,因此在转换之前,您应该首先将实际的私有密钥文件的备份保存在安全的离线存储中。至关重要的是,您必须使用具有对 TPM 资源管理器设备(/dev/tpmrm0)的读写权限的物理系统 TPM。通常,这意味着您必须是 tss 组的成员。
delkey 移除子密钥(辅助密钥)。请注意,一旦子密钥被发送到公共区域(即发送到密钥服务器),就无法撤销该子密钥。在这种情况下,最好使用 revkey。此外,请注意,这只会删除密钥的公共部分。
revkey 撤销子密钥。
expire 更改密钥或子密钥的过期时间。如果选择了一个子密钥,则将更改此子密钥的过期时间。如果没有选择,则将更改主密钥的过期时间。
trust 更改密钥的信任者值。这会立即更新信任数据库,无需保存。
disable
enable 禁用或启用整个密钥。被禁用的密钥通常不能用于加密。
addrevoker
添加一个指定的撤销者到密钥。它接受一个可选参数:“sensitive”。如果指定的撤销者被标记为“sensitive”,则默认情况下它将不会被导出(请参阅 export-options)。
addadsk
添加一个额外的解密子密钥。系统会要求用户输入另一个加密子密钥的指纹。请注意,需要输入另一个密钥的加密子密钥的确切指纹。这是因为通常主密钥没有加密能力。使用带有密钥列表的 --with-subkey-fingerprint 选项来显示子密钥指纹。
passwd 更改私有密钥的密码。
toggle 这是一个虚拟命令,仅用于向后兼容。
clean 压缩(通过删除除自签名之外的所有签名)任何不再可用的用户 ID(例如,已撤销或已过期)。然后,删除任何不适用于信任计算的签名。具体来说,这将删除任何验证失败的签名、任何被后续签名取代的签名、已撤销的签名以及由密钥环中不存在的密钥发出的签名。
minimize
尽可能减小密钥尺寸。这将删除每个用户 ID 的所有签名, 只保留最新的自我签名。
change-usage
更改主密钥或子密钥的使用标志(功能)。这些使用标志(例如,Certify、Sign、Authenticate、Encrypt)在密钥创建期间设置。 有时,在创建后更改它们是有用的(例如,添加 Authenticate)。请谨慎操作; 允许的使用标志取决于密钥算法。
cross-certify
为可能当前没有交叉认证签名的签名子密钥添加交叉认证签名。交叉认证签名可以防止针对签名子密钥的微妙攻击。请参阅 --require-cross-certification。所有新生成的密钥默认情况下都具有此 签名,因此此命令仅用于使较旧的密钥保持最新。
save
保存所有更改到密钥环并退出。
quit
在不更新密钥环的情况下退出程序。
该列表显示了密钥及其辅助密钥和所有用户 ID。主用户 ID 用点表示,选定的密钥或用户 ID 用星号表示。 信任值显示在主密钥旁边:“trust”是分配的拥有者信任值, “validity”是密钥的计算有效性。有效性值也显示在 所有用户 ID 上。有关信任值的可能值,请参见:[trust-values]。
--sign-key name
使用您的私钥对公钥进行签名。这是 --edit-key 中“sign”子命令的快捷版本。
--lsign-key name
使用您的私钥对公钥进行签名,但将其标记为不可导出。这是 --edit-key 中“lsign”子命令的快捷版本。
--quick-sign-key fpr [names]
--quick-lsign-key fpr [names]
直接从密码短语对密钥进行签名,无需任何进一步的用户交互。fpr 必须是本地密钥环中密钥的经过验证的主指纹。如果没有提供名称, 则对所有有用的用户 ID 进行签名;如果提供了 [names],则仅对匹配这些名称之一的有用的用户 ID 进行签名。默认情况下,或者如果名称以“*”开头,则使用区分大小写的子字符串匹配。如果名称以“=”开头,则进行区分大小写的精确匹配。
--quick-lsign-key 命令将签名标记为不可导出。如果已经存在这样的不可导出签名,则 --quick-sign-key 将其转换为可导出的签名。如果您需要更新现有的签名,例如添加或更改 注释数据,则需要使用 --force-sign-key 选项。
此命令使用合理的默认值,因此不提供 --edit-key 中 “sign” 子命令的全部灵活性。其预期用途是通过利用已验证的指纹列表来帮助无人值守的密钥签名。
^ -quick-add-uid user-id new-user-id
此命令将新的用户 ID 添加到现有的密钥中。与 --edit-key 的交互式子命令 adduid 相比,新的用户 ID 将逐字添加,仅删除前导和尾随空格,并且预计它将以 UTF-8 编码,并且不会对其格式进行任何检查。
^ -quick-revoke-uid user-id user-id-to-revoke
此命令撤销现有密钥上的用户 ID。它不能用于撤销密钥上的最后一个用户 ID(必须保留一些未撤销的用户 ID),撤销原因是“用户 ID 不再有效”。如果您想指定不同的撤销原因或提供补充的撤销文本,则应使用 --edit-key 的交互式子命令 revuid。
^ -quick-revoke-sig fpr signing-fpr [names]
此命令撤销 signing-fpr 从指纹 fpr 指定的密钥所做的密钥签名。如果提供了名称,则仅影响密钥上与给定名称中的任何名称匹配的用户 ID 的签名(请参阅 --quick-sign-key)。如果已经存在撤销,则会打印一条通知,而不是创建新的撤销;在这种情况下,不会返回错误。请注意,密钥签名撤销可能会被较新的密钥签名所取代,并再次撤销。
^ -quick-set-primary-uid user-id primary-user-id
此命令设置或更新现有密钥上的主要用户 ID 标志。user-id 指定密钥,primary-user-id 指定应标记为主要用户 ID 的用户 ID。主要用户 ID 标志将从所有其他用户 ID 中删除,并且所有受影响的自签名的时间戳将设置为一秒后。
^ -quick-update-pref user-id
此命令将密钥的首选项列表更新为当前默认值(内置或通过 --default-preference-list 设置)。这是使用 --key-edit 菜单中的“setpref”的无人值守版本,无需提供列表。请注意,您可以使用 --list-options show-pref 或 --list-options show-pref-verbose 在密钥列表中显示首选项。您还应该将更新后的密钥重新分发给您的对等方。
^ -quick-set-ownertrust user-id value
此命令设置密钥的 ownertrust,也可以用于设置密钥的禁用标志。这是使用 --key-edit 菜单中的“trust”、“disable”或“enable”的无人值守版本。
^ -change-passphrase user-id
^ -passwd user-id
更改指定为 user-id 的证书的私钥的密码。这是 --edit-key 菜单的 passwd 子命令的快捷方式。在使用 --dry-run 选项时,它不会实际更改密码,而是检查当前密码是否正确。
选项
gpg 有很多选项可以控制确切的行为并更改默认配置。
长选项可以放在一个选项文件中(默认是“~/.gnupg/gpg.conf”)。短选项名称将不起作用——例如,“armor”是选项文件中的有效选项,而“a”则不是。不要写两个破折号,只需写出选项名称和任何必需的参数。以井号('#')作为第一个非空白字符的行将被忽略。命令也可以放在此文件中,但这通常没有用,因为每次执行 gpg 时命令都会自动执行。
请记住,选项解析会在遇到非选项时停止,您可以使用特殊选项 -- 显式停止解析。
如何更改配置
这些选项用于更改配置,并且它们通常位于选项文件中。
--default-key name
使用 name 作为默认签名密钥。建议使用指纹或至少使用长密钥 ID 作为 name。如果未使用此选项,则默认密钥是秘密密钥环中的第一个密钥。请注意,-u 或 --local-user 选项会覆盖此选项。此选项可以多次使用。在这种情况下,将使用具有可用秘密密钥的最后一个密钥。如果指定的任何值都没有可用的秘密密钥,GnuPG 不会发出错误消息,而是继续执行,就好像未提供此选项一样。
--default-recipient name
如果未使用 --recipient 选项,则使用 name 作为默认接收者,并且不询问是否有效。name 必须不为空,建议使用指纹作为 name。
--default-recipient-self
如果未使用 --recipient 选项,则使用默认密钥作为默认接收者,并且不询问是否有效。默认密钥是秘密密钥环中的第一个密钥,或者是通过 --default-key 选项设置的密钥。
--no-default-recipient
重置 --default-recipient 和 --default-recipient-self。不应在选项文件中使用。
-v, --verbose
在处理过程中提供更多信息。如果使用两次,则详细列出输入数据。
--no-verbose
将详细级别重置为 0。不应在选项文件中使用。
-q, --quiet
尽可能保持安静。不应在选项文件中使用。
--batch
--no-batch
使用批处理模式。永不提示,不允许交互式命令。--no-batch 禁用此选项。请注意,即使在命令行中给出了文件名,gpg 仍可能需要从 STDIN 读取数据(特别是当 gpg 确定输入是分离签名且未指定数据文件时)。因此,如果您不希望通过 STDIN 馈送数据,则应将 STDIN 连接到“/dev/null”。
强烈建议在任何无人值守的 gpg 使用中,将此选项与 --status-fd 和 --with-colons 选项一起使用。不应在选项文件中使用。
--no-tty
确保从不将 TTY(终端)用于任何输出。在某些情况下需要此选项,因为 GnuPG 即使在使用 --batch 时,有时也会将警告打印到 TTY。
--yes 在大多数问题上假定“是”。不应在选项文件中使用。
--no 在大多数问题上假定“否”。不应在选项文件中使用。
--proc-all-sigs
此选项会覆盖 --batch 选项的行为,从而在检测到第一个无效签名时停止签名验证。
--list-filter {select=expr}
列表过滤器可用于在列出密钥的命令期间仅输出某些密钥。有关可用属性名称,请参见 --import-filter 的说明。
--list-options 参数
这是一个由空格或逗号分隔的字符串,用于提供在列出密钥和签名时使用的选项(即,--list-keys、--check-signatures、--list-public-keys、--list-secret-keys 和 --edit-key 函数)。选项可以以“no-”(在双破折号之后)为前缀,以提供相反的含义。选项如下:
show-photos
使 --list-keys、--check-signatures、--list-public-keys 和 --list-secret-keys 在列出密钥时显示任何附加到密钥的照片 ID。默认值为“否”。另请参见 --photo-viewer。不适用于 --with-colons:请参阅 --attribute-fd,了解获取脚本和其他前端照片数据的适当方法。
show-usage
在标准密钥列表中显示密钥和子密钥的用法信息。这是一个字母列表,指示密钥的允许用法(E=加密、S=签名、C=认证、A=身份验证)。默认值为“是”。
show-ownertrust
在标准密钥列表中显示密钥的 ownertrust 值。默认值为“否”。
show-policy-urls
在 --check-signatures 列表中显示策略 URL。默认值为“否”。
show-notations
show-std-notations
show-user-notations
在 --check-signatures 列表中显示所有、IETF 标准或用户定义的签名注释。默认值为“否”。
show-keyserver-urls
在 --check-signatures 列表中显示任何首选密钥服务器 URL。默认值为“否”。
show-uid-validity
在列出密钥时显示用户 ID 的计算有效性。默认值为“是”。
show-unusable-uids
在列出密钥时显示已撤销和已过期的用户 ID。默认值为“否”。
show-unusable-subkeys
在列出密钥时显示已撤销和已过期的子密钥。默认值为“否”。
show-unusable-sigs
显示使用弱或不受支持的算法创建的密钥签名。
show-keyring
在列出密钥时显示密钥环名称,以显示给定密钥所在的密钥环。默认值为“否”。
show-sig-expire
在 --check-signatures 列表中显示签名到期日期(如果有)。默认值为“否”。
show-sig-subpackets
在密钥列表中包含签名子包。此选项可以采用可选参数列表。如果未传递任何参数,则列出所有子包。默认值为“否”。只有在使用 --with-colons 以及 --check-signatures 时,此选项才有意义。
show-only-fpr-mbox
对于具有有效邮件地址的每个用户 ID,仅打印指纹,后跟邮件地址。
sort-sigs
在使用 `--list-sigs` 和 `--check-sigs` 时,按 keyID 和创建时间对签名进行排序,以便更轻松地查看这些签名的历史记录。自签名也会在其他签名之前列出。默认值为 yes。此选项在 `-with-colons` 模式下不起作用。
--verify-options 参数
这是一个空格或逗号分隔的字符串,用于提供在验证签名时使用的选项。选项可以以 `no-` 前缀,以提供相反的含义。选项包括:
show-photos
显示密钥中存在的任何照片 ID。默认值为 no。另请参见 `--photo-viewer`。
show-policy-urls
显示正在验证的签名中的策略 URL。默认值为 yes。
show-notations
show-std-notations
show-user-notations
显示正在验证的签名中的所有、IETF 标准或用户定义的签名注释。默认值为 IETF 标准。
show-keyserver-urls
显示正在验证的签名中的任何首选密钥服务器 URL。默认值为 yes。
show-uid-validity
显示发出签名的密钥上用户 ID 的计算有效性。默认值为 yes。
show-unusable-uids
在签名验证期间显示已撤销和已过期的用户 ID。默认值为 no。
show-primary-uid-only
仅显示主要的用户名 ID 期间签名验证。也就是说,所有 AKA 行以及照片 ID 都不会与签名验证状态一起显示。
--enable-large-rsa
--disable-large-rsa
启用创建最大 8192 位 RSA 密钥。注意:8192 位通常不建议使用。这些大密钥不会显著提高安全性,但它们更昂贵,并且它们的签名和证书更大。此选项仅在二进制文件使用 large-secmem 支持编译时可用。
--enable-dsa2
--disable-dsa2
为所有 DSA 密钥启用哈希截断,即使对于旧的 DSA 密钥,最多为 1024 位。这也是 `--openpgp` 的默认设置。请注意,较旧版本的 GnuPG 也需要此标志才能允许生成大于 1024 位的 DSA。
--photo-viewer 字符串
这是应运行以查看照片 ID 的命令行。`%i` 将扩展为包含照片的文件名。`%I` 执行相同的操作,但文件不会在查看器退出后删除。其他标志是 `%k` 表示密钥 ID,`%K` 表示长密钥 ID,`%f` 表示密钥指纹,`%t` 表示图像类型的扩展名(例如“jpg”),`%T` 表示图像的 MIME 类型(例如“image/jpeg”),`%v` 表示单个字符的图像有效性(例如“f”),`%V` 表示有效性字符串(例如“full”),`%U` 表示用户 ID 的 base32 编码哈希,`"%%"` 表示实际的百分号。如果既没有 `%i` 也没有 `%I`,则照片将通过标准输入提供给查看器。
在 Unix 上,默认查看器为 `xloadimage -fork -quiet -title 'KeyID 0x%k' STDIN`,备用方案为 `display -title 'KeyID 0x%k' %i`,最后是 `xdg-open %i`。在 Windows 上,使用 `!ShellExecute 400 %i`;这里,该命令是一个元命令,用于使用该 API 调用,后跟一个等待时间(以毫秒为单位),该时间用于在 gpg 删除临时图像文件之前,为查看器提供时间来读取它。请注意,如果您的图像查看器程序不安全,则从 gpg 运行它也不会使其安全。
--exec-path string
设置用于搜索照片查看器的目录列表。如果未提供,照片查看器将使用 PATH 环境变量。
--keyring file
将文件添加到当前密钥环列表中。如果文件以波浪线和斜杠开头,则将其替换为 $HOME 目录。如果文件名不包含斜杠,则假定它位于 GnuPG 主目录中(“~/.gnupg”,除非使用 --homedir 或 $GNUPGHOME)。
请注意,这会将密钥环添加到当前列表中。如果目的是仅使用指定的密钥环,请使用 --keyring 选项,并同时使用 --no-default-keyring。
如果已使用 --no-keyring 选项,则将不使用任何密钥环。
请注意,如果 ‘common.conf’ 中启用了 use-keyboxd 选项,则将不使用任何密钥环,并且所有密钥都由 keyboxd 进程在其自己的数据库中维护。
--primary-keyring file
这是 --keyring 的变体,它将文件指定为主要公共密钥环。这意味着通过 --import 或 keyserver --recv-from 导入的新密钥将进入此密钥环。
--secret-keyring file
这是一个已弃用的选项,将被忽略。所有私钥都存储在 GnuPG 主目录下的 ‘private-keys-v1.d’ 目录中。
--trustdb-name file
使用文件而不是默认的 trustdb。如果文件以波浪线和斜杠开头,则将其替换为 $HOME 目录。如果文件名不包含斜杠,则假定它位于 GnuPG 主目录中(如果未使用 --homedir 或 $GNUPGHOME,则为 ‘~/.gnupg’)。
--homedir dir
将主目录的名称设置为 dir。如果未使用此选项,则主目录默认为 ‘~/.gnupg’。它仅在命令行中给出时才会被识别。它还覆盖了通过环境变量 ‘GNUPGHOME’ 或(在 Windows 系统上)通过注册表项 HKCU\Software\GNU\GnuPG:HomeDir 指定的任何主目录。
在 Windows 系统上,可以以可移植应用程序的形式安装 GnuPG。在这种情况下,仅考虑此命令行选项,所有其他设置主目录的方法都将被忽略。
--display-charset name
设置本机字符集的名称。它用于将一些信息字符串(如用户 ID)转换为适当的 UTF-8 编码。请注意,这与要加密或签名的数据的字符集无关;GnuPG 不会对用户提供的数据进行重新编码。如果未使用此选项,则默认字符集将从当前区域设置中确定。详细程度为 3 时,将显示所选的字符集。不应在 Windows 上使用此选项。name 的有效值包括:
iso-8859-1
这是 Latin 1 字符集。
iso-8859-2
Latin 2 字符集。
iso-8859-15
当前,这是一个 Latin 1 字符集的别名。
koi8-r 常见的俄语字符集(RFC-1489)。
utf-8 绕过所有转换,并假设操作系统使用本地 UTF-8 编码。
--utf8-strings
--no-utf8-strings
假设命令行参数是 UTF-8 字符串。 默认值(--no-utf8-strings)是假设参数以 --display-charset 指定的字符集进行编码。 这些选项会影响所有后续的参数。 两个选项都可以多次使用。 此选项不应在选项文件中使用。
此选项对 Windows 没有影响。 在 Windows 上,内部使用的 UTF-8 编码会被转换为控制台输入和输出。 命令行参数应为 Unicode 格式,并转换为 UTF-8。 因此,如果从另一个程序调用此程序,请确保使用 Unicode 版本的 CreateProcess。
--options file
从文件中读取选项,并且不尝试从 homedir(请参阅 --homedir)中的默认选项文件中读取。 如果在选项文件中使用,则此选项将被忽略。
--no-options
--options /dev/null 的快捷方式。 此选项在尝试打开选项文件之前被检测到。 使用此选项还会阻止创建“~/.gnupg”homedir。
-z n
--compress-level n
--bzip2-compress-level n
--no-compress
将 ZIP 和 ZLIB 压缩算法的压缩级别设置为 n。 默认情况下,使用 zlib 的默认压缩级别(通常为 6)。 --bzip2-compress-level 设置 BZIP2 压缩算法的压缩级别(默认也为 6)。 这是一个与 --compress-level 不同的选项,因为 BZIP2 为每个额外的压缩级别使用大量的内存。
选项 -z 同时设置这两个值。 n 的值为 0 会禁用压缩。 n 的值为 -1 会强制使用默认级别的压缩。 选项 --no-compress 与 -z0 相同。
除了 --store 命令之外,除非 gpg 检测到输入已经压缩,否则始终使用压缩。 要禁止使用压缩,请使用 -z0 或 --no-compress;要强制使用压缩,请使用 -z-1 或使用 -1 作为其他压缩级别的选项 z,如前所述。 请注意,这种覆盖默认检测仅适用于 z,而不适用于此选项的较长形式。
--bzip2-decompress-lowmem
对 BZIP2 压缩的文件使用不同的解压缩方法。 这种替代方法使用略多于一半的内存,但速度也降低一半。 在极端内存受限的情况下,如果文件最初是在较高的 --bzip2-compress-level 下压缩的,则此方法很有用。
--mangle-dos-filenames
--no-mangle-dos-filenames
较旧版本的 Windows 无法处理文件名中包含多个句点的情况。 --mangle-dos-filenames 使 GnuPG 替换(而不是添加到)输出文件名的扩展名,以避免此问题。 默认情况下,此选项处于关闭状态,并且对非 Windows 平台没有影响。
--ask-cert-level
--no-ask-cert-level
在创建密钥签名时,提示输入认证级别。如果未指定此选项,则使用的认证级别将通过 --default-cert-level 设置。有关特定级别及其使用方式的信息,请参阅 --default-cert-level。
--no-ask-cert-level 禁用此选项。此选项默认为不启用。
--default-cert-level n
签名密钥时,用于检查级别的默认值。
0 表示您对验证密钥的程度不做任何声明。
1 表示您认为该密钥由声称拥有该密钥的人拥有,但您无法或未验证该密钥。这对于“人物”验证很有用,您可以在其中签名匿名用户的密钥。
2 表示您对该密钥进行了休闲验证。例如,这可能意味着您已验证了密钥指纹,并将密钥上的用户 ID 与照片 ID 进行比较。
3 表示您对该密钥进行了广泛的验证。例如,这可能意味着您已与密钥所有者亲自验证了密钥指纹,并且您已通过难以伪造的包含照片 ID 的文档(例如护照)验证,以确认密钥所有者的姓名与密钥上的用户 ID 上的姓名匹配,最后,您已通过电子邮件交换验证了密钥上的电子邮件地址是否属于密钥所有者。
请注意,上面给出的 2 级和 3 级的示例只是示例。最终,由您决定“休闲”和“广泛”对您的含义。
此选项默认为 0(不进行任何声明)。
--min-cert-level
在构建信任数据库时,将任何签名级别低于此的签名视为无效。默认为 2,这将忽略 1 级签名。请注意,0 级“不进行任何声明”签名始终被接受。
--trusted-key long 密钥 ID 或指纹
假设指定的密钥(应以指纹形式提供)与您自己的私钥一样值得信赖。如果指定的密钥本地不可用但配置了 LDAP 密钥服务器,则会从该服务器导入缺失的密钥。如果给定的键是“none”,则明确允许,以区分使用任何 trusted-key 选项与不使用此选项(例如,由于 --no-options 选项)。
--add-desig-revoker [sensitive:]指纹
将指定的指纹作为指定的撤销者添加到新创建的密钥中。如果指纹以关键字 ``sensitive:'' 为前缀,则该信息通常不会与密钥一起导出。可以多次使用此选项以添加多个指定的撤销者。如果使用关键字 ``clear'' 而不是指纹,则会删除所有先前给定的指纹。指定的撤销者会在密钥上标记为不可撤销。请注意,在参数文件中指定的指定撤销者也将添加到密钥中。
--default-new-key-adsk 指纹
将指定的指纹作为附加解密子密钥 (ADSK) 添加到新创建的密钥中。可以多次使用此选项以添加多个 ADSK。也可以将多个指纹以空格或逗号分隔作为该选项的值。如果使用关键字“clear”代替指纹,则会丢弃所有先前指定的指纹(这对于覆盖配置文件中的选项很有用)。指纹应指定一个子密钥,并且不需要以感叹号作为后缀;它必须以紧凑格式给出(40 或 64 个十六进制数字,不带任何空格)。
--trust-model {pgp|classic|tofu|tofu+pgp|direct|always|auto}
设置 GnuPG 应该遵循的信任模型。模型如下:
pgp 这是 Web of Trust 与信任签名相结合,如 PGP 5.x 及更高版本中使用。这是创建新的信任数据库时的默认信任模型。
classic
这是 PGP 2 中引入的标准 Web of Trust。
tofu
TOFU 代表“首次使用时信任”。在这种实验性的信任模型中,第一次看到密钥时,会对其进行记忆。如果稍后看到另一个具有相同电子邮件地址的用户 ID 的密钥,则这两个密钥都会被标记为可疑。在这种情况下,下次使用其中任何一个密钥时,会显示一个警告,说明冲突,以及可能发生的原因(用户生成了新密钥但未能交叉签名旧密钥和新密钥,密钥是伪造的,或者正在进行中间人攻击),并提示用户手动确认所询问密钥的有效性。
由于潜在的攻击者可以控制电子邮件地址,从而通过使用与受信任电子邮件地址外观相似的电子邮件地址来规避冲突检测算法,因此在验证消息时,会显示有关使用该密钥签名消息数量的统计信息。这样,用户可以轻松识别使用伪造密钥进行常规通信的攻击。
与 Web of Trust 相比,TOFU 提供的安全保证明显较弱。特别是,TOFU 仅有助于确保一致性(即,密钥和电子邮件地址之间的绑定不会更改)。TOFU 的主要优点是,它只需要很少的维护即可正确使用。要正确使用 Web of Trust,您需要主动签名密钥并标记用户为受信任的介绍者。这是一个耗时的过程,并且有经验证据表明,即使是注重安全的的用户也很少花时间彻底执行此操作,而是依赖于临时的 TOFU 过程。
在 TOFU 模型中,策略与密钥和电子邮件地址之间的绑定相关联(这些地址是从用户 ID 中提取并规范化的)。 有五种策略,可以使用 --tofu-policy 选项手动设置。 默认策略可以使用 --tofu-default-policy 选项设置。
TOFU 策略为:auto、good、unknown、bad 和 ask。 auto 策略默认使用(除非被 --tofu-default-policy 覆盖),并将绑定标记为略微可信。 good、unknown 和 bad 策略将绑定标记为完全可信、具有未知信任度或完全不可信。 unknown 策略对于仅使用 TOFU 检测冲突很有用,但绝不为绑定分配积极的信任值。 最后的策略 ask 会提示用户指示绑定的信任度。 如果启用了批处理模式(或输入在上下文中不合适),则不会提示用户,并返回未定义的信任级别。
^ ofu+pgp
此实验性信任模型将 TOFU 与 Web of Trust 结合使用。 这通过为每个模型计算信任级别,然后采用最大信任级别来完成,其中信任级别按以下顺序排列:unknown < undefined < marginal < fully < ultimate < expired < never。
通过设置 --tofu-default-policy=unknown,可以使用此模型来实现 Web of Trust 和 TOFU 的冲突检测算法,而无需其分配积极信任值,一些注重安全的用戶可能不喜欢这种做法。
^ irect 密钥有效性由用户直接设置,而不是通过 Web of Trust 进行计算。
此模型完全基于密钥,不区分用户 ID。 请注意,当更改为其他信任模型时,分配给密钥的信任值将被转换为 owner trust 值,这也表示您信任密钥所有者签署其他密钥的程度。
^ lways 跳过密钥验证,并假定使用的密钥始终完全有效。 除非您使用某种外部验证方案,否则通常不会使用此选项。 此选项还会抑制在签名检查中打印的“[不确定]”标签,因为在没有证据表明用户 ID 与密钥绑定时,会显示此标签。 请注意,此信任模型仍然不允许使用已过期、已撤销或已禁用的密钥。
^ uto 根据内部信任数据库的内容选择信任模型。
如果已存在此类数据库,则此为默认模型。 请注意,TOFU 信任模型不在此处考虑,必须显式启用。
^ -always-trust
与 --trust-model always 相同。
^ -assert-signer fpr_or_file
此选项检查文件中是否至少有一个有效的签名是由指定的密钥签署的。 密钥要么以指纹的形式指定,要么以列出指纹的文件形式指定。 指纹必须以紧凑格式提供(中间没有冒号或空格)。 可以多次提供此选项,并且每个指纹都将与签名密钥以及相应的 первичный 密钥进行检查。 如果 fpr_or_file 指定一个文件,则将忽略空行以及所有以井号开头的行。 使用此选项,可以保证 gpg 在遇到签名、签名有效且密钥与此选项提供的指纹之一匹配时,返回 0 的退出代码。
--assert-pubkey-algo algolist
在数据签名验证期间,此选项检查所使用的公钥算法是否与 algolist 中给出的算法匹配。此选项可以多次给出,以将更多算法连接到列表中;列表的分隔符可以是逗号或空格。
列表中给出的算法名称可以是字面名称,如“ed25519”,带有一个可选的前导等号,也可以是带有一个前缀“>”、“>=”、“<="或“<”。该前缀运算符应用于算法名称的数字部分;例如,在“rsa2048”或“brainpoolP384r1”中,数字是 2048 或 384。如果名称中的前导非数字字符匹配,则使用前缀运算符来比较数字部分,在这种情况下会忽略尾随后缀。例如,算法列表“>rsa3000, >=brainpool384r1, =ed25519”允许使用超过 3000 位的 RSA 签名、Brainpool 曲线 384 和 512,以及 ed25519 算法。
使用此选项,gpg(以及 gpgv)保证仅当数据上的所有有效签名都使用与给定列表中的匹配算法时,才会返回 0 的退出代码。
--auto-key-locate mechanisms
--no-auto-key-locate
GnuPG 可以使用此选项自动定位和检索所需的密钥。当加密到电子邮件地址(以“\_”形式)且本地密钥环上没有“\_”密钥时,会发生这种情况。此选项接受任意数量的以下机制,按照它们应该尝试的顺序排列。与其将机制作为逗号分隔的参数列出,不如多次给出该选项以添加更多机制。该选项 --no-auto-key-locate 或机制“clear”会重置列表。默认值为“local,wkd”。
cert 使用 DNS CERT 定位密钥,如 RFC-4398 中所述。
dane 使用 DANE 定位密钥,如 draft-ietf-dane-openpgpkey-05.txt 中所述。
wkd 使用 Web Key Directory 协议定位密钥。
ldap 使用配置的 LDAP 服务器定位密钥。此方法类似于 keyserver 机制,但始终仅使用 LDAP 服务器。
ntds 使用 Active Directory(仅限 Windows)定位密钥。此方法还允许使用 --locate-external-key 命令按指纹进行搜索。请注意,此机制实际上是使用“ldap:///" 作为 keyserver 的“ldap”机制的快捷方式。
keyserver
使用密钥服务器查找密钥。此方法还允许通过使用 `--locate-external-key` 命令按指纹进行搜索,如果任何配置的密钥服务器是 LDAP 服务器。
keyserver-URL
此外,也可以使用 dirmngr 配置中使用的密钥服务器 URL 来查询特定的密钥服务器。此方法也允许使用 `--locate-external-key` 命令按指纹进行搜索,如果 URL 指定的是 LDAP 服务器。
local
使用本地密钥环查找密钥。此机制允许用户选择本地密钥查找的顺序。因此,使用 `--auto-key-locate local` 与 `--no-auto-key-locate` 相同。
nodefault
此标志禁用在尝试任何由 `--auto-key-locate` 定义的机制之前进行的标准本地密钥查找。此机制在列表中的位置无关紧要。如果也使用 `local`,则不需要它。
clear
清除所有定义的机制。这对于覆盖配置文件中给出的机制很有用。请注意,如果未在之后给出,则机制中的 `nodefault` 也会被清除。
--auto-key-import
--no-auto-key-import
这是一种离线机制,用于获取用于签名验证以及以后对该密钥进行加密的密钥。如果启用此选项,并且签名包含嵌入式密钥,则使用该密钥来验证签名,并在验证成功后导入该密钥。默认值为 `--no-auto-key-import`。
在发送方(签名)端,需要使用 `--include-key-block` 选项将签名密钥的公共部分作为“密钥块子包”放入签名中。
--auto-key-retrieve
--no-auto-key-retrieve
这些选项启用或禁用在验证由本地密钥环中没有的密钥生成的签名时,从密钥服务器自动检索密钥。默认值为 `--no-auto-key-retrieve`。
尝试查找密钥的方法顺序如下:
如果设置了 `--auto-key-import` 选项,并且签名包含嵌入式密钥,则使用该密钥来验证签名,并在验证成功后导入该密钥。
如果在签名中指定了首选密钥服务器,并且激活了 `honor-keyserver-url` 选项(默认情况下未激活),则尝试该密钥服务器。请注意,签名创建者使用 `--sig-keyserver-url` 选项来指定数据签名的首选密钥服务器。
如果签名具有设置的签名者 UID(例如,使用 `--sender` 创建签名),则执行 Web 密钥目录 (WKD) 查找。这是默认配置,可以通过从 `auto-key-locate` 列表中删除 WKD 或使用 `--disable-signer-uid` 选项来禁用。
如果任何密钥服务器都已配置,并且签名中包含发行者指纹(自 GnuPG 2.1.16 以来),则尝试配置的密钥服务器。
请注意,此选项会使“网络漏洞”行为成为可能。密钥服务器或 Web 密钥目录操作员可以看到您请求的密钥,因此,通过向您发送一个由新密钥签名的消息(您自然不会将其保存在本地密钥环中),操作员可以知道您的 IP 地址和验证签名的时间。
--keyid-format {none|short|0xshort|long|0xlong}
选择如何显示密钥 ID。“none”完全不显示密钥 ID,而将指纹显示在单独的一行。“short”是传统的 8 字符密钥 ID。“long”是更精确(但不太方便)的 16 字符密钥 ID。在两者前面添加“0x”,可以在密钥 ID 的开头包含一个“0x”,如 0x99242560。请注意,如果使用了 --with-colons 选项,则会忽略此选项。
--keyserver name
此选项已弃用——请改用‘dirmngr.conf’中的 --keyserver。
将 name 作为您的密钥服务器。这是 --receive-keys、--send-keys 和 --search-keys 将与之通信以接收密钥、发送密钥和搜索密钥的服务器。名称的格式为 URI:scheme:[//]keyservername[:port]。scheme 是密钥服务器的类型:“hkp”/“hkps”用于 HTTP(或兼容)密钥服务器,或“ldap”/“ldaps”用于 LDAP 密钥服务器。请注意,您的特定 GnuPG 安装可能还提供其他密钥服务器类型。密钥服务器方案不区分大小写。
大多数密钥服务器会相互同步,因此通常不需要将密钥发送到多个服务器。密钥服务器 hkp://keys.gnupg.net 使用轮询 DNS,以便每次使用时提供不同的密钥服务器。
--keyserver-options {name=value}
这是一个空格或逗号分隔的字符串,用于提供密钥服务器的选项。选项可以以 no- 为前缀,以提供相反的含义。可以使用有效的 import-options 或 export-options 作为导入 (--recv-key) 或导出 (--send-key) 密钥。虽然并非所有选项都适用于所有密钥服务器类型,但一些常见选项包括:
include-revoked
在通过 --search-keys 搜索密钥时,包括在密钥服务器上标记为已撤销的密钥。请注意,并非所有密钥服务器都区分已撤销和未撤销的密钥,对于此类密钥服务器,此选项没有意义。另请注意,大多数密钥服务器不具有密钥撤销的加密验证,因此关闭此选项可能会导致跳过错误地标记为已撤销的密钥。
include-disabled
在通过 --search-keys 搜索密钥时,包括在密钥服务器上标记为已禁用的密钥。请注意,此选项不用于 HKP 密钥服务器。
auto-key-retrieve
这是一个 auto-key-retrieve 选项的过时别名。请勿使用它;它将在未来的版本中删除。
honor-keyserver-url
在使用 --refresh-keys 时,如果相关密钥具有首选密钥服务器 URL,则使用该首选密钥服务器来刷新密钥。此外,如果设置了 autokey-retrieve,并且正在验证的签名具有首选密钥服务器 URL,则使用该首选密钥服务器来获取密钥。请注意,此选项会引入“网络漏洞”:密钥的创建者可以看到密钥何时被刷新。因此,此选项默认情况下未启用。
include-subkeys
接收密钥时,将子密钥作为潜在目标。请注意,此选项不适用于 HKP 密钥服务器,因为它们不支持按子密钥 ID 检索密钥。
only-pubkeys
不允许导入私钥。
timeout
http-proxy=value
verbose
debug
check-cert
ca-cert-file
这些选项自 GnuPG 2.1 起不再具有功能。请使用 dirmngr 配置选项。
默认选项列表为:“self-sigs-only, repair-keys, repair-pks-subkey-bug, export-attributes”。 但是,如果实际使用的源是 LDAP 服务器,则假定为“no-self-sigs-only”,除非已显式配置了“self-sigs-only”。
--completes-needed n
引入新密钥签名者所需的完全信任用户的数量(默认为 1)。
--marginals-needed n
引入新密钥签名者所需的边缘信任用户的数量(默认为 3)。
--tofu-default-policy {auto|good|unknown|bad|ask}
默认 TOFU 策略(默认为 auto)。 有关此选项含义的更多信息,请参见:[trust-model-tofu]。
--max-cert-depth n
证书链的最大深度(默认为 5)。
--no-sig-cache
不缓存密钥签名的验证状态。 缓存可以大大提高密钥列表的性能。 但是,如果您怀疑您的公钥环未受到写入修改的保护,则可以使用此选项来禁用缓存。 这样做可能没有意义,因为如果其他人可以写入您的公钥环,则可能会发生各种损害。
--auto-check-trustdb
--no-auto-check-trustdb
如果 GnuPG 认为需要更新其关于 Web of Trust 的信息,则它会自动在内部运行 --check-trustdb 命令。 这可能是一个耗时的过程。 --no-auto-check-trustdb 禁用此选项。
--use-agent
--no-use-agent
这是一个虚拟选项。 gpg 始终需要代理。
--gpg-agent-info
这是一个虚拟选项。 当与 gpg 一起使用时,它不起作用。
--agent-program file
指定要用于私钥操作的代理程序。 默认值是通过使用带有 --list-dirs 选项运行 gpgconf 来确定的。 请注意,管道符号 (|) 用于回归测试套件的 hack,因此可能不能在文件名中使用。
--dirmngr-program file
指定要用于访问密钥服务器的 dirmngr 程序。 默认值为“/usr/bin/dirmngr”。
--disable-dirmngr
完全禁用 dirmngr 的使用。
--no-autostart
如果尚未启动并且需要其服务,则不要启动 gpg 代理或 dirmngr。 此选项主要用于连接到 gpg 代理已重定向到另一台机器的机器。 如果需要在远程机器上启动 dirmngr,则可以使用 gpgconf --launch dirmngr 手动启动它。
--lock-once
在首次请求锁时锁定数据库,并且在进程终止之前不释放锁。
--lock-multiple
每次不再需要锁时释放锁。使用此选项可覆盖来自配置文件中的先前 `--lock-once` 设置。
--lock-never
完全禁用锁定。此选项应仅在非常特殊的环境中使用,在这种环境中,可以保证只有一个进程正在访问这些文件。一个可引导的软盘,其中包含独立的加密系统,可能会使用此选项。如果使用不当,此选项可能会导致数据和密钥损坏。
--exit-on-status-write-error
此选项将导致对状态文件描述符(FD)的写入错误立即终止进程。实际上,这应该是默认行为,但它从未以这种方式工作,因此我们需要一个选项来启用它,这样就不会破坏过早关闭与其连接的管道末端的应用程序。将此选项与 `--enable-progress-filter` 一起使用,可用于干净地取消长时间运行的 GPG 操作。
--limit-card-insert-tries n
当 n 大于 0 时,提示插入智能卡的次数将限制为 N-1 次。因此,如果值为 1,GPG 将不会提示插入智能卡,如果启动时未插入智能卡。此选项在配置文件中很有用,以防应用程序不知道智能卡支持,并且会无限期地等待插入智能卡。
--no-random-seed-file
GnuPG 使用一个文件来存储其跨多次调用的内部随机数池。这使得随机数生成更快;但是,有时不需要写入操作。可以使用此选项来实现这一点,但代价是随机数生成速度较慢。
--no-greeting
禁止显示初始版权消息。
--no-secmem-warning
禁止显示关于“使用不安全的内存”的警告。
--no-permission-warning
禁止显示关于不安全的 文件和主目录(--homedir)权限的警告。请注意,GnuPG 执行的权限检查并非旨在提供最终的保证,而是简单地警告某些常见的权限问题。不要假设缺乏警告意味着您的系统是安全的。
请注意,在 gpg.conf 文件中无法禁止关于不安全的 --homedir 权限的警告,因为这将允许攻击者放置一个不安全的 gpg.conf 文件,并使用该文件来禁止关于自身的警告。 --homedir 权限警告只能在命令行中禁止。
--require-secmem
--no-require-secmem
如果 GnuPG 无法获取安全内存,则拒绝运行。默认值为“否”(即,运行,但发出警告)。
--require-cross-certification
--no-require-cross-certification
在验证由子密钥生成的签名时,确保子密钥上的交叉认证“反向签名”存在且有效。这可以防止针对子密钥的微妙攻击,这些子密钥可以进行签名。默认情况下,对于 gpg 来说是 `--require-cross-certification`。
--expert
--no-expert
允许用户执行某些无意义或“荒谬”的操作,例如签名已过期或撤销的密钥,或者执行某些可能不兼容的操作,例如生成不寻常的密钥类型。
这还会禁用某些关于潜在不兼容操作的警告消息。 正如其名称所示,此选项仅供专家使用。 如果您不完全了解它允许您做什么,请不要启用此选项。 --no-expert 会禁用此选项。
密钥相关选项
--recipient name
-r Encrypt for user id name. 如果未指定此选项或 `--hidden-recipient`,则 GnuPG 会提示输入用户 ID,除非提供了 `--default-recipient`。
--hidden-recipient name
-R 加密到用户 ID 名称,但隐藏该用户密钥的密钥 ID。此选项有助于隐藏消息的接收者,并且是对抗流量分析的一种有限的对策。 如果未指定此选项或 `--recipient`,则 GnuPG 会提示输入用户 ID,除非提供了 `--default-recipient`。
--recipient-file file
-f 此选项类似于 `--recipient`,不同之处在于它加密到给定文件中存储的密钥。 file 必须是包含一个密钥的文件名。 gpg 假定文件中的密钥是完全有效的。
--hidden-recipient-file file
-F 此选项类似于 `--hidden-recipient`,不同之处在于它加密到给定文件中存储的密钥。 file 必须是包含一个密钥的文件名。 gpg 假定文件中的密钥是完全有效的。
--encrypt-to name
与 --recipient 相同,但此选项用于选项文件,并且可以与您自己的用户 ID 一起用作“加密到自己”。 建议为 name 使用指纹或至少使用较长的密钥 ID。 这些密钥仅在通过使用 --recipient 或通过请求的用户 ID 提供其他接收者时使用。 不会对这些用户 ID 进行信任检查,即使禁用的密钥也可以使用。
--hidden-encrypt-to name
与 --hidden-recipient 相同,但此选项用于选项文件,并且可以与您自己的用户 ID 一起用作隐藏的“加密到自己”。 建议为 name 使用指纹或至少使用较长的密钥 ID。 这些密钥仅在通过使用 --recipient 或通过请求的用户 ID 提供其他接收者时使用。 不会对这些用户 ID 进行信任检查,即使禁用的密钥也可以使用。
--no-encrypt-to
禁用所有 --encrypt-to 和 --hidden-encrypt-to 密钥的使用。
--group {name=value}
设置一个命名组,类似于电子邮件程序中的别名。 每次组名是接收者 (-r 或 --recipient) 时,它都会扩展为指定的值。 具有相同名称的多个组会自动合并到一个组中。
这些值是密钥 ID 或指纹,但任何密钥描述都可以接受。请注意,包含空格的值将被视为两个不同的值。另外请注意,只能进行一级扩展——您不能创建一个指向另一个组的组。在从命令行使用时,可能需要用引号引起来此选项的参数,以防止 shell 将其视为多个参数。
^ -ungroup name
从 --group 列表中删除给定的条目。
^ -no-groups
从 --group 列表中删除所有条目。
^ -local-user name
^ u 使用 name 作为用于签名的密钥。请注意,此选项会覆盖 --default-key。
^ -sender mbox
此选项有两个目的。mbox 必须是一个完整的用户 ID,包含一个有效的邮件地址,或者只是一个纯邮件地址。此选项可以多次使用。
在创建签名时,此选项会告知 GPG 签名密钥的用户 ID,用于创建签名,并将该用户 ID 嵌入到创建的签名中(使用 OpenPGP 的“签名者用户 ID”子包)。如果多次提供此选项,则会选择一个合适的用户 ID。但是,如果通过使用邮件地址直接指定了签名密钥(即,没有使用指纹或密钥 ID),则会使用此选项,并将邮件地址嵌入到创建的签名中。
在验证签名时,mbox 用于限制 TOFU 代码打印的信息,使其与匹配的用户 ID 对应。如果使用此选项并且签名包含“签名者用户 ID”子包,则该信息也将用于限制打印的信息。请注意,GnuPG 仅考虑用户 ID 的邮件地址部分。
如果此选项或所述子包可用,则通过 --status-fd 选项打印的 TRUST 行将对应于相应的用户 ID;如果不知道任何用户 ID,则 TRUST 行将直接在密钥上计算,并且不提供关于用户 ID 的任何信息。在后一种情况下,强烈建议脚本和其他前端评估 VALIDSIG 行,检索密钥,并打印所有用户 ID 及其有效性(信任)信息。
^ -try-secret-key name
对于隐藏的收件人,GPG 需要知道用于试解密的密钥。使用 --default-key 设置的密钥始终首先尝试,但这通常是不够的。此选项允许设置更多用于试解密的密钥。虽然可以使用任何有效的用户 ID 规范来指定 name,但最好至少使用长密钥 ID 以避免歧义。请注意,gpg-agent 可能会为大量密钥弹出 pinentry 以进行试解密。如果想要停止所有进一步的试解密,可以使用“关闭窗口”按钮而不是“取消”按钮。
^ -try-all-secrets
不要查看消息中存储的密钥 ID,而是依次尝试所有私钥以找到正确的解密密钥。此选项强制执行匿名收件人(通过使用 --throw-keyids 或 --hidden-recipient 创建)使用的行为,并且在加密消息包含错误的密钥 ID 时可能会派上用场。
--skip-hidden-recipients
--no-skip-hidden-recipients
在解密期间,跳过所有匿名收件人。当人们使用隐藏收件人功能来隐藏他们自己的加密密钥时,此选项很有用。如果拥有许多密钥,这可能会导致严重的不便,因为所有密钥都会被依次尝试解密,而这可能不是预期的行为。此选项的缺点是,目前无法解密包含真实匿名收件人的消息。
输入和输出
--armor
-a 创建 ASCII 格式的输出。默认情况下,会创建二进制 OpenPGP 格式。
--no-armor
假设输入数据不是 ASCII 格式。
--output file
-o file
将输出写入文件。要写入标准输出,请使用 - 作为文件名。
--max-output n
此选项设置处理文件时生成的最大字节数限制。由于 OpenPGP 支持各种级别的压缩,因此给定消息的明文可能比原始 OpenPGP 消息大得多。虽然 GnuPG 可以正确处理此类消息,但通常希望设置在操作系统限制强制停止处理之前,将生成的最大文件大小。默认为 0,表示“无限制”。
--chunk-size n
AEAD 加密模式以块的形式加密数据,以便接收方可以在每个块的末尾检查传输错误或篡改,而无需等到所有数据都接收完毕。使用的块大小为 2^n 字节。n 的最小允许值为 6(64 字节),最大值为默认值 22,这会创建不超过 4 MiB 的块。
--input-size-hint n
可以使用此选项告诉 GPG 输入数据的字节大小。n 必须是正的十进制数。如果输入不是来自文件,则此选项才有用。GPG 可以使用此提示来优化其缓冲区分配策略。它也由 --status-fd 行中的 PROGRESS 使用,以提供一个 total 值(如果无法通过其他方式获得)。
--key-origin string[,url]
GPG 可以跟踪密钥的来源。某些来源是明确已知的(例如,密钥服务器、Web 密钥目录),并已设置。对于标准导入,可以使用此选项设置导入的密钥的来源。要列出可能的选项,请使用“help”命令。某些来源可以存储一个可选的 URL 参数。该 URL 可以附加到字符串后,用逗号分隔。
--import-options parameters
这是一个空格或逗号分隔的字符串,它提供了导入密钥的选项。选项可以用 no- 前缀来提供相反的含义。选项包括:
import-local-sigs
允许导入标记为“本地”的密钥签名。除非正在使用共享密钥环方案,否则这通常没有用。默认值为否。
keep-ownertrust
通常,在导入密钥时,仍然存在的 ownertrust 值会被清除。从广义上讲,这是可取的,这样可以防止已删除的密钥仅仅因为导入而自动获得 ownertrust 值。另一方面,有时有必要重新导入一组受信任的密钥,同时保留已分配的 ownertrust 值。可以通过使用此选项来实现。
repair-pks-subkey-bug
在导入期间,尝试修复 PKS 密钥服务器(版本低于 0.9.6)引入的错误,该错误会破坏具有多个子密钥的密钥。请注意,这无法完全修复受损的密钥,因为密钥服务器会删除一些关键数据,但它至少可以让你恢复一个子密钥。默认情况下,对于常规 --import 命令,此选项为否;对于密钥服务器 --receive-keys 命令,此选项为是。
import-show
show-only
在将密钥存储之前,显示导入的密钥列表。这可以与 --dry-run 选项结合使用,仅查看密钥;show-only 选项是此组合的快捷方式。--show-keys 命令是另一个快捷方式。请注意,诸如“sec”和“sbb”行的后缀(例如“#”)可能不会被打印。
import-export
运行整个导入代码,但不是将密钥存储到本地密钥环中,而是将其写入输出。export-dane 选项会影响输出。此选项可以用于删除密钥中的所有无效部分,而无需将其存储。
merge-only
在导入期间,允许更新现有密钥,但不允许导入任何新密钥。默认值为否。
import-clean
导入后,压缩(删除除自签名之外的所有签名)任何不可用的用户 ID。然后,删除新密钥中所有不可用的签名。这包括由密钥环中不存在的密钥发出的签名。此选项与在导入后运行 --edit-key 命令的“clean”选项相同。默认值为否。
self-sigs-only
在导入密钥时,仅接受自签名。所有其他密钥签名都会在导入的早期阶段被跳过。此选项可以与密钥服务器选项结合使用,以减轻密钥服务器中大量无效签名。缺点是,Web of Trust 所需的所有其他有效密钥签名也不会被导入。请注意,当将此选项与 import-clean 结合使用时,它会抑制在将导入的密钥合并到现有密钥之后进行的最终清理步骤。
ignore-attributes
在导入密钥时,忽略所有属性用户 ID(照片 ID)及其签名。
repair-keys
导入后,修复密钥中的各种问题。例如,这会重新排序签名,并删除重复的签名。默认值为是。
bulk-import
如果使用了 keyboxd(在 ‘common.conf’ 中使用 use-keyboxd 选项),则导入将在单个事务中完成。
import-minimal
导入尽可能小的密钥。这将删除所有签名,但保留每个用户 ID 上的最新自签名。此选项与运行 --edit-key 命令 “minimize” 后进行导入的效果相同。默认值为 no。
restore
import-restore
以密钥恢复模式导入。这将导入所有通常在导入期间跳过的数据;包括所有 GnuPG 特定数据。所有其他冲突的选项将被覆盖。
--import-filter {name=expr}
--export-filter {name=expr}
这些选项定义一个导入/导出过滤器,该过滤器在导入/导出密钥块之前应用于它,然后将其存储/写入。name 定义要使用的过滤器类型,expr 定义要评估的表达式。该选项可以多次使用,然后将更多表达式附加到同一名称。
可用的过滤器类型是:
keep-uid
如果表达式的结果为 true,则此过滤器将保留用户 ID 数据包及其在密钥块中的相关数据包。
drop-subkey
此过滤器会删除选定的子密钥。目前仅实现用于 --export-filter。
drop-sig
此过滤器会删除选定的用户 ID 上的密钥签名。不包括自签名。目前仅实现用于 --import-filter。
select 此过滤器仅由 `--list-filter` 实现。可以使用所有属性名称。
有关表达式的语法,请参阅 “FILTER EXPRESSIONS” 章节。表达式的属性名称取决于实际的过滤器类型,并在下表中指示。请注意,所有属性名称也可以由 --list-filter 使用。
属性名称可以以一个范围作为前缀,范围之间用斜杠分隔。有效的范围是:pub 用于公共和私有主密钥,sub 用于公共和私有子密钥,uid 用于用户 ID 数据包,以及 sig 用于签名数据包。无效的范围当前将被忽略。
可用的属性是:
uid 包含用户 ID 的字符串。(keep-uid)
mbox 用户 ID 中 addr-spec 部分的邮箱,或者空字符串。(keep-uid)
algostr
包含密钥算法描述的字符串。例如 “rsa3072” 或 “ed25519”。
key_algo
一个数字,表示密钥或子密钥数据包的公共密钥算法。(drop-subkey)
key_size
一个数字,表示密钥或子密钥数据包的有效密钥大小。(drop-subkey)
key_created
key_created_d
第一个是公共密钥或子密钥数据包创建的时间戳。第二个是相同的,但以 ISO 字符串的形式给出,例如 “2016-08-17”。(drop-subkey)
key_expires
key_expires_d
公共密钥或子密钥的到期时间,或者如果没有到期,则为 0。第二个是相同的,但以 ISO 日期字符串的形式给出,或者为空字符串,例如 “2038-01-19”。
fpr 当前子密钥或主密钥的十六进制指纹。(drop-subkey)
primary
布尔值,指示用户 ID 是否为主 ID。(keep-uid)
expired
布尔值,指示用户 ID(keep-uid)、密钥(drop-subkey)或签名(drop-sig)是否已过期。
revoked
布尔值,指示用户 ID(keep-uid)或密钥(drop-subkey)是否已被撤销。
disabled
布尔值,指示主密钥是否已禁用。
secret
布尔值,指示密钥或子密钥是否为私有密钥。(drop-subkey)
usage
一个字符串,指示子密钥的用法标志,来自序列“ecsa?”。 例如,仅能进行签名和身份验证的子密钥将完全匹配“sa”。(drop-subkey)
sig_created
sig_created_d
第一个是签名数据包创建的时间戳。第二个是相同的,但以 ISO 日期字符串的形式提供,例如“2016-08-17”。(drop-sig)
sig_expires
sig_expires_d
签名数据包的过期时间或 0(如果它不过期)。第二个是相同的,但以 ISO 日期字符串的形式提供或为空字符串,例如“2038-01-19”。
sig_algo
签名数据包的公钥算法的编号。(drop-sig)
sig_digest_algo
签名数据包的摘要算法的编号。(drop-sig)
origin
一个字符串,表示密钥的来源,或者一个问号。 例如,如果密钥来自 Web 密钥目录查找,则使用字符串“wkd”。
lastupd
密钥从密钥服务器或 Web 密钥目录上次更新的时间戳。
url
与上次密钥查找相关的 URL 字符串。
--export-options 参数
这是一个空格或逗号分隔的字符串,用于提供密钥导出选项。 选项可以以“no-”为前缀,以提供相反的含义。 选项包括:
export-local-sigs
允许导出标记为“本地”的密钥签名。 除非使用共享密钥环方案,否则通常没有用。 默认值为否。
export-attributes
在导出时包含属性用户 ID(照片 ID)。 不包括属性用户 ID 对于导出要由不支持属性用户 ID 的 OpenPGP 程序使用的密钥很有用。 默认值为是。
export-sensitive-revkeys
包括标记为“敏感”的指定的撤销者信息。 默认值为否。
backup
export-backup
导出以供用作备份。 导出的数据包括所有需要在以后使用 GnuPG 恢复密钥所需的数据。 格式基本上是 OpenPGP 格式,但增强了 GnuPG 特定的数据。 所有其他矛盾的选项将被覆盖。
export-clean
如果用户 ID 不可用,则压缩(删除所有签名)密钥上导出时的用户 ID。 此外,不要导出任何不可用的签名。 这包括由密钥环中不存在的密钥发出的签名。 此选项与在导出之前运行“--edit-key clean”命令相同,只不过本地副本不会被修改。 默认值为否。
export-minimal
导出尽可能小的密钥。这将删除所有签名,除了每个用户 ID 上的最新自签名。此选项与运行 --edit-key 命令“minimize”后再导出相同,但本地密钥副本不会被修改。默认情况下不启用。
export-revocs
仅导出独立的撤销证书。此选项不导出第三方证书撤销的撤销。
export-dane
不输出密钥材料,而是输出 OpenPGP DANE 记录,这些记录适合放入 DNS 区域文件中。在每个记录之前会打印一条 ORIGIN 行,以便将记录重定向到相应的区域文件。
mode1003
启用新的私钥导出格式。此格式避免了当前 OpenPGP 格式所需的重新加密,并提高了私钥的安全性(如果它已使用密码保护)。请注意,未受保护的密钥将按原样导出,因此不安全;通常,将 OpenPGP 加密的文件中的私钥传递的规则仍然适用。GnuPG 2.4.0 之前的版本无法导入此类私钥文件。
--with-colons
以冒号分隔符打印密钥列表。请注意,无论使用什么 --display-charset 设置,输出都将以 UTF-8 编码。此格式在 GnuPG 从脚本和其他程序中调用时很有用,因为它易于机器解析。此格式的详细信息记录在文件“doc/DETAILS”中,该文件包含在 GnuPG 源代码发行版中。
--fixed-list-mode
在 --with-colons 列表模式中,不要合并主用户 ID 和主密钥,并将所有时间戳打印为自 1970-01-01 以来的秒数。从 GnuPG 2.0.10 开始,此模式始终使用,因此此选项已过时;使用它不会造成任何危害。
--legacy-list-mode
恢复到 2.1 之前的公钥列表模式。这只会影响人类可读的输出,而不会影响机器接口(即 --with-colons)。请注意,旧格式不会传递适用于椭圆曲线的适当信息。
--with-fingerprint
与 --fingerprint 命令相同,但仅更改输出的格式,可以与其他命令一起使用。
--with-subkey-fingerprint
如果为主要密钥打印了指纹,则此选项强制打印所有子密钥的指纹。也可以通过使用 --with-fingerprint 命令两次来实现,但通过使用此选项以及 keyid-format "none",可以打印出紧凑的指纹。
--with-v5-fingerprint
在冒号模式列表中,为具有 v5 样式的指纹的版本 4 OpenPGP 密钥,发出“fp2”行。
--with-icao-spelling
除了十六进制数字之外,还打印指纹的 ICAO 拼写。
--with-keygrip
在密钥列表中包含 keygrip。在 --with-colons 模式下,此选项对于私钥是隐式启用的。
--with-key-origin
在密钥列表中包含有关密钥的来源和上次更新的本地信息。在 --with-colons 模式下,始终会打印此信息。此数据目前是实验性的,不应被视为稳定的 API 的一部分。
--with-wkd-hash
在密钥列表中,为每个用户 ID 打印一个 Web Key Directory 标识符。这是一个实验性功能,其语义可能会发生变化。
--with-secret
在通过 --with-colons 选项执行的公钥列表中,包含有关是否存在私钥的信息。
OpenPGP 协议特定的选项
--force-ocb
--force-aead
强制使用 AEAD 加密,而不是 MDC 加密。AEAD 是一种现代且更快的认证加密方法,它比旧的 MDC 方法更好。--force-aead 是一个别名,并且已被弃用。请参阅选项 --chunk-size。
--force-mdc
--disable-mdc
这些选项已过时,并且在 GnuPG 2.2.8 之后没有任何作用。除非密钥指示可以使用 AEAD 算法,否则始终使用 MDC。但是,请注意:如果需要特别创建非 MDC 消息,则可以使用 --rfc2440 选项来实现。
--disable-signer-uid
默认情况下,签名密钥的用户 ID 会嵌入到数据签名中。目前,只有当使用邮件地址或 sender 指定签名密钥时,或者使用 local-user 指定签名密钥时,才会这样做。此信息可以帮助验证者找到密钥;请参阅选项 --auto-key-retrieve。
--include-key-block
--no-include-key-block
此选项用于将实际的签名密钥嵌入到数据签名中。嵌入的密钥将被简化为单个用户 ID,并且仅包含用于创建签名的子密钥以及有效的加密子密钥。所有其他信息都将被从密钥中删除,以使其更小,从而使签名也更小。此选项是 OpenPGP 中 gpgsm 选项 --include-certs 的对应项,它允许签名消息的接收者回复并加密消息发送给发送者,而无需使用任何在线目录来查找密钥。默认值为 --no-include-key-block。请参阅选项 --auto-key-import。
--personal-cipher-preferences string
设置个人密码首选项列表为字符串。使用 gpg --version 获取可用算法的列表,并使用 none 来设置无首选项。这允许用户安全地覆盖由接收方密钥首选项选择的算法,因为 GPG 仅会选择所有接收方都可以使用的算法。此列表中排名最高的密码算法也将用于 --symmetric 加密命令。
--personal-digest-preferences string
设置个人摘要首选项列表为字符串。使用 gpg --version 获取可用算法的列表,并使用 none 来设置无首选项。这允许用户安全地覆盖由接收方密钥首选项选择的算法,因为 GPG 仅会选择所有接收方都可以使用的算法。此列表中排名最高的摘要算法也将用于不带加密的签名(例如 --clear-sign 或 --sign)。
--personal-compress-preferences string
设置个人压缩首选项列表为字符串。使用 gpg --version 获取可用的算法列表,并使用 none 来设置无首选项。这允许用户安全地覆盖收件人的密钥首选项选择的算法,因为 GPG 仅选择所有收件人都可以使用的算法。在此列表中排名最高的压缩算法,当没有需要考虑的收件人密钥时也会使用(例如,--symmetric)。
--s2k-cipher-algo name
如果未提供 --personal-cipher-preferences 和 --cipher-algo,则将 name 用作使用密码进行对称加密的密码算法。默认值为 AES-128。
--s2k-digest-algo name
将 name 用作用于混淆对称加密密码的摘要算法。默认值为 SHA-1。
--s2k-mode n
选择如何混淆对称加密的密码。如果 n 为 0,则使用纯密码(通常不建议这样做),如果 n 为 1,则将盐值(不应使用)添加到密码,如果 n 为 3(默认值),则多次迭代整个过程(参见 --s2k-count)。
--s2k-count n
指定对称加密的密码混淆重复多少次。此值范围为 1024 到 65011712(含)。默认值是从 gpg-agent 查询的。请注意,并非 1024-65011712 范围内的所有值都是合法的,如果选择了一个非法值,GnuPG 将向上舍入到最接近的合法值。只有在 --s2k-mode 设置为默认值 3 时,此选项才有意义。
兼容性选项
这些选项控制 GnuPG 的兼容性。一次只能激活这些选项中的一个。如果提供了多个选项,则最后一个选项将覆盖所有其他选项。请注意,默认设置通常是正确的。在使用这些选项中的任何一个之前,请参阅下面的“与其他 OPENPGP 程序的互操作性”部分。
--gnupg
使用标准的 GnuPG 行为。现在 LibrePGP 行为也是如此,这是一种不同的草案协议,在某些情况下与 OpenPGP 重叠。
--openpgp
将所有数据包、密码和摘要选项设置为与 OpenPGP 兼容(RFC-9580)的行为。请注意,GnuPG 并非完全实现了 RFC-9580。这是默认选项,因此通常不需要它,但它可能用于覆盖 gpg.conf 文件中的其他兼容性选项。
--rfc4880
将所有数据包、密码和摘要选项设置为严格的 RFC-4880 行为。RFC-4880 是 OpenPGP 的旧版本。此选项意味着 --allow-old-cipher-algos。
--rfc4880bis
此选项已过时;它被视为 --gnupg 的别名。
--rfc2440
将所有数据包、密码和摘要选项设置为严格的 RFC-2440 行为。RFC-2440 是 OpenPGP 的一个非常旧的版本。请注意,通过使用此选项,数据包以旧模式创建,而不进行 MDC 保护。这很危险,因此只能用于实验。此选项意味着 --allow-old-cipher-algos。另请参见选项 --ignore-mdc-error。
--pgp6 此选项已过时;它被视为 `--pgp7` 的别名。
--pgp7 设置所有选项以尽可能符合 PGP 7 标准。这允许使用 IDEA、3ES、CAST5、AES128、AES192、AES256 和 TWOFISH 密码,MD5、SHA1 和 RIPEMD160 散列,以及无压缩和 ZIP 压缩算法。此选项隐含 `--escape-from-lines` 选项,并禁用 `--throw-keyids`。
--pgp8 设置所有选项以尽可能符合 PGP 8 标准。PGP 8 比以前版本的 PGP 更接近 OpenPGP 标准,因此这只会禁用 `--throw-keyids` 并设置 `--escape-from-lines`。除了 SHA224、SHA384 和 SHA512 摘要之外,所有算法都允许使用。
--compliance string
此选项可以用来代替上述选项之一。字符串的有效值是上述选项名称(不带双破折号),以及使用 "help" 命令时可能显示的其他值。
--min-rsa-length n
此选项调整 "de-vs" 兼容模式,以实现更严格的密钥大小要求。例如,将值设置为 3000 会将 rsa2048 和 dsa2048 密钥转换为不符合 VS-NfD 标准的密钥。
--require-compliance
为了检查数据是否已根据当前兼容模式的规则进行加密,gpg 用户需要评估状态行。这允许前端以更灵活的方式处理兼容性检查。但是,对于脚本化使用,需要对状态行进行评估,这需要付出很大的努力;可以使用此选项,以便在不满足兼容性规则时,gpg 进程退出并显示错误。请注意,此选项当前仅在 "de-vs" 模式下有效。
进行通常不应该做的事情
-n
--dry-run
不进行任何更改(这尚未完全实现)。
--list-only
更改某些命令的行为。这类似于 `--dry-run`,但在某些情况下有所不同。此选项的语义将来可能会扩展。当前,它仅跳过实际的解密过程,从而可以快速列出加密密钥。
-i
--interactive
在覆盖任何文件之前提示。
--compatibility-flags flags
设置兼容性标志,以解决由于不符合标准的密钥或数据而引起的问题。标志以逗号分隔的标志名称列表形式提供,并且会进行按位或运算。特殊标志 "none" 清除列表,并允许从一个空列表开始。要获取可用标志的列表,可以使用单个单词 "help"。
--debug-level level
选择调试级别以调查问题。级别可以是数字值,也可以是关键字:
none 完全不进行调试。可以使用小于 1 的值来代替此关键字。
basic 一些基本的调试消息。可以使用 1 到 2 之间的值代替关键字。
advanced 更多详细的调试消息。可以使用 3 到 5 之间的值代替关键字。
expert 更多更详细的消息。可以使用 6 到 8 之间的值代替关键字。
guru 可以获取的所有调试消息。可以使用大于 8 的值代替关键字。只有在使用关键字时,才会启用哈希跟踪文件的创建。
这些消息如何映射到实际的调试标志未指定,并且可能会随着此程序的较新版本的更改。但是,它们经过精心挑选,以最好地帮助调试。
--debug flags
设置调试标志。所有标志都使用或运算符,并且可以采用 C 语法(例如 0x0042)或作为逗号分隔的标志名称列表提供。要获取所有支持的标志列表,可以使用单个单词“help”。此选项仅用于调试,并且其行为可能会在任何时候发生变化,恕不另行通知。
--debug-all
设置所有有用的调试标志。
--debug-iolbf
将 stdout 设置为行缓冲模式。此选项仅在从命令行提供时才有效。
--debug-set-iobuf-size n
将 IOBUF 的缓冲区大小更改为 n 千字节。使用 0 会打印当前大小。请注意:这是一个维护人员选项,因此可能会随时更改或删除,恕不另行通知。
--debug-allow-large-chunks
为了便于软件测试和实验,此选项允许指定高达 4 EiB 的限制(--chunk-size 62)。
--debug-ignore-expiration
此选项尝试覆盖某些密钥的过期日期。它仅对某些回归测试有用。
--faked-system-time epoch
此选项仅用于测试;它将系统时间向前或向后设置到 epoch,即自 1970 年以来经过的秒数。或者,可以将 epoch 作为完整的 ISO 时间字符串(例如“20070924T154812”)提供。
如果将感叹号(!),附加到 epoch,则系统时间将似乎固定在指定的时间。
--full-timestrings
更改打印的创建和过期时间的格式,从仅显示日期更改为显示日期和时间。通常这不是很有用,并且相同的信息也以 --with-colons 模式提供。这些较长的字符串也不能与打印的其他数据很好地对齐。
--enable-progress-filter
启用某些 PROGRESS 状态输出。此选项允许前端在 gpg 处理较大的文件时显示进度指示器。使用它会产生轻微的性能开销。
--status-fd n
将特殊的状态字符串写入文件描述符 n。有关其列表,请参阅文档中的 DETAILS 文件。
--status-file file
与 --status-fd 相同,只是状态数据写入文件 file。
--logger-fd n
将日志输出写入文件描述符 n,而不是写入 STDERR。
--log-file file
--logger-file file
与 --logger-fd 相同,只是日志记录器数据写入文件 file。使用“socket://”以记录到套接字。
--log-time
将时间戳添加到所有日志输出中,即使未使用日志文件。
--attribute-fd n
将属性子包写入文件描述符 n。这对于与 --status-fd 一起使用最为有用,因为需要状态消息来分隔从文件描述符传递的各种子包。
--attribute-file file
与 --attribute-fd 相同,只是属性数据写入文件 file。
--comment string
--no-comments
在纯文本签名和 ASCII 编码的消息或密钥中使用字符串作为注释字符串(参见 --armor)。默认行为是不使用注释字符串。可以多次使用 --comment 以获得多个注释字符串。--no-comments 会删除所有注释。 最好将单个注释的长度保持在 60 个字符以下,以避免邮件程序换行。请注意,注释行(与其他所有标题行一样)不受签名的保护。
--emit-version
--no-emit-version
强制在 ASCII 编码的输出中包含版本字符串。如果只指定一次,则仅输出程序名称和主版本号;如果指定两次,则还输出次版本号;如果指定三次,则还添加微版本号;如果指定四次,还会添加操作系统标识。--no-emit-version(默认)会禁用版本行。
--sig-notation {name=value}
--cert-notation {name=value}
-N, --set-notation {name=value}
将名称-值对放入签名中作为注释数据。名称必须仅包含可打印字符或空格,并且必须包含一个“@”字符,格式为 _(当然,替换为适当的密钥名称和域名)。 这是为了帮助防止污染 IETF 保留的注释命名空间。--expert 标志会覆盖“@”检查。值可以是任何可打印的字符串;它将被编码为 UTF-8,因此您应该检查 --display-charset 是否已正确设置。如果以感叹号(!)开头,则注释数据将被标记为关键(rfc4880:5.2.3.16)。 --sig-notation 设置用于数据签名的注释。--cert-notation 设置用于密钥签名的注释(认证)。--set-notation 设置两者。
可以使用以下特殊代码在注释名称中使用。“%k”将被扩展为正在签名密钥的密钥 ID,“%K”将被扩展为正在签名密钥的长密钥 ID,“%f”将被扩展为正在签名密钥的指纹,“%s”将被扩展为生成签名的密钥的密钥 ID,“%S”将被扩展为生成签名的密钥的长密钥 ID,“%g”将被扩展为生成签名的密钥的指纹(可能是子密钥),“%p”将被扩展为生成签名的密钥的主要密钥的指纹,“%c”将被扩展为来自 OpenPGP 智能卡的签名计数,“%%”将产生一个“%”。%k、%K 和 %f 仅在生成密钥签名(认证)时才有意义,而 %c 仅在使用 OpenPGP 智能卡时才有意义。
--known-notation name
将名称添加到已知关键签名记号的列表中。 效果是,gpg不会将具有该名称的关键签名记号的签名标记为无效。 请注意,gpg默认情况下已经知道一些关键签名记号名称。
--sig-policy-url string
--cert-policy-url string
--set-policy-url string
将字符串用作签名的策略 URL(rfc4880:5.2.3.20)。 如果您在前面添加一个感叹号 (!),则策略 URL 数据包将被标记为关键。 --sig-policy-url 设置用于数据签名的策略 URL。 --cert-policy-url 设置用于密钥签名的策略 URL(证书)。 --set-policy-url 同时设置两者。
与签名数据中使用的相同 %-扩展变量在这里也可用。
--sig-keyserver-url string
将字符串用作数据签名的首选密钥服务器 URL。 如果您在前面添加一个感叹号 (!),则密钥服务器 URL 数据包将被标记为关键。
与签名数据中使用的相同 %-扩展变量在这里也可用。
--set-filename string
将字符串用作存储在消息中的文件名。 这会覆盖默认设置,即使用正在加密的文件实际文件名。 将字符串设置为空字符串,实际上会从输出中删除文件名。
--for-your-eyes-only
--no-for-your-eyes-only
在消息中设置“仅供您参考”标志。 这会导致 GnuPG 拒绝保存文件,除非提供了 --output 选项,并且 PGP 会使用所谓的防窃听字体来显示消息。 此选项会覆盖 --set-filename。 --no-for-your-eyes-only 禁用此选项。
--use-embedded-filename
--no-use-embedded-filename
尝试使用嵌入在数据中的名称创建文件。 这是一个危险的选项,因为它允许发送者控制如何存储文件,从而导致文件被覆盖。 默认值为否。 请注意,--output 选项会覆盖此选项。
一个更好的方法是解密到临时文件名,然后在检查嵌入的文件名是否安全后,将该文件重命名为嵌入的文件名。 使用 --status-fd 选项时,gpg 会在纯文本状态消息中提供文件名。 如果文件名很重要,那么使用 gpgtar 是另一个选项,因为 gpgtar 不会覆盖文件,而是将文件解密到新的目录。
请注意,除非使用现代版本 5 签名,否则嵌入的文件名不包含在签名数据中。
--cipher-algo name
将名称用作密码算法。 使用 --version 命令运行该程序会显示支持的算法列表。 如果不使用此选项,则密码算法将从与密钥存储的偏好设置中选择。 通常,您不希望使用此选项,因为它允许您违反 OpenPGP 标准。 --personal-cipher-preferences 选项是实现相同目的的安全方法。
--digest-algo name
使用 name 作为消息摘要算法。使用 --version 命令运行程序会显示受支持的算法列表。通常,您不应该使用此选项,因为它允许您违反 OpenPGP 标准。--personal-digest-preferences 选项是实现相同目的的安全方式。
--compress-algo name
使用压缩算法 name。 "zlib" 是 RFC-1950 ZLIB 压缩。"zip" 是 RFC-1951 ZIP 压缩,PGP 使用它。“bzip2”是一种更现代的压缩方案,可以比 zip 或 zlib 更好地压缩某些内容,但代价是压缩和解压缩期间使用的内存更多。“uncompressed”或“none”禁用压缩。如果未使用此选项,则默认行为是检查接收者的密钥首选项,以查看接收者支持哪些算法。如果所有方法都失败,则使用 ZIP 以获得最大的兼容性。
ZLIB 可能会比 ZIP 产生更好的压缩结果,因为压缩窗口大小不受 8k 限制。 BZIP2 可能会产生比那更好甚至更好的压缩结果,但会在压缩和解压缩时使用更多的内存。这在低内存情况下可能很重要。但是,请注意,PGP(所有版本)仅支持 ZIP 压缩。使用任何其他算法(ZIP 或“none”)都会使消息无法使用 PGP 读取。通常,您不应该使用此选项,因为它允许您违反 OpenPGP 标准。--personal-compress-preferences 选项是实现相同目的的安全方式。
--cert-digest-algo name
使用 name 作为签名密钥时使用的消息摘要算法。使用 --version 命令运行程序会显示受支持的算法列表。请注意,如果您选择 GnuPG 支持但其他 OpenPGP 实现不支持的算法,那么有些用户将无法使用您创建的密钥签名,或者很可能无法使用您的整个密钥。 此外,公钥算法必须与指定的摘要算法兼容;因此,选择任意摘要算法可能会导致来自较低加密层的错误消息,或者导致安全漏洞。
--disable-cipher-algo name
永远不要允许将 name 作为密码算法使用。给定的名称将不会被检查,以便稍后加载的算法仍将被禁用。
--disable-pubkey-algo name
永远不要允许将 name 作为公钥算法使用。给定的名称将不会被检查,以便稍后加载的算法仍将被禁用。
--throw-keyids
--no-throw-keyids
不要将接收者的密钥 ID 放入加密的消息中。这有助于隐藏消息的接收者,并是对流量分析的一种有限的对策。 ([通过使用一点社会工程学,任何能够解密消息的人都可以检查其他接收者中是否有他怀疑的人。]) 在接收端,这可能会降低解密过程的速度,因为必须尝试所有可用的私钥。 --no-throw-keyids 禁用此选项。此选项实际上与对所有接收者使用 --hidden-recipient 选项相同。
--not-dash-escaped
此选项会更改明文签名的行为,以便它们可以用于补丁文件。您不应通过电子邮件发送此类装甲文件,因为所有空格和行尾都将被哈希。您不能将此选项用于在行首有 5 个破折号的数据,因为补丁文件没有这种格式。一个特殊的装甲头部行会告诉 GnuPG 启用了此明文签名选项。
--escape-from-lines
--no-escape-from-lines
由于某些邮件客户端会将以“From ”开头的行更改为“>From ”,因此在创建明文签名时,最好以特殊方式处理这些行,以防止邮件系统破坏签名。请注意,所有其他 PGP 版本也以这种方式进行处理。默认启用。--no-escape-from-lines 会禁用此选项。
--passphrase-repeat n
指定 gpg 将要求重复输入密码多少次。这对于帮助记忆密码很有用。默认重复 1 次;可以设置为 0 以禁用任何密码重复。请注意,如果 n 大于 1,即使使用具有两个输入字段的现代 pinentry,pinentry 窗口也会弹出 n+1 次。
--passphrase-fd n
从文件描述符 n 读取密码。只会从文件描述符 n 读取第一行。如果您使用 0 作为 n,密码将从 STDIN 读取。这只能在提供单个密码时使用。
请注意,从版本 2.0 开始,此密码仅在同时提供了 --batch 选项时才会使用。从版本 2.1 开始,还需要将 --pinentry-mode 设置为 loopback。
--passphrase-file file
从文件 file 读取密码。只会从文件 file 读取第一行。这只能在提供单个密码时使用。显然,存储在文件中的密码如果其他用户可以读取该文件,则安全性值得怀疑。如果可以避免,请不要使用此选项。
请注意,从版本 2.0 开始,此密码仅在同时提供了 --batch 选项时才会使用。从版本 2.1 开始,还需要将 --pinentry-mode 设置为 loopback。
--passphrase string
将字符串用作密码。这只能在提供单个密码时使用。显然,在多用户系统上,这非常不安全。如果可以避免,请不要使用此选项。
请注意,从版本 2.0 开始,此密码仅在同时提供了 --batch 选项时才会使用。从版本 2.1 开始,还需要将 --pinentry-mode 设置为 loopback。
--pinentry-mode mode
将 pinentry 模式设置为 mode。mode 的允许值如下:
default
使用代理的默认值,即 ask。
ask 强制使用 Pinentry。
cancel 模拟 Pinentry 的“取消”按钮。
error 返回 Pinentry 错误(“未找到 Pinentry”)。
loopback
将 Pinentry 查询重定向到调用者。 请注意,与 Pinentry 相比,如果用户输入了错误的密码,用户不会再次被提示。
--no-symkey-cache
禁用用于对称加密和解密的密码短语缓存。 此缓存基于消息特定的盐值(请参阅 --s2k-mode)。
--request-origin origin
告诉 gpg 假设操作最终源自 origin。 根据 origin,会应用某些限制,并且 Pinentry 可能会包含有关 origin 的额外说明。 支持的 origin 值包括:local(默认值)、remote(表示远程 origin)和 browser(表示由 Web 浏览器请求的操作)。
--command-fd n
这是对已弃用的共享内存 IPC 模式的替代。 如果启用了此选项,则不会期望从 TTY 获取对问题的用户输入,而是从给定的文件描述符获取。 应该与 --status-fd 结合使用。 有关如何使用它的详细信息,请参阅源代码发行版中的文件 doc/DETAILS。
--command-file file
与 --command-fd 相同,只是命令是从文件 file 中读取的。
--allow-non-selfsigned-uid
--no-allow-non-selfsigned-uid
允许导入和使用具有未进行自我签名的用户 ID 的密钥。 不建议这样做,因为未进行自我签名的用户 ID 很容易被伪造。 --no-allow-non-selfsigned-uid 禁用此功能。
--allow-freeform-uid
禁用在生成新的用户 ID 时对用户 ID 形式的所有检查。 此选项仅应在非常特殊的环境中使用,因为它不能保证用户 ID 的事实标准格式。
--ignore-time-conflict
GnuPG 通常会检查与密钥和签名相关联的时间戳是否具有合理的值。 但是,有时由于时钟问题,签名似乎比密钥更旧。 此选项会将这些检查更改为警告。 另请参阅 --ignore-valid-from,以了解子密钥的时间戳问题。
--ignore-valid-from
GnuPG 通常不会选择和使用将来创建的子密钥。 此选项允许使用此类密钥,从而呈现 1.0.7 之前的行为。 除非存在时钟问题,否则不应使用此选项。 另请参阅 --ignore-time-conflict,以了解签名的时间戳问题。
--ignore-crc-error
OpenPGP 中使用的 ASCII 盔甲通过 CRC 校验和受到传输错误的保护。 有时,CRC 在传输通道中的某个位置被破坏,但实际内容(受 OpenPGP 协议保护)仍然有效。 此选项允许 GnuPG 忽略 CRC 错误。
--ignore-mdc-error
此选项会将 MDC 完整性保护失败更改为警告。 它需要解密旧消息,这些消息未使用 MDC。 此外,如果消息部分损坏,但有必要从该损坏的消息中获取尽可能多的数据,它也可能有用。 请注意,丢失或失败的 MDC 可能表示存在攻击。 请谨慎使用;另请参阅选项 --rfc2440。
--allow-old-cipher-algos
旧的密码算法,如 3DES、IDEA 或 CAST5,使用 64 位的块对数据进行加密;现代算法使用 128 位的块。 为了避免针对这些旧算法的某些攻击,建议不要使用相同的密钥加密超过 150 MiB 的数据。 因此,如果未指定此选项,gpg 不允许使用 64 位块大小的算法进行加密。 某些合规模式已经设置或取消设置此标志,因此应在设置合规模式后使用此标志。
--allow-weak-digest-algos
使用已知弱哈希算法生成的签名通常会被“无效的哈希算法”消息拒绝。 此选项允许验证使用此类弱算法生成的签名。 MD5 是默认情况下被认为是最弱的哈希算法。 另请参阅 --weak-digest,以拒绝其他哈希算法。
--weak-digest 名称
将指定的哈希算法视为弱算法。 使用弱哈希算法生成的签名通常会被拒绝。 如果需要将多个算法视为弱算法,则可以多次提供此选项。 另请参阅 --allow-weak-digest-algos,以禁用弱哈希算法的拒绝。 MD5 始终被视为弱算法,因此无需显式列出。
--allow-weak-key-signatures
为了避免针对使用 SHA-1 生成的第三方密钥签名中可能存在的轻微碰撞攻击风险,这些密钥签名被视为无效。 此选项允许覆盖此限制。
--override-compliance-check
这是一个临时引入的选项,不再生效。
--no-default-keyring
不要将默认密钥环添加到密钥环列表中。 请注意,GnuPG 在几乎所有操作中都需要密钥环。 因此,如果您使用此选项且未通过 --keyring 提供替代密钥环,则 GnuPG 仍将使用默认密钥环。
请注意,如果在“common.conf”中启用了 use-keyboxd 选项,则不使用任何密钥环,并且所有密钥都由 keyboxd 进程在其自身的数据库中维护。
--no-keyring
完全不使用任何密钥环。 这将覆盖默认设置以及所有指定密钥环的选项。
--skip-verify
跳过签名验证步骤。 如果不需要签名验证,这可用于加快解密速度。
--with-key-data
以冒号分隔的方式(类似于 --with-colons)打印密钥列表,并打印公钥数据。
--list-signatures
--list-sigs
与 --list-keys 相同,但也会列出签名。 此命令与使用 --list-keys 和 --with-sig-list 具有相同的效果。 请注意,与 --check-signatures 相比,此命令不会验证密钥签名。 此命令可用于创建本地密钥环中缺少的签名密钥列表;例如:
gpg --list-sigs --with-colons USERID | \
awk -F: '$1=="sig" && $2=="?" {if($13){print $13}else{print $5}}'
--fast-list-mode
更改列表命令的输出,使其工作速度更快;这是通过省略某些部分来实现的。有些应用程序不需要在列表中给出的用户 ID 和信任信息。通过使用此选项,它们可以获得更快的列表。此选项的确切行为可能会在未来的版本中更改。如果您缺少某些信息,请不要使用此选项。
--no-literal
这不用于正常使用。请查看源代码以了解它可能有什么用。
--set-filesize
这不用于正常使用。请查看源代码以了解它可能有什么用。
--show-session-key
显示用于一条消息的会话密钥。请参阅 --override-session-key 以了解其对应选项。
我们认为密钥托管是个坏主意;但是,用户应该有权决定是入狱还是揭示一条特定消息的内容,而不会损害所有加密的秘密密钥。
您也可以使用此选项,如果您收到一条加密的消息,该消息具有辱骂性或冒犯性,您可以向消息系统的管理员证明,传输的密文对应于不适当的明文,以便他们可以对违规用户采取行动。
--override-session-key string
--override-session-key-fd fd
不要使用公钥,而是使用字符串或从文件描述符 fd 读取的第一行中的会话密钥。此字符串的格式与 --show-session-key 打印的格式相同。此选项通常不使用,但在有人强迫您透露加密消息的内容时,它会很有用;使用此选项,您可以这样做,而无需提供秘密密钥。请注意,使用 --override-session-key 可能会通过全局进程表向所有本地用户透露会话密钥。通常,将此选项与 --no-keyring 结合使用会很有用。
--ask-sig-expire
--no-ask-sig-expire
在创建数据签名时,提示输入有效期。如果未指定此选项,则使用通过 --default-sig-expire 设置的有效期。--no-ask-sig-expire 禁用此选项。
--default-sig-expire
用于签名有效期的默认有效期。有效值为“0”(表示没有有效期)、后跟字母 d(表示天)、w(表示周)、m(表示月)或 y(表示年)的数字(例如,“2m”表示两个月,“5y”表示五年),或绝对日期,格式为 YYYY-MM-DD。默认为“0”。
--ask-cert-expire
--no-ask-cert-expire
在创建密钥签名时,提示输入有效期。如果未指定此选项,则使用通过 --default-cert-expire 设置的有效期。--no-ask-cert-expire 禁用此选项。
--default-cert-expire
用于密钥签名有效期的默认有效期。有效值为“0”(表示没有有效期)、后跟字母 d(表示天)、w(表示周)、m(表示月)或 y(表示年)的数字(例如,“2m”表示两个月,“5y”表示五年),或绝对日期,格式为 YYYY-MM-DD。默认为“0”。
--default-new-key-algo string
此选项可用于更改默认密钥生成算法。该字符串类似于 --quick-add-key 命令所需的参数,但略有不同。您需要查阅源代码以了解详细信息。请注意,可以使用高级密钥生成命令来直接指定密钥算法。设置合规模式将设置或清除此标志,因此应仅在设置合规模式后使用它。
--no-auto-trust-new-key
创建新密钥时,新密钥的 ownertrust 设置为 ultimate。此选项会禁用此设置,用户需要手动分配 ownertrust 值。
--force-sign-key
此选项修改了 --quick-sign-key、--quick-lsign-key 命令以及 --edit-key 的 “sign” 子命令的行为,强制创建密钥签名,即使已经存在。
--forbid-gen-key
此选项旨在用于全局配置文件中,以禁止使用生成密钥命令。这些命令将失败并返回“未启用”的错误代码。
--allow-secret-key-import
这是一个过时的选项,并且未在任何地方使用。
--allow-multiple-messages
--no-allow-multiple-messages
这些是过时的选项;它们在 GnuPG 2.2.8 之后不再生效。
--enable-special-filenames
此选项启用一种模式,在这种模式下,形式为 '-&n' 的文件名(其中 n 是一个非负十进制数)指的是文件描述符 n,而不是具有该名称的文件。
--no-expensive-trust-checks
仅供实验使用。
--preserve-permissions
不要将私钥环的权限更改回仅用户可读/写。仅在您真正了解自己在做什么时才使用此选项。
--default-preference-list string
将默认偏好列表设置为字符串。此偏好列表用于新密钥,并成为 --edit-key 菜单中 “setpref” 的默认设置。
--default-keyserver-url name
将默认密钥服务器 URL 设置为 name。当在新密钥上写入自签名(包括密钥生成和更改偏好设置时),将使用此密钥服务器 URL。
--list-config
显示 GnuPG 的各种内部配置参数。此选项旨在供外部程序调用 GnuPG 以执行任务,因此通常对用户没有用。请参阅源代码发行版中的 doc/DETAILS 文件,以了解可以列出的配置项的详细信息。--list-config 只能与 --with-colons 一起使用。
--list-gcrypt-config
显示 Libgcrypt 的各种内部配置参数。
--gpgconf-list
此命令类似于 --list-config,但通常仅由 gpgconf 工具内部使用。
--gpgconf-test
这是一个近似于虚拟操作。但是,它会解析配置文件,如果配置文件会阻止 gpg 启动,则返回错误。因此,它可用于对配置文件执行语法检查。
--chuid uid
将当前用户更改为 uid,uid 可以是数字或名称。这可以从 root 帐户用于为其他用户运行 gpg。如果 uid 不是当前 UID,则会设置一个标准 PATH,并且取消设置 envvar GNUPGHOME。要覆盖后者,可以使用 --homedir 选项。此选项仅在命令行中使用时才有效。 此选项当前在 Windows 上没有任何效果。
已弃用的选项
-t, --textmode
--no-textmode
将输入文件视为文本,并以 OpenPGP 规范文本形式和标准“CRLF”行尾存储它们。这还会设置必要的标志,以告知接收者加密或签名的数据是文本,并且可能需要将其行尾转换回本地系统使用的任何内容。当在两个具有不同行尾约定(类似于 UNIX 到 Mac,Mac 到 Windows 等)的平台之间进行通信时,此选项很有用。--no-textmode 禁用此选项,并且是默认设置。请注意,这是一个旧选项,不应再由任何现代软件使用。
--force-v3-sigs
--no-force-v3-sigs
--force-v4-certs
--no-force-v4-certs
这些选项已过时,并且自 GnuPG 2.1 以来没有任何效果。
--show-photos
--no-show-photos
使 --list-keys、--list-signatures、--list-public-keys、--list-secret-keys 和验证签名时也显示附加到密钥的照片 ID(如果有)。请参阅 --photo-viewer。这些选项已弃用。使用 --list-options [no-]show-photos 和/或 --verify-options [no-]show-photos 代替。
--show-keyring
在密钥列表的开头显示密钥环名称,以显示给定的密钥位于哪个密钥环上。此选项已弃用:使用 --list-options [no-]show-keyring 代替。
--show-notation
--no-show-notation
在 --list-signatures 或 --check-signatures 列表中以及在包含符号的签名中验证签名时显示签名符号。这些选项已弃用。使用 --list-options [no-]show-notation 和/或 --verify-options [no-]show-notation 代替。
--show-policy-url
--no-show-policy-url
在 --list-signatures 或 --check-signatures 列表中以及在包含策略 URL 的签名中验证签名时显示策略 URL。这些选项已弃用。使用 --list-options [no-]show-policy-url 和/或 --verify-options [no-]show-policy-url 代替。
--personal-aead-preferences string
此选项已弃用,并且自 2.3.9 版本以来没有任何效果。
--aead-algo name
此选项已弃用,并且自 2.3.9 版本以来没有任何效果。
示例
gpg -se -r Bob file
为用户 Bob 签名并加密
gpg --clear-sign 文件
创建一个纯文本签名
gpg -sb 文件
创建一个分离签名
gpg -u 0x12345678 -sb 文件
使用密钥 0x12345678 创建一个分离签名
gpg --list-keys 用户ID
显示密钥
gpg --fingerprint 用户ID
显示指纹
gpg --verify pgp文件
gpg --verify 签名文件 [数据文件]
验证文件的签名,除非明确请求,否则不输出数据。第二种形式用于分离签名,签名文件是分离签名(ASCII 编码或二进制),数据文件是已签名的数据;如果未提供此项,则通过从签名文件(“.asc”或“.sig”)中删除扩展名来构造包含已签名数据的文件名,或者提示用户输入文件名。如果同时使用 --output 选项,已签名的数据将被写入指定的文件;使用 - 将已签名数据写入标准输出。
如何指定用户 ID
有多种方法可以向 GnuPG 指定用户 ID。其中一些方法仅适用于 gpg,另一些方法仅适用于 gpgsm。以下是指定密钥的所有方法:
通过密钥 ID。 此格式是从字符串的长度及其内容或 0x 前缀推断出来的。X.509 证书的密钥 ID 是其 SHA-1 指纹的低 64 位。使用密钥 ID 只是一个快捷方式,对于所有自动化处理,应使用指纹。
在使用 gpg 时,可以附加一个感叹号(!),以强制使用指定的 primay 或 secondary 密钥,而不是尝试计算要使用的 primay 或 secondary 密钥。
示例的最后四行以 OpenPGP 协议内部使用的长格式给出密钥 ID。可以使用 --with-colons 选项查看长密钥 ID。
2345674
034E556E
0134756A
0AB123456
234ABBCC34567C4
0323456784E56EAB
01B3FED1347A5612
0234AABBCC34567C4
通过指纹。 此格式是从字符串的长度及其内容或 0x 前缀推断出来的。请注意,仅 gpgsm(即 SHA-1 证书的哈希值)提供 20 字节版本的指纹。
在使用 gpg 时,可以附加一个感叹号(!),以强制使用指定的 primay 或 secondary 密钥,而不是尝试计算要使用的 primay 或 secondary 密钥。
指定密钥 ID 的最佳方法是使用指纹。这样可以避免在存在重复的密钥 ID 时出现歧义。
1234343434343434434343434343434
1234343434343433434343434343734349A3434
012343434343434343434EAB3484343434343434
0E12343434343434343434EAB3484343434343434
gpgsm 也接受冒号分隔每个十六进制数字对,因为这是呈现 X.509 指纹的事实标准。gpg 也允许使用由密钥列出命令打印的空格分隔的 SHA-1 指纹。
通过 OpenPGP 用户 ID 的精确匹配。 这由前导等号表示。对于 X.509 证书而言,这没有意义。
=Heinrich Heine <_>
通过电子邮件地址的精确匹配。 这表示通过以通常的方式将电子邮件地址放在左右尖括号中。
<_>
通过电子邮件地址的部分匹配。 这通过在搜索字符串前加上 @ 来表示。它使用子字符串搜索,但仅考虑邮件地址(即尖括号内的内容)。
@heinrichh
通过精确匹配主题的 DN。
这通过以斜杠开头表示,紧接着是 RFC-2253 编码的主题 DN。请注意,您不能使用 gpgsm --list-keys 打印的字符串,因为它已被重新排序并修改,以提高可读性;请使用 --with-colons 打印原始(但标准转义)的 RFC-2253 字符串。
/CN=Heinrich Heine,O=Poets,L=Paris,C=FR
通过精确匹配颁发者的 DN。 这通过以井号开头,紧接着是斜杠,然后紧接着是颁发者的 RFC-2253 编码的 DN。这应该返回颁发者的根证书。请参见上面的说明。
#/CN=Root Cert,O=Poets,L=Paris,C=FR
通过序列号和颁发者的 DN 的精确匹配。 这通过井号开头,紧接着是序列号的十六进制表示,然后紧接着是颁发者的 RFC-2253 编码的 DN。请参见上面的说明。
#4F03/CN=Root Cert,O=Poets,L=Paris,C=FR
通过密钥指纹(keygrip)。
这通过以 & 开头表示,然后是 40 个十六进制数字的密钥指纹。gpgsm 在使用 --dump-cert 命令时会打印密钥指纹。
&D75F22C3F86E355877348498CDC92BD21010A480
通过子字符串匹配。 这是默认模式,但应用程序可能希望通过在前面放置星号来显式指示这一点。匹配不区分大小写。
Heine *Heine
. 和 + 前缀
这些前缀是用于查找以末尾开始的邮件以及用于单词搜索模式的。它们尚未实现,使用它们的结果是未定义的。
请注意,我们已重新使用了旧的 GnuPG 版本中用于指示所谓的本地 ID 的井号标识符。它不再使用,因此在使用 X.509 东西时不应存在冲突。
使用 DN 的 RFC-2253 格式的缺点是无法将其映射回原始编码,但是我们不需要这样做,因为我们的密钥数据库将此编码作为元数据存储。
过滤器表达式
^ -import-filter 和 --export-filter 选项使用具有以下语法的表达式(方括号表示可选部分,花括号表示重复,元素之间允许有空格):
[lc] {[{flag}] PROPNAME op VALUE [lc]}
属性名称(PROPNAME)只能由字母、数字和下划线组成。过滤器类型描述中说明了哪些属性是已定义的。如果使用未定义的属性,则其值为空字符串。除非另有说明,否则 VALUE 必须始终提供,并且不能为空字符串。没有定义值的引号,因此值中不能包含字符串 && 或 ||,这些字符串用作逻辑连接运算符。可以使用 -- 标志来删除此限制。
数值计算为长整型;使用标准的 C 记法。lc 是逻辑连接运算符;&& 表示合取,|| 表示析取。表达式的开头假定为合取。合取比析取具有更高的优先级。如果 VALUE 以任何运算符中使用的字符开头,则运算符后需要一个空格。
支持的运算符(op)是:
`=~`:子字符串必须匹配。
`!~`:子字符串必须不匹配。
`=`:完整的字符串必须匹配。
`<>`:完整的字符串必须不匹配。
`==`:数值必须匹配。
`!=`:数值必须不匹配。
`<=`:字段的数值必须小于或等于该值。
`<`:字段的数值必须小于该值。
`>`:字段的数值必须大于该值。
`>=`:字段的数值必须大于或等于该值。
`-le`:字段的字符串值必须小于或等于该值。
`-lt`:字段的字符串值必须小于该值。
`-gt`:字段的字符串值必须大于该值。
`-ge`:字段的字符串值必须大于或等于该值。
`-n`:如果值为非空,则为真(不允许有值)。
`-z`:如果值为为空,则为真(不允许有值)。
`-t`:`PROPNAME != 0` 的别名(不允许有值)。
`-f`:`PROPNAME == 0` 的别名(不允许有值)。
标志的值必须用空格分隔。支持的标志是:
`--`:`VALUE` 跨越到表达式的末尾。
`-c`:在此部分中,字符串匹配以区分大小写的方式进行。
`-t`:删除前导和尾随空格。可选的运算符后面的单个空格在此处是必需的。
过滤器选项将相同类型的过滤器的多个规范连接起来。例如,以下四个选项:
`--import-filter keep-uid="uid =~ Alfa"`
`--import-filter keep-uid="&& uid !~ Test"`
`--import-filter keep-uid="|| uid =~ Alpha"`
`--import-filter keep-uid="uid !~ Test"`
等效于:
`--import-filter \
keep-uid="uid =~ Alfa" && uid !~ Test" || uid =~ Alpha" && "uid !~ Test"`
仅导入包含字符串“Alfa”或“Alpha”但不包含字符串“Test”的密钥的用户 ID。
信任值
信任值用于指示所有权信任和密钥和用户 ID 的有效性。它们以字母或字符串显示:
`unknown`
未分配所有权信任/尚未计算。
`e`
已过期
信任计算失败;可能是由于密钥已过期。
`q`
`undefined`, `undef`
信息不足,无法进行计算。
`n`
`never`
永远不要信任此密钥。
`m`
`marginal`
略微信任。
`f`
`full`
完全信任。
`u`
`ultimate`
完全信任。
`r`
`revoked`
仅用于有效性:密钥或用户 ID 已被撤销。
`?`
`err`
程序遇到未知的信任值。
文件
有几个配置文件可用于控制 gpg 操作的某些方面。除非另有说明,否则它们应位于当前主目录中(参见:[选项 --homedir])。
gpg.conf
这是 GnuPG 启动时读取的标准配置文件。它可以包含任何有效的长选项;不允许输入前两个破折号,也不允许缩写该选项。可以通过命令行更改此默认名称(参见:[gpg-option --options])。 您应该备份此文件。
common.conf
这是一个可选的配置文件,GnuPG 在启动时读取。它可以包含与 GnuPG 所有组件相关的选项。它当前的主要用途是“use-keyboxd”选项。如果默认主目录“~/.gnupg”不存在,GnuPG 会创建此目录,并创建一个“common.conf”文件,其中包含“use-keyboxd”。
请注意,在较大的安装中,将预定义的 файлы 放入目录“/etc/skel/.gnupg”中是有用的,这样新创建的用户就可以从一个可用的配置开始。对于现有用户,提供了一个小型的辅助脚本来创建这些文件(参见:[addgnupghome])。
出于内部目的,gpg 会创建和维护一些其他文件;它们都位于当前主目录中(参见:[option --homedir])。只有 gpg 程序可以修改这些文件。
~/.gnupg
这是默认的主目录,如果既没有设置环境变量 GNUPGHOME,也没有使用选项 --homedir,则会使用它。
~/.gnupg/pubring.gpg
使用旧格式的公钥环。您应该备份此文件。
如果此文件不可用,gpg 将默认为新的密钥盒格式,并创建一个文件“pubring.kbx”,除非该文件已经存在,在这种情况下,该文件也将用于 OpenPGP 密钥。
请注意,如果同时存在“pubring.gpg”和“pubring.kbx”这两个文件,但后者不包含 OpenPGP 密钥,则将使用旧文件“pubring.gpg”。请注意:GnuPG 2.1 之前的版本将始终使用文件“pubring.gpg”,因为它们不了解新的密钥盒格式。如果您需要使用 GnuPG 1.4 来解密存档数据,则应保留此文件。
~/.gnupg/pubring.gpg.lock
公钥环的锁文件。
~/.gnupg/pubring.kbx
使用新的密钥盒格式的公钥环。此文件与 gpgsm 共享。您应该备份此文件。有关此文件与其前身之间的关系,请参见上面的说明。
要将现有的“pubring.gpg”文件转换为密钥盒格式,首先备份所有者的信任值,然后将“pubring.gpg”重命名为“publickeys.backup”,这样任何 GnuPG 版本都不会识别它,运行 import 命令,最后恢复所有者的信任值:
$ cd ~/.gnupg
$ gpg --export-ownertrust >otrust.lst
$ mv pubring.gpg publickeys.backup
$ gpg --import-options restore --import publickeys.backup
$ gpg --import-ownertrust otrust.lst
~/.gnupg/pubring.kbx.lock
“pubring.kbx”的锁文件。
~/.gnupg/secring.gpg
GnuPG 2.1 之前的版本使用的旧的私钥环。它不被 GnuPG 1 及更高版本使用。您可能希望保留它,以防您需要使用 GnuPG 1.4 来解密存档数据。
~/.gnupg/secring.gpg.lock
旧版私钥环的锁文件。
~/.gnupg/.gpg-v21-migrated
文件,指示已完成迁移到 GnuPG 2.1。
~/.gnupg/trustdb.gpg
信任数据库。无需备份此文件;最好备份所有者信任值(参见:[option --export-ownertrust])。
~/.gnupg/trustdb.gpg.lock
信任数据库的锁文件。
~/.gnupg/random_seed
用于保存内部随机数池状态的文件。
~/.gnupg/openpgp-revocs.d/
这是 gpg 存储预生成撤销证书的目录。
文件名对应于相应的 OpenPGP 指纹。建议备份这些证书,如果主私钥未存储在磁盘上,则将其移动到外部存储设备。任何可以访问这些文件的人都可以撤销相应的密钥。您可能需要将它们打印出来。您应该备份此目录中的所有文件,并注意妥善保管此备份。
操作由一些环境变量进一步控制:
HOME 用于定位默认主目录。
GNUPGHOME 如果设置,则使用该目录代替 "\~/.gnupg"。
GPG_AGENT_INFO
此变量已过时;它由 GnuPG 2.1 之前的版本使用。
PINENTRY_USER_DATA
此值通过 gpg-agent 传递给 pinentry。它对于向自定义 pinentry 传递额外信息很有用。
COLUMNS
LINES 用于将某些显示调整为屏幕的完整大小。
LANGUAGE
除了 GNU 的用途之外,它还在 W32 版本中用于覆盖通过注册表进行的语言选择。如果使用且设置为有效的可用语言名称(langid),则将从 gpgdir/gnupg.nls/langid.mo 加载包含翻译的文件。此处 gpgdir 是加载 gpg 二进制文件所在的目录。如果无法加载,则尝试注册表,最后尝试本机 Windows 区域设置。
GNUPG_BUILD_ROOT
此变量仅由回归测试套件用作辅助工具,用于在没有适当支持的操作系统上确定进程的文本文件的名称。
GNUPG_EXEC_DEBUG_FLAGS
此变量允许启用进程管理过程中的诊断。需要一个数字十进制值。位 0 启用常规诊断,位 1 在 Windows 上启用某些警告。
调用 gpg-agent 组件时,gpg 会向 gpg-agent 发送一组环境变量。 这些变量的名称可以使用以下命令列出:
gpg-connect-agent 'getinfo std_env_names' /bye | awk '$1=="D" {print $2}'
备注
gpg 通常用作其他软件的后端引擎。为了帮助实现这一点,定义了一个机器接口,以便有一种明确的方式来做到这一点。选项 --status-fd 和 --batch 几乎总是必需的。
程序化地使用 GnuPG
请考虑使用 GPGME,而不是直接调用 gpg。GPGME 提供了一个稳定、与后端无关的接口,用于许多加密操作。它支持 OpenPGP 和 S/MIME,并允许与各种 GnuPG 组件进行交互。
GPGME 提供了一个 C-API,并提供 C++、Qt 和 Python 的绑定。其他语言的绑定也可以使用。
短期主目录
有时,您希望隔离某些操作的影响,例如,您想导入一个密钥以进行检查,但您不希望将该密钥添加到您的密钥环中。在早期版本的 GnuPG 中,可以指定公共密钥和私有密钥的替代密钥环文件。但是,在现代 GnuPG 版本中,我们更改了私有密钥的存储方式,以便更好地保护私有密钥材料,因此无法保留该接口。
首选的方法是使用短期主目录。此技术适用于所有版本的 GnuPG。
创建一个临时目录,创建一个满足您需求的配置文件,然后通过使用环境变量 GNUPGHOME 或选项 --homedir,让 gpg 使用此目录。GPGME 也支持在每个上下文的基础上通过修改上下文的引擎信息来实现这一点。现在,您可以执行任何所需的操作,导入和导出密钥材料。完成后,您可以删除该目录。所有启动的 GnuPG 后端服务都会检测到这一点并关闭。
快速密钥操作接口
最近版本的 GnuPG 具有一个接口,用于在不使用交互式命令 --edit-key 的情况下操作密钥。此接口主要为 GPGME 的便利而添加(请考虑使用 GPGME,请参阅手册的“程序化地使用 GnuPG”部分)。此接口在“如何管理您的密钥”一节中描述。
无人值守的密钥生成
^ -generate-key 命令可与 --batch 选项一起使用,以进行无人值守的密钥生成。这是生成密钥的最灵活的方法,但也是最复杂的方法。请考虑使用前一小节中描述的“快速密钥操作接口”。
密钥的参数要么从 stdin 读取,要么作为命令行中的文件提供。参数文件的格式如下:仅限文本,行长度限制为 1000 个字符左右。必须使用 UTF-8 编码来指定非 ASCII 字符。空行将被忽略。前导和尾随空格将被忽略。以井号作为第一个非空格字符的行表示注释行。控制语句以百分号开头,它们的参数通过空格与关键字分隔。参数由一个关键字(后跟一个冒号)指定;参数通过空格分隔。第一个参数必须是“Key-Type”,但控制语句可以放置在任何位置。参数的顺序并不重要,除了“Key-Type”。参数仅用于生成的密钥块(主密钥和子密钥);来自先前集合的参数不使用。可能会执行一些语法检查。当参数文件结束、遇到下一个“Key-Type”参数或遇到控制语句“%commit”时,密钥生成完成。
控制语句:
%echo text
将文本作为诊断信息打印。
%dry-run
禁止实际的密钥生成(适用于语法检查)。
%commit
执行密钥生成。请注意,在下一个参数处会进行隐式提交。
%pubring filename
不要将密钥写入默认的或命令行给定的密钥环,而是写入 filename。
必须在第一次提交之前给出,重复指定相同的 filename 将被忽略,最后一个在提交之前的 filename 将被使用。该 filename 将被使用,直到使用新的 filename(在提交点),所有密钥都将被写入该文件。如果给出了新的 filename,则会创建该文件(并覆盖现有文件)。
请参阅之前的子部分“临时主目录”,以获得更可靠的副作用控制方法。
%secring filename
此选项对于 GnuPG 2.1 及更高版本无效。
请参阅之前的子部分“临时主目录”。
%ask-passphrase
%no-ask-passphrase
此选项自 GnuPG 2.1 版本以来无效。
%no-protection
使用此选项允许创建没有密码保护的密钥。此选项主要用于回归测试。
%transient-key
如果给出,密钥将使用更快且安全性略低的随机数生成器进行创建。此选项可用于仅用于短时间且不需要完全加密强度的密钥。它仅在与控制语句“%no-protection”一起使用时才生效。
常规参数:
Key-Type: algo
通过给出一个主要密钥的类型来开始一个新的参数块。该算法必须能够进行签名。这是一个必需的参数。algo 可以是 OpenPGP 算法编号或算法名称字符串。可以使用特殊值“default”作为 algo 来创建默认密钥类型;在这种情况下,不应给出“Key-Usage”,并且“default”也应用于“Subkey-Type”。
Key-Length: nbits
生成的密钥的请求长度(以比特为单位)。默认值是通过运行命令“gpg --gpgconf-list”返回的。对于 ECC 密钥,此参数将被忽略。
Key-Curve: curve
生成的密钥的请求椭圆曲线。这是 ECC 密钥的必需参数。对于非 ECC 密钥,它将被忽略。
Key-Grip: hexstring
这是可选的,用于为已存在的密钥生成 CSR 或证书。给定时,Key-Length 将被忽略。
Key-Usage: usage-list
由空格或逗号分隔的密钥用途列表。允许的值为“encrypt”、“sign”和“auth”。它用于生成密钥标志。请确保该算法能够支持此用途。请注意,OpenPGP 要求所有主要密钥都能够进行认证,因此无论此处给出了什么用途,都将启用“cert”标志。如果没有指定“Key-Usage”,并且“Key-Type”不是“default”,则将使用该特定算法的所有允许用途;如果未给出,但使用“default”,则该用途将为“sign”。
Subkey-Type: algo
生成一个子密钥(subkey)。目前只能处理一个子密钥。请参阅“Key-Type”部分。
Subkey-Length: nbits
子密钥的长度(以比特为单位)。默认值是通过运行命令“gpg --gpgconf-list”返回的。
Subkey-Curve: curve
子密钥的密钥曲线;类似于“Key-Curve”。
Subkey-Usage: usage-list
子密钥的密钥使用列表;类似于“Key-Usage”。
Passphrase: string
如果您想为私钥指定密码,请在此处输入。默认情况下,将使用 Pinentry 对话框提示输入密码。
Name-Real: name
Name-Comment: comment
Name-Email: email
用户的三个部分。请记住在此处使用 UTF-8 编码。如果您不提供其中任何一个,则不会创建用户 ID。
Expire-Date: iso-date|(number[d|w|m|y])
设置密钥(和子密钥)的过期日期。它可以以 ISO 日期格式(例如“20000815T145012”)或作为自创建日期起经过的天数、周数、月数或年数来输入。特殊的“seconds=N”表示法也允许指定自创建以来经过的秒数。如果没有字母,则假定为天数。请注意,OpenPGP 中用于时间戳的类型不会进行溢出检查。因此,最好确保给定的值是有意义的。虽然 OpenPGP 使用时间间隔,但 GnuPG 内部使用绝对值,因此我们可以表示的最后一年是 2105 年。
Creation-Date: iso-date
设置密钥的创建日期,该日期存储在密钥信息中,并且也是指纹计算的一部分。可以使用“1986-04-26”或“19860426T042640”之类的日期,或者使用“seconds=N”直接指定自 Epoch(Unix 时间)以来的秒数。如果未提供,则使用当前时间。
Preferences: string
设置此密钥的密码、哈希和压缩首选项值。它期望与“--edit-key”菜单中的“setpref”子命令相同的字符串类型。
Revoker: algo:fpr [sensitive]
为生成的密钥添加指定的撤销者。Algo 是指定撤销者的公共密钥算法(例如 RSA=1、DSA=17 等)。fpr 是指定撤销者的指纹。fpr 不能包含空格或冒号。可选的“sensitive”标志将指定撤销者标记为敏感信息。只有 v4 和 v5 密钥可以指定撤销者。
Keyserver: string
这是一个可选参数,用于指定密钥的首选密钥服务器 URL。
Handle: string
这是一个可选参数,仅与状态行 KEY_CREATED 和 KEY_NOT_CREATED 一起使用。string 最长可达 100 个字符,并且不应包含空格。它对于批量密钥生成,用于将密钥参数块与状态行关联起来,非常有用。
以下是如何在临时主目录中创建密钥的示例: $ export GNUPGHOME="$(mktemp -d)" $ cat >foo <<EOF %echo Generating a basic OpenPGP key Key-Type: DSA Key-Length: 1024 Subkey-Type: ELG-E Subkey-Length: 1024 Name-Real: Joe Tester Name-Comment: with stupid passphrase Name-Email: _ Expire-Date: 0 Passphrase: abc # Do a commit here, so that we can later print "done" :-) %commit %echo done EOF $ gpg --batch --generate-key foo [...] $ gpg --list-secret-keys /tmp/tmp.0NQxB74PEf/pubring.kbx ------------------------------sec dsa1024 2016-12-16 [SCA] 768895903FC1C44045C8CB95EEBDB71E9E849D0 uid [ultimate] Joe Tester (with stupid passphrase) <_> ssb elg1024 2016-12-16 [E]
如果您想使用默认算法创建密钥,您将使用以下参数: %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Joe Tester Name-Comment: with stupid passphrase Name-Email: _ Expire-Date: 0 Passphrase: abc # Do a commit here, so that we can later print "done" :-) %commit %echo done
错误
在较旧的系统上,此程序应安装为 setuid(root)。这是锁定内存页所必需的。锁定内存页可防止操作系统将包含密码或其他敏感材料的内存页写入磁盘。如果您没有收到关于不安全内存的警告消息,则您的操作系统支持无需以 root 身份锁定内存。该程序在分配锁定内存后会立即放弃 root 权限。
请注意,某些系统(尤其是笔记本电脑)具有“休眠到磁盘”的功能(也称为“安全睡眠”或“休眠”)。这会在进入低功耗或甚至关闭状态之前将所有内存写入磁盘。除非操作系统采取措施来保护保存的内存,否则以后可以从内存中恢复密码或其他敏感材料。
在报告错误之前,您应首先搜索邮件列表存档,以查找类似的问题,然后检查该错误是否已报告到我们的错误跟踪器中,网址为 https://bugs.gnupg.org。
参见
gpgv(1), gpgsm(1), gpg-agent(1)
此工具的完整文档维护为 Texinfo 手册。如果您的站点上正确安装了 GnuPG 和 info 程序,则命令
info gnupg
应该可以访问完整的手册,包括菜单结构和索引。