为什么 crypto.subtle 无法使用 deriveKey 使用生成 AES-GCM 密钥?

问题描述 投票:0回答:1

下面的代码会抛出错误:

无法使用指定的密钥用法创建密钥。

 const a = async () => { const key = await window.crypto.subtle.generateKey( { name: 'AES-GCM', length: 256, }, true, ['encrypt', 'decrypt', 'deriveKey'], ); }; a();

为什么会这样,我确实想生成一个密钥,以后可以导出。

我试图删除'deriveKey'用法,但后来当我导出它时,'permission error' throw

javascript cryptography aes
1个回答
0
投票

“我确实想生成一个密钥,以后可以导出。”

这没有任何意义。您要么现在创建一个密钥,要么稍后从“主密钥”派生它。此外,AES GCM 不能用于密钥派生。

"DeriveKey"
是生成的密钥可以用于的东西,而不是密钥本身的属性。

如果您有一个对称密钥,并且想从中派生出另一个密钥,那么您应该使用 HKDF。

您可以在 here 中看到可以使用哪些算法。然而,一种用于密钥协商,一种用于基于密码的密钥派生,似乎只有 HKDF 能满足您的需求。

您可以使用

DeriveKey
使用
HkdfParams
作为第一个参数和
"raw"
键作为第二个参数(等)。

Topaco 写了一个很好的答案,其中包括 HKDF here 的代码;别忘了投票。

© www.soinside.com 2019 - 2024. All rights reserved.