GnuPGを使用してテキストのクリア署名を行う場合、署名されたメッセージにハッシュ部分があります。例を見てください:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
abc
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEZZvqE5j3koIxs9Xim0+E4a5Vo2cFAlkRdvQACgkQm0+E4a5V
o2ew2QgAzHuvZ7Hlb6+3qRLjc9Yhdi+6tBmNWXbWpKoAQxpzx6jKQp/FSpQeGWuj
RxcYnqU3pk4ycMLtaCFcfnHEW5N0B95eXGcurgMGz7A6xhy0hy25x8WBdeKVAQ+2
PLA2ytJLUn2L1S3ueqJWcdVUBRaiczOOsYvvO
...
...
-----END PGP SIGNATURE-----
ただし、ハッシュアルゴリズムは、キー(またはサーバー)ごとに異なります。SHA1、SHA256、SHA512の場合もあります。
これ、キーまたはGnuPGクライアントを決定するものは何ですか?これに関する情報が見つかりません。gpg
新しいキーを作成する場合、ハッシュアルゴリズムを指定するオプションはありません。
更新:質問を明確にするために、以下に情報を追加しました。上記の出力例を生成するために使用されるコマンドは次のとおりです。
gpg --clearsign
(私のシステムでは、gpgバージョンはgpg2です。)
次に、ランダムなテキストを入力すると、上記の結果が表示されます。特定の「ハッシュ:」値で出力を生成する方法を知りたいですか?たとえば、SHA1?
ハッシュアルゴリズムは、OpenPGP(この場合はGnuPG)の実装によって選択されます。どちらが選ばれるか
gpg --version
リストを出力します)、メッセージを暗号化するために、公開鍵に保存されている受信者の設定がさらに考慮されます。
特定の「ハッシュ:」値で出力を生成する方法を知りたいですか?たとえば、SHA1?
質問に答えるには、--digest-algo SHA1
オプションを使用します。
例として、SHA-256を使用したデタッチされた署名を次に示します。私は--clearsign
を使用しないので、一緒に石畳にしようとはしません。
gpg -a -u 1F8E37BD --digest-algo SHA256 --output test.txt.sig --detach-sig test.txt
-a
はASCIIアーマー出力を生成します。-u
は異なるキーの中から署名キーを選択します。--digest-algo
はハッシュを選択します。--output
は出力です。ファイル名。入力ファイル名は最後のオプションである必要があります。
ハッシュとその値のリストは RFC 4880、セクション9.4 で入手できます。 SHA-1は2、SHA-256は8です。
次の方法で署名を監査できます。
$ cat test.txt.sig | gpg --list-packets | grep "digest algo"
digest algo 8, begin of digest 05 94
その場合に起こるはずのことは、メッセージのハッシュを生成し、キーを使用してメッセージを暗号化することです。反対側は反対のキーを使用してハッシュを復号化し、メッセージのハッシュを作成して、添付したハッシュと比較します。
カウンターパートが使用したハッシュの種類を知ることは重要ですが、キーとハッシュの間に直接的な相関関係はありません。