1.行业背景:部分行业的线上沟通承载着高度敏感的信息,一旦泄露将直接侵害用户权益、触碰监管红线。沟通内容必须对第三方(含平台/服务商)不可见。然而主流 IM 的内容以明文经过服务器,平台"看得见"——既无法满足合规审计,也伤害用户的隐私信任,直接拉低线上服务的接受度。
2.业务背景:
隐私方面:数据传输全程端到端加密,服务器只中转密文——加密密钥由通信双方在各自设备上协商生成,服务器仅有公钥、无任何解密能力。
可用方面:密文消息由服务器持久化,换设备登录后聊天记录完整恢复,服务器保管的是密文,用户保管的是钥匙。
换设备场景:旧手机私钥在 Keychain;新手机重新登录后从服务器拉取密文历史,用协商的共享密钥解密,记录完整恢复。
1.加密聊天:端到端加密(AES-256-GCM),服务器只中转密文,平台也无法查看内容;实时收发、自动重连、已读标记、输入中提示、回车发送
2.账号安全:私钥只存本机 Keychain 永不上传;JWT 登录、登出令牌即失效、登录限流防爆破、密码 bcrypt 加密存储
3.好友管理:邮箱搜索添加、申请/接受、联系人列表、删除
4.聊天列表:实时显示最后一条消息 + 时间 + 未读蓝点
5.换机不丢:密文存服务器,换设备登录记录完整恢复
6.工程可靠:25 个集成测试、Docker 一键部署、完整文档
1.整体架构
客户端-服务端两层:iOS(SwiftUI + CryptoKit)与 FastAPI 后端(异步 SQLAlchemy + PostgreSQL + Redis),HTTP 负责业务接口、WebSocket 负责实时通道,Docker Compose 一键部署。
2.认证实现
注册时客户端生成 X25519 密钥对,公钥上传、私钥存 Keychain;登录走 OAuth2 表单换取 JWT(HS256,含 jti/iat/exp,7 天有效);Redis 维护令牌黑名单(登出即失效)与登录限流(IP+邮箱 5 次/分钟);密码 bcrypt 12 轮哈希存储。
3.端到端加密实现
打开聊天时拉取对方公钥,本地完成 X25519 DH 协商 + HKDF-SHA256 派生共享密钥(服务器只有公钥,无法参与);消息用 AES-256-GCM(认证加密)加密为密文后经 REST/WS 传输;接收方用同一共享密钥解密——两端密钥一致依赖 DH 交换律。明文仅存在于设备内存,数据库只存密文。
4.实时通信实现
消息发送后由后端立即经 WebSocket 推送给接收方(发送带 5 秒超时、自动剔除僵尸连接,防止阻塞事件循环);客户端断线按指数退避自动重连;聊天列表通过 WS 推送 + 10 秒轮询双通道更新最后一条消息与未读状态。
5.数据存储
PostgreSQL 存用户、好友关系、消息密文;Redis 存令牌黑名单与限流计数;iOS 端 Keychain 存私钥与令牌,SQLite 缓存本地消息。历史消息从服务器密文拉取后客户端解密展示,实现换设备不丢数据。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论