技術とプロジェクトの構成
このページは「中身」をのぞいてみたい人向けです。アプリを使うために理解する必要はありません。
プロトコル
Ugolok は、分散型メッセージングのためのオープンプロトコルである Nostr の上に構築されています。Nostr の基本的な考え方はシンプルです。各ユーザーは鍵のペア(公開鍵と秘密鍵)を持ち、メッセージは秘密鍵で署名され、1つまたは複数のサーバー(リレーと呼ばれます)に公開されます。誰もアカウントを発行しません — アイデンティティは完全に鍵によって定まります。
暗号化
- 個人間のやり取りには MLS(Messaging Layer Security)が使われています — 大手メッセンジャーの暗号化の基盤となっているのと同じ種類のプロトコルです。forward secrecy(前方秘匿性)を提供し、たとえ将来鍵が漏洩しても、過去のやり取りを遡って読むことはできません。
- チャンネルの内容は別のチャンネル鍵で暗号化されます — ここでは forward secrecy はあえて適用されていません(チャンネルは本質的に、何年も見返されるアーカイブであり、「忘れられる」べき会話ではないためです)。
- 端末上のローカルデータベースも暗号化されています — 暗号化鍵はあなたのパスワードから導出されます。
- ファイルと添付ファイルは、ストレージサーバー(Blossom)にアップロードされる前に別途暗号化されます — サーバーは暗号文しか保存しません。
アプリの構成要素
- Preact — 軽量なUIエンジン(リアクティブでありながら、より有名な代替品より何倍も小さい)。
- Dexie.js — ブラウザ内蔵のデータベース(IndexedDB)のラッパーで、あなたのすべてのやり取りがローカルに保存されます。
- 暗号プリミティブ — @noble ファミリーのライブラリ(secp256k1、ChaCha20-Poly1305、SHA-256など)、MLS実装には ts-mls を使用。
- アプリ全体が単一のHTMLファイルにビルドされます — これにより展開と更新が簡単になります。
サーバー側
- リレー(メッセージサーバー)— 成熟し広く検証されているNostrリレー実装である strfry を使用。
- Blossom — ファイルストレージ用の別プロトコル・サーバーで、Nostrの他の部分と同じ鍵に紐づいています。
- どちらのコンポーネントも誰でも自分で構築できます — プロフィール設定内の自前サーバーのセクションを参照してください。
オープンソース
プロジェクトのコードはオープンであり、github.com/devugolok/ugolok で誰でも完全に閲覧できるようになります。