security / password
パスワード強度チェック
パスワードのエントロピー(ビット数)と強度をリアルタイムで評価します。 文字集合サイズ・解読時間の目安・改善提案を即座に表示。 入力内容はすべてブラウザ内で処理され、サーバーには送信されません。
—
チェックリスト
·小文字(a-z)を含む
·大文字(A-Z)を含む
·数字(0-9)を含む
·記号(!@#$など)を含む
·12文字以上
使い方
01- 入力フィールドにチェックしたいパスワードを入力します
- 強度バーとラベル(非常に弱い〜非常に強い)がリアルタイムで更新されます
- エントロピー・文字集合サイズ・解読時間の目安が即座に表示されます
- チェックリストで不足している要素を確認し、改善提案を参考に強化してください
- 「表示/非表示」ボタンで入力文字を確認できます。「コピー」で入力内容をコピーできます
実装コード
02エントロピーは log2(文字集合サイズ) × 文字数 で計算します。外部ライブラリは一切不要で、標準のJavaScript APIのみで実装しています。
export type StrengthLevel = 'very-weak' | 'weak' | 'fair' | 'strong' | 'very-strong'
// 文字集合サイズを計算
function calcCharsetSize(
hasLower: boolean,
hasUpper: boolean,
hasDigit: boolean,
hasSymbol: boolean,
hasJapanese: boolean,
): number {
let size = 0
if (hasLower) size += 26
if (hasUpper) size += 26
if (hasDigit) size += 10
if (hasSymbol) size += 32
if (hasJapanese) size += 4000
return size
}
// エントロピー = log2(文字集合サイズ) × 文字数
export function analyzePassword(password: string) {
let hasLower = false, hasUpper = false
let hasDigit = false, hasSymbol = false, hasJapanese = false
for (const ch of password) {
if (/[a-z]/.test(ch)) hasLower = true
else if (/[A-Z]/.test(ch)) hasUpper = true
else if (/[0-9]/.test(ch)) hasDigit = true
else if (isJapanese(ch)) hasJapanese = true
else hasSymbol = true
}
const charsetSize = calcCharsetSize(
hasLower, hasUpper, hasDigit, hasSymbol, hasJapanese
)
const entropy = charsetSize > 0
? Math.log2(charsetSize) * password.length
: 0
return { entropy, charsetSize, /* ... */ }
}よくある使用例・注意点
03エントロピーとは
エントロピーはパスワードの予測困難さをビット数で表した指標です。エントロピー = log2(文字集合サイズ) × 文字数 で計算されます。例えば小文字のみ8文字なら log2(26) × 8 ≈ 37.6 bit、大文字+小文字+数字+記号の12文字なら log2(94) × 12 ≈ 78.8 bit となります。1秒間に100億回試行できるコンピュータでも、80bit以上のパスワードを解読するには数百年以上かかります。
NIST基準について
米国国立標準技術研究所(NIST SP 800-63B)は「複雑さより長さを重視する」方針を示しています。記号を無理に含めるよりも、十分な長さ(最低8文字、推奨12文字以上)のパスワードが有効です。また、よく使われるパスワード(password123、qwerty など)は文字種が多くても実質的なエントロピーが低いため避けるべきです。このツールは文字種と長さのみを基準に評価しますが、辞書攻撃への耐性は別途考慮してください。
強いパスワードの条件
強いパスワードの目安:(1) 12文字以上、(2) 大文字・小文字・数字・記号を含む、(3) 辞書に載っている単語をそのまま使わない、(4) サービスごとに異なるパスワードを使う。エントロピーが60bit以上(強い)であれば、一般的なオンラインサービスには十分な強度です。機密性の高い用途には80bit以上(非常に強い)を推奨します。
日本語パスワードのエントロピー
ひらがな・カタカナ・漢字を含む場合、文字集合サイズに約4000が加算されます。日本語は1文字あたりのエントロピーが log2(4000) ≈ 11.97 bit と高く、「あいうえお」(5文字)だけで約59.9 bit に達します。ただし、多くのWebサービスは日本語パスワードに対応していないため、実用上は英数記号の組み合わせを推奨します。
関連ツール
04ソースコード
05このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。
GitHub でコードを見る →