OTR over XMPP
前回の表を見て個人的に驚いたのは「XMPP って生きてるんだ!」ってことだった。 いやだって,日本じゃさっぱり話を聞かないし Google は XMPP を見捨てて Hangouts に行っちゃうし。
で,調べてみたらかなりの数の XMPP クライアントが OTR をサポートしてるんだね。
私が使ってる Psi もいつのまにか OTR に対応した fork 版(Psi+)が登場していた。
でもロシア語 orz
というわけで,私のメッセージング環境を一新することにした。
電子メールとメッセージングの違い
前回,メッセージング・アプリの一覧から電子メール・アプリを除いたのには理由がある。 両者は根本的に異なる。 もっとも大きな違いは電子メールは stateless でその他のメッセージングは stateful であるという点である。 もう少し言うと,電子メールを除くメッセージング・システムは当事者間のひとつのセッションの中でのみメッセージが有効であり,それ以外ではメッセージは無効になる(し,無効にしなければならない)。 これを突き詰めていくと OTR(Off-the-Record) Messaging へと行き着く。
一方,電子メールのメッセージは永続的に存在し常に参照(検索)可能であることが要求される。 なので perfect forward secrecy にできないのだ。 暗号化電子メールの要件は以下のとおり。
- Confidentiality(機密性)
- Integrity(完全性)
- Authentication(認証)
- Non-repudiation(否認防止)
特に「否認防止」が重要。 あとから参照(検索)する可能性がある以上,そのメッセージを否認されては困るのである。
OTR の要件
OTR の要件は以下のとおり。
- Encryption (暗号化)
- Authentication (認証)
- Deniability (否認可能)
- Perfect Forward Secrecy
暗号化というのは当然 End-to-End 暗号化のことである。 暗号化は「機密性」と「完全性」の要請からきているもので,サービス・プロバイダが暗号鍵を持っている(または鍵を知りうる立場にある)のでは達成できない。
メッセージング・サービスの場合,
- セッション中,当事者以外にはメッセージ内容が秘匿されること
- セッション中のメッセージ内容が正しい(改竄やなりすましがない)ことが保証されること
- セッション終了後は,いかなる時点でもメッセージ内容が再生されないこと
が必要となる。 このためには単にメッセージや鍵を捨てるだけではダメで,万一メッセージ内容が漏れた場合でも,その内容を客観的に「否認」できなければならない。 セッション中はメッセージの完全性を求めるが,セッション外では「否認」できなければならないという結構アレな要求である。
詳しくは以下を参照のこと。
Pidgin の導入
前回の表より Windows デスクトップ用には Pidgin を導入することにした。 いや Psi+ はロシア語だし。 しょうがないよね。
Pidgin で OTR 機能を使うためには OTR プラグインを導入する必要がある。 プラグインは以下のページから取得できる。
Windows 版ではインストーラを起動して何も考えずにインストールしてしまえば OK。 Pidgin を起動しなおせば OTR がプラグインのリストに含まれているのがわかるだろう。
OTR 関連の操作はチャット・ウィンドウから可能。
Start private conversation
を選ぶと(初回だけ)鍵を生成し,相手との鍵交換を開始する。
相手がなりすましていないかどうか確かめるために Authenticate buddy
を選んで相手の認証を行う。
認証方法としては以下の3つが選択できる。
- Question and Answer(質問とその答え)
- Shared Secret(共通の秘密)
- Manual Fingerprint Verification(公開鍵のフィンガープリントを確認)
いずれも相手と別チャネルで事前に(またはリアルタイムで)情報を共有しておく必要がある。 (結局この問題に戻るんだよなぁ)
携帯端末側の XMPP クライアント
前回の表では携帯端末用の XMPP クライアントとして ChatSecure が上がっていたが,私としては OpenKeychain と連動できる Conversations を推しておく。 あとはお好みで。 まぁ iOS 環境だと Conversations は対応してないのだが。 あと Conversations は Hangouts と相性が悪い感じ。 なんなんだろうねぇ。
XMPP 用にアカウントを取得しました
Google が Hangouts に行っちゃったので, Gmail アドレスじゃない JID を取得する必要がある。 なので,公衆 XMPP サーバでアカウントを取得した。
- spiegel@xmpp.jp
xmpp.net によると xmpp.jp はかなり成績いいみたいなので(SASL で SCRAM が使えるみたいだし, TLS の暗号スイートもひと通りのものが使えるようになっている)こっちでいいかな,と。
今後はこちらからのフィードバックも受け付けます。 各ページの案内はそのうち更新します。 あ, Gmail アドレスは今までどおり XMPP でもアクセスできます。 あと Facebook チャットも XMPP 対応しました。 これで Facebook Messanger 捨てれる。