5

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 ac2番目の署名パケット用であることがわかります。私は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ましたが、それでも正しい値にハッシュする文字列を見つけることができません

4

1 に答える 1

2

署名パケットを生成するとき、それは常に誰かによる何かの署名です。つまり、署名されているデータのブロブと公開鍵があり、署名のポイントは、その正確なデータと対応する秘密鍵を持っている人だけが作成できるはずのものであるということです。

したがって、「署名されているデータ」は、そのデータのブロブがたまたまあるものになります。いくつかの例については、RFC4880のセクション5.2.1を参照してください。この場合、おそらく公開鍵ブロック内の署名パケットに関心があります。

1つ目は、「ユーザーIDと公開鍵パケット(0x13)の正の認証」です。これは、RFC4880のセクション5.2.4で説明されています。

2つ目は「サブキーバインディング署名」であり、主キー(DSAのもの)はサブキー(ElGamal暗号化のみ)がそれに属することを保証します。これが機能する方法は、RFC4880のセクション5.2.4でも説明されています。

5.2.4の関連テキストは次のとおりです。

キーに対して署名が行われる場合、ハッシュデータはオクテット0x99で始まり、キーの長さが2オクテット、キーパケットの本文が続きます。(これは、2オクテットの長さのキーパケットの古いスタイルのパケットヘッダーであることに注意してください。)次に、サブキーバインディング署名(タイプ0x18)またはプライマリキーバインディング署名(タイプ0x19)は、メインと同じ形式を使用してサブキーをハッシュします。キー(最初のオクテットとして0x99も使用)。キー失効署名(タイプ0x20および0x28)は、失効するキーのみをハッシュします。

その後

証明書の署名(タイプ0x10から0x13)は、キーにバインドされているユーザーIDを、上記のデータの後にハッシュコンテキストにハッシュします。V3証明書は、ヘッダーなしでユーザーIDまたは属性パケットパケットの内容をハッシュします。V4証明書は、ユーザーID証明書の場合は定数0xB4、ユーザー属性証明書の場合は定数0xD1、続いてユーザーIDまたはユーザー属性データの長さを示す4オクテット番号、ユーザーIDまたはユーザー属性データをハッシュします。

于 2012-06-07T00:00:42.823 に答える