我想要生成一个ECC密钥,其中主键仅用于cert,并且有3个用于auth、sign、encrypt的子键。
我找到了两种方法来生成它。但是我想使用无人值守密钥生成
gpg —-batch —generate-key与
--generate-key不同,密钥是直接生成的,不需要回答大量提示。除非给出选项--yes,否则如果给定的用户id已经存在于密钥环中,则键创建将被取消。-- 4.1.3如何管理您的钥匙
以下命令在交互模式下工作
gpg2 --expert --full-gen-key关键信息
sec ed25519/0x5842AA66BB63DA36 2019-07-18 [C] [expires: 2020-07-17]
Key fingerprint = FF1F E580 F6D3 453E BA88 DD98 5842 AA66 BB63 DA36
uid [ultimate] Name_test (Testing)
ssb ed25519/0x4F33E67F4B554A73 2019-07-18 [S] [expires: 2020-07-17]
ssb cv25519/0xDE2253D7DAD20F1A 2019-07-18 [E] [expires: 2020-07-17]
ssb ed25519/0x46A28F2FCC84A822 2019-07-18 [A] [expires: 2020-07-17]根据
以下命令在快速模式下工作
gpg --batch --passphrase '1Qaz@wSx' --quick-gen-key "Name_test (Testing) " ed25519 cert 1y
fpr=$(gpg --list-options show-only-fpr-mbox --list-secret-keys | sed -r -n '$!d;s@^([^[:space:]]+).*@\1@g;p')
gpg --batch --pinentry-mode=loopback --passphrase '1Qaz@wSx' --quick-add-key $fpr ed25519 sign 1y
gpg --batch --pinentry-mode=loopback --passphrase '1Qaz@wSx' --quick-add-key $fpr ed25519 auth 1y
gpg --batch --pinentry-mode=loopback --passphrase '1Qaz@wSx' --quick-add-key $fpr cv25519 encrypt 1y关键信息
sec ed25519/0xE8C6CF665ACABDB6 2019-07-18 [C] [expires: 2020-07-17]
Key fingerprint = 03A9 E9BD CF6A BF7F 62B4 BBDA E8C6 CF66 5ACA BDB6
uid [ultimate] Name_test (Testing)
ssb ed25519/0xBA77943ABAE5F238 2019-07-18 [S] [expires: 2020-07-17]
ssb ed25519/0x7272CF7C764BDB9E 2019-07-18 [A] [expires: 2020-07-17]
ssb cv25519/0xB42F8319BA8D0CBE 2019-07-18 [E] [expires: 2020-07-17]我读过如何批量生成ECC密钥,里面的配置是有效的。
配置内容
%echo Generating a OpenPGP key
Key-Type: eddsa
Key-Curve: Ed25519
Key-Usage: cert
Subkey-Type: ecdh
Subkey-Curve: Curve25519
Subkey-Usage: encrypt
Subkey-Type: eddsa
Subkey-Curve: Ed25519
Subkey-Usage: sign,auth
Passphrase: 1Qaz@wsX
Name-Real: Name_test
Name-Email: email_test@xxx.com
Name-Comment: Unattended Testing
Expire-Date: 0
%commit
%echo done我得到了错误信息
duplicate keyword如果我设置了Subkey-Usage: sign,auth,encrypt,它将显示错误
specified Subkey-Usage not allowed for algo 18这是因为cv25519用于加密,ed25519用于证书,签名,auth。
如果我只是
Subkey-Type: ecdh
Subkey-Curve: Curve25519
Subkey-Usage: encrypt它起作用了。
如果我设置
Subkey-Type: eddsa
Subkey-Curve: ed25519
Subkey-Usage: sign, auth它也能工作,但是sign、auth列在相同的子键中。
如何更改配置文件以使其工作正常?
发布于 2019-12-25 19:14:53
在上面的“无人值守生成”一节中,您列出了"Config内容“,以批量生成主密钥,然后为两个子键提供详细信息。
当将批处理文件处理的工具添加到GnuPG时,只提供一个子密钥的主密钥的批处理生成。
https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html
"Currently only one subkey can be handled."这就是为什么你要得到错误信息“重复关键字”。
为了通过脚本向一个键添加多个子键,不支持内置脚本,您应该查看
https://serverfault.com/questions/818289/add-second-sub-key-to-unattended-gpg-key
关于ed25519还有一个进一步的困难。创建用于“加密”的ed25519密钥或子密钥只有在GnuPG v2.1.7和支持libgcrypt的ed25519版本中才能实现。
https://www.gniibe.org/memo/software/gpg/keygen-25519.html
因此,除非您使用GnuPG v2.1.7 (使用适当的libcrypt),否则尝试创建用于加密的ed25519密钥或子密钥的错误消息将失败。
发布于 2020-12-31 11:21:04
在过去一周对这个领域进行了相当深入的探索之后,真正的问题似乎是为什么您不想像官方文件推荐的那样使用C1?也许值得一看这个2019年年会话,其中dkg重申了这个建议。
与此相关的是,如果您查看另一个答案中提到的服务器故障问题,您会注意到2019年年答复使用临时主目录显示了这个方法,无论您使用什么,都应该建议使用C5。
总之,至少有几种方法可以继续你所遵循的路线。
--quick-add-key在生成初始根密钥和子密钥(具有加密或签名功能)之后,只需添加两个缺少功能的加法子项即可。
--command-fd 0从STDIN传递输入
通过启用--command-fd 0,您可以将任何您想要的东西管道或重定向到GnuPG。这意味着您可以运行一个完整的--edit-key并进行脚本化的更改。这有点让人费解,而且您会发现,虽然--status-fd 2对调试很有用,但它并不必要。
您可以看到我是如何调整--command-fd 0以允许在此stackoverflow回答中进行非交互式密码短语更改的。
不管您采用什么方法,我认为您可能会从这个关于在不需要用户交互的情况下生成gpg键的服务器错误问题中受益。这些注释有一些关于随机数生成的好提示,以及在shell脚本中包含无人值守块的替代格式。
祝好运!
https://security.stackexchange.com/questions/213709
复制相似问题