Enpass 安全白皮书要点 — AES-256、SQLCipher、PBKDF2 加密架构解析
安全白皮书概述
Enpass 发布了公开的安全白皮书(Security Whitepaper),详细说明了其密码保险库的加密架构。以下是关键技术要点的中文解读。
加密引擎:SQLCipher
Enpass 使用 SQLCipher 作为底层数据存储引擎。SQLCipher 是一个经过充分测试的开源加密 SQLite 数据库引擎,被全球数百家公司和政府机构的应用所使用(包括一些知名的医疗和金融软件)。
选择 SQLCipher 的原因:
- 成熟稳定,经受过大量真实场景的安全考验
- 开源可审计,任何人都可以审查其加密实现
- 在 SQLite 基础上透明加密,对上层应用几乎无性能影响
加密算法
AES-256
Enpass 对保险库文件的加密使用 AES-256(Advanced Encryption Standard,256 位密钥)。AES 是当前全球应用最广泛的对称加密标准,被美国国家标准与技术研究院(NIST)列为联邦加密标准(FIPS 197)。
密钥派生:PBKDF2 320,000 轮
从用户的主密码(Master Password)到真正的加密密钥,Enpass 使用 PBKDF2(Password-Based Key Derivation Function 2) 算法,迭代次数设为 320,000 轮。
PBKDF2 的作用是让"从主密码推导加密密钥"这个过程变得足够耗时。320,000 轮意味着:
- 如果攻击者拿到保险库文件,尝试暴力破解主密码,每一次猜测都需要完成 320,000 次哈希运算
- 现代 GPU 大约每毫秒可以尝试几千次 PBKDF2 迭代,320,000 轮意味着每秒只能尝试几百次主密码
- 一个 12 字符、包含大小写字母和数字的强主密码(熵约 78 位),在这个速度下暴力破解时间需要数千年
Enpass 在每次应用更新时可能增加 PBKDF2 轮数(随着硬件进步),以保持相同的安全强度。
盐值(Salt)
除了迭代次数,PBKDF2 还使用随机盐值(Salt)。盐值使得即使两个用户使用了完全相同的主密码,推导出来的加密密钥也完全不同——防止彩虹表攻击。
保险库文件结构
每个 Enpass 保险库是一个独立的加密数据库文件。文件本身不包含任何明文信息,包括:
- 条目标题和 URL(加密存储)
- 所有密码字段
- 笔记和附件
- 分类和标签
- 甚至包括保险库元数据(修改时间、条目数量等)
这意味着即使攻击者获取了保险库文件,无法判断文件里存了多少条密码、也无法知道任何账号的名称。
云端存储的安全边界
Enpass 本身不处理云端存储的安全性——那取决于用户选择的云服务提供商。但 Enpass 在设计上做了以下保障:
- 保险库文件本身已加密:即使云服务提供商的数据中心被攻破,攻击者拿到的也只是加密后的数据库文件
- 云账号建议开启 2FA:Enpass 文档明确建议用户为存储保险库的云账号开启双因素认证
- 本地安全审计:泄露监测功能(Breach Monitoring)在本地运行,检查时只发送密码哈希的前 5 个字符到 Have I Been Pwned,不暴露完整密码
第三方安全审计
Enpass 定期聘请独立安全公司对其加密实现和代码进行审计。审计报告的公开摘要可以在帮助中心查看。