我遇到了一个似乎无效的 PGP 公钥。该密钥是 GPG 支持的 secp256k1 公钥。事实上,即使密钥中有一个无效的 secp256k1 公钥,GPG 也允许导入该密钥。
运行--list-packets
密钥显示pkey
以46
前缀开头。我生成或在线找到的所有其他 secp256k1 公钥02
如果是压缩的,则以 开头,04
如果不是压缩的,则以 开头。以这两个前缀开头符合中学一级标准但没有关于46
前缀的内容。
# gpg --list-packets --verbose public_key_invalid.gpg
gpg: enabled compatibility flags:
# off=0 ctb=98 tag=6 hlen=2 plen=79
:public key packet:
version 4, algo 19, created 0, expires 0
pkey[0]: 052B8104000A secp256k1 (1.3.132.0.10)
pkey[1]: 4615813D2D31329D51E5A8E7C8EAA65637E9AD5DE00EA3FA65B2F1325ACED0A527B6D28E1818E1F3D797D37F3C7C8256FF5F711756255A25F422224540966ED708
keyid: F50C012FB632C4B9
# off=81 ctb=b4 tag=13 hlen=2 plen=35
:user ID packet: "Drew Carey Buglione <[email protected]>"
# gpg --allow-non-selfsigned-uid --import public_key_invalid.gpg
gpg: key F50C012FB632C4B9: accepted non self-signed user ID "Drew Carey Buglione <[email protected]>"
gpg: key F50C012FB632C4B9: public key "Drew Carey Buglione <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1
作为参考,这里是所讨论的密钥的十六进制数:
# xxd public_key_invalid.gpg
00000000: 984f 0400 0000 0013 052b 8104 000a 0207 .O.......+......
00000010: 4615 813d 2d31 329d 51e5 a8e7 c8ea a656 F..=-12.Q......V
00000020: 37e9 ad5d e00e a3fa 65b2 f132 5ace d0a5 7..]....e..2Z...
00000030: 27b6 d28e 1818 e1f3 d797 d37f 3c7c 8256 '...........<|.V
00000040: ff5f 7117 5625 5a25 f422 2245 4096 6ed7 ._q.V%Z%.""[email protected].
00000050: 08b4 2344 7265 7720 4361 7265 7920 4275 ..#Drew Carey Bu
00000060: 676c 696f 6e65 203c 6472 6577 4064 7265 glione <drew@dre
00000070: 7762 2e75 673e wb.ug>
这是格式非常规的 secp256k1 公钥吗?如果不是,GPG 会接受无效公钥吗?