【社会服务赛道】SSP实时沟通——越简单越安全的沟通平台

1. Demo 简介

是什么

SSP 是一款端到端加密即时通讯应用,包含 Android 客户端、iOS 客户端和 Go 后端服务。所有消息采用 X3DH 密钥协商 + AES-256-GCM 加密,服务器仅转发密文,永远无法读取任何消息内容

面向谁

  • 对隐私安全有强烈需求的个人用户

  • 需要保密通讯的记者、律师、维权人士

  • 关注数据主权、不信任第三方云服务的用户

  • 希望拥有自主可控加密通讯能力的组织

主要功能

  1. 端到端加密聊天 — X3DH 密钥协商协议 + AES-256-GCM 对称加密,服务器零知识,私钥永远只在用户设备上

  2. 文件加密传送 — 任意文件类型加密传输,送达即删,1小时过期自动清理

  3. 语音消息与实时通话 — 加密语音录制传输,P2P 实时语音通话(WebRTC 信令中继,媒体直连)

  4. OTA 安全更新 — 应用内 256KB 分片下载升级,断点续传,无需应用商店

  5. 密码注册登录 — BCrypt 加盐哈希存储,防止撞库攻击

界面展示:

登录界面 通讯录 聊天界面
登录 通讯录 聊天

2. Demo 创作思路

灵感来源

在当今数据泄露频发的时代,主流即时通讯应用(如微信、WhatsApp)虽然宣称加密,但用户的密钥、消息仍需经过服务商的服务器,用户只能"信任"服务商不会窥探。Edward Snowden 事件和各类数据泄露事件反复证明:如果密钥不在你手上,加密就不属于你。 我想知道:一个普通人,借助 AI 编程工具,能不能从零构建一个真正"服务器零知识"的加密通讯系统?

想解决的问题

  • 服务端无法解密:当前主流即时通讯工具的服务端理论上可以访问用户明文消息,用户隐私完全依赖服务商的自觉

  • 消息持久化风险:消息长期存储在服务器上,即使加密也存在密钥泄露后被解密的风险

  • 信任过度集中:用户必须信任单一服务商的安全能力和商业道德,缺乏技术层面的保障

为什么做这个方向

加密通讯并非新话题,Signal、Matrix 等方案已经存在。但它们要么依赖中心化服务商,要么部署门槛极高。SSP 的核心取舍是:

  • 技术上:选择 X3DH + AES-256-GCM(Signal 协议核心),保证加密强度与行业标准一致

  • 架构上:服务器只做密文中继和信令转发,不持有私钥、不存储明文、不提供"解密"接口,从架构层面消灭窥探可能性

  • 体验上:让端到端加密对用户无感——注册、聊天、发文件、打电话,操作体验和普通 IM 一样简单


3. Demo 体验方式

在线体验

源码本地运行

# 克隆仓库
git clone https://github.com/Josslao/ssp-e2ee-chat.git

# 服务端
cd ssp-e2ee-chat/server
go build -o ssp-server ./...
STORAGE=redis REDIS_ADDR=127.0.0.1:6379 ./ssp-server

# Android 客户端
cd ssp-e2ee-chat/android
./gradlew assembleRelease
# APK 输出: app/build/outputs/apk/release/app-release.apk

4. TRAE 实践过程

项目开发全流程

本项目从零开始,全程使用 TRAE IDE 完成,涵盖后端服务、Android 客户端、iOS 客户端三个平台的开发。以下是关键开发阶段:

阶段一:加密协议设计与后端开发

  • 与 TRAE AI 对话,设计 X3DH 密钥协商协议的实现方案

  • AI 协助编写 Go 后端服务:用户注册、公钥存储、密文中继、WebSocket 推送

  • 使用 Bouncy Castle 实现 X25519 密钥交换 + HKDF 密钥派生 + AES-256-GCM 加解密

  • 服务器架构设计:仅提供密文中继,管理后台不包含任何"读取消息"、“解密”、"私钥"接口

