Ugolok Ugolok にサインイン

技術とプロジェクトの構成

このページは「中身」をのぞいてみたい人向けです。アプリを使うために理解する必要はありません。

プロトコル

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 で誰でも完全に閲覧できるようになります。