PaperPhonePlus
微信风格的端对端加密即时通讯应用。
使用 React 19 + TypeScript + Vite 前端和 Rust (Axum) 后端重写,
获得极致性能和类型安全。
安全模型 — v2.4.7
- X25519 + ML-KEM-768 + XSalsa20-Poly1305 混合加密 — 消息准确标示实际采用的
PQ v2、降级后的 X25519 ↓ 或群聊 SK vN 协议
- 加密发送失败即停止 — 加密、密钥分发或安全存储失败时不会回退为明文发送
- 零知识加密范围 — 加密会话正文以密文存储;服务器仍会处理账号、好友/群组、路由和推送等必要元数据
- 本地秘密保护 — Web 使用 AES-GCM 包装的 IndexedDB;Android、iOS、Windows 和 macOS 客户端使用操作系统安全存储保存身份私钥与 Sender Key
- E2EE 之上的文本外观额外保险 — 正文先用共享额外密码加密并转换为 8 种外观之一,然后再由原有私聊 E2EE 或群聊 Sender Key 加密;密码不上传也不自动同步
功能亮点
- 📹 视频/语音通话 — 1:1 私聊和群会议统一使用 LiveKit SFU(最多 100 人,支持主席全员静音和讲课模式)
- 🎙️ 变声功能 — 语音消息 / 1v1 通话 / 群组通话均支持实时变声,3 档可选(0.8x 低沉 / 1.0x 正常 / 1.2x 尖锐),基于 Web Audio API 音频处理链
- 🎭 文本外观与额外加密 — 在“个人信息 > 消息隐私”中为本设备所有聊天设置额外密码,可选与佛论禅、随机中文、易经符号、韩文、埃及象形文字、楔形文字、核心价值观文本或英数字;支持立即锁定与 5/15/30/60 分钟后台自动锁定。私聊双方或群内所有成员需设置相同密码;密码不一致时 E2EE 和消息送达仍正常,但只能看到文本外观密文。该额外保险不替代、不绕过也不降级 E2EE
- ⏱️ 安全语音录制 — 最长 120 秒自动停止,录音期间保持屏幕唤醒,离开页面时可靠释放麦克风
- 📱 会话保持 — 30 分钟访问令牌与 90 天设备刷新会话,VPN/IP/网络变化时自动重连且无需输入密码
- 📨 可靠消息同步 — 双向心跳、持久化发件箱、消息幂等 ID 与服务端序号游标补偿
- 📴 离线访问 — 按账户隔离缓存联系人、群组、聊天记录、朋友圈、时间线和媒体;离线发送自动重试
- 🔎 Unicode 好友搜索 — 支持中文输入法组合状态、NFC 归一化和中文用户名/昵称搜索
- 👥 群聊 — 最多 2000 人群组,支持「加密」与「未加密」两种模式(群主可切换,切换清空历史消息)。加密模式采用 Signal 风格 Sender Key 协议(XSalsa20-Poly1305 对称加密 + ECDH 密钥分发),仅群成员可解密消息;加密模式下无法使用群机器人。免打扰模式,成员管理
- 🌐 朋友圈 — 文字 + 最多 9 张图或 1 个视频(≤10 分钟),点赞、评论、标签可见性控制
- 👤 个人资料 — 联系人资料页(朋友圈动态 +「不看此人朋友圈」与「不让他看我的朋友圈」双向隐私控制)
- 📰 时间线 — 小红书风格公开发帖区,双列瀑布流布局,最多50个图片/视频+2000字文字,支持匿名发帖、点赞、评论
- ⏱️ 消息自动删除 — 5 档可选(永不/1天/3天/1周/1月)
- 🔔 消息推送 — Web Push (VAPID) + FCM + OneSignal + ntfy + APNS 五通道(iOS 原生 + 国产安卓免 Google 服务)
- 🌐 多语言 — 中文、英文、日语、韩语、法语、德语、俄语、西班牙语
- 📱 iOS 永久免签 — Safari「添加到主屏幕」,无需企业证书
- 💬 富文本消息、图片、视频、文档文件(PDF/DOCX/XLSX 等带类型图标)、语音、Emoji(200+,8 分类)、Telegram 贴纸包、送达回执、打字状态
- 🗂️ Cloudflare R2 对象存储(图片、语音与视频)
- 🏷️ 好友标签 — 标签分类筛选通讯录 + 朋友圈可见性控制
- 🎭 Telegram 贴纸包 — 动态贴纸包管理,可自定义包列表(内置 13 个默认包),数量无上限
- 🔑 两步验证 (2FA) — Google Authenticator TOTP,8 个恢复码
- 📷 扫码加好友/入群 — 扫一扫二维码添加好友、加入群聊,群二维码可设置有效期(1周/1月/3月)
- 👫 好友系统 — 添加好友需对方审核,支持 512 字验证消息;备注名称;好友标签分组
- 📤 文件上传 — 单文件最大 500MB,支持 Cloudflare R2 或本地存储,带进度条动画
- 🌐 代理设置 — 支持 SOCKS5 / HTTP / HTTPS 代理协议,登录页和设置页均可配置(地址、端口、用户名、密码)
- 🛡️ 内容审核 — 用户举报(6 类原因)+ 拉黑用户(即时屏蔽动态/消息)+ 使用条款 EULA
- 🔧 管理后台 — 内嵌 Web 管理面板(
/admin,路径可通过 ADMIN_PATH 自定义),密码保护,审核举报、删除内容、封禁用户,支持 8 种语言
部署后操作
- 打开分配给 client 服务的域名。
- 注册账号 — 密钥在本地设备生成。
- (可选)在 server 服务设置
R2_* 变量,启用图片/语音/视频上传功能。
- (可选)设置
VAPID_* 变量启用浏览器推送通知,FCM_* 启用原生 Android 推送(Capacitor),APNS_* 启用 iOS 原生推送。
- (可选)设置
TELEGRAM_BOT_TOKEN 和 STICKER_PACKS 启用 Telegram 贴纸包功能。
- (可选)访问
/admin(或自定义 ADMIN_PATH)进入管理后台审核举报。生产环境请设置 ADMIN_PASSWORD。
- 升级后先检查 server 日志并确认健康检查通过,再更新客户端;切换一次 VPN/网络并进行一次断网发送,验证自动恢复且消息只入库一次。
- v2.4.6 升级后模拟密钥获取失败,确认加密消息明确发送失败且不会传输明文,并核对协议标签与实际信封一致。
- 锁定额外消息加密后点击解锁,确认密码框提示“输入解锁密码”而不是“设置密码”,并抽查所需界面语言。
- 在“个人信息 > 消息隐私”开启额外聊天记录密码,依次检查 8 种文本外观,确认设置对所有聊天生效;等待所选后台锁定时间后返回,确认输入正确密码前只显示完整文本外观密文,不暴露原文、协议前缀、盐值或 IV;随后尝试关闭,确认即使当前已解锁也必须重新输入正确的额外密码。
MySQL 已使用 utf8mb4 和 utf8mb4_unicode_ci 启动;server 启动时会自动迁移并验证消息序号、幂等 ID、刷新会话及搜索字符集字段。升级时必须先重新部署 server,等待健康检查通过后再更新客户端;生产升级前请备份 MySQL。
Zeabur LiveKit 通话说明
本模板会部署 LiveKit 的 WebSocket/API(7880)和 ICE/TCP 回退端口(7881)。
Zeabur 当前不支持对外暴露 UDP 服务端口,因此私聊和群会议可以通过 TCP 连接,但弱网下延迟和画质可能不如 UDP。
模板已保留 UDP 7882 配置,待 Zeabur 支持 UDP 后即可开放。当前如需生产级百人会议,建议使用
LiveKit Cloud,或把 LiveKit 部署到可开放 UDP 7882 的云主机,再修改 server 的 LIVEKIT_URL。
进阶方案:Zeabur + Vercel 混合部署
部署完成后,可以手动删除 Zeabur 上的 client 服务,改用 Vercel 部署前端。
这样 server/MySQL/Redis 由 Zeabur 托管,前端由 Vercel CDN 加速,全球访问更快。
Vercel 中设置环境变量 VITE_API_URL 指向 Zeabur 上 server 服务的公网域名即可。