JSON Web 令牌的对称或非对称加密?

信息安全 加密 密码学 json
2021-08-13 05:48:02

我们计划将 JSON Web 令牌 (JWT) 用于我们的身份验证服务器,我目前正在评估为 JWE 令牌采用哪种加密方法。

管理对称加密密钥似乎有两种选择:

  1. 发行者/接收者预先共享一个对称密钥并使用它加密所有令牌;消息中不包含对称密钥。
  2. 发行者为每个令牌生成一个对称密钥,然后使用接收者的公钥加密令牌并将其包含在消息中。

在我看来,只要使用足够强大的算法和足够大的密钥大小,两者都没有任何固有的安全优势。

看起来主要区别在于,在第一种情况下,接收者必须信任发行者不会泄露预共享密钥,而在第二种情况下,只有接收者拥有必要的解密密钥。但是,鉴于此 JWE 令牌的有效负载将是已签名的 JWS 令牌,接收方还必须与颁发者有很强的信任关系,并且必须相信他们不会泄露自己的私人签名密钥,所以这看起来并不大问题。

鉴于选项 1 生成的令牌要小得多(由于其中没有嵌入加密的对称密钥),是否有充分的理由更喜欢选项 2?

3个回答

我想说选项 2 的主要优点是无需分发(或更新以防被泄露)预共享密钥。如果你能以某种方式确保你有一个安全的机制来传输预共享密钥(即只有一个人需要你这样做,并且你有信心通过电话与他们交谈并拼出密钥 - - 显然这有安全风险(电话窃听,另一端写在纸上的密钥等),您需要评估)我会选择选项 1。但是,如果您想构建一些客户端可以连接和启动的 api 接口无需带外密钥交换的安全连接,请选择选项 2。

只是想把它放在这里,让人们通过谷歌找到它(目前是搜索的第二个结果jwt public private vs symmetric

此处的选项 2 是安全漏洞 - 如果发布者使用接收者公钥加密消息,那么是的,接收者是唯一可以解码信息的人,但JWT所需的安全性JWT是完全完整且未被修改. 使用公钥加密不会这样做 - 任何人都可以做同样的事情并冒充发行人

真正的解决方案是使用颁发者的 PRIVATE 密钥对令牌进行签名,然后任何人都可以使用颁发者的 PUBLIC 密钥确认颁发者确实在 JWT 中确认了该权限。

对于选项 1,发行者和接收者都必须对对称密钥保密。如果您的接收者是由另一方生产和维护的多租户云服务,这可能太冒险了,如果有人可以访问配置文件或数据库,它将允许他们创建令牌来冒充系统中的任何人。

选项 2 将保密密钥的责任交给发行人。如果您是接收者,这可以减轻很多责任和安全问题,因为您只持有公钥。作为发行人,您将获得更大的信心,因为您全权负责您的私人加密密钥的安全性。

因此,这实际上取决于您对收件人的信任程度来保证对称密钥的安全,如果您是收件人,您是否愿意为您的产品和声誉打赌,您可以保证它的安全。