백지에서 찾는 순서
기억나는 단서가 하나도 없을 때. 무엇을 먼저, 어떤 순서로 시도해야 가장 효율적인가 — 암호 크래킹 연구가 수십 년간 정리해 온 확률순 전략입니다.
핵심 원칙 — 확률 ÷ 비용 순서. 싸고 확률 높은 영역부터 훑습니다. 사람이 만든 암호는 소수의 패턴에 몰려 있어서, 실제 유출 데이터의 분포를 따라가면 초반 몇 백만 개 안에서 대부분 걸립니다. `0,1,2… → a,b,c…` 식 단순 나열은 최악입니다 — 아무도 aaaa 를 패스프레이즈로 쓰지 않으니까요.
01 순수 브루트포스의 한계
완전 무작위·긴 패스프레이즈는 복구 불가능합니다. 이 전략은 사람이 기억하려고 만든, 짧고 규칙적인 경우에만 통합니다. (속도 ~100만 개/초 · 10대급 기준)
| 문자셋 | 6자리 | 8자리 | 10자리 |
|---|---|---|---|
| 숫자 (10) | 즉시 | 100초 | 2.8시간 |
| 소문자 (26) | 5분 | 2.4일 | 4.5년 |
| 영숫자 (62) | 16시간 | 7년 | 불가 |
| 전체 ASCII (95) | 8.5일 | 210년 | 불가 |
→ 숫자 ~10자리, 소문자 ~8자리, 전체문자 ~6자리가 순수 브루트포스의 현실적 한계. 그 이상은 아래 "똑똑한 순서" 없이는 답이 없습니다.
02 확률순 4단계
위에서 아래로 — 확률 높고 비용 낮은 것부터. 번호가 곧 실행 순서입니다.
유출 암호 · 사전 · 날짜
빈 패스프레이즈("") → 실제 유출된 암호(빈도순, rockyou 류) → 사전 단어의 대소문자 변형 → 의미 있는 날짜(연도·생년월일). 대부분 여기서 걸립니다.
단어 + 숫자
사람 암호에서 가장 흔한 패턴. 사전/실제암호 단어 뒤에 1~4자리 숫자, 연도를 붙임. 리트 치환(p@ssw0rd), 순수 숫자 1~8자리도 포함.
순수 브루트포스 (마스크)
단서가 다 실패하면. 짧은 것 → 긴 것, 작은 문자셋 → 큰 문자셋 순으로 확장. 실제 빈도 높은 마스크부터: 6자리 숫자, 6 소문자, 대문자+소문자+숫자2.
길이 확장 (마지막 수단)
위 마스크의 길이를 계산 한계까지 늘림. 여기까지 오면 사실상 마지막 시도이며, 길이가 늘수록 시간이 기하급수로 폭발합니다.
03 실행 — 두 가지 방법
복구 프로그램에 이 전략을 그대로 태우는 두 경로. 둘 다 검증했습니다.
config 프리셋을 순서대로
Tier별 config 4개를 1 → 2 → 3 → 4 순으로 불러 돌립니다. 문법이 priority로 확률 높은 조합을 앞에 배치합니다.
# 후보 수 (검증됨) 1-known-passwords 196,771 2-numbers-dates 111,111,110 3-dict-plus-number 12,674,817,695 4-brute-charset 2,238,976,116
확률순 생성기 → stdin
확률순 후보를 생성해 --passwordlist -로 먹입니다. 내장 Markov(OMEN 방식) 생성기가 유출 데이터에서 순서를 학습하며, hashcat·PCFG로 교체도 가능합니다.
python markov_generator.py \ | python btcrecover.py \ --wallet-type bip39 --language en \ --mnemonic "..." --addrs bc1q... \ --passwordlist - --no-eta --dsw
04 도구 — 확률순을 만드는 것들
best64.rule)보안 — 시드는 실행 기계에 존재합니다
어떤 방법이든 주소를 유도하려면 실제 시드가 그 기계에 올라갑니다. 본인이 통제하는 하드웨어에서 오프라인으로만 실행하세요. 임대 컴퓨터(클라우드·GPU)는 시드 노출 위험이 있어, 이 작업에는 적합하지 않습니다.