最近、エンドツーエンド暗号化の仕組み、信頼がどのように機能するのか、そしてなぜ信頼が暗号の真正性を保証しMITM攻撃を回避する上で極めて重要であるのかについて、より深く学びました。本日より、Jabber上での今後のエンドツーエンド暗号化通信には、強化されたOMEMO信頼ポリシーを適用します。

要約(TL;DR)

この記事の最後にあるOpenPGPメッセージを私のOpenPGP公開鍵で検証し、署名が有効であれば、以下の8つのフィンガープリントをあなたのJabberクライアントで信頼してください:

146614A4 A28D568E 2491DBF4 432AF3AD 23B5FB40 7040D732 55031B56 0096B36A
2BCBC6B0 F28E8015 9FFA69CC CFE90042 90285C0A 96605915 4DB56134 6804E451
E551B50A 91A332B2 A967C861 08F70299 C466C798 709997DF 3742BA35 8A5D3036
5D49448C 4C9282DE BABE51C4 CD7C80EB C3D4A231 3F51A98A 8F011C46 0E72685D
853B4672 DF3AA335 2D6819E0 AA7E341B D64BE04D 31620525 FDD3F443 D0FC2929
EBE2B559 46D07ECA 9BF8F18C 5C897CE8 66FD1C18 8B842EB0 6D17A04E BDDD3D42
A95CBAEB 810112B2 FE8F5992 A7DFC5B4 742B376B 15A8F58B B135195E 88E9BB60
A398B7A0 7014A253 7CCE9FEB 007EA82A 1D8CA17A 79C07435 462F78E9 47115B0E

そして非常に重要なのは、(クライアントが対応していれば)私との会話での盲目的な信頼(Blind Trust)を無効にし、それ以外のOMEMOフィンガープリントをすべて拒否することです。それらは既に使用されていないか、攻撃者によるものです。

OMEMOとは?

OMEMOとは、Andreas Straub氏によって開発された、XMPP(拡張可能メッセージングおよびプレゼンスプロトコル)のマルチクライアント対応エンドツーエンド暗号化のための拡張機能です。Straub氏によれば、OMEMOはDouble Ratchetアルゴリズムを利用して「複数クライアント間での暗号化通信を可能にし、一部のクライアントがオフラインであっても安全にメッセージを同期できる」ように設計されています。「OMEMO」とは、「OMEMO Multi-End Message and Object Encryption」の再帰的頭字語です。この仕様は、Double RatchetアルゴリズムとPersonal Eventing Protocol(PEP, XEP-0163)に基づくオープンスタンダードです。OMEMOは、将来及び前方秘匿性、否認性、メッセージ同期、オフライン配信を提供します。

OMEMOは、非対称暗号と対称暗号を組み合わせて安全なエンドツーエンド暗号化通信を実現します。しかし、MITM(中間者)攻撃の問題を完全に解決することは出来ません。

MITM攻撃とは? なぜMITM攻撃はE2EEを破るのか?

MITM(Man-in-the-Middle、中間者)攻撃とは、通信している2者の間に第三者が秘密裏に割り込み、通信内容を盗聴・改ざんする攻撃です。被害者は直接通信していると信じているため、攻撃者の存在に気付きません。

エンドツーエンド暗号化(E2EE)は、通信する当事者のみがメッセージを読めるように設計されています。しかし、公開鍵の交換段階で攻撃者に鍵がすり替えられると、攻撃者は平文を復号・再暗号化して送信することが可能になり、通信の秘匿性が破られます。

今後のJabber通信に適用される新しい信頼ポリシー

2025年4月12日以降、私のJabberアカウントのOMEMO鍵を慎重に管理し、Jabber上での連絡先との信頼関係を構築していきます。既にOpenPGPで相互に信頼(互いの鍵を検証・署名済み)を築いている方々とは、OpenPGPの信頼を通じて直接Jabber上の信頼を構築します。他の方々については、可能であれば他の信頼できる手段(例:対面)でそのOMEMOフィンガープリントを検証し、私のものも確認してもらいます。

注意点:

  1. 以下の7つのフィンガープリントは私が検証済みであり、信頼されています:
146614A4 A28D568E 2491DBF4 432AF3AD 23B5FB40 7040D732 55031B56 0096B36A
2BCBC6B0 F28E8015 9FFA69CC CFE90042 90285C0A 96605915 4DB56134 6804E451
E551B50A 91A332B2 A967C861 08F70299 C466C798 709997DF 3742BA35 8A5D3036
5D49448C 4C9282DE BABE51C4 CD7C80EB C3D4A231 3F51A98A 8F011C46 0E72685D
853B4672 DF3AA335 2D6819E0 AA7E341B D64BE04D 31620525 FDD3F443 D0FC2929
EBE2B559 46D07ECA 9BF8F18C 5C897CE8 66FD1C18 8B842EB0 6D17A04E BDDD3D42
A398B7A0 7014A253 7CCE9FEB 007EA82A 1D8CA17A 79C07435 462F78E9 47115B0E
  1. 以下のフィンガープリントは、私のPixel 6(GrapheneOS使用・ブートローダーはロック済み)のものであり、紛失後でも容易に侵害されないため、他の7つよりも信頼度が高いです:
