Baldanders.info

OTR over XMPP

前回の表を見て個人的に驚いたのは「XMPP って生きてるんだ!」ってことだった。 いやだって,日本じゃさっぱり話を聞かないし Google は XMPP を見捨てて Hangouts に行っちゃうし。

で,調べてみたらかなりの数の XMPP クライアントが OTR をサポートしてるんだね。

私が使ってる Psi もいつのまにか OTR に対応した fork 版(Psi+)が登場していた。

でもロシア語 orz

というわけで,私のメッセージング環境を一新することにした。

電子メールとメッセージングの違い

前回,メッセージング・アプリの一覧から電子メール・アプリを除いたのには理由がある。 両者は根本的に異なる。 もっとも大きな違いは電子メールは stateless でその他のメッセージングは stateful であるという点である。 もう少し言うと,電子メールを除くメッセージング・システムは当事者間のひとつのセッションの中でのみメッセージが有効であり,それ以外ではメッセージは無効になる(し,無効にしなければならない)。 これを突き詰めていくと OTR(Off-the-Record) Messaging へと行き着く。

一方,電子メールのメッセージは永続的に存在し常に参照(検索)可能であることが要求される。 なので perfect forward secrecy にできないのだ。 暗号化電子メールの要件は以下のとおり。

  1. Confidentiality(機密性)
  2. Integrity(完全性)
  3. Authentication(認証)
  4. Non-repudiation(否認防止)

特に「否認防止」が重要。 あとから参照(検索)する可能性がある以上,そのメッセージを否認されては困るのである。

OTR の要件

OTR の要件は以下のとおり。

  1. Encryption (暗号化)
  2. Authentication (認証)
  3. Deniability (否認可能)
  4. Perfect Forward Secrecy

暗号化というのは当然 End-to-End 暗号化のことである。 暗号化は「機密性」と「完全性」の要請からきているもので,サービス・プロバイダが暗号鍵を持っている(または鍵を知りうる立場にある)のでは達成できない。

メッセージング・サービスの場合,

  1. セッション中,当事者以外にはメッセージ内容が秘匿されること
  2. セッション中のメッセージ内容が正しい(改竄やなりすましがない)ことが保証されること
  3. セッション終了後は,いかなる時点でもメッセージ内容が再生されないこと

が必要となる。 このためには単にメッセージや鍵を捨てるだけではダメで,万一メッセージ内容が漏れた場合でも,その内容を客観的に「否認」できなければならない。 セッション中はメッセージの完全性を求めるが,セッション外では「否認」できなければならないという結構アレな要求である。

詳しくは以下を参照のこと。

Pidgin の導入

前回の表より Windows デスクトップ用には Pidgin を導入することにした。 いや Psi+ はロシア語だし。 しょうがないよね。

Pidgin で OTR 機能を使うためには OTR プラグインを導入する必要がある。 プラグインは以下のページから取得できる。

Windows 版ではインストーラを起動して何も考えずにインストールしてしまえば OK。 Pidgin を起動しなおせば OTR がプラグインのリストに含まれているのがわかるだろう。

Pidgin - plugin list
Pidgin - plugin list

OTR 関連の操作はチャット・ウィンドウから可能。

Pidgin - OTR Menu
Pidgin - OTR Menu

Start private conversation を選ぶと(初回だけ)鍵を生成し,相手との鍵交換を開始する。 相手がなりすましていないかどうか確かめるために Authenticate buddy を選んで相手の認証を行う。 認証方法としては以下の3つが選択できる。

Pidgin - OTR authentication
Pidgin - OTR authentication
  1. Question and Answer(質問とその答え)
  2. Shared Secret(共通の秘密)
  3. Manual Fingerprint Verification(公開鍵のフィンガープリントを確認)

いずれも相手と別チャネルで事前に(またはリアルタイムで)情報を共有しておく必要がある。 (結局この問題に戻るんだよなぁ)

携帯端末側の XMPP クライアント

前回の表では携帯端末用の XMPP クライアントとして ChatSecure が上がっていたが,私としては OpenKeychain と連動できる Conversations を推しておく。 あとはお好みで。 まぁ iOS 環境だと Conversations は対応してないのだが。 あと Conversations は Hangouts と相性が悪い感じ。 なんなんだろうねぇ。

XMPP 用にアカウントを取得しました

Google が Hangouts に行っちゃったので, Gmail アドレスじゃない JID を取得する必要がある。 なので,公衆 XMPP サーバでアカウントを取得した。

xmpp.net によると xmpp.jpかなり成績いいみたいなので(SASL で SCRAM が使えるみたいだし, TLS の暗号スイートもひと通りのものが使えるようになっている)こっちでいいかな,と。

今後はこちらからのフィードバックも受け付けます。 各ページの案内はそのうち更新します。 あ, Gmail アドレスは今までどおり XMPP でもアクセスできます。 あと Facebook チャットも XMPP 対応しました。 これで Facebook Messanger 捨てれる。

参考図書

photo
新版暗号技術入門 秘密の国のアリス
結城 浩
SBクリエイティブ株式会社 2013-12-04
評価

プログラマの数学 数学ガールの秘密ノート/整数で遊ぼう インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 数学ガールの秘密ノート/式とグラフ 数学ガール/ガロア理論

まさに入門書。暗号がどのような要素技術で成り立っているのか体系的に理解できる良書。

reviewed by Spiegel on 2014/09/18 (powered by G-Tools)