阶段二:Android 客户端开发

  • TRAE AI 生成完整的 Android 项目结构(Kotlin + OkHttp + Bouncy Castle)

  • 实现端到端加密消息流程:本地生成密钥对 → 公钥上传 → X3DH 协商共享密钥 → AES-GCM 加密发送

  • 逐步添加功能:文件传送、语音消息、实时语音通话(WebRTC 信令中继)

  • UI 设计参考 Telegram/iMessage 风格,左右气泡布局

阶段三:安全加固与功能完善

  • 添加用户密码注册/登录(BCrypt 哈希)

  • 修复多 WebSocket 连接导致消息丢失的问题(单例 ChatService)

  • 聊天界面改为国际通用返回箭头,添加删除对话功能

  • 接收文件可保存到手机下载目录(MediaStore API)

阶段四:OTA 更新与部署

  • 实现 App 内在线升级功能

  • 解决移动网络下载不稳定问题:从整包下载改为 256KB 分片下载,每个分片独立短连接,彻底解决运营商连接重置

  • 服务器添加 Range 断点续传支持

  • 编译部署到云服务器,版本自动检查与更新

阶段五:iOS 客户端与开源

关键技术决策(与 TRAE AI 协作完成)

决策 选择 原因
加密协议 X3DH + AES-256-GCM Signal 协议核心,经过广泛安全审计
服务器架构 密文中继,零知识 从架构层面保证服务器无法解密
消息存储 送达即删 + 7天TTL 最小化密文留存时间
文件存储 Redis 密文缓存1小时 下载后立即删除,不过期不留存
OTA 更新 256KB 分片下载 移动网络短连接更稳定,抗运营商重置
密码存储 BCrypt 加盐哈希 防止撞库和彩虹表攻击

Session ID

以下为使用 TRAE IDE 开发本项目的关键 Session ID:

  • 6a4b630a1aea188e262223c2 — 核心功能开发:加密协议、Android 客户端、消息推送

  • (开发过程中持续使用 TRAE IDE 进行对话式编程,完整 Session 记录可在 TRAE IDE 中查看)


5. 安全设计说明

为什么"服务器零知识"很重要

传统即时通讯的信任模型是:用户信任服务商不会滥用数据。但这种信任是脆弱的——服务商可能被黑客攻击、被政府要求交出数据、或被商业利益驱动分析用户内容。

SSP 的信任模型是:用户不需要信任服务商。因为:

  1. 私钥永远不在服务器上 — 用户注册时本地生成密钥对,仅上传公钥

  2. 服务器只看到密文 — 所有消息、文件在客户端加密后才发送

  3. 管理后台没有解密接口 — 管理员也无法读取消息内容

  4. 消息送达即删 — 服务器不持久化存储密文,最短生命周期

  5. WebSocket 推送不含密文 — 只推送消息 ID 和类型,客户端主动拉取密文

加密流程

发送方                                    服务器                                  接收方
  |                                         |                                       |
  |-- 1. 获取接收方公钥包 ----------------->|                                       |
  |<-- 2. 返回公钥包 ----------------------|                                       |
  |                                         |                                       |
  |-- 3. X3DH 协商共享密钥(本地)         |                                       |
  |-- 4. AES-256-GCM 加密消息(本地)       |                                       |
  |                                         |                                       |
  |-- 5. 发送密文 ------------------------>|-- 6. 存储密文,推送通知 ID ----------->|
  |                                         |                                       |
  |                                         |<-- 7. 接收方拉取密文 -----------------|
  |                                         |-- 8. 送达即删 ---------------------->|
  |                                         |                                       |
  |                                         |          9. X3DH 协商共享密钥(本地)  |
  |                                         |          10. AES-256-GCM 解密(本地)  |

6. 技术架构

层级 技术选型
加密协议 X3DH(密钥协商)+ AES-256-GCM(对称加密)+ BCrypt(密码哈希)
后端服务 Go + Redis + WebSocket
Android 客户端 Kotlin + OkHttp + Bouncy Castle + Google WebRTC
iOS 客户端 Swift + SwiftUI + Network.framework + STUN
OTA 更新 256KB 分片下载 + Range 断点续传

报名帖链接: (待发布后补充)

开源地址: https://github.com/Josslao/ssp-e2ee-chat