Web Crypto HKDF与密钥派生前端安全使用最佳实践概述通过HKDF派生密钥,可避免直接使用主密钥进行加密。结合盐与上下文(info),可在不同用途间实现密钥隔离。HKDF派生async function importBaseKey(secret: string): Promise<CryptoKey> { const raw = new TextEncoder().encode(secret) return await crypto.subtle.importKey('raw', raw, 'HKDF', false, ['deriveKey']) } async function deriveAesKey(baseKey: CryptoKey, salt: Uint8Array, info: Uint8Array): Promise<CryptoKey> { return await crypto.subtle.deriveKey( { name: 'HKDF', hash: 'SHA-256', salt, info }, baseKey, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt'] ) } AES-GCM封装async function encrypt(data: Uint8Array, key: CryptoKey): Promise<{ iv: Uint8Array; ct: ArrayBuffer }> { const iv = crypto.getRandomValues(new Uint8Array(12)) const ct = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, data) return { iv, ct } } async function decrypt(iv: Uint8Array, ct: ArrayBuffer, key: CryptoKey): Promise<Uint8Array> { const pt = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, ct) return new Uint8Array(pt) } 使用建议为不同用途选择不同的info(如 `file:enc`, `session:token`)盐值随机生成并与密文一同存储,主密钥不落盘禁止在不安全上下文(非HTTPS)使用Web Crypto通过HKDF与AES-GCM的组合,可在前端实现安全可控的密钥派生与数据保护。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部