오늘 끝나면
비밀번호 크래킹
- ✓비밀번호 크래킹의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 비밀번호이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
해시·무차별 대입, 그리고 방어선 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
화이트해킹 · 12
비밀번호
크래킹
서버가 털려도 새는 건 비번이 아니라 해시임.
공격자는 그 해시를 자기 PC로 가져가 조용히 맞춰봄.
느린 해시와 솔트가 이 작업을 끝없이 늘리는 방어임.
유출되는 건 비번이 아니라 해시
제대로 만든 서버는 비번을 그대로 안 적음. 해시로 바꿔 저장함.
해시는 한 방향임 / 비번을 넣으면 고정 길이 문자열이 나오지만 거꾸로는 못 풂.
로그인 때마다 입력값을 다시 해시해서 저장된 값과 같은지만 비교함.
그래서 DB가 통째로 새도 비번 원문은 안 보임 / 보이는 건 해시 목록임.
여기서 공격이 시작됨 — 해시를 자기 컴퓨터로 가져가 비번을 거꾸로 알아내는 것.
서버를 더 안 건드려도 됨 / 이게 오프라인 크래킹임.
alice → $2b$…wF3
DB 통째로 샘
자기 PC에서 맞춰봄
서버 한 번 털리면 나머지는 공격자 컴퓨터에서 진행됨
오프라인 = 시도 횟수 제한이 없음
왜 오프라인이 무서운가? 서버가 안 보고 있어서 제한이 다 사라짐.
온라인으로 로그인 창에 막 찔러보면 서버가 막음 / 5번 틀리면 잠그고 · 속도를 늦추고 · 로그를 남김.
그래서 온라인 추측은 느리고 금방 들킴.
근데 해시를 손에 쥐면 서버가 필요 없음.
후보 비번을 자기 GPU로 해시해서 유출된 값과 맞춰보면 됨 / 초당 수억 번도 됨.
잠금도 · 로그도 · 알림도 없음 / 공격자가 시간만 들이면 됨 — 그래서 방어는 그 시간을 키우는 일임.
- ·5번 틀리면 잠금
- ·속도 제한 걸림
- ·로그·알림 남음
- ·잠금 없음
- ·제한 없음
- ·아무도 못 봄
사전 · 무차별 · 레인보우 테이블
후보 비번을 만드는 방법은 크게 셋임. 보통 싼 것부터 차례로 씀.
사전 공격 / 흔한 비번 목록(password · 123456 · 회사명2024)을 먼저 다 던짐.
사람들이 쓰는 비번은 뻔해서 약한 비번은 여기서 거의 다 깨짐.
무차별 대입 / 모든 조합을 a, b, … aa, ab 순으로 전부 만듦 / 답은 반드시 있지만 길수록 폭발적으로 느려짐.
레인보우 테이블 / 해시→비번 짝을 미리 계산해 둔 거대한 표 / 한 번 만들면 다음부턴 조회만 / 솔트가 있으면 통째로 무력화됨.
흔한 비번 목록부터
password · 123456 · qwerty
모든 조합 전부
a · b · … · aa · ab · …
해시→비번 미리 계산
솔트 있으면 무력화
크래킹 시간 계산기 — 직접 해봄
무차별 대입이 얼마나 걸리는지는 두 가지로 정해짐 / 길이와 문자종류임.
오른쪽에서 직접 해봄.
비번을 적으면 거기 쓰인 문자종류(소문자·대문자·숫자·기호)를 세서 조합 수를 구하고, 길이만큼 늘어남.
공격자의 추측 속도를 슬라이더로 바꿔 가며 예상 시간을 봄.
한 글자만 늘려도 시간이 수십 배로 뜀 / 종류를 섞으면 또 뜀.
이건 실제 공격이 아니라 안전한 추정임 / 해시를 만들지도 · 서버를 건드리지도 않음.
핵심은 하나 — 짧고 단순한 비번은 순식간에 깨짐.
길이 7 · 조합 수 = 36^7 ≈ 7.8×10^10
GPU 한 대 · 10억/초
길이를 한 글자 늘리면 시간이 약 36배로 뜀 / 문자종류를 섞으면 또 뜀. 방어는 이 시간을 끝없이 키우는 일 — 긴 비번 + 느린 해시(bcrypt) + 솔트.
방어 — 느린 해시 + 솔트
크래킹을 못 막진 못함. 대신 끔찍하게 느리고 비싸게 만들 수 있음.
빠른 해시(MD5 · SHA-1)는 검증용이라 한 번 계산이 너무 빨라 크래킹에도 유리함.
비번엔 일부러 느린 해시(bcrypt · argon2)를 씀 / 한 번 계산을 수만 배 느리게 만들어 초당 시도를 확 줄임.
솔트는 사용자마다 다른 무작위 값을 비번에 붙여 해시함.
그러면 같은 비번도 사람마다 해시가 달라져 레인보우 테이블이 무력화됨 / 한 명씩 따로 깨야 함.
정리 — 긴 비번 · 느린 해시 · 사용자별 솔트. 셋이 합쳐져 크래킹을 사실상 포기하게 만듦.
Q. 유출된 해시의 크래킹을 느리게 만들려면? (빠른 MD5로 저장 · 느린 해시 bcrypt + 사용자별 솔트 + 긴 비번 · 평문 저장 · 솔트 없는 SHA-1)
정답은 느린 해시(bcrypt) + 사용자별 솔트 + 긴 비번임.느린 해시는 초당 시도 수를 확 줄이고 · 솔트는 레인보우 테이블과 일괄 크래킹을 막고 · 긴 비번은 조합 수를 폭발시킴.
MD5 · SHA-1은 너무 빨라 오히려 공격자에게 유리하고 · 평문 저장은 유출 즉시 끝임.
세 방어가 합쳐져야 크래킹이 사실상 불가능에 가까워짐.
검증엔 빠르지만 크래킹에도 빠름 / 솔트 없으면 레인보우 테이블에 그대로 뚫림
사용자별 솔트로 같은 비번도 해시가 다 다름 / 한 명씩 따로 깨야 함