You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Local-Only Encryption Model的跨设备密码管理工具实现方案咨询

实现Local-Only Encryption Model的核心思路与技术指引

先直接解答你的核心疑问:LastPass的Local-Only Encryption Model确实是服务器端不存储任何AES解密所需的密钥、IV或能推导密钥的敏感信息,服务器只负责存储加密后的密码库数据、一些辅助性的非敏感元数据(比如用于密钥推导的盐——这个盐本身不具备解密能力),所有加解密逻辑100%在客户端完成。

多设备同步解密的核心原理

你困惑的“电脑端加密后移动端怎么解密”,关键在于用户的主密码(Master Password)是所有密钥的唯一根源,具体流程是这样的:

  • 用户首次注册时,客户端(比如你的React前端)会生成两个随机盐:
    1. Master Salt:用于结合主密码通过KDF(密钥派生函数)生成真正的AES加密密钥(Master Key)
    2. Login Salt:用于生成登录验证用的密钥(避免主密码直接传输到服务器)
  • 客户端用主密码+Master Salt通过强KDF(比如Argon2id,安全性远高于PBKDF2)生成256位的Master Key,再用这个Master Key+随机IV(每个密码条目单独生成)通过AES-GCM(带认证的加密算法,防篡改)加密每个密码条目,最终把加密后的条目、IV、认证标签、Master Salt一起上传到服务器存储。
  • 当用户在移动端登录时:
    1. 输入主密码
    2. 客户端从服务器获取Master Salt和加密后的密码库
    3. 用同样的主密码+Master Salt+KDF生成完全相同的Master Key
    4. 用Master Key+存储的IV解密每个密码条目

简单说:服务器只存“加密后的箱子”和“开箱子需要的锁孔模型(盐)”,真正的“钥匙(Master Key)”是用户用主密码在本地亲手生成的,服务器从头到尾都碰不到钥匙。

基于ASP.NET Core+React+IdentityServer的实现方向

结合你的技术栈,核心原则是所有敏感操作(密钥生成、加解密)必须在React客户端完成,服务器只做存储和身份验证的辅助工作,具体拆解如下:

1. 客户端(React)核心逻辑实现

  • 注册流程:
    • 生成随机的Master Salt(16字节以上)和Login Salt(16字节以上)
    • 用主密码+Login Salt通过KDF生成Login Key,将Login Key的哈希(比如SHA-256)上传到服务器,用于后续登录验证
    • 用主密码+Master Salt通过KDF生成Master Key(优先用浏览器原生Web Crypto API实现,避免手写加密逻辑出错)
    • 对用户的初始密码库(空或默认条目)进行加密,将加密后的密文、IV、认证标签、Master Salt上传到服务器存储
  • 登录流程:
    • 用户输入主密码后,从服务器获取Login Salt和Master Salt
    • 用主密码+Login Salt生成Login Key,发送到服务器验证哈希是否匹配(服务器只存Login Key的哈希,永远碰不到主密码)
    • 验证通过后,从服务器获取加密后的密码库,用主密码+Master Salt生成Master Key,本地解密得到明文密码库
  • 密码条目增删改:
    • 每次新增/修改条目时,生成新的随机IV,用Master Key+AES-GCM加密条目内容,将密文、IV、认证标签上传到服务器更新
    • 删除时直接通知服务器删除对应加密条目即可

2. 服务器端(ASP.NET Core+IdentityServer)的角色

  • 身份验证改造:
    • 不要用IdentityServer默认的密码存储逻辑,因为默认会存储用户密码的哈希,而你需要的是存储Login Key的哈希
    • 自定义IdentityServer的资源所有者密码验证逻辑,接收客户端发送的Login Key,验证其哈希是否与服务器存储的一致
  • 数据存储:
    • 仅存储用户的基本身份标识(比如邮箱)、Login Key哈希、Master Salt、加密后的密码库条目(包含密文、IV、认证标签)
    • 绝对不要存储Master Key、主密码的明文或任何可以推导Master Key的敏感信息
  • API接口:
    • 提供简单的CRUD接口用于同步加密后的密码库数据,接口不需要处理任何解密逻辑,只负责数据的存储和传输

3. 关键安全细节

  • 加密算法选型:
    • 密钥派生用Argon2id(Web Crypto API如果不支持,可引入第三方库如argon2-browser),不要用PBKDF2(迭代次数需要非常高才能达到相同安全级别)
    • 加密用AES-GCM或ChaCha20-Poly1305,这两种都是带认证的加密算法,能防止密文被篡改或伪造
  • 客户端安全防护:
    • 所有密钥(Master Key、Login Key)只存在内存中,不要存储到localStorage/sessionStorage,避免XSS漏洞窃取密钥
    • 输入主密码时避免使用第三方输入组件,防止恶意脚本监听输入
    • 用户退出登录时立即销毁内存中的密钥
  • 服务器端安全防护:
    • 所有API接口启用HTTPS,防止数据传输过程中被窃听
    • 对存储的加密数据进行备份,但备份同样不能包含任何敏感密钥信息

内容的提问来源于stack exchange,提问作者TW_KuanLun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:26:55