비밀번호 기반 인증과 보호
비밀번호 검증값·salt·계산 비용과 온라인·오프라인 공격의 차이를 이해합니다.
1. 비밀번호 인증이 의미하는 것
비밀번호가 일치했다는 것은 현재 요청자가 등록된 비밀번호를 알고 있다는 뜻이다. 실제 계정 소유자가 직접 입력했다는 것을 절대적으로 증명하지는 않는다. 비밀번호가 공유·유출·피싱·재사용되었을 수 있기 때문이다.
2. 등록과 검증 흐름
서버는 비밀번호 원문을 복원해 비교하기보다 다음과 같이 검증값을 저장한다.
- 사용자별 고유 salt를 생성한다.
- 비밀번호와 salt를 비밀번호 전용 함수에 입력한다.
- 결과 검증값, salt, 알고리즘·비용 정보를 저장한다.
- 로그인 시 제출된 비밀번호로 같은 계산을 수행한다.
- 계산 결과를 저장값과 안전하게 비교한다.
3. 저장 방식별 위험
평문 저장
DB를 읽은 공격자가 즉시 모든 비밀번호를 알 수 있다. 사용자의 다른 서비스 계정까지 위험해진다.
복호 가능한 암호화 저장
서비스가 모든 비밀번호를 복호화할 수 있는 키를 보유하므로 키가 유출되면 전체 원문이 노출된다. 일반적인 로그인 검증에는 원문 복구가 필요하지 않다.
빠른 일반 해시만 사용
SHA-256(password)처럼 빠른 해시만 사용하면 공격자는 초당 매우 많은 후보를 시험할 수 있다. 해시가 단방향이라는 사실만으로 안전한 비밀번호 저장이 되는 것은 아니다.
비밀번호 전용 검증 함수
PBKDF2, scrypt, Argon2id 같은 방식은 한 번의 추측에 반복 연산 비용이나 메모리 비용을 부과해 오프라인 공격을 늦춘다. 시험에서는 각 함수의 세부 매개변수보다 빠른 일반 해시와 느린 비밀번호 전용 함수의 차이를 기억한다.
4. Salt의 역할
salt는 사용자·레코드마다 다르게 생성해 비밀번호 계산에 함께 넣는 값이다. 비밀일 필요는 없으며 검증값과 함께 저장할 수 있다.
salt가 제공하는 효과:
- 같은 비밀번호도 서로 다른 salt로 계산하면 일반적으로 다른 검증값이 된다.
- 미리 계산한 대규모 공통 테이블의 재사용을 어렵게 한다.
- 동일 비밀번호 사용자 식별을 어렵게 한다.
salt가 해결하지 못하는 것:
- 약한 비밀번호 자체
- 피싱·키로깅
- 온라인 추측
- 사용자별 salt를 포함해 다시 계산하는 오프라인 사전 공격
5. 온라인 공격과 오프라인 공격
온라인 추측
공격자가 실제 로그인 서버에 요청을 보낸다.
- 서버의 속도 제한·지연·잠금·위험 기반 추가 인증이 작동한다.
- IP·계정·장치·시간대별 이상 징후를 탐지할 수 있다.
- 과도한 계정 잠금은 공격자가 정상 사용자를 잠그는 서비스 거부에 악용할 수 있다.
오프라인 크래킹
공격자가 유출된 검증값을 자신의 장비에서 계산한다.
- 로그인 서버의 시도 제한이 적용되지 않는다.
- 고유 salt는 여러 사용자에 대한 계산 재사용을 막고, 비밀번호 전용 함수는 각 후보 검증 비용을 높인다.
- 비밀번호가 짧거나 흔하면 결국 추측될 수 있다.
6. 대표 공격 구분
| 공격 | 특징 |
|---|---|
| 무차별 대입 | 가능한 모든 후보를 체계적으로 시도 |
| 사전 공격 | 흔한 단어·패턴·유출 목록을 우선 시도 |
| 하이브리드 공격 | 사전 단어에 숫자·기호·변형 규칙을 결합 |
| 비밀번호 스프레이 | 소수의 흔한 비밀번호를 많은 계정에 시도 |
| 크리덴셜 스터핑 | 다른 서비스에서 유출된 ID·비밀번호 조합을 재사용 |
| 레인보우 테이블 | 미리 계산한 해시 체인을 이용; 고유 salt가 효과를 크게 줄임 |
| 피싱·키로깅 | 계산이 아니라 사용자가 입력한 원문을 직접 획득 |
7. 후보 공간과 추측 시간
균등하게 생성한 6자리 숫자 PIN은 000000부터 999999까지 1,000,000개 후보가 있다.
후보 수 = 10^6 = 1,000,000
평균 추측 횟수 ≈ 500,000회
- 온라인에서 분당 5회만 허용하면 평균 약 100,000분이 필요하다.
- 오프라인에서 초당 100,000회 계산하면 평균 약 5초다.
같은 비밀번호 공간이라도 공격 위치와 검증 비용에 따라 위험이 크게 달라진다.
8. 비밀번호 정책의 핵심 방향
- 짧고 복잡한 문자열보다 충분히 긴 암호문구를 허용한다.
- 이미 널리 유출되거나 너무 흔한 비밀번호를 차단한다.
- 비밀번호 관리자와 붙여넣기를 허용해 고유한 비밀번호 사용을 돕는다.
- 침해 근거가 있을 때 즉시 변경하고, 근거 없는 지나친 주기 변경은 약한 반복 패턴을 만들 수 있음을 고려한다.
- 재설정·복구 절차를 로그인보다 약하게 만들지 않는다.
- 비밀번호만으로 위험이 큰 업무에는 다른 요소를 결합한다.
이러한 운영 지침의 세부 숫자는 조직 정책과 적용 기준에 따라 달라질 수 있으므로, 시험 핵심은 길이·고유성·유출 차단·안전한 저장·추가 인증의 원리에 둔다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01로그인 실패 횟수 제한으로 유출된 비밀번호 검증값의 오프라인 추측도 제한할 수 있는가?
아니다. 공격자 장비에서 계산하므로 서버의 잠금·속도 제한이 적용되지 않는다. 고유 salt, 비밀번호 전용 함수의 비용, 충분한 비밀번호 강도가 필요하다.
02고유 salt가 있으면 약한 비밀번호의 사전 공격이 불가능해지는가?
아니다. 여러 사용자에 대한 사전 계산의 재사용을 어렵게 하지만 각 salt와 후보로 다시 계산할 수 있다. 피싱이나 비밀번호 재사용도 해결하지 않는다.