25144


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

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

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

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


CC BY-SA 3.0
2016-05-23T15:31:17.440
25119
2016-05-30T15:17:45.913
2017-04-13T12:52:39.113
-1
754
question
security
HTTP + GPG でファイルを配布する際に、鍵はどうやって共有される想定なのか？


公開鍵のサーバーがあるので、そこから取得できます。これはhttpsではありませんが、それ以前に単に「アップロードされた公開鍵を保存している」だけですから、その公開鍵が正規の発行元のものかどうかはわかりません。

ですから、その公開鍵が信用できるかどうかは自分で判断することになります。

鍵の持ち主のサイトなどに載っている鍵指紋と比較することが多いと思いますが、これは確かに改竄されている可能性があります。それでもInternetArchiveなどのサイトで最近不自然に変更されていないか確認したり、別回線からアクセスしてみたり、その人が署名した別の信頼できるコンテンツを探してみたりすることで、ある程度調査をすることは可能です。

また公開鍵そのものと併せて「ある公開鍵に対して第三者が行った署名」も公開されていますから、それを辿って行って、例えばLinusの鍵で署名されたAさんの鍵で署名されたBさんの鍵はLinusの鍵並みに信用できそうだ、といった判断の仕方もできます。

ちなみにGNUプロジェクトの場合、公開鍵はGNUプロジェクトのFTPでも配布されています。

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

署名なしのパッケージをhttpsで配布するだけでは、サーバー上でのファイルの改竄や破損を検知することはできません。よって署名の存在意義は残りますが、どうせ署名を検証するんだったらサーバーに負荷をかけるhttpsでパッケージをダウンロードさせなくてもいいでしょう。

信頼できるURLからhttpsで公開鍵をダウンロードするというのは、Debian系のAPTなんかでやっていることですね。

## 参考

  * [How to verify an OpenPGP key's ownership? - Information Security Stack Exchange](https://security.stackexchange.com/q/96314)
  * [Shouldn't GPG key fetching use a secure connection? - Information Security Stack Exchange](https://security.stackexchange.com/q/4161)


CC BY-SA 3.0
2016-05-23T18:17:43.103
25122
2016-05-23T18:17:43.103
2017-03-17T10:46:11.453
-1
8000
25119
answer


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)されています。


CC BY-SA 3.0
2016-05-24T15:11:05.200
25144
2016-05-24T15:11:05.200
7291
25119
answer


emacs の signed key がほしくってこの質問をそもそもしていたのですが、 <https://ftp.gnu.org/gnu/gnu-
keyring.gpg> から(少なくとも HTTPS で) かぎ一覧を取得できることがわかりました。


CC BY-SA 3.0
2016-05-30T15:17:45.913
25316
2016-05-30T15:17:45.913
754
25119
answer