大統一Debian勉強会 2013 (gumdebianjp2013)

  • 日時: 2013/06/29(土) (そのうちGnuPG BoFは 13:30〜14:00)
  • 会場: 日本大学 駿河台キャンパス
  • 運営: 「大統一Debian勉強会」実行委員会
  • 参加人数: 100+名
  • 実行委員長: 岩松 信洋

GnuPG BOF

大統一Debian勉強会2013に参加し、アンカンファレンス形式での集まりで、GnuPG BoFを開催しました。

30分くらいの話をしました。参加人数3名(鍋太郎さんとTakuro君と僕)。

話したこと

  • 本の話: Philip R. Zimmermann, The official PGP user's guide, MIT Press, 1995
    • ラオックスコンピュータ館で当時、見た。OCRでスキャンを想定した出版物。
  • 本の話: Simson Garfinkel, PGP: Pretty Good Privacy, O'Reilly, December 1994
  • Zimmermann さんは、インターネットの殿堂入りです: http://www.internethalloffame.org/
    • あら、今年は RMS も!
  • たしかにZimmermannさんはイノベータでしょう。
    • 宇宙から来た知能生命体から受け取ったのではないか、というくらいの革新。
    • 現在のGnuPGでも(ハッシュや暗号方式は変わったし、実装は全然別だが)基本的構成は同じ。
  • 有名になったのには苦難の歴史があったことも一因。
    • RSA Security, Inc. の特許の問題。
    • 合衆国の輸出規制の問題。
      • Debian にも non-us というのがあった。
  • PGP 1.0 は GNU GPL で公開されたが、その後、レビューは受けるけれど(他人の)改変は許さないものとなった。
    • 自由ソフトウェアの代替が求められるようになり、これが GnuPG の始まりである。
    • GnuPGから数えても、早、15年。
  • g新部はずっと使っていたはずで、2011年からGnuPGの開発にも参加するようになり、コミット数1%くらいはやっている。
  • が、しかし、基本的な概念や慣習を正しく理解していなかったことに、今週気がついたのですよ。
    • 記憶をたどれば15年前は誤解していなかった(はず)。
    • WoT とはなんでないか
    • KSPとはなんでないか
    • 「信頼」について(客観的なものであるかのように)全く誤解していた。
    • 「信任」というように、"trust" の訳を変えてみるのもありかも。
    • たとえで、説明しているうちに「...のような」の「ような」が抜けてしまったたか。
      • OpenPGPは、階層的な認証局がない代わりに、それぞれがそれぞれを「認証」するのだ。
        • これ ↑ は、たとえ。実際どうだか、ちゃんと吟味しましょう。
    • 「AならばB」を説明しているうちに「BならばA」に転じてしまったのか。
      • DD候補として推薦されるには、当該の開発者の公開鍵は DD に署名して証明されていることが必要。(正しい。「署名」は必要条件。)
      • DDに署名されているならば、(DD候補としてというように十分信頼されて)身分保証されているということ。(正しくない。「署名」は十分条件じゃない。)
  • 「暗号」とか思考停止しがちなもの、「信頼」とか感情的なものが乗りやすいものには注意しないとイカンですな。
  • スピンドクターも怖いかもしれないが、一番怖いのは自分自身を(知らないうちに)だましちゃうこと。

Takuro君、誤解してはいけません!

「悪い」の判断をどこに置いているか、を気にしましょう。

  • 当局にとって都合の「悪い」人物であったことは、そうかもしれません。が、しかし、
    • 当局に訴追されたからといって、悪い人ではありません。
  • RSA Security, Inc. との問題があったからといって、悪い人ではありません。
    • (ソフトウェアに対する)特許を「悪いことである」という考えもあります。

「A ならば B」ということをTakuro君に説明する

上記のとおり、BoFでは、「AならばB」ということを 論理を間違って「BならばA」とすり替えて解釈すると困りますよ、 という話をしました。

Takuro君はまだ中学二年生なので、論理学(の初歩)を習得していないでしょう、か。

「AならばB」から言えること(同じこと)なのは、「BでなければAではない」です。これを対偶(たいぐう)と言います。

数式で書くと、「A ならば B」は、

A ⊢ B

と書きます。「ならば」(英語だとimplies)は、"⊢" という方向性を持った記号を使います。 (矢印を使うこともあります。) ここで図形として方向性があるのは意図的でしょう。 この時、AはB(が成り立つため)の十分条件と言います。Aが成り立つならば、Bは成り立つ、ということです。 また、BはA(が成り立つため)の必要条件と言います。Bが成り立つにはAが必要だ、ということです。

「BでなければAではない」は、

