我正在尝试在 bash 脚本中创建无人值守的 ECC PGP。它看起来像这样:
cat >ecc <<EOF
Key-Type: ECC
Key-Length: 521
Subkey-Type: ECC
Subkey-Length: 521
Name-Real: Test
Passphrase: secret
Expire-Date: 0
%pubring gpg.pub
%secring gpg.sec
%commit
EOF
gpg --batch --yes --no-tty --gen-key ecc
这对于 RSA 密钥来说非常有效,但对于上面的 ECC 示例,它表示:
gpg: key generation failed: Unknown elliptic curve
如何指定要使用的椭圆曲线?
答案1
我是 Fedora 用户,但 Ubuntu 粉丝们请听我说。我也遇到过同样的问题,所以这是我的解决方案,适用于带有 GnuPG 2.1.13 的 Fedora 25,当然也适用于 Ubuntu。这是 Thomas 答案的修改版。按如下方式设置 Key-Type 和 Subkey-Type(我使用的是 nistp256,但请使用您的系统支持的任何曲线):
密钥类型:ECDSA
密钥曲线:nistp256
密钥长度:256
子密钥类型:ECDH
子密钥曲线:nistp256
子密钥长度:256
如果使用 ECC 作为密钥类型和子密钥类型,gpg 将会产生这样的错误,并且公钥将是 ECDH,而不是 ECDSA。
gpg:读取数据包剩余部分时出错:参数无效
gpg:读取数据包剩余部分时出错:参数无效
gpg:无法将 256 位 MD 编码为 72 位帧,算法 = 8
gpg:无法将 256 位 MD 编码为 72 位帧,算法 = 8
另请注意,在 GnuPG v2.1 及更高版本中,选项%pubring和%分泌被忽略(https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html),所以不要使用它们。
最后,看看这个https://www.gnupg.org/faq/whats-new-in-2.1.html#ecc关于使用哪些曲线,这是一篇很好的文章。事实上,对我来说,v2.1.13 在手动命令期间只列出了以下内容:
$ gpg2 --expert --full-gen-key
...
(3) NIST P-256
(4) NIST P-384
(5) NIST P-521
答案2
赞扬@upteryx 的出色回答,这是一个完整的 GPG 密钥生成脚本使用 EDDSA (ed25519) 进行签名(主密钥),使用 ECDH (曲线 25519) 进行加密(子密钥)。与 @upteryx 的方案的主要区别在于:
密钥类型:EDDSA
关键曲线:ed25519
子密钥类型:ECDH
子密钥曲线:cv25519