Skip to content

🔒 Monica Android 本地存储与加密技术文档

零知识保护原则 (Zero-Knowledge Architecture)

Monica Android 采用多层全盘/字段级级联加密架构,确保用户的敏感资产(如密码、信用卡号、2FA 密钥、私密笔记等)在本地持久化与 WebDAV 备份过程中的绝对安全。系统核心遵循零知识保护原则:即使设备丢失或数据库文件被提取,攻击者在没有用户主密码的情况下,也绝对无法逆向出任何明文数据。


1. 本地数据存储

Monica 拒绝采用明文 SQLite 或不可靠的 KV 存储,而是拥抱 Google 官方推荐的 Modern Android Development (MAD) 架构进行结构化数据管理:

  • 核心持久层:基于 Room Persistence Library (高级 SQLite 抽象层) 实现高内聚的数据访问对象 (DAO)。
  • 物理物理文件:存储在沙盒内部的 password_database.db 及其 WAL 日志文件中。
  • 物理隔离边界 隔离:数据严密封锁在 Android 应用私有安全目录 (/data/data/takagi.ru.monica/databases/)。在未解锁的非 Root 设备上,外部任何恶意进程均无权也无法越界访问。

2. 核心加密技术架构

2.1 算法选型:AES-256-GCM

Monica 的核心加密引擎采用 AES-256-GCM (Advanced Encryption Standard with Galois/Counter Mode) 工业级对称加密算法。

为什么选择 GCM 模式?

传统的 CBC 等模式只能提供保密性,容易遭受比特翻转(Bit-flipping)等篡改攻击。而 GCM 是一种 AEAD (Authenticated Encryption with Associated Data) 模式:

  1. 认证加密:在加密数据的同时,生成一个 16 字节的认证标签(Authentication Tag)。
  2. 完整性校验:解密时系统会自动比对标签,任何对密文或 IV 的微小篡改都会导致解密直接熔断失败,从而彻底防御篡改和中间人注入。

2.2 敏感数据流水线 (SecurityManager)

对于 Room 数据库中 PasswordEntry 表的敏感字段(如密码、密保答案等),Monica 在存取时会实时触发以下生命周期:


[明文数据] ➔ 加上 12B 随机 IV ➔ [AES-256-GCM 引擎] ➔ 拼装 (IV + CipherText) ➔ Base64 编码 ➔ 写入 DB
  1. 落盘前加密:调用 SecurityManager 拦截明文字符串,动态生成一个 12 字节的高熵随机 IV (初始化向量)。
  2. 混合存储结构:数据最终以 Base64(IV + CipherText) 的复合字符串形式安全存入 SQLite 单元格中。
  3. 读取时解密:从 Room 取出字符串 ➔ 自动进行 Base64 解碼 ➔ 切割出前 12 字节 IV 与后置密文 ➔ 联动硬件密钥还原明文。

3. 主密码派生与硬件级密钥托管

3.1 主密码高强度派生 (PBKDF2)

为了防止彩虹表撞库与离线暴力破解,用户输入的 App 主密码绝不落地、绝不存储哈希值,而是作为动态密钥派生的最高源头:

  • 核心算法PBKDF2WithHmacSHA256 (Password-Based Key Derivation Function 2)。
  • 迭代参数 高防爆:配置高额的 100,000 次密码学哈希迭代,使攻击者的离线暴破算力成本呈指数级上升。
  • 动态盐值 (Salt):每个设备在初始化时随机生成 16 字节的安全盐值,确保即使两个用户主密码相同,派生出的底层根密钥也完全独立。

3.2 硬件安全区防线 (Android KeyStore)

派生出的工作密钥与敏感配置,均由 Android Jetpack 安全组件(EncryptedSharedPreferencesMasterKey)强力守护:

IMPORTANT

硬件隔离 TEE / SE 核心 Master Key 的生成与加解密运算均在 Android 硬件安全芯片(TEE 可信执行环境 或 SE 安全元件)中内网闭环运行。这意味着即使 Android 系统被攻破或被恶意 Root,密钥也无法从物理硬件中被剥离提取

TIP

生物特征授权(BiometricPrompt) 支持联动指纹或 3D 结构光面部识别。生物核验成功后,由硬件安全区限时授权释放工作密钥,无需频繁暴露长串主密码,兼顾极致便利。


4. 远端备份加密规范 (WebDAV)

当触发自动或手动的云端 WebDAV 异步备份任务时,Monica 的 AutoBackupWorker 会拉起独立的远端安全沙盒:

text
[沙盒核心 JSON 簇] 

[打包为标准二进制 ZIP 流] 

[提取用户设置的备份密码] ➔ [PBKDF2 100k 迭代派生密钥]

[AES-256-GCM 强力注入加密] 

[附加魔法字节头 MONICA_ENC_V1] ➔ 生成独立的 .enc.zip ➔ WebDAV 上传
  • 抗重放与去关联:每次生成的备份包都会重新生成高熵 Salt 和全新 IV。即使多次备份的数据完全一致,在云端生成的 .enc.zip 文件二进制结构也天差地别,防范云端服务商通过文件大小与特征进行隐私逆向。

5. 安全矩阵总结

安全维度采用技术选型防御的攻击类型
本地数据持久化AES-256-GCM (256-bit)拖库攻击、物理翻转篡改攻击、中间人旁路注入
主密码防暴破PBKDF2 + HMAC-SHA256 (100,000次迭代)离线暴力破解、彩虹表碰撞、字典攻击
运行时密钥保护Android KeyStore (TEE/SE 保护)内存截取攻击、Root 权限文件越界窃取、物理拆机提取
云端数据流转MONICA_ENC_V1 二进制二进制流强加密坚果云/Nextcloud 等云端基础设施被黑、备份链路监听
最近更新