Password Check

パスワード強度チェック

パスワード強度チェックは、入力したパスワードの安全性を多角的に判定できるツールです。アルゴリズムを用いた強度評価、過去の漏洩データベースとの照合、攻撃手法別の推定解読時間の算出が可能です。入力された文字列はサーバーに送信されず、すべてブラウザ内で処理されるため、安全に確認いただけます。

使い方

  1. パスワードの入力欄に強度を確認したい文字列を入力します。
  2. リアルタイムで総合スコア、推定解読時間、安全性を示すレーダーチャートが表示されます。
  3. 漏洩チェックの結果を確認し、過去に情報漏洩の被害に遭った文字列でないかを確認します。
  4. 改善提案やセキュリティ詳細のタブを切り替えて、より強力なパスワードにするための情報を確認します。
  5. 必要に応じて、パスワード生成機能を使用してランダムな文字列を作成し、コピーして利用します。

パスワード強度・安全性のポイント

パスワード強度チェックツールで使用している用語や評価方法、安全なパスワードの作り方について詳しく解説します。

基本用語

パスワード強度

パスワードがどれだけ攻撃者による推測や解読に強いかを示す指標です。文字数、文字種の多様性、パターンの複雑さなどから総合的に評価されます。

文字種

パスワードに使用できる文字のカテゴリです:

  • 小文字:a, b, c, ... z(26種類)
  • 大文字:A, B, C, ... Z(26種類)
  • 数字:0, 1, 2, ... 9(10種類)
  • 記号:!, @, #, $, %, &, *, など(約30種類)

ポイント:4種類すべてを組み合わせることで、パスワードの強度が飛躍的に向上します。

技術的な指標

エントロピー(Entropy)

簡単に言うと:パスワードのランダム性(予測不可能性)を数値化したもの

詳しい説明:
エントロピーは「ビット」という単位で表され、数値が大きいほどパスワードが強力です。

エントロピー 強度の目安 具体例
28ビット未満 非常に弱い password, 12345678
28〜35ビット 弱い password1, qwerty123
36〜59ビット 中程度 Summer2024!
60〜127ビット 強い Tr0ub4dor&3
128ビット以上 非常に強い correct-horse-battery-staple-9!X

計算方法:

エントロピー(ビット) = log2(可能な組み合わせ数)

実例:

  • 小文字のみ8文字:log2(26^8) ≈ 37.6ビット
  • 大小英数記号混在16文字:log2(94^16) ≈ 105ビット

推定試行回数(Guesses)

簡単に言うと:パスワードを総当たり攻撃で破るために必要な試行回数

詳しい説明:
攻撃者がパスワードを推測するために何回試行する必要があるかの推定値です。zxcvbnライブラリが賢い推測(辞書攻撃、パターン認識など)を考慮して計算します。

例:

  • password:約 1,000回(1.00e+3)
  • Password1!:約 100万回(1.00e+6)
  • Tr0ub4dor&3:約 1,000億回(1.00e+11)
  • ランダム16文字:約 10^28回

注意:単純な文字数だけでなく、パターンの予測可能性も考慮されています。

攻撃シナリオ別の解読時間

ツールでは4つの異なる攻撃シナリオを想定して解読時間を推定しています。

1. オフライン攻撃(低速ハッシュ)

シナリオ:
攻撃者が暗号化されたパスワードデータベースを盗み出し、自分のコンピューターで解読を試みるケース。

技術的背景:

  • bcrypt、scrypt、Argon2などの「遅いハッシュ関数」で保護されている
  • これらのアルゴリズムは意図的に計算を遅くして総当たり攻撃を困難にする
  • 試行速度:約 10,000回/秒(1秒に1万回の推測)

現実的な例:

  • LinkedInやDropboxなどの大規模漏洩事件
  • 企業のサーバーへの侵入でデータベースが盗まれたケース

対策:
最も現実的で深刻な脅威です。この攻撃に対して「数十年以上」かかるパスワードを目指しましょう。

2. オフライン攻撃(高速ハッシュ)

シナリオ:
MD5やSHA-1などの古くて脆弱なハッシュ関数で保護されている場合。