¬B ⊢ ¬A

と書きます。「B ならば A」は、

B ⊢ A

と書きます。このように数式で表現すると、直感でも「AならばB」から「BならばA」は違うだろう、 という感じがするでしょう。

ここで、今回の話で、二つの命題A, Bを考えましょう。

  • A: ある人Nがある人MをDebian開発者として推薦する身元保証をしている。
  • B: ある人Nがある人Mの公開鍵に署名して証明している。

運用として、身元保証をする時は、かならず、

公開鍵のIDとUser IDを確認して、公開鍵に署名して証明する

のは意味のある行為で妥当でしょう。実際、Debianではそうしています。 そして、このプラクティスが守られているとき、「AならばB」と言えます。

そして、この時、言えるのは、BでなければAでない、つまり、 「署名して証明していない」のであれば、「身元保証はしていない」、ということです。

「署名して証明している」のだから、「身元保証をしている」、とはならないことに注意してください。 これは意味を逆に取り違えています。

論理、と言えば、僕が中学生の頃、以下の本を読みました。Takuro君も機会があったら、おもしろいから読んでみてください。学校の図書館にはないかも知れませんが、近くの図書館にはあるかも知れません。

  • 野崎 昭弘: 逆説論理学 中公新書 593

BoF をやった後のこと

鍵サーバを見てみたら、1994年に鍵を作って登録してありますな。

pub  2048R/4CA7BABE 2010-10-15 NIIBE Yutaka <gniibe@fsij.org>
                               NIIBE Yutaka <gniibe@debian.org>
pub  1024D/71D5F43A 2003-12-15 NIIBE Yutaka <gniibe@fsij.org>
pub  1024D/128F0E79 1999-11-03 Niibe Yutaka (GNU/Linux on SuperH Project) <gniibe@chroot.org>
pub  1024R/4A994FE1 1994-10-31 NIIBE Yutaka <gniibe@mri.co.jp>

2003年の古い鍵も 2004-10-30 に鍋太郎さんに署名してもらっていることが確認できました。

1999年の鍵は LinuxKongress に行ったときに署名しあったと記憶しています。ドイツ人多し。

1994年の鍵は PGP で作ってRSAだから、合衆国では特許の問題があったやつです。

併設KSPについて

33の鍵が事前に集められましたが一つはすでにrevokeされていました。 僕は、事前に登録されていない2名の方を含めて19名と(鍵の保持、および、鍵とUser IDの結びつきを)確認しました。

カンファレンス終了後にうちに帰って来てから署名を行い、メールで送信しました。

50数時間後までに、15名から、メールで署名が送信されて来ました。 なんと、全員がcaffを使っている模様。 全員なのには驚いた。また、ほとんどがRSA 4096-bitを使っているのにも驚いた。

なんか、みなさん手順に従うというところで、きちんとしてますな。 余裕があれば、考えるところをお願いします。

KSPの時に忘れがちなこと

  • 自分を証明するもの(パスポート)を持ってくるのを忘れてしまう。
  • 自分を証明するものがなにをどう証明しているのか勘違いしてしまう。
    • 運転免許証を見て、漢字が読めない、と言われても仕方ありません。
    • 漢字が読めたとしても、(厳密に考えれば)読みはなんら証明されていません。
  • 紙に印刷してくるのを忘れる。あるいは印刷したものを持ってくるのを忘れる。
    • 自分で印刷したのではないといけません。
      • 自分が事前にダウンロードしたものを自分のパソコンで確認する、のでも、自分のパソコンのコンピューティングに問題がないと信じられれば、良いでしょう。
      • 現場でダウンロードするのは、ネットワークのすり替えの可能性を吟味する必要が出てきます。
        • 現場で他人のパソコンで、かつ、不自由なオペレーティングシステムでは、そのコンピューティングに問題がない、とは言いきれないでしょう。
    • 現場で印刷するのは、プリンタに依拠します。
      • 該当のプリンタが遠隔操作されていないかなどを吟味する必要が出てきます。
    • 人の印刷したものをコピーする、というのは、その人に依拠します。
      • (意図的に/意図していないで)改竄している可能性を吟味する必要が出てきます。
  • 主催する側は、旅先で印刷することを強いないよう、事前に十分時間を取って鍵の取りまとめをしましょう。

KSPの後で忘れがちなこと

以下の二つは実行しないと反映されませんので気をつけましょう。

  • メールで署名してもらった鍵をインポートして、鍵サーバに送るのを忘れてしまう。
  • caff で署名したものを、普段自分が使うキーリングに入れておくのを忘れてしまう。

