为什么我们敢公开加密原理?
您可能会问:公开加密原理,黑客不就知道怎么攻击了吗?
🔐 密码学的黄金法则(Kerckhoffs 原则):
"一个密码系统的安全性,不应该依赖于算法的保密,而只依赖于密钥的保密。"
打个比方:您家的门锁
小偷知道您家用的是什么品牌的门锁、什么型号、什么原理——这些信息完全公开。但只要他没有您的钥匙,就进不了门。我们的加密也是一样:算法公开,但密钥只有您知道。
现实案例:银行、Signal(最安全的聊天软件)、比特币——它们的加密算法全部公开,却保护着万亿级别的资产。
"密码"和"密钥"有什么区别?
很多人分不清"密码"和"密钥",其实它们是两个完全不同的东西:
密码 (Password)
- ✓ 人能记住的字符串
- ✓ 比如:"火锅很好吃2024"
- ✓ 通常比较短(8-20个字符)
- ✓ 存在于:您的脑子里
密钥 (Key)
- ✓ 计算机生成的二进制数据
- ✓ 比如:7a2b9c4d8e1fa0b3...
- ✓ 固定长度(256位 = 32字节)
- ✓ 存在于:浏览器内存中(临时)
🎯 核心要点:
密码是您能记住的,密钥是计算机用来加密的。
我们用您的密码生成密钥,这样既方便您记忆,又保证安全强度。
为什么用"两把钥匙"?
我们采用了"双层密钥"架构。为什么不直接用密码加密呢?
比喻:银行保险柜
银行保险柜通常有两把锁:银行管一把,您管一把。两把钥匙都用上才能打开。我们的设计类似:您的密码生成一把「主钥匙」,主钥匙再打开一个保险盒,里面放着真正加密图片的「数据钥匙」。
🔐 完整的密钥流转过程
(您能记住的)
(由密码派生的钥匙)
(真正加密图片的钥匙)
🤔 为什么要这么复杂?
- 好处1:修改密码时,只需重新加密 DEK,不用重新加密所有图片(很快)
- 好处2:DEK 是完全随机的 256 位密钥,比任何密码都强大得多
- 好处3:即使有人猜到了您的密码,还需要知道 salt 和 encrypted_dek 才有用
"随机盐值"和"10 万次计算"是什么?
🧂 什么是"盐值"(Salt)?
比喻:炒菜放盐
同样的鸡蛋,不同厨师放的盐量不同,炒出来的味道就不一样。同样的密码,加上不同的「盐值」,生成的密钥也不同。这样,即使两个人碰巧用了一样的密码,他们的密钥也完全不同,黑客就没法批量破解。
❌ 没有盐值时:
密码 "123456" → 密钥 ABC...
(相同!黑客可以预先计算)
✅ 有盐值时:
密码 "123456" + 盐B → 密钥 QRS...
(不同!无法预先计算)
🔄 为什么要计算 100,000 次?
比喻:健身房的重复训练
想象您要打开一个保险箱,每次尝试密码都要做 100,000 个俯卧撑。对您来说(只试一次),花几秒钟不算什么。但对黑客来说(要尝试百万个密码),就算超级计算机也得算几百年。这就是 PBKDF2 的设计思想:让暴力破解变得不可能。
技术名称:PBKDF2 (Password-Based Key Derivation Function 2)
0.1秒
您登录时感受到的延迟
100+ 年
黑客暴力破解需要的时间*
*假设黑客使用顶级硬件尝试破解一个中等强度的密码
AES-256-GCM 是什么?
这是我们用来加密您图片的具体算法。别被这串名字吓到,让我们拆解一下:
AES
Advanced Encryption Standard
高级加密标准
全球公认最安全的对称加密算法
256
密钥长度(位)
256位 = 2²⁵⁶ 种可能
比宇宙原子数量还多!
GCM
Galois/Counter Mode
加密模式
同时保证机密性和完整性
🏛️ 谁在使用这个算法?
美国政府用它保护最高机密文件。全球银行用它保护您的资金交易。
现在,我们用同样的标准保护您的医疗数据。
"IV"(初始化向量)又是什么?
每次加密时,我们都会生成一个随机的 IV。它的作用是:
比喻:每次洗牌
想象加密就像打牌。如果每次都按同样的方式洗牌,别人就能猜出规律。IV 就像每次打牌前的「随机洗牌」——同样的牌(同样的图片),每次洗出来的顺序(加密结果)都不同,别人就猜不出规律了。
❌ 没有 IV:
→ 黑客可以发现"这两个密文是同一张图"
✅ 有 IV:
→ 黑客无法判断任何规律
技术说明:IV 不需要保密(会和密文一起存储),但必须保证每次加密都不同。我们使用密码学安全的随机数生成器来生成 12 字节的唯一 IV。
完整的数据处理流程
↑ 上传图片时
- 1
您选择要上传的图片
图片还在您的手机/电脑里
- 2
浏览器用您的 DEK 加密图片
生成随机 IV,完成端到端加密
- 3
同时上传两个版本到服务器
原始图片(用于智能分类)+ 加密图片(用于长期存储)
🧠 服务器处理(智能分类)
- 1
对原始图片进行 OCR 识别
提取文字内容,用于材料分类和健康指标抽取
- 2
AI 智能分析
自动归类到对应科室/器官,并提取血压、血糖等健康指标
- 3
立即销毁原始图片
处理完成后从内存中删除,不写入硬盘,不保留副本
- 4
只保存加密版本 + 分类标签
数据库中存储的永远是加密后的乱码
💡 为什么需要原始图片?目前的 AI 技术还无法在加密状态下进行内容识别。为了实现智能分类和指标抽取,原始图片需要短暂地在服务器内存中停留(秒级),处理完成后立即销毁。
↓ 查看图片时(解密)
- 1
您点击查看某张图片
- 2
浏览器从服务器下载加密的密文 + IV
服务器只能提供加密后的乱码
- 3
浏览器用您的 DEK + IV 解密
解密完全在您的设备上完成
- 4
图片显示出来
此时服务器上已经没有任何原始图片
常见问题
⚠️ 重要提醒:忘记密码 = 数据永久丢失
由于我们采用端到端加密,您的密码是解密数据的唯一钥匙。 我们的服务器上只存储加密后的乱码,没有任何方法可以帮您恢复数据。
这正是端到端加密的代价——为了安全,必须放弃"找回密码"的便利。请务必牢记您的密码!
即使黑客完全控制了我们的服务器,他们能拿到的只有:
- 加密后的图片(乱码)
- 加密后的 DEK(乱码)
- 盐值(公开信息,不影响安全)
没有您的密码,这些数据对黑客来说就是一堆无意义的乱码。 解密需要您的密码 → 主密钥 → DEK,缺一不可。
不能。这就是"端到端加密"的核心意义。
数据在您的设备上加密,在您的设备上解密。传输和存储过程中, 我们的工程师、服务器、任何中间环节看到的都只是加密后的乱码。
即使法院命令我们交出您的数据,我们也只能交出加密的密文——因为我们真的没有解密能力。
| 传统加密(微信等) | 端到端加密(我们) | |
|---|---|---|
| 谁能解密? | 用户 + 服务商 | 只有用户 |
| 服务器存储的是? | 明文或可解密的数据 | 加密的乱码 |
| 能找回密码吗? | 可以 | 不可以 |
| 安全等级 | ★★★☆☆ | ★★★★★ |
可以。这就是"双层密钥"设计的好处。
修改密码时,我们会:
- 用旧密码解密出 DEK
- 用新密码重新加密 DEK
- 保存新的 encrypted_dek
DEK 本身不变,所以所有图片的加密不受影响——只是"保险盒的锁"换了,里面的"钥匙"还是原来那把。
如上文第 7 章所述,原始图片仅在智能分类处理期间短暂停留(通常几秒钟),处理完成后立即从内存中销毁。
- 原始图片不会写入硬盘
- 原始图片不会保留任何副本
- 长期存储的永远是加密后的密文
我们只保留分类结果(如"心内科检查报告")和提取的健康指标(如血压、血糖数值),不保留 OCR 识别出的原始文字内容。
📋 技术规格摘要
加密算法
- 数据加密AES-256-GCM
- 密钥派生PBKDF2-SHA256
- 派生迭代次数100,000
密钥规格
- 主密钥长度256 bits
- DEK 长度256 bits
- IV 长度96 bits (12 bytes)
以上技术规格符合 NIST(美国国家标准与技术研究院)建议的最佳实践标准。