パスワード強度チェッカー
zxcvbn エンジンによるリアルタイム分析:一般的な弱いパスワードの辞書、キーボード配列、連続シーケンス、繰り返し、日付パターンにペナルティが適用され、「大文字+小文字+数字+記号」といった文字数だけを見る方法よりも実際の安全性に近い評価が可能です。ブラウザ内でのみ処理され、パスワードが外部に送信されることはありません。
- 検出エンジン
- zxcvbn
- スコア
- 0~4 の 5 段階
- プライバシー
- 送信なし
- 辞書
- 標準の弱いパスワードを内蔵
高度なポリシー設定
カンマまたは改行で区切ってください。大文字小文字は区別されません。zxcvbnは大文字小文字の変形、Leet化(例:Pa$$w0rd)、逆書きも自動的に認識します。
2つのパスワードを比較
なぜ重要か
「大文字・小文字・数字・記号を含む」ことが安全に等しくない理由
P@ssw0rd!は4種類の文字を備えていますが、実際の漏洩パスワードランキングに名を連ねています。パスワードの強度は文字の種類の合計ではなく、推測の難易度によって決まります。
辞書攻撃に対する脆弱性
一般的なパスワードと単語帳を内蔵しており、一致すると大幅に減点します。password、123456、P@ssw0rdのようなパスワードは正しく極めて弱いと判定されます。
パターン認識
キーボードの隣接キーの組み合わせ、連続シーケンス、繰り返しパターン、日付年、一般的な単語は有効な推測空間を大幅に縮小させます。
理論エントロピーではなく実効エントロピー
スコアは文字セットのサイズと長さの単純な乗算ではなく、認識されたパターンに基づいて実際の推測回数を推定して算出されます。
2つのクラッキングシナリオ
オフラインGPU爆破とオンラインレート制限付き推測の時間をそれぞれ見積もり、攻撃コストの直感を養うのに役立ちます。
カスタムポリシーとブラックリスト
最小長さと文字要件を設定でき、社名やプロジェクトコードなどの専用弱い単語を追加して企業のパスワード規則に適合させることができます。
全ローカル計算
パスワードはブラウザから外出せず、どのサーバーも経由しません。設定は自身のlocalStorageにのみ保存されます。
パスワード強度に関する知識
スコアリングの原理、クラック時間、および優れたパスワードとは何かについて。
zxcvbnの0~4点はどのように算出されますか?
zxcvbnはまずパスワードを複数の断片に分解します:辞書単語(一般的なパスワード、英単語)、キーボードの移動、連続パターン、繰り返し、日付、ブルートフォース断片など。
それぞれの断片に対して、攻撃者が必要とする推測回数を見積もり、組み合わせた総数を算出してから、0~4の5段階にマッピングします。また、大文字小文字の反転、Leet置換(@→a、0→o)、年の接尾辞などの一般的な変形も自動的に考慮するため、P@ssw0rdは文字種が多くても高得点にはなりません。
「有効エントロピー」と文字空間にはどのような違いがありますか?
文字空間は、文字セットのサイズに長さを掛けて算出される理論上の上限です。すべての文字が完全にランダムであると仮定します——実際のパスワードではほとんど満たされません。
有効エントロピー(本ページに表示されるビット数)は、zxcvbnが辞書単語とパターンを認識した後に見積もられる実際の推測空間です。例えば、長さが同じ場合、iloveyou2024の有効エントロピーはランダム文字列よりもはるかに低くなります。
クラック時間はどのように見積もられますか?信頼できますか?
クラック時間 = 推定推測回数 ÷ 1秒あたりの推測速度です。本ページでは2つの速度を示します:オフラインGPUクラスタは約100億回/秒(攻撃者がパスワードハッシュを入手している場合)、オンラインレート制限付きは約100回/時間(ログインAPIに頻度制限がある場合)。
これは正確な予言ではなく数量級の参考値です:実際の速度はハッシュアルゴリズム(bcrypt/Argon2はMD5より数桁遅い)、攻撃者のハードウェア、辞書の質に依存します。ただし、10倍以内の差は結論に影響せず、数百万倍の差があって初めて意味を持ちます。
どのようなパスワードが優れたパスワードと見なされますか?
信頼できる2つの選択肢:1つはパスワードマネージャーが生成する16文字以上のランダム文字列で、サイトごとに異なるもの。もう1つは意味のない4つ以上の無関係な単語で構成されるパスフレーズ(例:correct-horse-battery-staple)で、長くて無意味なもの。
どちらの選択肢でも多要素認証(MFA)を併用するべきであり、複数のウェブサイトで同じパスワードを使い回してはいけない。
ウェブサイトがすでに大文字・小文字・数字・記号を要求しているのに、なぜ低評価になるの?
企業のポリシー(長さ、文字種類)はコンプライアンスの基準で、「規定に適合しているかどうか」を判断するものです。zxcvbnのスコアは「推測されやすいかどうか」を問うもので、両者は全く異なる性質のものです。
一般的な単語の後に感嘆符と年を追加したもの(password!2024)は、ほとんどのポリシーチェックを通過できますが、辞書攻撃では数秒で突破されてしまいます。
私のパスワードはアップロードされますか?
いいえ。チェックはすべてあなたのブラウザ内でJavaScriptで実行され、パスワードを送信するネットワークリクエストは一切発生しません。ネットワークを切断した状態でも使用可能です。カスタムポリシーはブラウザのローカルに保存され、平文のパスワードは含まれません。
コードでパスワード強度を確認する
自身の登録・パスワード変更フォームでリアルタイム強度チェックを実装するには、各言語対応のzxcvbn実装を利用できます:
<!-- CDN -->
<script src="https://unpkg.com/[email protected]/dist/zxcvbn.js"></script>
<script>
const res = zxcvbn('P@ssw0rd!');
console.log(res.score, res.crack_times_display);
</script>
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';
const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
composer require bjeavons/zxcvbn-php
<?php
require __DIR__ . '/vendor/autoload.php';
use ZxcvbnPhp\Zxcvbn;
$zxcvbn = new Zxcvbn();
$res = $zxcvbn->passwordStrength('P@ssw0rd!');
echo $res['score'];
pip install zxcvbn
from zxcvbn import zxcvbn
res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
go get github.com/nbutton23/zxcvbn-go
package main
import (
"fmt"
zxcvbn "github.com/nbutton23/zxcvbn-go"
)
func main() {
res := zxcvbn.PasswordStrength("P@ssw0rd!", nil)
fmt.Println(res.Score, res.Guesses)
}
# Add dependency
cargo add zxcvbn
use zxcvbn::zxcvbn;
fn main() {
match zxcvbn("P@ssw0rd!", &[]) {
Ok(estimate) => {
println!("score: {}", estimate.score()); // 0..4
if let Some(times) = estimate.crack_times() {
println!("offline: {:?}", times.offline_slow_hashing_1e4_per_second());
}
}
Err(err) => eprintln!("zxcvbn error: {err}"),
}
}
注記:これらのライブラリが出力する強度・パターンの推定値は、本ページとバージョンが若干異なる場合がありますが、コア原理は同じです。サーバー側でチェックを実施する際は、長さの上限とレート制限を同時に設定することを推奨します。悪意のある極長入力による計算リソースの消費を防ぐためです。
よくある質問
パスワード強度チェッカーの動作原理は?
本ページではDropboxがオープンソースで公開しているzxcvbnアルゴリズムを使用しています。パスワードを、既知の弱いパスワード辞書、英語単語リスト、キーボードの配列、系列、日付、繰り返しパターンと順次比較し、攻撃者が平均で何回推測するかを推定し、0~4の5段階評価と解読時間にマッピングします。
P@ssw0rdは複雑そうなのに、なぜ極めて弱いの?
これは流出したパスワードデータベースの中で最も古典的な弱いパスワードの1つです。zxcvbnの辞書に含まれており、大文字・小文字の変形やLeet置換(a→@、o→0)も認識されます。文字種は多いですが構造が完全に予測可能で、攻撃者のルール辞書で最初に試行されるパスワードの1つです。
パスワードはどのくらいの長さが安全ですか?
ランダム生成の場合、12 桁以上でオンライン攻撃に十分耐えられ、16 桁以上であればオフライン GPU によるブルートフォース攻撃に長年耐えられます。長さは文字の複雑さより重要です:20 文字の純小文字ランダム文字列は、10 文字の 4 種類混合パスワードよりもはるかに強力です。
なぜ破解時間はオンラインとオフラインの 2 つに分けられているのですか?
攻撃シナリオが異なるためです:ウェブサイトがデータベース漏洩した場合、攻撃者はローカルで GPU を使用して 1 秒間に数百億個のハッシュを試すことができます。一方、オンラインログインインターフェースには通常頻度制限があり、1 秒間に数回しか試せません。同じパスワードでも 2 つのシナリオでの寿命は数万億倍異なる可能性があるため、分けて考える必要があります。
検査結果は保存されますか?
いいえ。パスワードはブラウザのメモリ上にのみ存在し、ページを更新すると消えます。ローカルのブラウザに保存されるのはユーザーが設定したポリシー(長さ要件、ブラックリスト)のみで、パスワードは含まれません。