在GnuPG(GPG)中,如何清除ed25519密钥的低3位?

在GnuPG(GPG)中,如何清除ed25519密钥的低3位?

前段时间,我使用gpg命令行实用程序生成了一个 ed25519 GnuPG (GPG) 密钥对。现在,当我将此密钥导入时gpg,我收到一条警告:

gpg: key 0123456789ABCDEF: public key "User Name <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg: key 0123456789ABCDEF: "User Name <[email protected]>" not changed
gpg: warning: lower 3 bits of the secret key are not cleared
gpg: key 0123456789ABCDEF: secret key imported
gpg: Total number processed: 1
gpg:              unchanged: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1

据我随意搜索后了解到,此消息:warning: lower 3 bits of the secret key are not cleared是由密钥中的潜在漏洞引起的,这可能是因为我使用早期版本的创建了此密钥gpg

有没有办法“解决”这种情况,同时保留密钥对?

答案1

对于椭圆曲线密钥使用时,edwards-25519/curve25519密钥的最低3位应该设置为零,以确保密钥是8的倍数,避免小子群攻击。

您可以以二进制形式编辑密钥,但是这种攻击很难发起,而且概率上也不太可能发生。

编辑:来自 GPG 代码:

  • 将使用正确调整的位生成新密钥,使用未调整位的密钥将发出警告

  • 添加了 CLI 命令 --edit-key [--check-cv25519-bits | --fix-cv25519-bits],允许修复旧密钥

答案2

在我进行了异常大量的深入挖掘之后......

这似乎是一个互操作性问题。除非您“跨越了不同的流”(在 OpenPGP、GnuPG、RNP 之间移动 = 导致在 2.3.3 中添加消息的那个),否则我不会担心它。这只是一个警告,意味着 GnuPG 知道有些不对劲(并希望能够妥善处理??)。

我找不到任何明确的证据来证实这一点,但从我所读到的所有内容来看,这似乎是合理的结论。如果其他人发现更多信息,我欢迎他们确认或纠正我。

这次袭击也并不容易。


血腥细节(胆小者勿看):

“gpg:导入错误的 cv25519 密钥时打印警告。[T5464]”

https://dev.gnupg.org/T5565

https://dev.gnupg.org/T5464

https://mailarchive.ietf.org/arch/msg/openpgp/-A0CgvBPqWGMw18UBhHE-Gy6LRM/

基本上,libgrypt 与“ed25519”的工作方式与其他算法存在差异(可以将其归类为“勘误表”),并且内部密钥格式和导出的密钥格式之间存在差异(位串的字节序、前导零处理等)。

它似乎只适用于用于加密的“ed25519”,因为用于签名的“cv25519”后来出现了,并且那个时候对于如何做事已经达成了一些一致(这是不同的!)

我曾经偶然发现了对导出的密钥进行十六进制编辑的说明,但我没有将其添加到书签中,并且再也无法找到它。

相关内容