安全设计
保密不靠承诺,
靠密码学
贵纸把「加密」当作第一性功能,而不是一个可选项。原件在离开手机之前就已经是密文;而「谁能解开」这件事,贵纸按密级分成两把锁,并把边界写在明面上。
先想清楚:防的是谁
身边的人
手机借人、被翻看、放在桌上没锁屏。对策:敏感级查看需输入口令,且只留 5 分钟窗口;隐藏柜格与诱饵空间用来应对「打开看看」。
云端失守
服务器被入侵、数据库被拖走、内部人员违规调取。对策:云端只有密文,没有密钥就无法解密。
设备丢失或更换
手机丢了、换新机、误删小程序。对策:同一微信换设备免密直入;密码可凭绑定手机号重设,敏感级 / 机密级用 24 位找回码;密文已在云端,无需重新上传。
密钥链
两条钥匙链:一条可找回,一条只有你有
贵纸不保存密码明文。密码只用于「派生」主密钥,主密钥再包裹数据密钥。普通级额外有一份服务端托管的钥匙信封,因此可以免密进门、换设备与找回;敏感级 / 机密级没有这份托管,钥匙只能由你的密码或 24 位找回码在设备端解封。
| 环节 | 算法 / 参数 | 说明 |
|---|---|---|
| 分级 | 普通级:服务端托管钥匙信封;敏感级 / 机密级:端到端,无托管 | 换设备与找回能力只对普通级默认开放 |
| 口令派生 | PBKDF2-SHA256,150,000 次迭代,每用户独立随机盐 | 密码不存储;盐与信封可公开,但无法反推密码 |
| 内容加密 | AES-256-GCM | 每片独立随机向量与校验标签,先验签后解密 |
| 分片 | 1MB / 片 | 支持断点续传,缺片只补缺,不改动已传分片 |
| 用途绑定 | AAD(附加认证数据) | 绑定单据与用途,防止密文跨单据、跨用途拼接 |
| 缩略图 | 独立加密,≤100KB | 与原件分属不同密文体系,列表懒加载时按需解密 |
| 找回码 | 24 位,约 112 位安全强度 | 创建时展示一次并寄送本人邮箱;重设密码后旧码失效 |
云端边界
云端到底能看到什么
「云端只看得到密文」不是一句口号,而是一张可以逐项核对的清单。下面列出上云与不上云的内容,以及普通级与敏感级在「云能不能解开」上的差别。
| 数据 | 是否上云 | 形态与用途 |
|---|---|---|
| 原件文件 | 是 | AES-256-GCM 密文分片,云端无法解密 |
| 缩略图 | 是 | 加密缩略图,用于列表懒加载 |
| 密文包络 | 是 | 每片随机向量、校验标签、长度等公开件,不含密钥 |
| 元数据 | 是 | 分类、标题、原件位置、隐私级别、页数、大小、到期日 |
| 归属标识 | 是 | openid 的 SHA-256 前 16 位,不含明文身份标识 |
| 脱敏操作日志 | 是 | 动作类型与时间,不含文件内容;90 天后自动清理 |
| 普通级钥匙信封 | 是 | 服务端托管密钥加密;仅用于换设备与忘记密码找回 |
| 敏感级钥匙信封 | 是 | 密码包裹 + 24 位找回码包裹两份密文;云端无钥匙 |
| 手机号 | 是 | 哈希 + 尾号 + 密钥加密密文,不存明文 |
| 密码明文 | 否 | 仅存在于输入页面变量 |
| 敏感级数据密钥 | 否 | 仅设备内存,退出即清零;普通级可由托管信封解出 |
| 找回码明文 | 否 | 创建时展示一次并寄送本人邮箱,不写日志、不上云 |
| 微信昵称与头像 | 否 | 只存本机,不上传云端 |
| 诱饵空间密钥 | 否 | 仅本机存储,永不参与云端字段 |
锁与退路
进得去,也退得出
安全设计如果只考虑「别人进不来」,很容易变成「自己也进不去」。贵纸在锁与恢复之间做了明确取舍,并把代价写在明面上。
免密进门
冷启动时用微信身份向云端取回托管钥匙,直接进柜;取不到才静默回落到密码输入。日常不用记、也不用输密码。
敏感件的 5 分钟窗口
敏感级 / 机密级查看前输入同一组 6 位密码;通过后 5 分钟内连着看几份都不必重输,切出小程序即失效。连续输错触发冷却,避免短时间枚举。
退出与锁柜
退到后台不锁柜,避免来回切应用反复验证;「我的 → 退出」清除本机钥匙,下次冷启动重新取回。上传不设卡,验证只看密级。
24 位找回码
创建时展示一次,并寄送到你绑定的本人邮箱(每天限 3 封、60 秒限频)。忘记密码时用它验证后重设;重设会轮换找回码、重建云端信封,密文不需要重新上传。
密码重设与找回边界
普通级单据可凭绑定手机号重设密码并恢复;敏感级 / 机密级必须提供 24 位找回码。两者都不可用时,这部分数据永久无法解密——这是端到端加密的代价,不是可以绕开的流程。
藏得住:隐私分级与隐藏柜格
普通 / 敏感 / 机密三级。机密文件放进隐藏柜格,柜名本身就是唤醒它的暗号:建好即隐,未唤醒时不出现在任何列表、分类计数与搜索结果里,即使拿到单据直达详情也会被拦下;锁柜即重新隐身,只在当次会话内有效。另有另一组密码才能进入的诱饵空间,只显示普通内容且禁止写入。
安全边界
必须说清楚的四件事
没有绝对的安全。把边界写清楚,比给一个「万无一失」的承诺更负责。
一、敏感级的钥匙丢了,柜子就打不开了。敏感级 / 机密级在密码、24 位找回码、绑定手机号全部不可用时,加密数据永久无法解密,开发者也没有后门。普通级可由服务端托管信封协助找回——这是分级设计的差别,也是我们必须提前讲清的地方。
二、AI 提取需要临时明文。存储态是密文,但识别必须让机器「看见」内容。该过程由你主动触发,临时文件处理完即删除;如果你不接受这一点,可以不使用 AI 提取,仅使用加密归档。
三、不防「已打开小程序的手机」。加密保护存储与传输,不阻止他人在你已解锁、且小程序正开着的手机上直接查看。请给真正敏感的纸设置「敏感」或「机密」,并善用隐藏柜格与诱饵空间。
四、导出即交出明文。你把文件导出、发送给他人后,对方就拥有了这份内容,加密无法收回。请只发给可信对象。
合规与数据处理
除了加密,还遵守什么
内容安全检测
AI 提取的输入与输出均接入内容安全检测;命中违规即拦截,不落库、不返回。
AI 标识
AI 结果区角标「AI 提取」,同区附「以上信息由人工智能(AI)生成,仅供参考,请与原件核对后使用」,符合生成式内容标识的监管要求。
数据最小化
不收集通讯录、位置、相册全量权限;只在用户主动选择时读取指定图片或文件。
日志留存
脱敏操作日志保留 90 天后自动清理;不含文件内容、密钥或密码。
反馈数据
意见反馈内容仅用于改进产品与回复本人,保存 12 个月,可申请提前删除。
无广告与跟踪
当前未接入广告 SDK、统计 SDK 或第三方跟踪服务,不出售、不共享用户信息。