我们计划将 JSON Web 令牌 (JWT) 用于我们的身份验证服务器,我目前正在评估为 JWE 令牌采用哪种加密方法。
管理对称加密密钥似乎有两种选择:
- 发行者/接收者预先共享一个对称密钥并使用它加密所有令牌;消息中不包含对称密钥。
- 发行者为每个令牌生成一个对称密钥,然后使用接收者的公钥加密令牌并将其包含在消息中。
在我看来,只要使用足够强大的算法和足够大的密钥大小,两者都没有任何固有的安全优势。
看起来主要区别在于,在第一种情况下,接收者必须信任发行者不会泄露预共享密钥,而在第二种情况下,只有接收者拥有必要的解密密钥。但是,鉴于此 JWE 令牌的有效负载将是已签名的 JWS 令牌,接收方还必须与颁发者有很强的信任关系,并且必须相信他们不会泄露自己的私人签名密钥,所以这看起来并不大问题。
鉴于选项 1 生成的令牌要小得多(由于其中没有嵌入加密的对称密钥),是否有充分的理由更喜欢选项 2?