技術的背景:

  • 高速なハッシュ関数は計算が速いため、総当たり攻撃が容易
  • GPU(グラフィックカード)を使うとさらに高速化
  • 試行速度:約 100億回/秒(1秒に100億回の推測)

現実的な例:

  • 古いシステムや不適切に設計されたWebサービス
  • 2010年代前半までの多くのサービス

対策:
現代ではこのような保護方法を使うべきではありませんが、万が一の場合に備えて強力なパスワードが必要です。

3. オンライン攻撃(制限なし)

シナリオ:
攻撃者がログイン画面に直接アクセスして総当たり攻撃を試みるが、試行回数制限がない場合。

技術的背景:

  • ネットワーク経由でサーバーに接続
  • サーバーの応答を待つ必要がある
  • 試行速度:約 10回/秒(1秒に10回の推測)

現実的な例:

  • セキュリティ対策が不十分なWebサービス
  • APIの認証エンドポイント

対策:
サービス側の問題ですが、それでも強力なパスワードで保護することが重要です。

4. オンライン攻撃(制限あり)

シナリオ:
ログイン試行回数に制限がある一般的なWebサービス。

技術的背景:

  • 多くのサービスは「5回失敗したら10分ロック」などの対策を実装
  • 試行速度:約 100回/時間(1時間に100回の推測)

現実的な例:

  • Gmail、Facebook、Amazonなどの主要サービス
  • 銀行のオンラインバンキング

対策:
最も一般的なケースです。適切な強度のパスワードなら、この攻撃で破られることはほぼありません。

評価スコア(0〜4)

zxcvbnライブラリによる総合評価です。

スコア 評価 説明 推奨事項
0 非常に弱い 即座に破られる可能性が高い すぐに変更してください
1 弱い 数時間〜数日で破られる可能性 より複雑なパスワードに変更
2 普通 数ヶ月〜数年で破られる可能性 できれば改善を推奨
3 強い 現実的な時間では破られにくい 十分に安全
4 非常に強い 事実上破ることは不可能 素晴らしい!

検出される弱点パターン

ツールが自動的に検出する一般的な弱点パターンです。

1. 辞書単語(Dictionary)

内容:

  • 一般的な英単語、日本語(ローマ字)、人名、地名
  • 例:password, tokyo, yamada, sunshine

なぜ危険か:
攻撃者は数百万語の辞書を使って効率的に推測できます。

改善方法:

  • 複数の無関係な単語を組み合わせる
  • 単語を変形させる(文字の置換、追加など)

2. 連続文字(Sequence)

内容:

  • アルファベットの連続:abc, xyz
  • 数字の連続:123, 789, 2468
  • 逆順:cba, 321

なぜ危険か:
非常に予測しやすいパターンです。

改善方法:
連続したパターンを避け、ランダムな組み合わせを使用する。

3. 繰り返し(Repeat)

内容:

  • 文字の繰り返し:aaa, 111
  • パターンの繰り返し:abcabc, 123123

なぜ危険か:
繰り返しはエントロピーを大幅に低下させます。

改善方法:
各文字や文字列を一度だけ使用する。

4. 日付(Date)

内容:

  • 誕生日:19900101, 1990/01/01
  • 記念日:20140214(バレンタインデー)
  • 年号:2024

なぜ危険か:
個人情報から容易に推測できます。

改善方法:
日付を含めない。どうしても使う場合は大幅に変形させる。

5. キーボード配列(Spatial)

内容:

  • 横の並び:qwerty, asdfgh, zxcvbn
  • 縦の並び:1qaz, 2wsx
  • 斜めの並び:1qw, 2asz

なぜ危険か:
キーボードの物理的な配置に基づく推測が容易です。

改善方法:
キーボード上でランダムに離れた文字を選ぶ。

漏洩チェック

仕組み:k-Anonymity(k-匿名化)

問題:
「このパスワードが漏洩しているか」をチェックしたいが、パスワードをそのまま送信するのは危険。

