什么是 JWE 密钥管理模式?

Mar*_*rco 1 jwe

JWE标准定义了一个称为密​​钥管理模式概念。根据RFC,有五种:直接加密、密钥加密、直接密钥协商、密钥包装、密钥协商与密钥包装。

它们之间有什么区别,拥有这么多又有什么意义呢?

Mar*_*rco 7

JWE始终使用称为(内容加密密钥)的对称加密密钥来加密明文CEK。发行者和接收者并不总是拥有可用作 的预共享密钥CEK,因此他们必须使用某种形式的公钥加密技术才能安全地共享或同意使用CEK密钥管理模式指定如何CEK确定。

JWE始终提供机密性(确保只有接收者可以解密数据)和完整性(确保数据在传输过程中不被第三方更改)。根据密钥管理模式,它还可以提供身份验证(确保数据来自其声称的发行者)。

JWE还支持用于多个接收者的令牌,其中每个接收者可以使用不同的密钥管理模式。在这种情况下,JWE不能使用紧凑序列化,必须使用JSON序列化。此外,无论收件人数量有多少,JWE都会使用单个CEK收件人来加密明文。因此,不需要为每个预期接收者包含不同的密文副本。

以下是JWE支持的密钥管理模式

1.直接加密:

  • 使用时:
    • 发行者和接收者有一个预先共享的对称密钥。
  • 怎么运行的:
    • 令预共享对称密钥为CEK.
    • 发行者使用 加密明文CEK
    • 接收者用 解密密文CEK
  • 特性:
    • 保密。
    • 正直。
    • 身份验证(假设只有发行者和接收者知道CEK)。
  • 由多接收者 JWE 支持:否。
  • JOSE 标头示例: { "alg": "dir", "enc": "A256GCM" }

2. 密钥加密:

  • 使用时:
    • 场景一:
      • 发行者和接收者没有预先共享的对称密钥。
      • 发行者知道接收者的公钥RSA
    • 场景B:
      • 发行人希望将单个JWE发送给多个收件人。
      • 发行者和至少一个接收者没有预共享对称密钥。相反,发行者知道RSA该接收者的公钥。
  • 怎么运行的:
    • 发行人随机生成一个CEK.
    • 发行者使用 加密明文CEK
    • 对于每个预期接收者:
      • CEK发行者使用接收者的公钥进行加密。
      • 发行者在JWE中包含加密CEK+密文。
      • CEK接收者用其私钥解密加密。
      • 接收者用 解密密文CEK
  • 特性:
    • 保密。
    • 正直。
  • 由多接收者 JWE 支持:是的。
  • JOSE 标头示例: { "alg": "RSA-OAEP", "enc": "A256GCM" }

3. 直接密钥协议

  • 使用时:
    • 发行者和接收者没有预先共享的对称密钥。
    • 发行者了解接收者的EC公钥(EC密钥对不能直接用于加密/解密数据)。
  • 怎么运行的:
    • 发行者随机生成临时EC公钥/私钥对。
    • 发行者CEK使用临时私钥和接收者的公钥进行派生。
    • 发行者使用 加密明文CEK
    • 发行者在JWE中包含临时公钥+密文。
    • 接收者CEK使用临时公钥及其私钥进行派生。
    • 接收者用 解密密文CEK
  • 特性:
    • 保密。
    • 正直。
  • 由多接收者 JWE 支持:否。
  • JOSE 标头示例: { "alg": "ECDH-ES", "enc": "A256GCM", "epk": { ephemeral public key }, "apu": "(issuer)", "apv": "(recipient)" }

4. 按键包装

  • 使用时:
    • 发行人希望将单个JWE发送给多个收件人。
    • 发行者和至少一个接收者具有预先共享的秘密。
  • 怎么运行的:
    • 发行人随机生成一个CEK.
    • 发行者使用 加密明文CEK
    • 对于每个预期接收者:
      • 令预共享秘密为包装密钥或用于导出包装密钥的密码。
      • CEK发行者使用包装密钥进行加密。
      • 发行者在JWE中包含加密CEK+密文。
      • 接收者找到其对应的加密CEK并使用包装密钥对其进行解密。
      • 接收者用 解密密文CEK
  • 特性:
    • 保密。
    • 正直。
    • 身份验证(假设只有发行者和接收者知道共享秘密)。
  • 由多接收者 JWE 支持:是的。
  • JOSE 标头示例: { "alg": "A256KW", "enc": "A256GCM" }

5. 密钥协议与密钥包装

  • 使用时:
    • 发行人希望将单个JWE发送给多个收件人。
    • 发行者和至少一个接收者没有预共享对称密钥。相反,发行者知道EC该接收者的公钥(EC密钥对不能直接用于加密/解密数据)。
  • 怎么运行的:
    • 发行人随机生成一个CEK.
    • 发行者使用 加密明文CEK
    • 对于每个预期接收者:
      • 发行者随机生成临时EC公钥/私钥对。
      • 发行者使用临时私钥和接收者的公钥派生包装密钥。
      • CEK发行者使用包装密钥进行加密。
      • 发行者在JWE中包含加密CEK+临时公钥+密文。
      • 接收者找到其相应的临时公钥并使用它及其私钥派生包装密钥。
      • 接收者找到其对应的加密CEK并使用派生的包装密钥对其进行解密。
      • 接收者用 解密密文CEK
  • 特性:
    • 保密。
    • 正直。
  • 由多接收者 JWE 支持:是的。
  • JOSE 标头示例: { "alg": "ECDH-ES+A256KW", "enc": "A256GCM", "epk": { ephemeral public key }, "apu": "(issuer)", "apv": "(recipient)" }