HTTP + GPG でファイルを配布する際に、鍵はどうやって共有される想定なのか？


HTTP サーバーでファイルを配布する際に、 .sig ファイルを一緒に置いておきながら配布するパターンを見かけます。 例:
<http://ftp.gnu.org/gnu/emacs/>

.sig ファイルによる検証を gpg
で行うには、その公開鍵をどうにかして取得する必要があると考えていますが、この公開鍵の情報はどうやって取得する想定なのでしょうか。

[HTTP通信における、中間の攻撃者による内容の改竄について](https://ja.stackoverflow.com/q/25068/754)
で述べられた通り HTTP 通信は信用できないと思っています。というのも、「公開鍵は何であるか」を HTTP
で送ってしまっては、その情報自体が改竄されえてしまうと考えているからです。

鍵の情報だけを https で配布する、という構成ならば健全な方法だと思いますが、だったら最初からすべて https
でいいのでは・・・？と思ったりなどします。




PGPの公開鍵の正当性の確認には、[信頼の網（web of
trust）](https://ja.wikipedia.org/wiki/%E5%85%AC%E9%96%8B%E9%8D%B5%E5%9F%BA%E7%9B%A4#.E4.BF.A1.E7.94.A8.E3.81.AE.E8.BC.AA.EF.BC.88Web_of_Trust.EF.BC.89)という方法を用います。

入手手段（経路）としては、以下の2つが考えられます。

  1. 本人から直接手渡しで入手する。
  2. 既に信頼している人が署名した公開鍵を入手する。

そして、入手した公開鍵(a)に署名し、[信頼度を設定](https://www.gnupg.org/gph/en/manual.html#AEN335)します。

別の公開鍵(b)を入手した場合、その公開鍵(b)に署名している公開鍵(a)の信頼度が

  * 「常に信頼する(Fully trusted)」であれば、それ一つで公開鍵(b)も信頼します。
  * 「部分的に信頼する(Marginally trusted)」であれば、それ一つでは信頼しませんが、複数（個数は設定による）の部分的に信頼する公開鍵(a)で署名されていれば、公開鍵(b)も信頼します。
  * 「信頼しない(Never trust this key)」であれば、公開鍵(b)も信頼しません。

全てをHTTPSで配布しないのは、サーバーの負荷を抑えるためだと思います。

ちなみに、GnuPGはミラーサイトでは[HTTPやFTPで配布](https://www.gnupg.org/download/mirrors.html)されていますが、公開鍵は[HTTPSで配布](https://www.gnupg.org/signature_key.html)されています。




PGPの公開鍵の正当性の確認には、[信頼の網（web of
trust）](https://ja.wikipedia.org/wiki/%E5%85%AC%E9%96%8B%E9%8D%B5%E5%9F%BA%E7%9B%A4#.E4.BF.A1.E7.94.A8.E3.81.AE.E8.BC.AA.EF.BC.88Web_of_Trust.EF.BC.89)という方法を用います。

入手手段（経路）としては、以下の2つが考えられます。

  1. 本人から直接手渡しで入手する。
  2. 既に信頼している人が署名した公開鍵を入手する。

そして、入手した公開鍵(a)に署名し、[信頼度を設定](https://www.gnupg.org/gph/en/manual.html#AEN335)します。

別の公開鍵(b)を入手した場合、その公開鍵(b)に署名している公開鍵(a)の信頼度が

  * 「常に信頼する(Fully trusted)」であれば、それ一つで公開鍵(b)も信頼します。
  * 「部分的に信頼する(Marginally trusted)」であれば、それ一つでは信頼しませんが、複数（個数は設定による）の部分的に信頼する公開鍵(a)で署名されていれば、公開鍵(b)も信頼します。
  * 「信頼しない(Never trust this key)」であれば、公開鍵(b)も信頼しません。

全てをHTTPSで配布しないのは、サーバーの負荷を抑えるためだと思います。

ちなみに、GnuPGはミラーサイトでは[HTTPやFTPで配布](https://www.gnupg.org/download/mirrors.html)されていますが、公開鍵は[HTTPSで配布](https://www.gnupg.org/signature_key.html)されています。

