技术与项目构成
本页面适合那些对"引擎盖下面"感兴趣的人。使用本应用并不需要理解这些内容。
协议
Ugolok 构建于 Nostr 之上——一个用于去中心化消息传递的开放协议。Nostr 的核心思想很简单:每个用户都拥有一对密钥(公钥和私钥),消息用私钥签名,并发布到一个或多个服务器(称为中继/relay)。没有人签发账户——身份完全由密钥决定。
加密
- 私信使用 MLS(Messaging Layer Security)——这与大型即时通讯工具中加密技术所依赖的协议类别相同。它提供前向保密性(forward secrecy):即使密钥在未来泄露,也无法追溯读取旧的对话内容。
- 频道内容使用单独的频道密钥加密——这里有意不采用前向保密性(频道本质上是一个多年后仍会被翻阅的档案,而不是一场应该被"遗忘"的对话)。
- 设备上的本地数据库同样经过加密——加密密钥由您的密码派生而来。
- 文件和附件在上传到存储服务器(Blossom)之前会单独加密——服务器只保存密文。
应用由什么构成
- Preact——一个轻量级的界面引擎(具有响应式特性,但体积比更知名的替代品小很多倍)。
- Dexie.js——浏览器内置数据库(IndexedDB)的封装层,您所有的聊天记录都本地存储于此。
- 加密基础组件——@noble 系列库(secp256k1、ChaCha20-Poly1305、SHA-256 等),MLS 的实现为 ts-mls。
- 整个应用被打包成单一的 html 文件——这样便于部署和更新。
服务端
- 中继(消息服务器)——使用 strfry,一个成熟且经过广泛验证的 Nostr 中继实现。
- Blossom——一个独立的协议和服务器,用于文件存储,与 Nostr 其余部分使用相同的密钥体系。
- 这两个组件任何人都可以自行搭建——请参阅个人资料设置中的自托管服务器部分。
开源代码
项目代码是开放的,最终将在 github.com/devugolok/ugolok 上供任何人完整查阅。