本文へスキップ
ecdsa.com

HS256

SHA-256 による HMAC を使う JWS アルゴリズム(RFC 7518 §3.2)で、発行者と検証者が 256 ビット以上の共通鍵を 1 つ共有するため、トークンを検証できる者は誰でもトークンを発行できます。
別表記HS256HMAC-SHA256 JWTHS512

JWA が実装必須(Required)としている唯一の JWS アルゴリズムであり、多くのチュートリアルやフレームワークでデフォルトになっています。32 バイトのタグは共有シークレットを使って header.payload に対して計算され、検証ではタグを再計算して定数時間で比較します。

主な問題は弱いシークレットです。RFC 7518 はハッシュ長(256 ビット)以上の鍵を求めていますが、secret のような短いシークレットや辞書にある語で署名されたトークンは、1 つのトークンからオフラインで割り出せます(hashcat のモード 16500、jwt_tool)。そうなると、攻撃者は任意のトークンを発行できます。パスワードは決して使わず、32 バイト以上のランダムなバイト列を使って、JWT シークレットチェッカーで確認してください。

HS256 が適しているのは、同じサービスがトークンを発行し、検証する場合です。サードパーティの検証者、マイクロサービス、パブリッククライアントには非対称アルゴリズムを使って検証者が公開鍵だけを持つようにし、RS256 との混同を避けるため、鍵ごとにアルゴリズムを固定してください。

規格と参考文献

すべての用語