JSON 网络密钥的 'ext' 属性 有什么用?

What is the 'ext' property of a JSON web key for?

我正在生成并导出 JSON 网络密钥 (jwk)(参见 RFC 7517) using the browser crypto API with the following code (with thanks to this excellent webCrypto examples page on GitHub):

async function makeKey(){
  const key = await window.crypto.subtle.generateKey(
    { name: "AES-CTR", length: 128 },
    false,
    ["encrypt", "decrypt"]
  )
  return window.crypto.subtle.exportKey("jwk", key)
}

我得到的是一个 JSON 具有许多属性的对象,与 MDN documentation 中的对象非常相似,看起来像这样:

{
  alg: "A256CTR",
  ext: true,
  k: "...", //the actual key, a random string of characters
  key_ops: undefined,
  kty: "oct"
}

上述所有属性都在上面链接的 RFC 中定义,ext 除外。我查看了许多资源(包括但不限于 MDN 和 RFC),但似乎找不到定义。虽然按照上面的定义一切正常,但我更愿意(特别是像 crypto 这样的东西)知道一切都是为了什么。那么,jwk 的 ext 属性 的目的是什么?

我终于在 w3 webCrypto API documentation 中找到了对此的引用。

它是对 jwk 规范的扩展。 JsonWebKey 字典的第 15 节有以下定义:

dictionary JsonWebKey {
  // The following fields are defined in Section 3.1 of JSON Web Key
  DOMString kty;
  DOMString use;
  sequence<DOMString> key_ops;
  DOMString alg;

  // The following fields are defined in JSON Web Key Parameters Registration
  boolean ext;

  // The following fields are defined in Section 6 of JSON Web Algorithms
  DOMString crv;
  DOMString x;
  DOMString y;
  DOMString d;
  DOMString n;
  DOMString e;
  DOMString p;
  DOMString q;
  DOMString dp;
  DOMString dq;
  DOMString qi;
  sequence<RsaOtherPrimesInfo> oth;
  DOMString k;
};

这导致关于 JSON Web Key Parameters Registration 的部分将其定义为 extractable 的缩写,根据文档其余部分的上下文,指示是否可以导出密钥。

鉴于 jwt 是通过导出它生成的,因此对于由此生成的任何密钥,这将始终为 true,但是在导入密钥之前将其设置为 false 将阻止它被重新导出.