分離したGPG署名を確認するときに何が起こるのかを理解しようとしています。
以下はgnupgの例です。手動:
blake% gpg --verify doc.sig doc
gpg: Signature made Fri Jun 4 12:38:46 1999 CDT using DSA key ID BB7576AC
gpg: Good signature from "Alice (Judge) <[email protected]>"
gpgは署名が良いかどうかはどうすればわかりますか?署名に署名されたファイルのハッシュが含まれていますか?それでは、署名自体からそのハッシュをどのように抽出できますか?
試してみましたgpg --list-packets <signature>
が、完全な情報が表示されないようです。
答え1
この--list-packets
オプションを使用してgpgファイルの内容をダンプできます。ファイル形式の説明は次のとおりです。RFC 4880(OpenPGP規格)。
署名にはハッシュ値は直接含まれません。これには、ハッシュと送信者を確認するための情報が含まれています。署名検証アルゴリズム、ハッシュ値と公開鍵を入力として返します。はいまたはいいえ;アルゴリズムを返すはい与えられた公開鍵に対応する秘密鍵で署名が行われたかどうかを返します (与えられた秘密鍵を含むメッセージから)。いいえ他のすべての場合(異なるハッシュを持つ署名、別のキーで生成された署名、またはまったく署名になることができないバイトの束)。下にDSAアルゴリズム、秘密鍵がなければ、署名からハッシュを抽出することは不可能だと思います。
署名ファイルには、署名者の識別情報と署名値が含まれます。署名を確認するために、gpg はキーリングから署名者の公開鍵を読み取り、データのハッシュを計算し、署名検証アルゴリズムを適用します。
答え2
$ gpg --list-packets myfile.asc
[...]
digest algo 10, begin of digest 77 dd
これはどのダイジェストアルゴリズムが使用されるかを示しています。残念ながら、マニュアルページには、gpg --version
どのアルゴリズムがどのIDに割り当てられているかを教えてくれません。この情報を見つけるには、パケット形式のRFCを詳しく調べる必要があります。https://www.rfc-editor.org/rfc/rfc4880#section-9.4
ID Algorithm Text Name
-- --------- ---------
1 - MD5 [HAC] "MD5"
2 - SHA-1 [FIPS180] "SHA1"
3 - RIPE-MD/160 [HAC] "RIPEMD160"
4 - Reserved
5 - Reserved
6 - Reserved
7 - Reserved
8 - SHA256 [FIPS180] "SHA256"
9 - SHA384 [FIPS180] "SHA384"
10 - SHA512 [FIPS180] "SHA512"
11 - SHA224 [FIPS180] "SHA224"
100 to 110 - Private/Experimental algorithm
答え3
はい、デジタル署名は通常、署名者の鍵で署名されたセキュリティハッシュです。
メッセージ全体に署名するのははるかに遅く、より安全ではありません。また、アルゴリズムはブロックの長さ、パディング(あまり情報を公開しないように)などを考慮する必要があります。
注:また、非対称暗号化では、速度上の理由で一時対称鍵のみが非対称暗号化され、残りのメッセージは対称暗号化されます。