关于JWT的问题
Questions regarding JWT
所以我目前尝试使用 nodejs jwt cookie 设置 "remember me" 功能。
Here i found a example for a encrypted cookie. I also read their introduction. Now i plan using this 用于快速存储 user_id 的中间件,以便与 mysql 数据库进行识别。
我的问题是:
- 在 jwt 站点上有一个调试器,当我更改秘密时,如果使用秘密加密有效负载,签名更改不会更安全吗?
- 秘密必须有多少个字符不能被暴力破解 512、1024 2048?
- 秘密暴力破解的速度有多快?如果暴力破解很快,应该多久更改一次?
- 使用上述模块保护令牌的最佳做法是什么?还有如何设置token(使用示例只显示如何阅读)?
我目前主要担心的是,当有人可以制作令牌时,他可以设置他的 user_id 并可以访问任何帐户。如果有人能为我澄清一下,我会很高兴。
问:在 jwt 站点上有一个调试器,当我更改秘密时,如果使用秘密加密有效负载,签名更改不会更安全吗?
JWT 的主要要求是它经过数字签名。如果您将敏感数据放入 JWT,那么您还需要对其进行加密。但我强烈建议您不要将敏感数据放在那里,因为如果用户丢失了他的 JWT 令牌,那么您会希望将损失降到最低。例如,在 OWASP juice shop web application (deliberately insecure web application for the purpose of teaching people security) they put the user's password hash in the token/. This allows an attacker to recover the user password via cross site scripting as demo'ed in this blog.
Q: 秘密必须有多少个字符不能被暴力破解 512, 1024 2048?
取决于您使用的 JWT 算法。如果您使用的是 HMAC,那么 256 位(32 字节)就足够了,远远超出您的需要。如果您使用的是 RSA,则最佳做法是 2048 位(256 字节)。
问:秘密暴力破解的速度有多快?如果暴力破解很快,应该多久更改一次?
假设量子计算机没有成为现实(如果量子计算机真的成为现实,那么所有的赌注都没有),在宇宙的生命周期中使用地球上所有的计算机并不是蛮力的。密码学家是非常聪明的人,他们以这种方式设计这些算法。例如,如果您想了解 RSA 安全性,请从研究 general number field sieve 和 运行 攻击它的时间开始。 :-) 这不是蛮力——蛮力是一种缓慢、愚蠢的攻击——而是一种基于模数代数性质的智能算法。
因此,总而言之,请为您选择的算法使用建议的密钥大小,并且不要担心轮换密钥,除非您有理由相信它已被泄露。如果只有一个地方需要验证token,而且那个地方与生成token的地方相同,那么HMAC是一个不错的选择。但是,否则你最好使用像 RSA 这样的 public 密钥算法。
问:使用上述模块保护令牌的最佳做法是什么?还有如何设置token(使用示例只显示如何阅读)?
由于您将其放入 cookie 中,请遵循 cookie 的正常最佳做法(Secure、HttpOnly 等...)。
所以我目前尝试使用 nodejs jwt cookie 设置 "remember me" 功能。
Here i found a example for a encrypted cookie. I also read their introduction. Now i plan using this 用于快速存储 user_id 的中间件,以便与 mysql 数据库进行识别。
我的问题是:
- 在 jwt 站点上有一个调试器,当我更改秘密时,如果使用秘密加密有效负载,签名更改不会更安全吗?
- 秘密必须有多少个字符不能被暴力破解 512、1024 2048?
- 秘密暴力破解的速度有多快?如果暴力破解很快,应该多久更改一次?
- 使用上述模块保护令牌的最佳做法是什么?还有如何设置token(使用示例只显示如何阅读)?
我目前主要担心的是,当有人可以制作令牌时,他可以设置他的 user_id 并可以访问任何帐户。如果有人能为我澄清一下,我会很高兴。
问:在 jwt 站点上有一个调试器,当我更改秘密时,如果使用秘密加密有效负载,签名更改不会更安全吗?
JWT 的主要要求是它经过数字签名。如果您将敏感数据放入 JWT,那么您还需要对其进行加密。但我强烈建议您不要将敏感数据放在那里,因为如果用户丢失了他的 JWT 令牌,那么您会希望将损失降到最低。例如,在 OWASP juice shop web application (deliberately insecure web application for the purpose of teaching people security) they put the user's password hash in the token/. This allows an attacker to recover the user password via cross site scripting as demo'ed in this blog.
Q: 秘密必须有多少个字符不能被暴力破解 512, 1024 2048?
取决于您使用的 JWT 算法。如果您使用的是 HMAC,那么 256 位(32 字节)就足够了,远远超出您的需要。如果您使用的是 RSA,则最佳做法是 2048 位(256 字节)。
问:秘密暴力破解的速度有多快?如果暴力破解很快,应该多久更改一次?
假设量子计算机没有成为现实(如果量子计算机真的成为现实,那么所有的赌注都没有),在宇宙的生命周期中使用地球上所有的计算机并不是蛮力的。密码学家是非常聪明的人,他们以这种方式设计这些算法。例如,如果您想了解 RSA 安全性,请从研究 general number field sieve 和 运行 攻击它的时间开始。 :-) 这不是蛮力——蛮力是一种缓慢、愚蠢的攻击——而是一种基于模数代数性质的智能算法。
因此,总而言之,请为您选择的算法使用建议的密钥大小,并且不要担心轮换密钥,除非您有理由相信它已被泄露。如果只有一个地方需要验证token,而且那个地方与生成token的地方相同,那么HMAC是一个不错的选择。但是,否则你最好使用像 RSA 这样的 public 密钥算法。
问:使用上述模块保护令牌的最佳做法是什么?还有如何设置token(使用示例只显示如何阅读)?
由于您将其放入 cookie 中,请遵循 cookie 的正常最佳做法(Secure、HttpOnly 等...)。