Brute‑Force 공격의 작동 방식
길이가 중요한 이유: 계산 예시와 대응 방안.
Bei Brute‑Force 공격에서는 공격자가 비밀번호를 가능한 모든 문자 조합을 체계적으로 대입해 보며 추측하려고 시도합니다. 기본 원리는 간단합니다. 초당 가능한 한 많은 조합을 테스트하는 것입니다. 이상적으로는 GPU나 분산 시스템에서 수행됩니다. 이를 완전 탐색 (exhaustive search).
실제 환경에서는 많은 비밀번호가 너무 짧거나 사용 가능한 문자 집합이 제한적이며(문자만 사용) 또는 단어 목록에 포함되어 있기 때문에 이러한 공격이 안타깝게도 자주 성공합니다. 이로 인해 탐색 공간이 크게 줄어들고 추측이 훨씬 쉬워집니다. 더 중요한 점은 온라인 공격(로그인 폼 대상, 이 경우 Rate Limiting/계정 잠금이 도움이 됨)과 오프라인 공격(탈취된 비밀번호 해시 대상, 이 경우 해시 함수와 비밀번호 강도가 공격 시간에 영향을 미침)을 구분한다는 것입니다.
비밀번호 크래킹(오프라인) ≠ “복호화”
비밀번호는 복호화되는 것이 아니라 해시값으로 저장된 뒤, 추측 + 해싱(Brute Force, 사전/마스크 공격) 방식으로 찾습니다. 최신 하드웨어의 연산 속도는 초당 수십억 회 수준(빠른 해시 알고리즘의 경우)에 이르므로, 긴 비밀번호와 느린 알고리즘(예: Argon2, scrypt, PBKDF2, bcrypt)으로 해시된 비밀번호가 결정적으로 중요합니다.
과거와 현재의 사례: distributed.net의 RC5 프로젝트는 키 공간에 대한 무차별 전체 탐색의 순수한 계산 능력을 보여줍니다. 56비트는 1997년에 250일 만에, 64비트는 2002년에 1,757일 만에 찾아냈습니다. 현재는 프록시 상태 RC5-72의 경우초당 약 2.38조 개의 키 (기준: 오늘 조회 시점). 이는 키 브루트포스이며 비밀번호 해싱은 아니지만, 분산 컴퓨팅 성능이 얼마나 강력하게 확장되는지를 보여줍니다.
비밀번호의 조합과 길이
다음 예시는 길이와 문자 선택이 미치는 영향을 보여줍니다. 설명을 위해 초당 20억 회 시도를 기준으로 계산합니다(매우 강력한 단일 컴퓨터 기준이며, 실제 값은 하드웨어와 오프라인의 경우 해시 방식에 따라 크게 달라집니다).
일반적인 문자 그룹:
- 숫자(10개: 0~9)
- 문자(52개: A~Z 및 a~z)
- 특수문자(≈ 32개, 서비스에서 허용하는 문자 집합에 따라 달라짐)
가능한 조합 수는 다음과 같이 계산됩니다:
중요: 이 표는 최대 탐색 시간을 보여줍니다. 실제 시간은 평균적으로 이의 절반 정도입니다. 또한 사전 공격, 규칙 기반 공격, 마스크 공격은 탐색 공간을 크게 줄이는 반면, 느린 비밀번호 해시 방식은 실효 속도를 크게 낮춥니다.
| Passwort besteht aus | Mögliche Kombinationen (Formel) | Benötigte Zeit (bei 2 Mrd./s) |
|---|---|---|
| 5 Zeichen 3 Kleinbuchstaben, 2 Zahlen | (53) × 263 × 10217.576.000 | 0,009 Sekunden |
| 7 Zeichen 1 Großbuchstabe, 6 Kleinbuchstaben | (71) × 261+656.222.671.232 | ≈ 28 Sekunden |
| 8 Zeichen 4 Kleinbuchstaben, 2 Sonderzeichen, 2 Zahlen | (84) × (42) × 264 × 322 × 10219.653.623.808.000 | ≈ 2,73 Stunden |
| 9 Zeichen 2 Groß-, 3 Kleinbuchstaben, 2 Zahlen, 2 Sonderzeichen | (92) × (73) × (42) × 262+3 × 102 × 3229.197.895.942.144.000 | ≈ 53 Tage |
| 12 Zeichen 3 Groß-, 4 Kleinbuchstaben, 3 Sonderzeichen, 2 Zahlen | (123) × (94) × (53) × 263+4 × 323 × 1027,30 × 1021 | ≈ 115.591 Jahre |
| 14 Zeichen 4 Groß-, 4 Kleinbuchstaben, 3 Zahlen, 3 Sonderzeichen | (144) × (104) × (63) × 264+4 × 103 × 3232,88 × 1025 | ≈ 455.812.388 Jahre |
결론: 문자가 하나 추가될 때마다 탐색 공간은 기하급수적으로 늘어납니다. 특히 오프라인 공격 – 단, 서비스가 적절한 느린 해시 알고리즘을 Salt와 함께 사용하는 경우에 한합니다.
브루트포스 공격으로부터 보호
가장 효과적인 사용자 측 조치는 길고 무작위적인 마스터 비밀번호 또는 패스프레이즈(예: 여러 개의 무작위 단어)이며, 서비스별로 고유해야 합니다. Password Depot는 생성에 도움을 주고 예상 공격 소요 시간을 표시하며, 길이/문자 집합뿐 아니라 사전 기반 취약성도 고려합니다.
- MFA/2FA 활성화 (예: TOTP 앱 또는 하드웨어 토큰) – 가능하다면 패스키가 더욱 좋습니다. BSI 안내.
- 비밀번호 재사용 금지. 각 계정에는 고유하고 강력한 비밀번호가 필요합니다.
- 복잡성 요구보다 길이가 우선입니다. 서비스는 긴 비밀번호/패스프레이즈(최소 64자)를 허용하고, 유출된 비밀번호는 차단해야 합니다(블랙리스트).
- 느린 해시 알고리즘을 서버 측에서(예: Argon2, scrypt, PBKDF2, bcrypt) Salt 및 적절한 워크 팩터와 함께 사용해야 합니다. MD5/SHA-1 같은 빠른 해시는 비밀번호 저장에 적합하지 않습니다.
- Rate-Limiting/Throttling 및 잠금: 온라인 공격은 제한된 로그인 실패 횟수, 점진적 대기 시간, 필요 시 CAPTCHA를 통해 억제해야 합니다.
또한 Password Depot는 잘못된 입력 후 Master-Passwort 입력 창을 잠시 잠가 온라인 무차별 대입 시도를 더욱 어렵게 만듭니다. 이때 대기 시간이 점차 늘어납니다 반복적인 로그인 실패가 발생할수록.
서비스 제공업체(기술 팀)를 위한 실무 지침
- 공백/유니코드를 포함한 모든 출력 가능 문자를 허용하고 Copy-&-Paste를 지원하십시오.
- 다음을 구현하십시오: 차단 목록(유출되었거나 흔한 비밀번호) 및 Rate-Limiting과 명확한 사용자 안내.
- 비밀번호는 오직 솔트 처리되고 해시된 값으로만 저장하고, 느린 KDF를 사용하며 Work-Factor를 정기적으로 점검하십시오.
추가 참고 자료
- NIST SP 800–63B (Rev. 4), Appendix: Strength of Passwords – 길이, 패스프레이즈, 오프라인 공격(초당 수십억 해시) 및 Rate-Limiting 개념.
- NIST SP 800–63B (Rev. 3) – 최소 길이, 긴 비밀번호 허용(≥ 64), 블랙리스트, Paste 허용 등; Rate-Limiting/Throttling으로 연속된 최대 100회의 로그인 실패로 제한.
- OWASP Password Storage Cheat Sheet – 적절한 방식(Argon2, scrypt, PBKDF2, bcrypt), Salt/Work-Factor.
- OWASP Authentication Cheat Sheet – 비밀번호 입력, 길이, 블랙리스트 및 잠금 메커니즘에 대한 지침.
- BSI: 안전한 비밀번호 만들기 – 긴/복잡한 비밀번호와 패스프레이즈 등; 실용적인 팁.
- BSI 보도자료 31.01.2025 – 정기적인 비밀번호 변경 강제 금지; 2FA/패스키를 우선 권장.
- distributed.net RC5 / 현재 프록시 상태 – 전체 탐색과 분산 컴퓨팅 성능을 보여 주는 예시.