홈으로 돌아가기

비밀번호 강도: 개발자를 위한 계산

이 기사는 무차별 대입 계산, 사전 공격 위협, 저장 권장사항(Argon2, salt)으로 수학적 비밀번호 강도를 분석합니다. 개발자용: throttling, 2FA, 고유성. 사용자용: 패스프레이즈 및 관리자.

비밀번호 강도 계산: 길이가 가장 중요한 이유
Advertisement 728x90

개발자를 위한 비밀번호 강도 분석: 계산과 실용적 권고

비밀번호는 간편함과 사용자 친화성 덕분에 여전히 인증의 핵심입니다. 사용자 이름은 계정을 식별하고, 비밀번호는 비밀 정보를 알고 있음을 확인합니다. 하드웨어 키, 일회용 비밀번호(OTP), 생체인식, WebAuthn 같은 대안이 있지만, 여전히 저비용 로그인 시스템에서는 비밀번호가 주류를 이룹니다.

예를 들어, WebAuthn은 비대칭 암호화를 사용합니다. 개인키는 기기 내부에 보관되며, 서버는 공개키로 서명을 검증합니다. 생체정보는 로컬에 저장되며 절대 서버로 전송되지 않아 노출 위험을 최소화합니다.

현실 세계의 보안: 브루트포스 공격의 수학적 원리

모든 비밀번호는 브루트포스 공격으로 해독 가능하지만, 보안의 핵심은 경제적 비현실성에 있습니다. 다양한 설정에 따른 공격 소요 시간을 계산해 봅시다.

Google AdInline article slot

5자리 PIN(10^5 = 10만 가지 조합)은 초당 10회 시도 시 몇 초면 완료됩니다. 1만 대의 장치로 구성된 봇넷(초당 10만 회 시도)을 사용하면, 36자리 알파벳(영문 + 숫자)에서 5글자 비밀번호를 9분 미만에 해독할 수 있습니다.

문자 집합을 확장하면:

  • 62자리(대소문자 + 숫자): 62^5 ≈ 9억 1600만 → 봇넷 사용 시 약 2.5시간
  • 95자리(특수문자 포함): 95^5 ≈ 770억 → 약 21시간

길이는 결정적 요소입니다. 95자리에서 8글자라면 95^8 ≈ 6.6×10^15 → 초당 10만 회 시도 시 2,000년 이상 소요됩니다. 특수문자를 제외한 경우(62^8 ≈ 2.2×10^14)에도 약 70년이 걸립니다.

Google AdInline article slot

| 문자 집합 | 길이 | 조합 수 | 시간 (초당 10만 회) |

|----------------|--------|--------------|----------------|

| 36 | 5 | 5,200만 | 9분 |

Google AdInline article slot

| 62 | 5 | 9억 1600만 | 2.5시간 |

| 95 | 5 | 770억 | 21시간 |

| 62 | 8 | 218조 | 70년 |

| 95 | 8 | 6.6경 | 2,000년 이상 |

요청 제한은 필수적입니다. IP당 요청 횟수 제한은 공격자가 분산형 봇넷을 사용하도록 강제하며, 공격 비용을 극도로 증가시킵니다.

사전 공격과 일반적인 패턴

긴 비밀번호에 대해 전체 브루트포스는 비효율적입니다. 진짜 위협은 사전 공격과 자격 증명 재사용 공격입니다.

약한 비밀번호 예시:

  • Qwertyuio1 — 키보드 순서 패턴
  • Abcdefghi0 — 연속된 알파벳
  • P@ssW0rD36 — 리트 스피크 변환
  • Ghbdtn — 러시아어 'Hello'를 QWERTY 배치로 입력한 것

권고: 4~6개의 무작위 단어로 구성된 문구형 비밀번호(2만 단어 사전 기준: 2만^4 = 1.6×10^17 조합 → 수천 년 이상 해독 필요)를 사용하세요. 따옴표나 예측 가능한 표현은 피하고, 하이픈이나 공백 같은 구분자 활용.

4자리 PIN은 엔트로피가 낮아 보안성이 부족합니다. 시도 횟수 제한(3~10회)과 하드웨어 기반 해시 보호로 보완됩니다.

비밀번호 저장 시 개발자의 실수

비밀번호는 절대 평문으로 저장해서는 안 됩니다. 대신 bcrypt, Argon2, scrypt와 같은 강력한 해싱 알고리즘을 사용해야 합니다. 흔한 실수:

  • 평문 또는 약한 해시(MD5/SHA-1)로 저장
  • 솔트 누락 → 레인보우 테이블 공격 가능
  • 충분한 반복 수 없이 약한 해싱 → GPU로 빠르게 해독 가능
  • 요청 제한 또는 CAPTCHA 보호 미비
  • 자격 증명 재사용 검사 무시 → 데이터 유출 데이터베이스(예: Have I Been Pwned?)에 존재하는 로그인 쌍 확인 불가

최적의 실천 방법:

  • 메모리 강화 파라미터를 적용한 Argon2id 사용
  • 각 사용자마다 고유한 솔트 할당
  • 요청 제한 구현(예: IP당 분당 5회)

실용적 권고

사용자에게:

  • 각 서비스마다 고유한 비밀번호 사용
  • 최소 12자 이상 또는 4개 이상의 무작위 단어로 구성된 문구형 비밀번호 목표
  • 비밀번호 관리자 활용:

* 로컬 전용(KeePassXC): 완전한 통제, 수동 동기화

* 클라우드 기반(Bitwarden): 자동 동기화, 마스터 비밀번호 보호

  • 2단계 인증(2FA) 활성화(TOTP 추천 — SMS 피하기)

개발자에게:

  • 문구형 비밀번호 또는 최소 16자 이상 비밀번호 요구
  • Argon2(p=2, m=64MB, t=3)로 해싱
  • 지수 백오프 방식의 요청 제한 강제 적용
  • 새 시스템에는 Passkeys/WebAuthn 도입
  • Have I Been Pwned? 같은 도구로 유출 감시 수행

핵심 요약

  • 길이가 복잡성보다 중요: 95^8은 62^12보다 훨씬 강력함
  • 요청 제한 + 봇넷 = 공격자 비용 지수 증가
  • 무작위 단어 문구형 비밀번호는 10^17 이상의 조합 제공
  • Argon2로 솔트 해시만 저장; 평문 저장은 즉각적인 취약점
  • 고유 비밀번호는 자격 증명 재사용 공격 방지

— Editorial Team

Advertisement 728x90

다음 읽기