根据https://www.rfc-editor.org/rfc/rfc8032
EdDSA uses small public keys (32 or 57 bytes) and signatures (64 or
114 bytes) for Ed25519 and Ed448, respectively;但是,如果我在GPG中使用Ed25519签名,则签名的长度为144个字节:
$ gpg --list-keys
/c/Users/John/.gnupg/pubring.kbx
------------------------------------
pub ed25519 2021-02-26 [SC] [expires: 2024-02-26]
5D36E7C775DD890CC342A38EAA05320C465CBDC8
uid [ultimate] John Doe
sub cv25519 2021-02-26 [E] [expires: 2024-02-26]
$ echo "test" | gpg --sign -a --default-key 5D36E7C775DD890CC342A38EAA05320C465CBDC8
gpg: using "5D36E7C775DD890CC342A38EAA05320C465CBDC8" as default secret key for signing
-----BEGIN PGP MESSAGE-----
owGbwMvMwCG2itWIxy1m7wnG09xJDAkW9z1LUotLuDpKWRjEOBhkxRRZYs2eHy+9
28lz2GlxH0wxKxNIJQMXpwBMpLqMkeHRubiENY5d012eXfJuLpnk8byifbVzrkCW
5VrhhcL/LY0YGV5/i3jWzSo4k1Fia6EEo4DZ+X+zD8yfbtP74NchS89NbpwA
=9T7d
-----END PGP MESSAGE-----解码后的base64字符串对应于144个字节。我估计会有64个字节。我遗漏了什么?
发布于 2021-02-26 13:02:28
OpenPGP不生成原始的Ed2519签名。它包括关于已签名的内容、用于预散列数据的散列、用于签名的键以及其他信息的其他数据。例如,如果在签名文件上使用gpg --list-packets,则会得到以下内容:
# off=0 ctb=a3 tag=8 hlen=1 plen=0 indeterminate
:compressed packet: algo=1
# off=2 ctb=90 tag=4 hlen=2 plen=13
:onepass_sig packet: keyid AA05320C465CBDC8
version 3, sigclass 0x00, digest 8, pubkey 22, last=1
# off=17 ctb=cb tag=11 hlen=2 plen=11 new-ctb
:literal data packet:
mode b (62), created 1614339913, name="",
raw data: 5 bytes
# off=30 ctb=88 tag=2 hlen=2 plen=117
:signature packet: algo 22, keyid AA05320C465CBDC8
version 4, created 1614339913, md5len 0, sigclass 0x00
digest algo 8, begin of digest 7b 76
hashed subpkt 33 len 21 (issuer fpr v4 5D36E7C775DD890CC342A38EAA05320C465CBDC8)
hashed subpkt 2 len 4 (sig created 2021-02-26)
subpkt 16 len 8 (issuer key ID AA05320C465CBDC8)
data: [256 bits]
data: [256 bits]这表示存在一个压缩数据包、一个单向签名包(用于指定用于允许实现计算签名而不需要查找的参数)、一个文字数据包(带有数据"test\n")和一个签名包。签名包表明这是一种使用散列算法8 (SHA-256)的0x00 (二进制数据)签名,由密钥5D36E7C775DD890CC342A38EAA05320C465CBDC8创建。结尾有两个256位的值,它们是Ed25519签名本身.
https://security.stackexchange.com/questions/245413
复制相似问题