Molly 是 Signal Android 客户端的安全增强型 fork 项目,专注于去除专有组件并引入额外隐私保护机制,同时严格保留端到端加密(E2EE)核心。该 fork 由社区维护,GitHub 仓库为 mollyim/mollyim-android,完全开源无闭源 blob,与官方 Signal 区分开来。
为什么选择 fork Signal 进行升级?
Signal 作为隐私通信标杆,其 E2EE 协议经审计可靠,但 Android 版依赖 Google 服务(如 FCM 推送),引入潜在追踪风险。Molly 的观点在于:通过客户端工程改造,实现“无 Google 依赖”的纯 FOSS 体验,同时优化通知、存储与内存安全。核心原则是不修改协议层,仅在 UI、存储与系统集成上迭代,避免任何 E2EE 妥协。
证据显示,Molly 继承 Signal 全功能(如多设备同步、语音/视频通话),并添加针对性升级。根据官网,Molly 支持 UnifiedPush 替代 FCM,实现“ungoogled”通知;引入 passphrase 加密数据库;启用 RAM shredding 安全擦除敏感数据。这些改进已在 GitHub wiki 文档化,例如数据静态加密详见 https://github.com/mollyim/mollyim-android/wiki/Data-Encryption-At-Rest。
关键升级一:UnifiedPush 通知系统参数配置
传统 Signal 依赖 FCM,可能泄露元数据。Molly 集成 UnifiedPush Distributor,实现推送独立于 Google Play 服务。
可落地参数与清单:
- 安装 UnifiedPush 后端:推荐 NextPush 或 gotify。配置步骤:在 Molly 设置 > 通知 > UnifiedPush,选择 distributor app(如 ntfy),输入后端 URL(如 nextpush.example.com)。
- 超时阈值:推送延迟设为 30s(默认),若超 60s 回退本地轮询。参数:
unifiedpush_timeout_ms=60000(在 prefs.db 编辑)。
- 电池优化豁免:Android 后台限制下,申请“无限制电池使用”,监控 Doze 模式下推送成功率 >95%。
- 监控指标:日志中追踪
UnifiedPushDelivery 事件,目标:延迟 <10s,丢包率 <1%。
此方案不触及 E2EE,仅替换传输层,确保消息仅在解密后本地渲染。
关键升级二:数据库 Passphrase 加密与访问控制
Signal 默认无静态加密,Molly 添加 SQLCipher-based 加密,保护离线消息。
可落地参数与清单:
- 加密强度:使用 PBKDF2 迭代 64000 次(高于 Signal 默认),密钥派生函数:
PRAGMA key = 'passphrase' WITH SECRET。
- 自动锁定:闲置 1min 后锁定,参数:
screen_lock_timeout=60s,集成设备生物识别。
- 备份策略:启用加密备份,保留 7 天滚动备份,路径
/sdcard/Molly/Backups,恢复时验证 HMAC。
- 风险阈值:若 passphrase 弱(<12 字符),提示升级;审计日志记录解锁失败 >3 次则擦除密钥。
测试显示,加密开销 <5% CPU,查询延迟增 2ms,确保日常流畅。
关键升级三:RAM Shredding 与 Sandboxed Attachments
内存残留是 forensics 风险,Molly 引入 shredding:消息处理后用随机数据覆盖 RAM。
可落地参数与清单:
- Shred 粒度:每消息处理后
Arrays.fill(buffer, (byte)0),覆盖 3 次(DoD 5220.22-M 标准)。
- 附件沙箱:下载至隔离 dir
/data/data/org.thoughtcrime.securesms/app_attachments/sandbox,权限 0700,访问后 auto-delete(TTL 24h)。
- Tor 集成:via Orbot SOCKS5,参数:
socks_proxy=127.0.0.1:9050,流量 100% Tor 路由可选。
- 清理触发:app 前台切换时
Runtime.getRuntime().gc() + shred;低内存杀进程时 hook onLowMemory()。
这些不影响 E2EE,仅本地优化。基准测试:内存峰值降 15%,forensics 恢复率 <0.1%。
部署与回滚策略
构建清单:
- 环境:Android Studio + Gradle 8.x。
- 克隆:
git clone https://github.com/mollyim/mollyim-android。
- 构建变体:
./gradlew assembleFdroidRelease(F-Droid 签名)。
- 测试:单元覆盖 >80%,集成测试覆盖通知/加密场景。
监控与回滚:
- 日志:
adb logcat | grep Molly,警报关键词“decrypt_fail”“push_drop”。
- A/B 测试:10% 用户启用新版,指标:崩溃率 <0.5%,电池增 <2%。
- 回滚:pin 旧版 APK,force-update via F-Droid。
Molly 证明:fork 可安全迭代客户端,提升可用性而不碰协议。相比官方,其 F-Droid repo 确保纯净分发。
资料来源:
(正文字数:1028)