A95CBAEB 810112B2 FE8F5992 A7DFC5B4 742B376B 15A8F58B B135195E 88E9BB60

OpenPGP公開鍵を信頼している方は、この記事末尾のOpenPGPメッセージを検証してください。

信頼関係を築けていない相手との通信では、BTBV(Blind Trust Before Verification)を有効のままにしますが、その相手の身元は信頼しません。MITM攻撃を防ぐためです。

その他の重要事項

以下の点にもご注意ください:

  1. 現在、上記8つ以外のOMEMOフィンガープリントは存在しません。しかし、これら以外の鍵からのメッセージを受信した場合や、プロフィールにこれら以外の鍵が表示された場合、(OpenPGP公開鍵を信頼しているなら)適当な文を作成して私に送り、その文に私がOpenPGPで署名し、そのOMEMO鍵を使う端末で署名を返すように求めてください。私がそれを行えない場合は、その鍵を絶対に信頼しないでください。拒否してください。
  2. Jabberアカウント czl92783719@vern.cc も私のものですが、ほとんど使っておらず、私のWebサイトにも記載しておらず、信頼管理もしていません。そのアカウントは信頼しないでください。私のメインJabberアカウント czl92783719@autistici.org とその8つのOMEMOフィンガープリントのみを信頼してください。

Matrixについて

MatrixはJabberとは少し異なり、1つのアカウント内のすべての端末が互いを検証し、1つの身元と鍵を共有します。したがって、Matrixでの信頼構築はJabberよりも簡単であり、「端末」ではなく「連絡先」を検証する仕組みです。

検証用のOpenPGPメッセージ

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

I acknowledge that these OMEMO fingerprints of my XMPP account are verified by me, and are confirmed to be trusted:
146614A4 A28D568E 2491DBF4 432AF3AD 23B5FB40 7040D732 55031B56 0096B36A
2BCBC6B0 F28E8015 9FFA69CC CFE90042 90285C0A 96605915 4DB56134 6804E451
E551B50A 91A332B2 A967C861 08F70299 C466C798 709997DF 3742BA35 8A5D3036
5D49448C 4C9282DE BABE51C4 CD7C80EB C3D4A231 3F51A98A 8F011C46 0E72685D
853B4672 DF3AA335 2D6819E0 AA7E341B D64BE04D 31620525 FDD3F443 D0FC2929
EBE2B559 46D07ECA 9BF8F18C 5C897CE8 66FD1C18 8B842EB0 6D17A04E BDDD3D42
A95CBAEB 810112B2 FE8F5992 A7DFC5B4 742B376B 15A8F58B B135195E 88E9BB60
A398B7A0 7014A253 7CCE9FEB 007EA82A 1D8CA17A 79C07435 462F78E9 47115B0E
-----BEGIN PGP SIGNATURE-----

iQJGBAEBCAAwKRxDYXJ0ZXIgWmhhbmcgPGN6bDkyNzgzNzE5QGF1dGlzdGljaS5v
cmc+BQJn+kc7AAoJEAb0MMC3f8K50BkP/0vfwV1GXvLn3AcvSaM53ZWJ6cYSmi7b
SmPoIAQrYj0lGqANOp/+2UWgT1SXFfKmkeUlq2sOdTwCWibM2HUr7vuvD9kER+oe
e+49OrFfijUv+spDNhQ5tyM59cNMcF+0u0JX9lr+ZpgES4aWMMcnYDQ+vySyaDLM
8vIy+3W+i/794KdL5DbKId0AMmYo+Gz9OVtY8/BKOT4WPQGG5fl2O6346oIedKH/
O2FfMp6d6YnMLcp3CvKXbPVi6XgmoYTGiFfTnCG2+rCGuxQH1nCvVdPmvrJfxnRm
3nW86Y+iGLGEWRZP3kP6chEgE7RT+YIzC7cICSC2qImM+GlTIK4TtFH2pvGjD8A5
X1JowdwICuLZ7l/MLowoBs5KpTldHJuyetpdhA7RPA13vqgJtFhxbYASjwFxxjNq
qRZJgWWxpsgNwvcyxIZWD49rie6o5QLu09o4hwSGm9AT7DRWE2Ht9tTBaKMotS2v
+Ydzko4ZEN5JQ6n0ySrp9l02hrkYQtu0h4PNsWmHtYRKgx4/ZHgdpDSdtN8vf4x6
RqjiTlvZS3DnhIJ7hpiQJeJFbGaa+pUZsM6s4K3AWH0Sp7QmrnWI1WJlYrvdda7s
lqvo0p6HueS/RWxvE0eImXzizAd/Di7NC7Hl3eRdibiSDs/1mDDyMylE4Oe3JtX/
YXGPMCs6EU08
=Bi1t
-----END PGP SIGNATURE-----