現時点で 僕は RSA 4096-bit を必ずしも推奨しません

  • RSA 4096-bitは現在、GnuPGのデフォルトではありません。
  • デフォルトではないものを推奨するのには注意してください。
    • 特に Web 上の文書などで、後になってそれが残ってしまうことが、ままあります。
  • 安全性を考慮するのであれば、トータルに考える必要もあります。
    • 何に対する安全性を考慮してRSA 4096-bitを選択するのか? これを考えてもバチは当たりません。
    • それよりも、ものすごーく、断然、危ういところがありませんか?
      • 自分の秘密鍵を共有のサーバに置いちゃうとか。複製を気にしないで作るとか。
      • 自分の秘密鍵を普通の PC のディスクに置いとくとか。
      • GnuPGが公開鍵暗号の秘密鍵をディスクに保存するときに使われるのは、現在、SHA1, AES128です。まぁ、一番弱いのはあなたのパスフレーズのエントロピーが十分でないことかもしれません。
    • 標準的なプラクティスとして推奨されるのは、公開鍵暗号 RSA 4096-bit に対応するのは、ハッシュ関数はSHA512、共有鍵暗号AES256 です。
    • OpenPGPのfingerprintに用いられるハッシュは SHA1 です。
  • 極端なケースの(自分の)安全性のために、なにを(みんなに)常に要求することになるか、考えましょう。
    • ストレージの量が必要になります。ディスクベンダが喜びます。これはビット数に比例だからそんなに厳しくないけど。
    • 計算量がとても増えます。地球温暖化が進む一助になります。どれくらい増えるか吟味してみましょう。
  • 「言われているからそうしてます」、というのはそれ自身が危ういかも。
    • 僕は、日に三度、振り返ります(大幅に脚色あり)。
      • 自分が自分の Gnuk Token を身につけているか。
      • 自由ソフトウェアの定義を忘れていないか。
      • 皆の自由なコンピューティングが脅かされていないか。

caff の思わぬ落とし穴

.caff/gnupghome のパーミッションに注意。 drwx------ と、 og-rwx しておかないと、(パーミッションの問題とは言われずに単になぜか)動きません。

もうひとつの倒錯

さらに別の倒錯のケースについて考えます。

公開鍵暗号の電子署名について、よくある説明をしてみます。

  • ファイルの電子署名によって、ある鍵で署名されたものであることが確認できます。

    • これを、該当の鍵で「署名されたものと証明されます」と表現しても間違いではないでしょう。
    • 「その鍵の持ち主によって署名されたものである」というのも、ほとんどの場合、正しいでしょう。
      • 注: 鍵が盗まれて、本人以外が使用している場合がありえます。
  • なりすましを避けるために、鍵(の User ID)と本人が結びつけられている必要があります。

    • このために確認して、鍵に署名して証明するわけ、ですね。
  • ファイルに電子署名だけでも、途中の経路での改竄がないことを確認できる、いう意味はありますが、大元が違う(なりすまし)ことがあることに注意してください。

  • ですから、ファイルに電子署名があり、その鍵が確認されたものである場合に限って、電子署名は、

    • ある名前の人によって、その持ち物の鍵で署名されたものである、と(鍵の盗難などを除き)確認される

    わけです。

こういった説明を受けて、なるほど、

  • 鍵は大事だ。
  • (OpenPGPの場合)鍵の署名による証明は大事だ。

となるわけです。後者の「証明」が拡大解釈されることについては、上記で説明しました。

ここでは、前者の「鍵」が拡大解釈される倒錯について述べます。

たとえば、OpenPGPを使えば、電子鍵が、「本人であることを証明してくれる」という表現。 これは、(よく言っても)拡大解釈です。正しい表現ではありません。倒錯です。

  • 鍵による署名をすることで、鍵を保持していることを証明することはできますから、その鍵が確認されたものであれば、鍵と併せて、User ID の持ち主であることを(鍵の盗難などの可能性を除けば)確認してもらえます。
  • 鍵に署名して証明してもらうのに、たとえばキーサインパーティで、政府の証明でもって、名前の本人確認がなされたことでしょう、と類推はできます。
  • ですから、電子鍵によって、User ID の名前である、ということについて、署名して証明した人を信じれば、正しかろうと考えられます。しかし、ここまでです。

政府の証明でもって(ほかの情報、たとえば生年月日、国籍などを含めて)本人である、 たとえば、(有効な)国民である、と証明されたことは事実かも知れませんが、 そういったことを鍵(と電子署名)は、なんら「証明」しません。

また、鍵によるアクセス制御についての説明で、「パスポートのようなもの」という表現によっても倒錯が生じますなぁ。