JOSE、JWA、JWE、JWK、JWS 和 JWT 有何区别?

16

JOSE、JWA、JWE、JWK、JWS 和 JWT 之间有什么区别,它们之间如何相互关联?

1个回答

29
JOSE代表JSON对象签名和加密。它是一组使用基于JSON的数据结构来签名和加密数据的标准。换句话说,JWAJWEJWKJWSJWT都是JOSE的一部分。 TL;DR:
  • JWA: 定义了一组在JWEJWKJWS中使用的加密算法和标识符。
  • JWK: 使用基于JSON的数据结构定义了用作JWA中定义的算法输入的加密密钥表示。
  • JWE: 使用基于JSON的数据结构定义了加密内容。加密/解密使用在JWA中定义的算法执行。
  • JWS: 使用基于JSON的数据结构定义了签名内容。签名/验证使用在JWA中定义的算法执行。
  • JWT: 使用基于JSON的数据结构定义主题声明。可以通过JWEJWS可选地保护声明。

更详细的版本:

JWE(JSON Web Encryption)使用基于JSON的数据结构表示加密内容。 JWE 用于在各方之间共享数据,具有认证(确保数据来自它声称的发送者),机密性(确保只有接收方可以解密数据)和完整性(确保在传输过程中未被第三方更改)。JWE 支持对称密钥加密(使用单个密钥加密和解密)和非对称密钥加密(使用公钥加密,私钥解密)。

JWS(JSON Web Signature)使用基于JSON的数据结构表示使用数字签名或消息认证码(MAC)保护的内容。 JWS 用于在各方之间共享数据,具有认证完整性JWS 提供了一个较轻量级的替代方案,当不需要机密性时。 JWS 支持对称密钥MAC(使用单个密钥进行签名和验证)和非对称密钥数字签名(使用私钥签名,使用公钥验证)。

JWE加密和JWS签名使用密码算法进行。这些算法及其对应的标识符在JWA(JSON Web Algorithms)中定义。

JWA中指定的密码算法以密码密钥作为输入。JWK(JSON Web Key)定义了使用基于JSON的数据结构表示密码密钥的方法。

JWT(JSON Web Token)是一种简洁、URL安全的方式,用于表示有关主体的声明,以便在两个参与方之间传输。JWT是基于声明的身份验证中使用的一种形式的基于声明的身份。可以通过JWEJWS可选地保护JWTJWT的最小表示形式包括一个JOSE头部声明(在JWS上下文中也称为有效负载,在JWE上下文中称为明文)。


这里有三个针对声明{"foo": "bar"}JWT值:

未受保护(无签名/加密):

  • 最小的JOSE头部是:{"alg": "none"}
  • JWT值是:eyJhbGciOiJub25lIn0.eyJmb28iOiJiYXIifQ(头部 + "." + 声明)

通过JWS保护

  • 使用JWA和id:HS256(使用SHA-256的HMAC)
  • 使用JWK和值:{"kty":"oct","k":"AAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8"}
  • 最小的JOSE header是:{"alg":"HS256"}
  • JWT的值为:eyJhbGciOiJIUzI1NiJ9.eyJmb28iOiJiYXIifQ.QqnxrmVYNzUZe2xJeSZIBMoELSfxW144gSAvdBTeXCo(header + "." + payload + "." + signature)

通过JWE保护

  • 使用密钥管理模式:dir(直接加密)
  • 使用JWA和id:A256GCM(使用256位密钥的AES GCM)
  • 使用JWK和值:{"kty":"oct","k":"AAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8"}
  • 最小的JOSE header是:{"alg":"dir","enc":"A256GCM"}
  • 可能的JWT值为:eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..69fkCssY6yzSKVtt.3kRb3CHlZdwB1kBrwQ.mkwzT_wBpi6W7mXgjbxmvw(header + ".." + initialization vector + "." + ciphertext + "." + authentication tag)

注意:JWE示例中使用了单词"possible",因为IV(初始化向量)是随机生成的。因此,使用相同密钥加密的相同JWT声明的许多有效变体可以使用JWE加密。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接