您的体检报告、家人的过敏史、每天的用药清单。这些数据对您和家庭而言极其珍贵,也极其私密。作为一款以家庭健康管理为核心的 AI 产品,我们把“数据安全”当成一项需要认真对待的工程,而不是一句宣传口号。
一、安全设计的总体思路:按“最坏情况”来防御
体检报告、诊断记录、家族病史等都属于高度敏感的健康信息。一旦泄露,轻则被骚扰,重则影响投保、就业,甚至被不法分子利用。所以我们在设计之初就定下一个原则:默认按“最坏情况”来假设威胁,而不是按“理想情况”。
所谓最坏情况,就是我们假定存数据的服务器本身也可能被人接触到,无论是物理入侵、数据库被拖库,还是内部人员越权。在这种前提下,唯一可靠的保护,就是让明文内容在存储层根本不存在:即使有人拿到了数据库,也读不出您的真实数据。
打个比方:我们把您的数据放进一个带锁的保险箱。即使有人搬走了整个保险箱,没有钥匙,他也打不开。下面我们就来看看,这些“锁”和“钥匙”具体是怎么设计的。
二、AES-256-GCM:加密世界里的“保险柜”
智愈家最核心的加密算法是 AES-256-GCM。它听起来很专业,拆开看其实很好理解:
- AES-256:AES 是一种国际公认的高级加密标准,256 指的是密钥长度为 256 位。256 位意味着密钥有 2 的 256 次方种可能,这个数字比可观测宇宙中的原子总数还要大得多,靠“暴力穷举”在可预见的未来内几乎不可能破解。
- GCM:全称 Galois/Counter Mode(伽罗瓦计数器模式),是 AES 的一种工作模式。它同时解决两件事:一是机密性,别人看不到内容;二是完整性,数据一旦被篡改,立刻能被发现。简单说,它既把数据“锁起来”,又给数据加了一道“防拆封的封条”,二者缺一不可。
每次加密,我们都会为这条数据生成一个独立的随机初始化向量(IV),并计算出一段认证标签(Auth Tag)。IV 的作用是保证:即使两段明文完全相同,加密后的密文也不一样,攻击者无法通过比对密文来推测内容。认证标签的作用是:哪怕密文被人改动了一个字节,解密时校验立刻失败,系统会判定数据“被篡改”并拒绝使用。一句话:您的数据既看不清,也改不了。
三、字段级加密:每个字段,各有一把钥匙
您可能会问:把所有数据都用一把钥匙锁起来,不就行了吗?理论上是可行的,但有一个致命问题:一旦这把唯一的钥匙泄露,所有数据都会同时暴露。
为了降低单点失效的风险,智愈家采用了 字段级加密(Field-Level Encryption):我们不是用一把主密钥直接加密所有数据,而是根据字段(比如“过敏史”“家族病史”“用药清单”)从主密钥派生出彼此独立的子密钥,每个字段用各自独立的钥匙加密。
这意味着,即使某个字段的钥匙出了问题,最多只影响这一个字段,不会波及其他字段。这就是我们常说的“字段间密钥隔离”。我们把“一颗炸弹炸穿所有保险柜”的风险,拆成了“每间房独立上锁”:丢了一间房的钥匙,最多打不开那一间,其他房间安然无恙。
子密钥是怎么生成的?
我们没有用一把主密钥去“哈希几遍”就当成子密钥,而是采用密码学界推荐的标准做法 HKDF-SHA256(HMAC-based Key Derivation Function,基于 HMAC 的密钥派生函数)。
具体实现上,主密钥由系统管理员独立托管在服务端,与数据库访问权限严格分离。派生子密钥时,我们传入一个固定的派生盐(salt)和该字段的“身份标识”,形如 field-encryption:v1:members:allergies,其中 v1 是方案版本号,members:allergies 精确标识“成员档案表中的过敏史字段”。
这样做的价值有两点:第一,每个字段得到的子密钥都是独一无二的,从算法层面保证了密钥隔离;第二,即使某几个字段的子密钥被攻破,攻击者也无法反推出主密钥、进而推导出其他字段的密钥,HKDF 的单向性在这里起了关键作用。
四、盲索引:既能高效查找,又不暴露明文
加密固然安全,但它带来一个现实难题:很多功能需要“按某个值精确查找”。最典型的就是登录时按邮箱定位用户。如果邮箱被加密成一串乱码,数据库里就没法直接查询了。
智愈家的解决方案是 盲索引(Blind Index)。我们会为邮箱这类“需要精确匹配”的字段,额外计算一个单向、不可逆的指纹(采用 HMAC-SHA256),把这个指纹单独存一列,专门用于查询。
这个指纹是“单向”的:系统可以从邮箱算出指纹,却无法从指纹反推出邮箱。打个比方,您把真名藏进保险箱,只在门外留下一个独一无二的“指纹印”用于识别访客。别人就算拿到了指纹,也认不出您的真名。
需要说明的是,盲索引解决的是“按精确值查找”,它不做模糊搜索(比如“包含某关键词”)。这是我们在隐私与查询能力之间做出的取舍:为了不暴露明文,我们主动放弃了这类可能泄露信息的模糊查询能力。
五、密码安全:只存“哈希”,不存明文
您的登录密码从不以明文形式保存,而是通过 bcrypt 算法进行加盐哈希处理。bcrypt 是一种专为密码设计的、刻意“慢”的哈希算法。它引入了一个成本因子(work factor),我们设置为 12,意味着破解一次哈希需要做 2 的 12 次方次迭代,能显著拖慢暴力破解的速度。
哈希同样是单向的。再加上“盐”(salt,一串为每个用户独立生成的随机数据),即使两个用户设置了完全相同的密码,存下来的哈希结果也完全不同,攻击者无法通过“彩虹表”批量反推。即便数据库泄露,攻击者也几乎不可能还原出您的原始密码。
六、家庭空间数据隔离:各家的账本各归各家
加密解决的是“数据看不懂”,数据隔离解决的是“谁能看”。除了加密,我们还从访问权限层面做了严格的隔离。
每个家庭空间的数据相互独立,彼此之间没有交集。只有空间内的成员才有权限查看对应数据。空间内还区分了所有者(OWNER)、管理员(ADMIN)、成员(MEMBER)三档角色,角色不同,可执行的操作范围也不同。邀请家人加入时,走的是带唯一识别码、且限时有效的邀请链接,而不是随手可转发的裸链接。
在系统内部,每一次数据访问都会经过服务端的权限校验,确保用户只能访问属于自己的数据,从接口层杜绝越权查看。即使某个用户试图手动构造请求去访问别人的数据,也会被权限校验拦下。
七、文件存储:私有桶 + 短期签名
您上传的体检报告、头像等文件,存放在云存储的私有桶里,默认不对任何人开放,无法通过“猜测链接”直接访问。
当系统确实需要读取某个文件时,会生成一个短期有效的签名链接。这个链接带有访问时效(默认几小时),过期即失效。也就是说,文件只会在一段受控的时间内、通过受控的途径被访问,不会长期挂在公网上任人读取,进一步压缩了泄露窗口。
八、一段密文长什么样?
为了支持未来平滑地升级密钥与算法,所有密文都带有一个版本号前缀,形如 v1.<IV+认证标签+密文>。其中 v1 标识当前的加密方案版本,后面是密文的实际载荷。
带版本号带来一个很实际的好处:未来如果我们需要更换主密钥、或者升级到新的加密算法,可以按版本号识别旧数据、分批迁移,而不必一次性停机重加密全部存量数据,更不会影响您已有的使用。同时,读取路径上也做了兼容处理,遇到尚未迁移的明文旧数据,系统会正常读取,不会因为版本不匹配而报错。
九、给您的承诺
- 不卖数据:我们不会向任何第三方出售您的个人信息,也不会将您的健康数据用于广告投放。
- 权利在你:您可以在“成员档案”“报告解读”等页面随时查看、更正、删除自己的数据(详见《隐私政策》)。
- 持续加固:安全不是一次性的功能,而是一个持续的过程。我们会持续关注并采用业界最佳实践,定期审视与加固每一道防线。
保护健康数据的安全与隐私,是我们做产品最基本、也最执着的底线。愿您在智愈家,用得安心,也过得安心。