如何使用WebAuthn保护浏览器LocalStorage?
用WebAuthn保护浏览器本地存储的加密密钥方案
完全可以通过WebAuthn保护浏览器本地存储的密钥,以下是落地思路和关键步骤:
核心逻辑:WebAuthn作为身份验证的"门禁",只有通过生物特征验证的用户,才能解锁本地存储的加密私钥。WebAuthn本身不负责加密解密,但可以通过验证后的身份权限,控制私钥的访问权限。
具体实现步骤:
- 生成加密密钥对:
用window.crypto.subtle.generateKey生成RSA-OAEP类型的密钥对(该算法专门用于加密解密场景)。公钥可以直接用来加密需要存储的数据,私钥则导出为PKCS#8格式,准备加密后存储。 - 加密私钥并绑定WebAuthn验证:
用户首次完成WebAuthn登录验证后,利用验证成功的上下文生成一个AES对称密钥,用这个AES密钥加密私钥,再将加密后的私钥存入IndexedDB(比localStorage更适合存储敏感数据)。 - 后续私钥复用流程:
- 用户需要访问加密数据时,先触发WebAuthn生物特征验证
- 验证通过后,重新生成对应的AES解锁密钥(或通过WebAuthn签名验证身份后解密存储的AES密钥)
- 用AES密钥解密出本地存储的私钥,完成数据解密操作,操作结束后立即销毁内存中的私钥
- 生成加密密钥对:
关键注意点:
- 绝对不能明文存储私钥,必须通过WebAuthn关联的加密机制加密后再存储
- 区分WebAuthn的签名算法(如ES256)和加密算法(如RSA-OAEP)的用途,不要混用
- 定期清理过期的WebAuthn凭证和本地存储的加密数据,避免冗余和安全风险
内容的提问来源于stack exchange,提问作者Michael Chourdakis
相关产品推荐
相关产品推荐

