security / password

パスワード強度チェック

パスワードのエントロピー(ビット数)と強度をリアルタイムで評価します。 文字集合サイズ・解読時間の目安・改善提案を即座に表示。 入力内容はすべてブラウザ内で処理され、サーバーには送信されません。

チェックリスト
·小文字(a-z)を含む
·大文字(A-Z)を含む
·数字(0-9)を含む
·記号(!@#$など)を含む
·12文字以上

使い方

01
  1. 入力フィールドにチェックしたいパスワードを入力します
  2. 強度バーとラベル(非常に弱い〜非常に強い)がリアルタイムで更新されます
  3. エントロピー・文字集合サイズ・解読時間の目安が即座に表示されます
  4. チェックリストで不足している要素を確認し、改善提案を参考に強化してください
  5. 「表示/非表示」ボタンで入力文字を確認できます。「コピー」で入力内容をコピーできます

実装コード

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
パスワード生成ハッシュ生成UUID生成

ソースコード

05

このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。

GitHub でコードを見る →