解決方法:

  1. あなたのブラウザで:
    • パスワード MyPassword123 を入力
    • SHA-1ハッシュに変換:21BD1... (40文字)
    • 先頭5文字だけを送信:21BD1
  2. サーバーから:
    • 21BD1 で始まるすべてのハッシュリスト(数百個)を受け取る
    • 例:21BD12345:3, 21BD156789:156, ...
  3. あなたのブラウザで:
    • 受け取ったリストの中に完全一致するハッシュがあるか確認
    • 漏洩回数を表示

プライバシー保護:

  • サーバーはあなたの実際のパスワードを知ることができません
  • 先頭5文字だけでは元のパスワードを推測できません

漏洩回数の意味:

  • 0回:既知の漏洩データベースに含まれていません(安全)
  • 1〜100回:小規模な漏洩で発見されています(変更推奨)
  • 100〜10,000回:複数の漏洩事件で発見されています(すぐ変更)
  • 10,000回以上:非常に一般的なパスワードです(絶対に変更!)

主要な漏洩事例:

  • password:3,730,471回
  • 123456:24,230,577回
  • password123:1,677,256回

パスワード強度の評価方法

5つの評価軸(レーダーチャート)

ツールは以下の5つの観点からパスワードを評価します。

1. 長さ(20文字で満点)

計算方法:

スコア = (パスワード長 / 20) × 100 最大値:100点

目安:

  • 8文字:40点(最低限)
  • 12文字:60点(推奨)
  • 16文字:80点(強力)
  • 20文字以上:100点(非常に強力)

なぜ重要か:
長さは最も重要な要素です。文字数が増えるごとに、可能な組み合わせが指数関数的に増加します。

例:

  • 小文字のみ8文字:26^8 ≈ 2,088億通り
  • 小文字のみ16文字:26^16 ≈ 4.36京通り(20万倍以上!)

2. 文字種の多様性(4種類で満点)

計算方法:

使用している文字種 / 4 × 100

スコア:

  • 1種類(小文字のみなど):25点
  • 2種類(小文字+数字など):50点
  • 3種類(小文字+大文字+数字):75点
  • 4種類(すべて使用):100点

なぜ重要か:
文字種を増やすことで、各文字位置の選択肢が増えます。

具体例:

小文字のみ: 26通り/文字 小文字+数字: 36通り/文字 小文字+大文字: 52通り/文字 すべて: 94通り/文字

3. 複雑性スコア(zxcvbn評価)

計算方法:

(zxcvbnスコア / 4) × 100

内容:
zxcvbnライブラリが以下を総合的に評価:

  • 辞書単語の有無
  • 一般的なパターン
  • キーボード配列
  • 繰り返し
  • 連続文字
  • 個人情報(名前、日付など)

スコア:

  • 0点:非常に予測可能
  • 25点:予測可能
  • 50点:やや予測可能
  • 75点:予測困難
  • 100点:ほぼ予測不可能

4. エントロピー(80ビット以上で満点)

計算方法:

(実際のエントロピー / 80) × 100 最大値:100点

目安:

  • 30ビット未満:37.5点未満(弱い)
  • 30〜50ビット:37.5〜62.5点(中程度)
  • 50〜80ビット:62.5〜100点(強い)
  • 80ビット以上:100点(非常に強い)

なぜ80ビット?
現在の技術では80ビット以上のエントロピーを持つパスワードを破ることは現実的ではありません。

5. 漏洩安全性(漏洩なしで満点)

計算方法:

漏洩なし:100点 漏洩1回:約 94点 漏洩10回:約 80点 漏洩100回:約 60点 漏洩1,000回:約 40点 漏洩10,000回:約 20点

なぜ重要か:
過去に漏洩したパスワードは、攻撃者が最初に試すリストに含まれています。

安全なパスワードの作り方

基本原則

1. 長さを確保する(最優先)

推奨:16文字以上

長いパスワードは短い複雑なパスワードよりも安全です。

比較:

悪い例:Tr0ub4dor&3(11文字、複雑)

→ エントロピー:約 28ビット
→ 解読時間:数日

良い例:correct-horse-battery-staple(29文字、シンプル)

→ エントロピー:約 44ビット
→ 解読時間:数百年

2. ランダム性を高める

避けるべきもの:

  • 辞書にある単語をそのまま使う
  • 個人情報(名前、誕生日、ペットの名前など)
  • 連続した文字や数字(abc、123など)
  • キーボード配列(qwerty、asdfなど)

