关于智威汤逊的问题
Posted
技术标签:
【中文标题】关于智威汤逊的问题【英文标题】:Questions regarding JWT 【发布时间】:2019-03-09 00:45:10 【问题描述】:所以我目前尝试使用 nodejs jwt cookie 设置“记住我”功能。 Here 我找到了一个加密 cookie 的示例。我也看了他们的介绍。现在我计划使用 this 中间件进行 express 存储 user_id 以便与 mysql 数据库进行识别。 我的问题是:
在 jwt 站点上有一个调试器,当我更改密码时,如果使用密码对有效负载进行加密,只有签名更改不会更安全? 秘密应该有多少个字符不能被暴力破解 512、1024 2048? 秘密暴力破解有多快?如果暴力破解速度很快,应该多久更改一次? 使用上述模块保护令牌的最佳做法是什么?还有如何设置token(用法示例仅显示如何读取)?我目前主要担心的是,当有人可以制作令牌时,他可以设置他的 user_id 并访问任何帐户。如果有人可以为我澄清这一点,我会很高兴。
【问题讨论】:
【参考方案1】:问:在 jwt 站点上有一个调试器,当我更改密码时,如果使用密码对有效负载进行加密,只有签名更改不会更安全?
JWT 的主要要求是经过数字签名。如果您将敏感数据放在 JWT 中,那么您还需要对其进行加密。但我强烈建议您不要将敏感数据放在那里,因为如果用户丢失了他的 JWT 令牌,那么您会希望将损失降到最低。例如,在OWASP juice shop web 应用程序中(为了教人们安全而故意不安全的 web 应用程序)他们将用户的密码哈希放在 token/ 中。这允许攻击者通过在this blog 中演示的跨站点脚本恢复用户密码。
问:秘密应该有多少个字符不能被暴力破解 512、1024 2048?
取决于您使用的 JWT 算法。如果您使用的是 HMAC,那么 256 位(32 字节)就足够了,远远超出您的需要。如果您使用的是 RSA,那么 2048 位(256 字节)是最佳做法。
问:秘密暴力破解有多快?如果暴力破解速度很快,应该多久更改一次?
假设量子计算机没有成为现实(如果量子计算机确实成为现实,那么所有的赌注都没有了),在宇宙的整个生命周期中使用地球上的所有计算机并不是暴力强制的。密码学家是非常聪明的人,他们以这种方式设计这些算法。例如,如果您想了解 RSA 安全性,请从查看general number field sieve 和攻击它的运行时间开始。 :-) 这不是蛮力——蛮力是一种缓慢而愚蠢的攻击——而是一种基于模数代数特性的智能算法。
因此,总而言之,为您选择的算法使用推荐的密钥大小,除非您有理由相信它已被泄露,否则不必担心轮换密钥。如果只有一个地方需要验证令牌并且该地方与生成令牌的地方相同,那么 HMAC 是一个不错的选择。但是,否则您最好使用像 RSA 这样的公钥算法。
问:使用上述模块保护令牌的最佳做法是什么?还有如何设置token(用法示例只显示如何读取)?
由于您将其放入 cookie,因此请遵循 cookie 的常规最佳做法(安全、HttpOnly 等...)。
【讨论】:
以上是关于关于智威汤逊的问题的主要内容,如果未能解决你的问题,请参考以下文章