【问题标题】:JWT fastest algorithmJWT 最快的算法
【发布时间】:2019-09-25 11:37:31
【问题描述】:

我正在开发一个使用JWT-library 来确保安全的网络应用程序。我注意到处理令牌解密的 JWT 库正在消耗大量服务器的 CPU。当前配置定义如下。

JweAlgorithm.PBES2_HS512_A256KW, JweEncryption.A256CBC_HS512

测试时,对此进行 1000 次后续调用需要 87 秒。我发现的最快替代方法是:JweAlgorithm.PBES2_HS256_A128KW, JweEncryption.A128GCM,耗时 27s

你能推荐比这更快的东西吗?

【问题讨论】:

  • 密码学本来就是要慢的……否则你可以强行使用它。
  • 不一定,全看算法的独创性。至少这是对加密的承诺——你可以拥有单向函数,它的解码速度比编码慢得多。我不相信密码学意味着要慢。
  • 这不是密码散列算法,如 PBKDF 或 brcypt。它根本不必很慢
  • 如果可以解码,就可以编码。如果时间不是一个因素,你有无限的时间来解码它。如果解码,您可以对其进行编码。那么为什么不直接使用明文呢?很简单:因为时间是一个因素。这就是令牌有生命周期的原因。
  • 当然,这是关于权衡的。我在问 JWT 提供的最快算法是什么。

标签: c# .net jwt


【解决方案1】:

一般来说,与使用公钥/密钥对(非对称)的算法相比,使用共享密钥(对称)的算法更快。

算法PBES2-HS512+A256KW是一种对称算法,但它有一个特殊性:它有一个salt和一个iteration count参数,add computational expense故意变慢。

RFC7518 建议的最小值为 1000 次迭代,而 OWASP 要求“一个表示目标系统上的计算时间必须至少需要 1 秒的数字(例如 1000.000)”。

算法的效率主要取决于你使用的 JWT 实现以及这背后的加密工具。 对于 PHP,一些密钥加密算法只需要 400µs(例如 ECDH-ES over X25519 曲线),而其他需要超过 2.5ms(PBES2+HS384-A192KW,512bits salt 和 4096 次迭代)。

我建议运行基准测试以找到最适合您的用例和环境的算法。

“最快”并不意味着“最安全”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多