背景与价值密钥误导出与用途混用会带来风险。生成阶段设置非可导出与用途限制可显著提高安全性。统一规范非可导出:默认 `extractable=false`。用途限制:根据算法仅允许必要用途(如 `sign/verify/encrypt/decrypt`)。导出门禁:仅在受控场景允许导出并审计。核心实现生成与用途限制async function genEcdsa(): Promise<CryptoKeyPair> { return crypto.subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-256' }, false, ['sign','verify']) } async function genAes(): Promise<CryptoKey> { return crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, false, ['encrypt','decrypt']) } 导出门禁async function exportSpki(pub: CryptoKey): Promise<ArrayBuffer | null> { try { return await crypto.subtle.exportKey('spki', pub) } catch { return null } } async function exportPkcs8(priv: CryptoKey): Promise<ArrayBuffer | null> { try { return await crypto.subtle.exportKey('pkcs8', priv) } catch { return null } } 落地建议默认生成非可导出密钥并限制用途;公钥导出可控,私钥导出仅在受控场景并审计。验证清单是否设置 `extractable=false` 与用途限制;导出行为是否受控并记录。

发表评论 取消回复