web-dev-qa-db-ja.com

JWTトークン署名のHMAC-SHA256

私は現在、トークンベースの認証システムを設計する必要がある会社で働いています。私たちは2つのサーバーの所有者と制御者になります。1つは認証サーバー、もう1つはアプリケーションサーバーです。

私はコンピュータセキュリティの概念、脅威、一般的な脆弱性とそれらの対策にかなり精通していますが、答えが見つからない質問の1つは、HMAC-SHA256を使用してJWTトークンに署名するときに複数ラウンドのハッシュが必要かどうかです。 。

SHA256を使用したパスワードのハッシュなどの場合、私が理解している一般的なルールは2 ^(year-2000)(パフォーマンスの必要性に応じて与える)のハッシュを実行することであるため、HMAC-SHA256の単一のラウンドは十分に良いですが、私がトピックを研究したときに誰もがこの質問をするのを見たことはありません。

したがって、秘密鍵とJWTトークンヘッダーおよびペイロードが与えられた場合、次のどれがトークンの署名のベストプラクティスと見なされますか。

  1. HMAC-SHA256の1回の反復は、JWTトークン署名に対して安全であると見なされます。
  2. 同じ秘密鍵を何度も繰り返し使用して、HMAC-SHA256を何度も実行することをお勧めします。
  3. HMAC-SHA256を1回実行してから、HMACの計算から製品に対してSHA256ハッシュ反復を実行します。 (これは私がベストプラクティスであると想定するものです)
  4. 私は完全に間違っており、それは何か違うものです。

助けてくれてどうもありがとう。システムが可能な限り設計されていることを確認したいだけです。

1
dFrancisco

HMACとパスワードハッシュは、非常に異なる問題を解決します。 HMACでは、秘密は高品質(つまり、128ビットのエントロピー)であると予想されますが、パスワードは低品質(30ビットのエントロピーはほとんどの人にとって楽観的です)であると予想されます。

単一のクイックハッシュ関数は、攻撃者が多くの一般的なパスワードをすばやく試行したり、エントロピーの低いパスワードに対してブルートフォース攻撃を実行したりできるため、パスワードには適していません。リスクが実際には存在しないHMACの場合(シークレットがCSPRNGによって生成される限り)、1ラウンドで十分です。

補足:指定しませんでしたが、多くのラウンドを使用する場合でも、パスワードのハッシュに直接SHA-256を使用しないでください。標準ライブラリのSHA-256でPBKDF2を使用する方がはるかに簡単なので、落とし穴に遭遇することはありません。

4
AndrolGenhald