推奨される方法:

  • パスワード生成ツールを使用
  • 無関係な単語を組み合わせる
  • 予測不可能な文字の置換

3. 文字種を混ぜる

推奨:大文字・小文字・数字・記号をすべて使用

悪い例:goodmorning(すべて小文字) 普通: GoodMorning(大文字を追加) 良い例:G00dM0rn1ng(数字を追加) 最良: G00dM0rn1ng!(記号を追加)

効果的な生成方法

方法1:パスフレーズ方式

無関係な単語を複数組み合わせる方法。

手順:

  1. ランダムに4〜6個の単語を選ぶ
  2. 記号や数字で区切る
  3. 一部の文字を大文字にする

例:

基本:correct horse battery staple 改良:Correct-Horse-Battery-Staple 強化:Correct-H0rse-Batt3ry-Stapl3!

メリット:

  • 覚えやすい
  • 十分に長い
  • 十分に強力

方法2:頭文字方式

好きな文章の頭文字を取る方法。

例:

文章:「私は毎朝7時に起きて、コーヒーを2杯飲みます」 "I wake up at 7am every morning and drink 2 cups of coffee" パスワード:Iwua7aem&d2coc! 改良: - 一部を大文字に:IwUa7aEm&d2CoC! - 記号を追加:!IwUa7aEm&d2CoC!@

メリット:

  • 非常に覚えやすい(自分だけの文章なら)
  • ランダムに見える
  • 十分に複雑

方法3:完全ランダム生成

パスワード生成ツールを使用する方法。

推奨設定:

  • 長さ:16文字以上
  • 含める文字:大文字・小文字・数字・記号すべて
  • 避けるべき文字:紛らわしい文字(0とO、1とlなど)を除外

例:

Kp9#mX7qL2$vN8zR T4$hK9@wL7!rP3xQ N6%jM8&vR2#sF5yT

メリット:

  • 最も強力
  • 推測不可能

デメリット:

  • 覚えにくい(パスワードマネージャー必須)

実践例

弱いパスワードの改善プロセス

例1:誕生日ベース

レベル0:19901020(8文字) ↓ 問題:日付が丸わかり、短い レベル1:Yamada19901020(14文字) ↓ 問題:名前と誕生日の組み合わせは推測されやすい レベル2:Yamada!1990@1020(16文字) ↓ 問題:まだパターンが明確 レベル3:Ya!m1990a@d1020a(16文字) ↓ 改善:日付と名前をランダムに混ぜる レベル4:Y@!m19Xx90a#d10Zz20(20文字) → 良い:ランダムな文字を追加、予測困難

例2:好きな言葉ベース

レベル0:coffee(6文字) ↓ 問題:辞書単語、短すぎる レベル1:ILoveCoffee(11文字) ↓ 問題:一般的なフレーズ レベル2:ILoveCoffee2024(15文字) ↓ 問題:年号が推測されやすい レベル3:!L0v3C0ff33#2024(16文字) ↓ 改善:文字置換、記号追加 レベル4:!L0v3-C0ff33#Every-M0rn1ng(27文字) → 良い:長い、複雑、個人的な意味あり

覚えておくべきこと

絶対にやってはいけないこと:

  • パスワードをメール・メッセンジャーで送信
  • パスワードをブラウザのメモ・付箋に保存
  • パスワードをスクリーンショットで保存
  • パスワードを共有フォルダに保存
  • 同じパスワードを複数のサービスで使用
  • 「パスワードを保存しますか?」を信頼できないデバイスで許可

重要なポイント再確認

  1. 長さが最重要:16文字以上を目指す
  2. 使い回し厳禁:各サービスで異なるパスワード
  3. ツールに頼る:パスワードマネージャーを活用
  4. 二段階防御:2FAを必ず設定
  5. 定期チェック:月1回はセキュリティを確認

関連ツール

注意事項

このツールは無料でご利用いただけます。

※このプログラムはPHP8.2.22にて作成、動作確認を行っております。
※ご利用下さっている皆様のご意見・ご要望(改善要望)をお寄せください。