totonoe

セキュリティを整える

中級

ソルト&レインボーテーブルを整える

= ハッシュだけでは破られる。ソルトで守るしくみを体験

「パスワードはハッシュ化してるから安全」——本当でしょうか。よくあるパスワードのハッシュは、攻撃者が事前に用意した対応表で一瞬で逆引き(クラック)されます。ここでは内蔵の事前計算テーブルでそれを体感し、ソルトを足すと同じ表が効かなくなることを対比します。入力もハッシュもこの端末から一切出ません(送信ゼロ)。防御・教育のためのツールです。

🔰 かんたんに言うと

パスワードを「指紋(ハッシュ)」にしただけでは破られる理由と、「ソルト」を足して守るしくみを体験します。

i

TLDR — 30秒で分かる

ハッシュにしただけでは安全じゃない。よくあるパスワードは事前計算表で一瞬で破られる——でもソルトを足すと同じ表が効かなくなる。その対比をブラウザの中だけで体験。

主な機能を見る
  • パスワードのSHA-256を端末内で計算(同じ入力=必ず同じ値)
  • 内蔵の事前計算テーブルで逆引き(クラック成功)を再現
  • ソルトを足すとハッシュが変わり同じ表が効かなくなる対比
  • ソルトを引き直すたびハッシュが変化するのを可視化
  • ユーザー毎ソルト/bcrypt・Argon2/ペッパーの防御作法を図解
  • 送信ゼロ・SubtleCryptoで端末内完結(攻撃ツールではない)
アニメで見る — なぜハッシュだけでは足りないのか ▶ 再生で1ステップずつ動きます
💧

漏れたDB

ハッシュだけ

🔢 5e88…42d8
📚

事前計算表

よくあるPW

5e88…→password
🔓

逆引き成功

平文がバレる

🔑 password
👥

ユーザー2人

同じPW

🙂 A: password
🙂 B: password
🧂

ソルト付与

各自バラバラ

🧂 ソルトA + PW
🧂 ソルトB + PW
🗄️

保存される値

別々のハッシュ

🔢 554b…(A)
🔢 9c3f…(B)

STEP 1

※ イメージ図です。下の入力欄で、実際にハッシュ計算・逆引き・ソルト無効化を体験できます。

① 素の SHA-256 を逆引きしてみる 入力すると即時に再計算(送信ゼロ)

これはあなたの端末の中だけで計算されます。実在のパスワードを試すのは避け、サンプルで体験してください。

SHA-256(ソルト無し) 256 bit パスワード保存には不適切
計算中…

同じパスワードなら、いつ・誰の端末でも必ず同じこの値になります。だから事前計算表が成立します。

内蔵の事前計算テーブル(レインボーテーブルの縮小模型) よくある弱いパスワードの SHA-256

攻撃者はこういう表を事前に1回だけ作っておけば、以後は漏れたハッシュを照合するだけ。今あなたが入力した値が一致する行はでハイライトされます。

平文(よくあるPW) SHA-256
計算中…
② ソルトを足して、同じ表を効かなくする ソルトを変えるとハッシュが変わります
SHA-256( ソルト + パスワード ) 説明用の例
計算中…

ソルト無し

ソルトあり

「🎲 別のソルト」を押すたびハッシュが変わります=同じパスワードでもユーザーごとに保存値がバラバラになり、攻撃者の共通テーブルが一致しなくなります。

正しいパスワード保存・4つの作法

「ハッシュにした」だけでは、守ったことにならない。

  1. 1

    ユーザーごとに違うソルトを使う

    ランダムなソルトを1人1人に発行し、ハッシュと並べて保存します。これで事前計算テーブルが共通で使えなくなり、同じパスワードの人どうしでも保存値が一致しません。ソルトは秘密でなくてよく、漏れても効果は保たれます。

  2. 2

    パスワード用の「遅い」関数を使う(bcrypt / Argon2 / scrypt / PBKDF2)

    SHA-256 を1回かけるだけは速すぎて、GPU で毎秒何十億回も試せてしまいます。あえて計算を重く・メモリを食うようにした専用関数(ストレッチ)を使い、総当たりを現実的でない速度に落とします。生の SHA-256 単体はパスワード保存に不適切です。

  3. 3

    ペッパー(アプリ側の共通秘密)を足す

    ソルトとは別に、DB ではなくアプリの設定(秘密)側に置く共通の追加値がペッパーです。DB だけが漏れてもペッパーが分からなければクラックがさらに難しくなります。鍵管理サービス等で安全に保管します。

  4. 4

    そもそも弱いパスワードを作らせない

    どんなに保存方法を整えても、「password」「123456」のような単語は表に載っていて一瞬で破られます。長いパスフレーズ・パスワードマネージャ・パスキー(FIDO2)への移行が根本的な防御です。

⚠ このツールの位置づけ

これは攻撃ツールではなく防御・教育ツールです。内蔵テーブルはごく少数の「よくある弱いパスワード」だけを持ち、他人のパスワードを破る用途には使えません。他人のアカウントへの不正アクセスは法律で禁止されています。体験は必ず自分のサンプル値で行ってください。

🔒 計算はすべてあなたのブラウザの中(Web Crypto API)で完結します。入力した文字もハッシュもサーバには送られません(送信ゼロ)。crypto.subtle は安全な接続(https / localhost)でのみ動作します。

よくある質問

Q. ハッシュ化すればパスワードは安全では?
A. いいえ。同じパスワードは必ず同じハッシュになるため、よくあるパスワードのハッシュを事前計算した「レインボーテーブル」と照合すれば一瞬で平文が逆引きされます。ハッシュ化は安全の十分条件ではありません。
Q. レインボーテーブルとは何ですか?
A. よくあるパスワードのハッシュを事前に大量計算しておいた対応表です。攻撃者は1回作れば、以後は漏れたハッシュを「探すだけ」で総当たりなしに平文を割り出せます。本ツールはその縮小模型を内蔵しています。
Q. ソルトとは何ですか。秘密にすべき?
A. ユーザーごとに違うランダムな付加文字列です。秘密にする必要はなく、ハッシュと並べて保存します。役割は「同じパスワードでも保存値をバラけさせ、共通の事前計算表を無効化する」ことです。
Q. ソルトを付ければ SHA-256 のままで安全ですか?
A. 不十分です。ソルトは事前計算表を無効化しますが、SHA-256は高速すぎて1人ずつの総当たりには弱いままです。bcrypt・Argon2・scrypt・PBKDF2のような「遅い」関数を併用してください。
Q. ペッパーはソルトと何が違いますか?
A. ソルトはユーザー毎でDBに保存しますが、ペッパーはアプリ全体で共通の秘密で、DBとは別の場所(設定や鍵管理サービス)に置きます。DBだけが漏れてもペッパーが分からなければクラックがさらに困難になります。
Q. 入力したパスワードはどこかに送られますか?
A. いいえ。計算はすべてブラウザ内(Web Crypto API)で行われ、入力もハッシュもサーバに送信されません(送信ゼロ)。実在のパスワードではなくサンプル値で試してください。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

RELATED TOOLS

続けて整える

KOINOBORI ECOSYSTEM

私たちが運営するサイト