使用 ECDSA 的微妙加密:无法使用指定的密钥用法创建密钥

subtle crypto with ECDSA : Cannot create a key using the specified key usages

我想在 Chrome 中导入一个 ECDSA 私钥来签署一些数据,尝试使用 crypto.subtle.importKey:使用 [=13= 为 importKey 提供派生的私钥].

尝试使用库时,我遇到了以下错误: Cannot create a key using the specified key usages.

代码:

const browserKey = await crypto.subtle.importKey(
    'raw',
    derivatedNode.privateKey, // ArrayBuffer
    {
        name: 'ECDSA',
        namedCurve: 'P-256' // Haven't found better fit for secp256k1?
    },
    false,
    ['sign']
);

仔细检查了我的私钥,得到 Uint8Array(32) 这似乎通常与 importKey 没问题。

感谢任何帮助。

Web 加密 API 不支持 secp256k1 曲线。以后也会not support

Web Crypto API 不支持 secp256k1,但您可以使用两种解决方法:

  1. 使用Node.js库来存储私钥,并从浏览器发出请求来签署一些有效载荷:https://www.npmjs.com/package/ecdh-crypto/v/1.0.5

  2. 使用 ethers.js 库在纯 Javascript 中完成它,但你将无法拥有 non-extractable 密钥,如果你这样做很好重新使用静态捆绑文件构建浏览器扩展,否则您必须相信自己的服务器不会受到损害:https://docs.ethers.io/v4/api-wallet.html#signing