我们计划将JSON令牌(JWT)用于身份验证服务器,我目前正在评估对JWE令牌采用哪种加密方法。
管理对称加密密钥似乎有两个选项:
在我看来,两者都没有任何固有的安全优势,只要使用足够强大的算法和足够大的密钥大小。
看起来主要的区别在于,在第一种情况下,接收方必须信任发行者不会泄漏预共享密钥,而在第二种情况下,只有接收方拥有必要的解密密钥。但是,考虑到这个JWE令牌的有效负载将是一个签名的JWS令牌,接收方还必须与发行人有很强的信任关系,并且必须信任他们不会泄露他们自己的私有签名密钥,因此这看起来并不是什么大问题。
给定选项1会产生一个小得多的令牌(因为其中没有嵌入加密的对称密钥),是否有充分的理由选择选项2?
发布于 2013-03-26 21:29:58
我想说的是,选项2的主要优点是没有必要分发(或更新)一个预先共享的密钥。如果你能以某种方式确保你有一个安全的机制来转移预共享密钥(也就是说,只有一个人你需要这样做,并且你有信心在电话中和他们交谈并拼出密钥--很明显,这有安全风险(电话敲击,在另一端写在纸上的密钥,等等),我会选择选项1。然而,如果你想要建立一些api接口,客户可以连接和启动安全连接而不需要-波段密钥交换,那就选择选项2。
发布于 2017-03-06 14:27:01
只想把这个放在这里,让人们通过谷歌(目前搜索jwt public private vs symmetric的第二结果)找到这个。
这里的选项2是安全漏洞--如果发行者使用接收者公钥加密消息,那么是的,接收方是唯一能够解码信息的人,但是使用JWT,所需的安全性是JWT完全完好无损且未被修改。使用公钥加密并不能做到这一点--任何人都可以做同样的事情,并冒充发行者。
真正的解决方案是使用发行人的私钥签署令牌,然后任何人都可以使用发行人的公钥确认发行人确实在JWT中确认了该授权。
发布于 2013-05-29 12:45:48
对于选项1,发行人和接收方都必须将对称密钥保密。如果您的收件人是由另一方生产和维护的多租户云服务,这可能太危险了,如果有人访问配置文件或数据库,将允许他们创建令牌来模拟系统中的任何人。
备选案文2规定发行人有责任保守关键秘密。如果您是接收者,这将减轻许多责任和安全问题,因为您只持有公钥。作为发行人,您获得了更多的信心,因为您是单独负责您的私人加密密钥的安全。
因此,这真的取决于你有多少信任的接受者保持对称密钥的安全,如果你是接受者,你是否愿意押注你的产品和声誉,你可以保证它的安全。
https://security.stackexchange.com/questions/33232
复制相似问题