暴力破解 HS256 是可能的:在签署 JWT 时使用强密钥的重要性

主要观点:JSON Web Token 是用 JSON 对象编码一系列声明,可通过数字签名验证和信任,结构由 Header、Payload、Signature 三部分组成,常见签名算法有 HS256、RS256、ES256,HS256 虽安全但短密钥易被暴力破解,如使用 C 语言工具可在一定时间内破解,推荐使用 Auth0 的 512 位密钥或 RS256 算法。
关键信息

  • JWT 编码声明,可验证信任,签名算法多样。
  • 结构:Header 含令牌类型和哈希算法,Payload 携带声明,Signature 由编码的 Header、Payload 和密钥签名组成。
  • 常见算法及示例:HS256 基于 HMAC 和 SHA256,RS256 用 RSA 公钥算法,ES256 利用 ECDSA 算法。
  • 暴力破解 HS256 JWT:可通过特定工具在一定时间内破解,因密钥过短易受攻击,推荐使用长密钥或 RS256 算法。
    重要细节
  • Header 示例:{"alg": "HS256", "typ": "JWT"},Payload 示例:{"sub": "1234567890", "name": "John Doe", "manager": true}
  • RS256 密钥生成:openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048openssl rsa -pubout -in private_key.pem -out public_key.pem
  • ECDSA 密钥生成:openssl ecparam -name prime256v1 -genkey -noout -out ecdsa_private_key.pemopenssl ec -in ecdsa_private_key.pem -pubout -out ecdsa_public_key.pem
  • 暴力破解命令及示例:在 Mac 上安装openssl后运行make OPENSSL=/usr/local/opt/openssl/include OPENSSL_LIB=-L/usr/local/opt/openssl/lib,克隆jwt-cracker工具并运行time./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE等。
阅读 8
0 条评论