下面的代码将抛出错误:
无法使用指定的密钥用法创建密钥。
const a = async () => {
const key = await window.crypto.subtle.generateKey(
{
name: 'AES-GCM',
length: 256,
},
true,
['encrypt', 'decrypt', 'deriveKey'],
);
};
a();
为什么会发生这种情况,我确实想生成一个密钥,以后可以派生出来。
我试图删除deriveKey
用法,但后来在派生它时,permission error
抛出。
1条答案
按热度按时间jgovgodb1#
“我确实想生成一个可以在以后派生的密钥。“
这并不意味着什么。你要么现在创建一个密钥,要么以后从“主密钥”派生它。此外,AES GCM不能用于密钥派生。
"DeriveKey"
是生成的密钥可以用于的东西,而不是密钥本身的属性。你可以在这里看到你可以使用哪些算法来派生。然而,一个是用于密钥协商的,一个是用于基于口令的密钥派生的,似乎只有HKDF适合你的需要;如果你有一个对称密钥,你想从它派生另一个密钥,那么你应该使用HKDF。
您可以使用
DeriveKey
,将HkdfParams
作为第一个参数,将"raw"
键作为第二个参数(等等)。不幸的是,没有官方的HKDF示例(但我的bug报告可能会被接受,所以嘿,可能很快)。Topaco写了一个很好的答案,其中包括HKDF here的代码;别忘了投赞成票。