コンテンツへスキップ
🛠️ToolsShed

安全なパスフレーズ生成ツール

エントロピー推定付きのDicewareスタイルパスフレーズを生成します。

38

このツールについて

パスフレーズは、互いに無関係な単語を組み合わせて形成される記憶しやすく、かつ安全な認証資格です。セキュアパスフレーズジェネレーターはDiceware法を使用してパスフレーズを生成します。これは、ランダムな文字の組み合わせではなく、人間の脳が単語の並びを自然に記憶できる強みを活用する実証済みの暗号化技術です。特殊文字で満ちた従来のパスワードとは異なり、Dicewareパスフレーズはシンプルさを通じて優れたセキュリティを提供します。パスワードマネージャーのマスターパスワード、銀行口座、高価値の秘密など、長期的な認証情報に理想的です。

ジェネレーターの使用は簡単です。希望する単語数(通常は目的に応じて5~6語)を選択し、区切り文字を選択し、ニーズに応じて大文字化をトグルするだけです。このツールは瞬座にエントロピー(パスワードの強度の統計的尺度)を計算し、パスフレーズが提供するセキュリティの正確な量をビット数で表示します。追加される単語ごとにエントロピーは対数的に増加します。例えば、4単語のパスフレーズは約51ビットのエントロピーを提供し、6単語のパスフレーズは約77ビットに跳び上がり、現代のセキュリティ推奨事項を超えます。

Dicewareパスフレーズは、真の無作為性(コンピューターの暗号的に安全な乱数生成器から)と大きなワードリスト(通常7,776語)を組み合わせるため機能します。これにより、攻撃者は結果を推測または予測できません。多くのシステムが特殊文字や数字を要求します。パスフレーズを予測可能な置換で弱体化させるのではなく、ここでフレーズを生成し、アカウントが追加の制約を要求する場合はパスワードマネージャーに保存してください。このツールは、開発者、セキュリティ専門家、および記憶可能性と数学的確実性の両立を重視する機密認証情報を管理する人に特に価値があります。

よくある質問

コード実装

import secrets
import math

# A small built-in word list; replace with a full EFF large wordlist in production.
WORDLIST = [
    "apple", "brave", "crane", "drift", "eagle", "flame", "grace", "hover",
    "ivory", "jewel", "knack", "lunar", "maple", "noble", "ocean", "pearl",
    "quilt", "raven", "stone", "tiger", "umbra", "vivid", "waltz", "xenon",
    "yacht", "zonal", "amber", "blaze", "crisp", "delta", "ember", "frost",
    "globe", "haste", "index", "joust", "karma", "lance", "marsh", "nerve",
    "ozone", "pilot", "query", "ridge", "storm", "trove", "ultra", "vigor",
    "width", "xylem", "yearn", "zesty",
]

def generate_passphrase(
    word_count: int = 4,
    separator: str = "-",
    capitalize: bool = False,
    append_number: bool = False,
) -> str:
    words = [secrets.choice(WORDLIST) for _ in range(word_count)]
    if capitalize:
        words = [w.capitalize() for w in words]
    phrase = separator.join(words)
    if append_number:
        phrase += separator + str(secrets.randbelow(9000) + 1000)
    return phrase

def passphrase_entropy(word_count: int, wordlist_size: int) -> float:
    """Bits of entropy: log2(wordlist_size ^ word_count)"""
    return word_count * math.log2(wordlist_size)


if __name__ == "__main__":
    for _ in range(5):
        phrase = generate_passphrase(4, "-", capitalize=True, append_number=True)
        print(phrase)
    bits = passphrase_entropy(4, len(WORDLIST))
    print(f"Entropy with {len(WORDLIST)}-word list, 4 words: {bits:.1f} bits")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.