手を振るまもるくんゆるふわサイバーセキュリティ
監視中のまもるくん

パスワード強度をPythonで測る|"エントロピー"で見る本当の強さ

2026-09-19実践

#パスワード#エントロピー#強度#Python#実践

「このパスワード、強い?」を感覚でなく数値で答えるのが エントロピー(bit) です。総当たりに何回かかるかの指標。この記事ではPythonでパスワード強度を計算し、「長さが最強の武器」であることを数字で確かめます。パスワードの基礎の実装編です。

エントロピーとは

パスワードの強さは、次の式で概算できます。

エントロピー(bit) = 長さ × log2(使える文字種の数)

bit が大きいほど、総当たりの手数が指数的に増えます。72bit以上あればおおむね安心とされます。

準備

標準ライブラリのmathだけ。

① 文字種と長さから強度を計算

import math

def entropy_bits(password):
    pool = 0
    if any(c.islower() for c in password): pool += 26
    if any(c.isupper() for c in password): pool += 26
    if any(c.isdigit() for c in password): pool += 10
    if any(not c.isalnum() for c in password): pool += 32  # 記号
    if pool == 0:
        return 0.0
    return len(password) * math.log2(pool)

for pw in ["password", "P@ssw0rd", "correct-horse-battery-staple", "aB3$"]:
    print(f"{pw:<32} {entropy_bits(pw):5.1f} bit")

出力:

password                          37.6 bit
P@ssw0rd                          52.4 bit
correct-horse-battery-staple     164.0 bit
aB3$                              26.2 bit

記号を混ぜた短い P@ssw0rd(52bit)より、長い合言葉 correct-horse-battery-staple(164bit)の方が桁違いに強い。長さの効果がはっきり出ました。

② 総当たり時間に換算

エントロピーを「1秒に10億回試せる攻撃者」の所要時間に直します。

def crack_time(bits, guesses_per_sec=1e9):
    seconds = 2 ** bits / guesses_per_sec / 2   # 平均は半分
    years = seconds / (60 * 60 * 24 * 365)
    return years

for pw in ["P@ssw0rd", "correct-horse-battery-staple"]:
    print(f"{pw:<32} 約 {crack_time(entropy_bits(pw)):.2e} 年")

P@ssw0rd は現実的な時間で破られうる一方、長い合言葉は天文学的な年数に。**「複雑さより長さ」**が数字で証明されます。

⚠️

エントロピーは『上限』に過ぎない

この計算は「完全ランダム」を仮定した理論値です。実際の P@ssw0rd のような"よくある変換"は、攻撃者の辞書に載っていて計算より遥かに速く破られます。だから「長く」かつ「使い回さず」「推測されにくい」ことが大事。強度判定は目安として使い、パスワードマネージャでの自動生成が最善です。

まとめ

  • エントロピー = 長さ × log2(文字種)。総当たり耐性の指標
  • 記号入りの短いパスワードより、長い合言葉の方が桁違いに強い
  • 「複雑さより長さ」が数字で裏付けられる
  • ただし理論値。よくある変換は辞書攻撃で速く破られる

もう少し詳しく(背景と理論)

パスワードの強さはエントロピー(bit)で測ります。取りうる文字種の数を N、長さを L とすると、組み合わせは Nᴸ、エントロピーは log₂(Nᴸ) = L·log₂(N) ビットです1。ここで効くのは文字種より長さ——1文字増やすと組み合わせが N 倍になるため、長いパスフレーズが有利です。NIST SP 800-63B は方針を刷新し、定期変更の強制や複雑な文字種ルールを推奨しない一方、長さの確保と漏洩パスワードのブロックを重視しています2。ただし理論上のエントロピーは「ランダムに選んだ場合」の上限で、人間が選ぶパスワードは辞書・パターンに偏るため、zxcvbn のような実際の推測しやすさを評価するツールが実務では有効です3

次の一歩 🌸

土台のパスワードの基礎、安全な保存のパスワードハッシュ、次の防御層のMFAへどうぞ。

Footnotes

  1. エントロピー H = L·log₂(N)。長さ L の寄与が線形に効くため、文字種を増やすより長くする方が総当たり耐性を上げやすい。

  2. NIST SP 800-63B は、複雑性ルールや定期変更の強制を廃し、長さの確保・漏洩リスト照合・使いやすさを重視する現代的な方針を示す。

  3. 理論エントロピーは一様ランダム時の値。人間の選ぶ語は偏るため、zxcvbn 等のパターン評価で実際の推測難易度を測る方が実態に近い。

🔥 この分野の最新トレンドをチェック →

あわせて読みたい