본문으로 건너뛰기
🛠️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.