导入JWK格式EC P-256公钥时提示密钥用法错误的原因
错误原因分析
这个错误的核心问题是:ECDH公钥不允许将deriveKey作为自身的密钥使用权限。
在Web Crypto API的规则里,ECDH密钥对的分工明确:
- 私钥拥有
deriveKey/deriveBits权限,用于结合对方的公钥来派生新密钥; - 公钥的作用是提供给对方的私钥进行密钥派生,它自身并不具备主动执行
deriveKey操作的权限。
你的代码存在两处重复的错误:
- JWK对象里的
key_ops字段指定了["deriveKey"]; - 调用
importKey时最后一个参数也传了["deriveKey"]。
只要把这两处的权限改为空数组,或者直接移除key_ops字段(公钥默认不需要指定主动操作权限),就能正常导入:
修正后的代码示例:
await crypto.subtle.importKey( "jwk", { kty: "EC", crv: "P-256", ext: true, x: "mRBuuxrvM7xy2oc4xZkw_i0JyIiIp_b0Zmnb1RYKZcg", y: "emhIhswnvIHICDtkWx4LLWy3HcN-is2l1oN9-r4_ChQ" // 移除key_ops字段,或者设为[] }, { name: "ECDH", namedCurve: "P-256" }, true, [] // 公钥不需要指定deriveKey权限 );
之后你可以用自己的ECDH私钥,结合这个导入的公钥来调用deriveKey完成密钥派生操作。
内容的提问来源于stack exchange,提问作者Quinten C
相关产品推荐
相关产品推荐

