RFC 4880は、バージョン4の署名パケットであるタグ2を次のように記述しています。
- One-octet signature type.
- One-octet public-key algorithm.
- One-octet hash algorithm.
- Two-octet scalar octet count for following hashed subpacket data.
Note that this is the length in octets of all of the hashed
subpackets; a pointer incremented by this number will skip over
the hashed subpackets.
- Hashed subpacket data set (zero or more subpackets).
- Two-octet scalar octet count for the following unhashed subpacket
data. Note that this is the length in octets of all of the
unhashed subpackets; a pointer incremented by this number will
skip over the unhashed subpackets.
- Unhashed subpacket data set (zero or more subpackets).
- Two-octet field holding the left 16 bits of the signed hash
value.
- One or more multiprecision integers comprising the signature.
最後から2番目の行は、ハッシュされたサブパケットの文字列を取得し、ハッシュアルゴリズムを使用してハッシュし、最初の2バイトを取得することを意味すると思います。しかし、私が何をしても、私はそれを得ることができないようです。
私はずっと前にこの偽の鍵を生成しました
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.39
mQGiBE5B0h8RBAD533Z5bK1IpBx02QyQL0QoJE4uFRIMGDiwXuwmZzVl+R7Vlurd
GRLsCCbE6vOOh7XQVZGzLEBy9WNzZ9m+EbCfSVAYkjS6FhLws6hG6irrnS+b3JBf
gFJ8vNGF9Z7bhx+7y7NBk0IMyWkGnUkcnav73t5FQUI2faEBN4c/yAGJZwCgjcB7
3akWk9XVWvTCsiMXxpyvkukEALXsvB6cOoFEtQq9cQHjP63fBlvD94dhhMiM0cH6
hW9JotxdK+cxFGG9ZIWgoN2PWbMJka/H4W5EL6tS+YiNAR7I1Ozkt6X16GjnQUzZ
MlSpleK+KiKVN2anRaPEoOIinHrE3ZXd6QlJ/4+OJn4IVWmSEaJpFf4QNgvEu4rh
xinyBAD2RNzREOA+wpnFZ4lDt9NZXmXdxQME/l0J9XcvWhpGsxA/MATQKImy7N49
7GT/M38F+TrpBobag1O3buE99fOLyws4Tbc+sZMdHxoiGZDAIRNQS2rv475E6ktj
7vd5CYvOkA6+8sX1+hPcNlkHtHB1OFkJRsYp6k0zkyC9adjBM7QTYWJjIDxtYWtj
bUBhYWEuY29tPohGBBMRAgAGBQJOQdIfAAoJEDBSJUXPd92GRSQAoItbtbToOg7a
/hcg2sA/aBEQNwuxAKCGR69vmSoCWoBP5waPk0UsjM3BSbjMBE5B0h8QAgCUlP7A
lfO4XuKGVCs4NvyBpd0KA0m0wjndOHRNSIz44x24vLfTO0GrueWjPMqRRLHO8zLJ
S/BXO/BHo6ypjN87Af0VPV1hcq20MEW2iujh3hBwthNwBWhtKdPXOndJGZaB7lsh
LJuWv9z6WyDNXj/SBEiV1gnPm0ELeg8Syhy5pCjMAf9QHehP2eCFqfEwTAnaOlA6
CU+rYHKPZaI9NUwCA7qD2d93/l08/+ZtFvejZW1RWrJ8qfLDRtlPgRzigoF/CXbR
iEYEGBECAAYFAk5B0h8ACgkQMFIlRc933YZRrACfUnWTjHHN+QsEEoJrwRvFmvzj
bR4An24pTpeeN+I6R59O/sdmYsAhjULX
=sStS
-----END PGP PUBLIC KEY BLOCK-----
私がやるべきだと思うこと:
sha1("\x05\x02\x4e\x41\xd2\x1f") = "52f07613cfd61c80d2343566a8f3f487a0975b80"
\x05 - length of subpacket
\x02 - subpacket type
\x4e\x41\d2\x1f - creation time
pgpdump.netから、ハッシュ(SHA 1)値の残りの2バイトは45 24
、最初の署名パケットと51 ac
2番目の署名パケット用であることがわかります。私は52 f0
両方のために得ています。明らかに、私はいくつかの情報を含んでいませんが、それは何ですか?ハッシュ化されたサブパケットは同一であり、ハッシュ化されたデータの前のすべてのデータは、異なるタイプの署名パケット(0x13 / 0x18)であることを除いて、同様に同じです。データパケットから文字を追加/取得しても、正しいハッシュ値のいずれかを取得できませんでした。生成されるキーimは、ハッシュ値を除いて、ここに示されているキーとまったく同じです。
ハッシュする必要のあるデータは何ですか?
編集:これが少し後で見つかった場合:
The concatenation of the data being signed and the signature data
from the version number through the hashed subpacket data (inclusive)
is hashed. The resulting hash value is what is signed. The left 16
bits of the hash are included in the Signature packet to provide a
quick test to reject some invalid signatures.
しかし、署名されているデータは何ですか?署名の前のすべてのパケット?現在の署名パケットの前のパケットだけですか?
そこにある重要な例はで構成されていpacket 6 + packet 13 + packet 2 + packet 14 + packet 2
ます。packet 6
、、、packet 13
および(バージョン番号からハッシュデータまで)のあらゆる種類の組み合わせを試しpacket 2
ましたが、それでも正しい値にハッシュする文字列を見つけることができません