私は現在、トークンベースの認証システムを設計する必要がある会社で働いています。私たちは2つのサーバーの所有者と制御者になります。1つは認証サーバー、もう1つはアプリケーションサーバーです。
私はコンピュータセキュリティの概念、脅威、一般的な脆弱性とそれらの対策にかなり精通していますが、答えが見つからない質問の1つは、HMAC-SHA256を使用してJWTトークンに署名するときに複数ラウンドのハッシュが必要かどうかです。 。
SHA256を使用したパスワードのハッシュなどの場合、私が理解している一般的なルールは2 ^(year-2000)(パフォーマンスの必要性に応じて与える)のハッシュを実行することであるため、HMAC-SHA256の単一のラウンドは十分に良いですが、私がトピックを研究したときに誰もがこの質問をするのを見たことはありません。
したがって、秘密鍵とJWTトークンヘッダーおよびペイロードが与えられた場合、次のどれがトークンの署名のベストプラクティスと見なされますか。
助けてくれてどうもありがとう。システムが可能な限り設計されていることを確認したいだけです。
HMACとパスワードハッシュは、非常に異なる問題を解決します。 HMACでは、秘密は高品質(つまり、128ビットのエントロピー)であると予想されますが、パスワードは低品質(30ビットのエントロピーはほとんどの人にとって楽観的です)であると予想されます。
単一のクイックハッシュ関数は、攻撃者が多くの一般的なパスワードをすばやく試行したり、エントロピーの低いパスワードに対してブルートフォース攻撃を実行したりできるため、パスワードには適していません。リスクが実際には存在しないHMACの場合(シークレットがCSPRNGによって生成される限り)、1ラウンドで十分です。
補足:指定しませんでしたが、多くのラウンドを使用する場合でも、パスワードのハッシュに直接SHA-256を使用しないでください。標準ライブラリのSHA-256でPBKDF2を使用する方がはるかに簡単なので、落とし穴に遭遇することはありません。