web-dev-qa-db-ja.com

鍵が別の鍵によって署名されたことを確認します

GNU Windowsのプライバシーガードの実装であるGPG4Win/Kleopatraの使用を開始しました。最近では、ガイドが提供されているQubes OSのダウンロードを確認したいと思います here 。それらは、Qubes OSの特定のバージョンに署名するものなど、より少ない鍵に署名するために使用されるマスター公開鍵(RSA 4096ビット)について記述しています。正しいより低い鍵で署名された分離署名ハッシュを使用してダウンロードを確認できました。より小さいキーがマスターキーによって署名されていることを確認するにはどうすればよいですか(署名が提供されていない場合)?

この質問は別の動機になります:署名はどのように「通常」コンテンツに付随しますか? PGPやTLSなどは、署名を暗号文またはパディングされたプレイメージと単純に連結しますか、それとも2つの別個のファイル/パケットが必要ですか?事前にどうもありがとうございました。

4
Polite Master

鍵の署名の確認

短い答えは、コマンドgpg --list-sig <key id>を使用することです。

たとえば、上記のサイトにアクセスして、Qubesリリース2署名キーをダウンロードしました。次に、そのキーをローカルのgpgキーリングにインポートしました。

$ gpg --import qubes-release-2-signing-key.asc

次の結果になります

pub   rsa4096/0A40E458 2012-11-15 [SC]
uid   [ unknown] Qubes OS Release 2 Signing Key

鍵が署名されているかどうかを確認するには、コマンドgpg --list-sig <key id>を使用できます。

この場合、上の出力からキーIDが0A40E458であることがわかります。

$ gpg --list-sig 0A40E458
pub   rsa4096/0A40E458 2012-11-15 [SC]
uid         [ unknown] Qubes OS Release 2 Signing Key
sig 3        0A40E458 2012-11-15  Qubes OS Release 2 Signing Key
sig          36879494 2012-11-15  [User ID not found]

最後のエントリはQubesマスターキーですが、キーリングにないため不明です。次にマスターキーをダウンロードして、キーリングに追加すると、次のようになります。

$ gpg2 --import ./qubes-master-signing-key.asc 
gpg: key 36879494: public key "Qubes Master Signing Key" imported
gpg: Total number processed: 1
gpg:               imported: 1

もう一度確認すると、リリースキーが正しく署名されていることがわかります。

$ gpg2 --list-sig 0A40E458
pub   rsa4096/0A40E458 2012-11-15 [SC]
uid         [ unknown] Qubes OS Release 2 Signing Key
sig 3        0A40E458 2012-11-15  Qubes OS Release 2 Signing Key
sig          36879494 2012-11-15  Qubes Master Signing Key

署名の確認

Gpgキーを使用してファイルに署名すると、個別の署名ファイルが作成されます。 qubesの例では、.DIGESTSファイルをリリースしています。そのようなダイジェストを確認する方法の詳細については、提供したリンクの見出し「ダイジェストの確認」を参照してください。

基本的に、彼らが行ったことは、彼らから来たとされるファイルを取得し、それに対してさまざまなハッシュアルゴリズムを実行することです。ハッシュ関数は入力ファイルまたはメッセージを受け取り、一意のかなり短いハッシュ文字列を出力します。これは、同じ出力を生成する他のファイルを見つけることが非常に困難またはほぼ不可能になるように暗号化されて作成されます。

次に、このハッシュ文字列にGPGキーで署名します。ハッシュとそのハッシュテキストの署名の両方が.DIGESTSファイル内に配置されます。

このプロセスで注意する重要な部分は、検証中の元のファイルを変更すると、完全に異なるハッシュ文字列が生成されることです。したがって、検証コマンドを実行すると、ローカルマシンで起こっていることは、システムが特定のファイルの独自のハッシュを作成し、署名されたテキスト内のハッシュと一致することを確認することです。両方が一致し、署名が信頼することに決めた鍵からのものであることが確認された場合、鍵の所有者がダウンロードしたファイルのバージョンに「署名」していることがわかります。

7
Dave Satchell

調号の適切な検証は、次のように--check-signaturesを使用して実行されます。

$ gpg --check-signatures
pub   rsa4096 2017-03-06 [SC]
      5817A43B283DE5A9181A522E1848792F9E2795E9
uid           [ unknown] Qubes OS Release 4 Signing Key
sig!3        1848792F9E2795E9 2017-03-06  Qubes OS Release 4 Signing Key
sig!         DDFA1A3E36879494 2017-03-08  Qubes Master Signing Key

良い/悪い署名の数の概要も最後に表示されます...

gpg: 2 good signatures

小さな詳細のように見えますが、gpgがキーに関する重要な情報を伝える方法は、残念ながら不可解です。 sig指定子の直後に!感嘆符が続かない限り、調号は良い/正しいと報告されません。悪い署名はマイナス記号として表示されます。 「list」コマンドを使用しても、この検証は実行されません(--list-sigを使用すると、欠落している記号に注意してください)。これが問題です。

1
tasket