返回资讯中心
外部精选
软件工程
#开发者实时流

FreeSpeech 推出无需账号的去中心化加密通讯应用,用户可自建中继服务器

来源标题:FreeSpeech Messenger – Decentralized messaging with your own relay servers

FreeSpeech Messenger 发布,主打端到端加密且无需手机号或邮箱注册,身份由手机本地根据三个短语生成。其服务器只转发消息、不存储任何内容,收件人离线时消息暂存发送方手机。用户可同时接入多个公共或私有服务器,任何人都能自建中继,协议不依赖特定框架。

Hacker News 最新rebisway2026/11/12 · 今天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

无需账号、端到端加密的消息应用,服务器不保留任何数据。 网站 · Google Play · GitHub 镜像 · 协议 · 架构 · Français FreeSpeech 是一款即时通讯工具,使用时无需向任何人提供手机号或电子邮箱地址。你的身份由三个短语在你的手机上计算生成,你发送的所有内容在离开设备之前都会在本地完成签名和加密。 服务器只做一件事:在已连接的设备之间传递消息。它们不存储任何内容。当收件人离线时,消息会留在发件人的手机上等待,一旦收件人重新上线便立即发出。 你可以同时接入多台服务器,公共或私有的都行,任何人都可以架设自己的服务器。协议在本仓库中有完整规范,不依赖任何特定框架,因此客户端或服务器可以用任何语言编写。 FreeSpeech 具备你对一款即时通讯工具的常规期待:文字消息、回复、emoji 回应、编辑和删除消息(可仅对自己或对所有人生效)、正在输入提示、可关闭的已读回执、群组、图片、视频和文件,以及每个会话独立的静音开关。如果一条消息的第一行是 md,它将以格式化形式显示(标题、列表、粗体、斜体、链接)。 一个群组拥有单一的共享密钥。每当有人加入、离开或被移除时,该密钥就会更换,这正是阻止被排除者读取后续内容的关键。离线成员可以向其他成员索取错过的消息,而那些消息的发送者不必在线。邀请从来不是自动生效的:被邀请者必须接受邀请,并在那里选择自己在该群组中显示的名字和头像,与他们在其他地方使用的不同:两个群组无法通过名字或头像被关联起来。在群组中,一个勾选标记会标示出哪些成员是你的联系人(在你比对过他们的安全码之后会变为金色)。 文件大小上限为 2 GiB;发送大文件前应用会要求你确认(大小由你自行设定),收到的文件在下载前会显示其大小,中继服务器可以限制每个人每天发送的总流量。文件被切成 48 KiB 的分块,每一块都通过 Merkle 证明进行校验,中断的传输会从断点处续传。在群组中,任何已经拥有该文件的人都可以发送其中的一部分,因此发件人的手机并不是唯一的来源。图片在发送前会被缩放,视频会被重新压缩。 两个人可以比对安全码,以确认没有人篡改过他们的密钥交换。本地数据库是加密的,PIN 码为可选项。三个短语可以打印在带有二维码的纸张上,也可以保存在受密码保护的文件中。 Android 应用支持通过二维码或一次性卡片添加联系人,同一身份可在多台设备上运行,可接收其他应用分享的内容,并已翻译为法语、英语和西班牙语。通知只会唤醒应用,绝不会包含消息文本。 你的三个短语经过 Argon2id 和 HKDF 处理,生成两对密钥,一对用于加密(X25519),一对用于签名(Ed25519)。公钥的指纹就是你的标识符。获取它无需在任何地方注册。 要成为联系人,两个人需要交换一张卡片,其中包含他们的公钥、昵称以及所使用的服务器,形式可以是二维码或一次性代码。 只有当你发送内容时服务器才会介入。应用对消息签名,用新的临时密钥加密,然后通过 WebSocket 交给服务器。服务器能读取信封上的信息,即谁发给谁,除此之外别无其他。如果收件人在线,服务器就投递消息,当收件人连接在邻近服务器上时则通过那台服务器转发。如果不在线,消息会留在发件人的待发队列中。通知唤醒收件人的手机,应用重新连接,队列随即清空。收件人验证签名,然后解密。 Alice Bob (手机) (手机) │ 消息签名,然后加密 ▲ ▼ │ ┌──────────┐ 链路经双方接受 ┌──────────┐ │ │ 中继 A │◄──────── 管理员 ───────►│ 中继 B │─┘ └──────────┘ └──────────┘ 不保留任何数据 不保留任何数据 一个尚不知道任何中继的新应用,会在首次连接时向目录查询一次,哪些公共中继接受新账号。目录返回一份签名的列表,并且不保留任何关于客户端的信息。此后目录就不再参与。两台公共服务器在双方管理员都接受链路后成为邻居。图表位于 sources/diagrams/;以 -en 结尾的文件为英文版。 当 Alice 写信给 Bob 时,她的应用连接到 Bob 的服务器并将信封投递到那里。Bob 以同样的方式回复,投递到 Alice 的某台服务器上。因此每台服务器只能看到自己用户所接收的内容,永远看不到完整的对话,除非通信双方都在同一台服务器上。 因此,选择服务器意味着掌控你所参与的那一半通信。一台入门级 VPS 就足以托管你自己的服务器,安装过程可按照 Debian 或 Ubuntu 上的分步指南进行(INSTALL_RELAY.en.md)。对于敏感对话,限定身份列表的私有服务器可以将通信保持在成员之间。它可以与公共服务器并存:联系人卡片会列出两者,但私有服务器的地址不会出现在其中,只有一个其成员能识别的标识符。 局限:当 Alice 连接到 Bob 的服务器时,Bob 的服务器能看到 Alice 的 IP 地址;而私有服务器的可信度取决于其管理员。这减少了服务器所知道的信息,但无法防止事后密钥被盗(参见「局限」)。 用途 原语 身份,由三个短语派生 Argon2id(32 MiB,t = 3),然后 HKDF-SHA256 每条消息的密钥协商 临时 X25519,HKDF-SHA256 加密 ChaCha20-Poly1305 签名 Ed25519,绑定到发件人、收件人和消息类型 群组 每个 epoch 一个共享密钥,每次成员变更时更新 文件 48 KiB 分块,SHA-256 Merkle 树 本地数据库 SQLite,内容逐字段加密 连接两台服务器

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →