가. 해시 및 크랙 개념 정리
1. Hash (해시)
1-1. 정의
- 해시(Hash)란 임의의 길이를 가진 입력 데이터를 고정된 길이의 출력값(해시값)으로 변환하는 단방향 암호화 기법이다.
- 입력값의 길이와 무관하게 출력값의 길이는 항상 일정하다.
예시) "hello"라는 문자열을 SHA-256으로 해싱하면 항상 동일한 64자리 16진수 문자열이 출력된다.
1-2. 핵심 특징
| 특징 | 설명 |
| 단방향성 (One-way) | 해시값으로부터 원본 데이터를 역산하는 것이 수학적으로 불가능하며, 이를 '역상 저항성'이라고도 한다. |
| 결정성 (Deterministic) | 동일한 입력값을 해싱하면 언제나 동일한 해시값이 생성되며, 저장된 해시와 입력값을 비교 검증할 때 활용된다. |
| 눈사태 효과 (Avalanche Effect) | 입력값에 단 하나의 문자만 바뀌어도 출력되는 해시값이 완전히 달라진다. |
| 고정 길이 출력 | MD5는 128비트, SHA-256은 256비트 등 알고리즘마다 출력 길이가 고정된다. |
1-3. 주요 용도
| 용도 | 설명 |
| 비밀번호 저장 | 서버는 사용자의 비밀번호 원문 대신 해시값만 저장하며, 로그인 시 입력한 비밀번호를 해싱하여 저장된 해시값과 비교한다. |
| 데이터 무결성 검증 | 일을 전송하기 전후에 해시값을 비교하여 파일이 중간에 변조되었는지 확인한다. |
| 디지털 서명 및 인증서 | 공개키 기반(PKI) 인증 시스템에서 서명 대상 데이터를 해싱하여 사용한다. |
1-4. 대표적인 해시 알고리즘 비교
| 알고리즘 | 출력 길이 | 보안 수준 | 현재 사용 권고 |
| MD5 | 128비트 (32자) | 매우 낮음 (취약) | 사용 금지 (충돌 발생 가능) |
| SHA-1 | 160비트 (40자) | 낮음 (취약) | 사용 금지 권고 |
| SHA-256 | 256비트 (64자) | 높음 | 권장 |
| SHA-512 | 512비트 (128자) | 매우 높음 | 권장 |
| bcrypt | 고정 (60자) | 매우 높음 | 비밀번호 전용 권장 |
2. Bcrypt (비크립트)
2-1. 정의
- Bcrypt는 `Blowfish 암호화 알고리즘`을 기반으로 설계된 비밀번호 전용 해싱 함수이다.
- 1999년 Niels Provos와 David Mazières가 개발했으며, 일반적인 해시 알고리즘(MD5, SHA 계열)보다 훨씬 강력한 보안을 제공한다.
- 일반 해시 함수는 공격자가 짧은 시간에 수백만 개의 크랙을 시도할 수 있는 방면, Bcrypt는 이를 방지하기 위해 의도적으로 연산을 느리게 설계하였다.
*Blowfish 암호화 알고리즘: 1993년 Bruce Schneier가 설계한 대칭키 블록 암호화 알고리즘으로, 빠른 속도와 가변 길이 키(32~448비트)를 지원하는 것이 특징이다.
2-2. 핵심 특징
| 특징 | 설명 |
| 의도적 저속 설계 (Key Stretching) |
일반 SHA-256은 초당 수십억 번 계산이 가능하지만, bcrypt는 Cost Factor 설정에 따라 초당 수백~수천 번 수준으로 제한된다. 무차별 대입 공격(Brute Force Attack)에 강하다. |
| 자동 Salt 생성 (레인보우 테이블 방어) |
같은 비밀번호를 해싱하더라도 매번 다른 무작위 Salt(임의 문자열)가 자동 생성되어 결합된다. 미리 계산된 해시 테이블(레인보우 테이블)을 이용한 공격을 무력화한다. |
| Cost Factor 조정 가능 (미래 보안 대응) |
하드웨어 성능이 향상되더라도 Cost Factor 값을 높여 연산 난이도를 조절할 수 있다. 일반적으로 10~14 값을 권장하며, 값이 1 증가할 때마다 연산량이 2배가 된다. |
2-3. Bcrypt 해시 구조 분석
- Bcrypt로 생성된 해시값은 아래와 같은 고정된 구조를 가진다.

| 구성요소 | 예시 값 | 유형/버전 | 설명 |
| Algorithm (알고리즘 식별자) | 2a | original | 원본 bcrypt 알고리즘 |
| 2b | fixed | 2014년 버그 수정 버전 - 현재 가장 안전 | |
| 2x | compatibility (호환성) | $2a의 버그 호환성 버전 | |
| 2y | PHP 전용 | PHP < 5.3.7 환경 전용 | |
| Cost Facter (반복횟수) | 12 | 숫자 (4~31) | 값이 클수록 느리고 안전. 기본값 10, 권장값 12~14 |
| Salt (랜덤 솔트) | ge2zsb...IwfK. | 22자 고정 | 동일 비밀번호도 매번 다른 해시 생성 → 레인보우 테이블 무력화 |
| Hash | ii5ONL...zooH0 | 31자 고정 | 실제 해싱된 결과값 |
※ bcrypt 해시 문자열 안에 솔트값이 평문으로 포함되어 있고, 크랙도구(예: Hashcat)가 이를 자동으로 추출한 뒤 "후보 비밀번호 + 솔트"를 조합해 해싱하고 저장된 해시와 비교하는 방식으로 크랙을 시도하기 때문에 Salt가 있어도 크랙이 가능하다.
3. Crack
3-1. 정의
- 크랙(Crack)이란 해시값으로부터 원본 비밀번호(평문)를 찾아내는 과정을 말한다.
- 해시는 단방향 함수이므로 수학적으로 역산이 불가능하지만, 다양한 입력값을 해싱하여 저장된 해시값과 비교하는 방식으로 원본을 추정할 수 있다.
3-2. 크랙의 기본 원리
- 해시는 복호화(Decryption)가 불가능하기 때문에, 크랙은 '역산'이 아닌 '추측 및 비교' 방식으로 이루어진다.

3-3. 주요 크랙 기법
| 기법 | 설명 | 특징 |
| 사전 공격 (Dictionary Attack) | 실제로 많이 사용되는 비밀번호 목록(wordlist)을 이용해 해시를 비교 | 빠르고 효율적. 약한 비밀번호에 매우 효과적 |
| 무차별 대입 (Brute Force Attack) | 가능한 모든 문자 조합을 순서대로 시도 | 완전 탐색이므로 이론적으로 100% 성공, 단 시간이 오래 걸림 |
| 하이브리드 공격 (Hybrid Attack) | 사전 단어에 숫자나 특수문자 등 규칙 기반 변형을 적용 | password → p@ssw0rd 같은 단순 변형 비밀번호 공격 가능 |
| 레인보우 테이블 (Rainbow Table) | 미리 계산된 해시-평문 쌍의 대규모 데이터베이스를 활용 | 계산 없이 조회만으로 빠르게 크랙 가능 |
나. 프로그램 설치
1. HashCat
1-1. 프로그램 소개 및 설치
- GPU를 활용한 고성능 비밀번호 크랙 도구이다.
- 아래의 사이트에 접속하여 hashcat을 다운로드 한뒤, 압축을 해제한다.
hashcat - advanced password recovery
Download Name Version Date Download Signature hashcat binaries v7.1.2 2025.08.23 Download PGP hashcat sources v7.1.2 2025.08.23 Download PGP Signing key on PGP keyservers: RSA, 2048-bit. Key ID: 2048R/8A16544F. Fingerprint: A708 3322 9D04 0B41 99CC 0052 3C
hashcat.net

[ 오류 해결 1 ]
- NVIDIA GPU 사용 시 `CUDA Toolkit`을 설치하여야 한다. 만약 설치하지 않으면 아래와 같은 오류가 발생한다.
*CUDA Toolkit:
D:\hagsig\hashcat-7.1.2>hashcat.exe -m 3200 -a 0 target.txt rockyou.txt
hashcat (v7.1.2) starting
Successfully initialized the NVIDIA main driver CUDA runtime library.
Failed to initialize NVIDIA RTC library.
* Device #1: CUDA SDK Toolkit not installed or incorrectly installed.
CUDA SDK Toolkit required for proper device support and utilization.
For more information, see: https://hashcat.net/faq/wrongdriver
Falling back to OpenCL runtime.
If you are using WSL2 you can use CUDA instead of OpenCL.
Users must not install any NVIDIA GPU Linux driver within WSL 2
For all details: https://docs.nvidia.com/cuda/wsl-user-guide/index.html
TLDR; go to https://developer.nvidia.com/cuda-downloads and follow this path:
Linux -> Architecture -> Distribution -> Version -> deb (local)
Follow the installation Instructions on the website.
- CUDA Toolkit은 아래의 사이트에서 다운로드 할 수 있다.
CUDA Toolkit 12.1 Downloads
Get the latest feature updates to NVIDIA's proprietary compute stack.
developer.nvidia.com
[ 오류 해결 2 ]
- 아래와 같은 오류가 발생하는 경우 NIVIA Driver의 버전이 낮아 발생하는 문제이다.
* Device #1: Kernel ./OpenCL/shared.cl link failed. Error Log:
ptxas application ptx input, line 9; fatal : Unsupported .version 9.1; current version is '8.8'
* Device #1: Kernel ./OpenCL/shared.cl build failed.
- 아래의 사이트 또는 NIVIA App에서 최신버전의 드라이버를 설치하면 오류없이 잘 동작한다.
최신 공식 GeForce 드라이버 다운로드
PC 게이밍 환경을 향상하고 앱을 더 빠르게 실행할 수 있도록 최신 공식 GeForce 드라이버를 다운로드하세요.
www.nvidia.com
1-2. 옵션 및 실행 방법
- HasgCat에서 많이 사용하는 옵션은 아래와 같다.
| 구분 | 옵션 | 설명 | 비고 |
| 해시 타입 지정 (-m, --hash-type) |
-m 0 | MD5 | 빠른 해시, 보안 취약 |
| -m 100 | SHA1 | MD5보다 안전하지만 여전히 취약 | |
| -m 1000 | NTLM (Windows) | Windows 비밀번호 해시 | |
| -m 1400 | SHA256 | 안전한 해시 알고리즘 | |
| -m 1800 | SHA512 | SHA256보다 더 안전 | |
| -m 3200 | bcrypt | 느린 해시, 크랙 어려움 | |
| -m 5600 | NetNTLMv2 | 네트워크 인증 해시 | |
| -m 13100 | Kerberos TGS | Kerberos 티켓 | |
| -m 22000 | WPA/WPA2 (신 형식) | WiFi 비밀번호 | |
| 공격 모드 (-a, --attack-mode) |
-a 0 | 사전 공격 (Straight/Dictionary Attack) | wordlist의 단어를 그대로 시도 |
| -a 1 | 조합 공격 (Combination Attack) | 두 wordlist의 단어를 조합 (word1 + word2) | |
| -a 3 | 마스크 공격 (Brute-force/Mask Attack) | 지정한 패턴의 모든 조합 시도 | |
| -a 6 | 하이브리드 공격 (Wordlist + Mask) | wordlist + 마스크 조합 | |
| -a 7 | 하이브리드 공격 (Mask + Wordlist) | 마스크 + wordlist 조합 | |
| 마스크 문자셋 | ?l | 소문자 | a-z (26개) |
| ?u | 대문자 | A-Z (26개) | |
| ?d | 숫자 | 0-9 (10개) | |
| ?s | 특수문자 | !@#$%^&* 등 (33개) | |
| ?a | 모든 문자 | ?l + ?u + ?d + ?s (95개) | |
| ?h | 16진수 소문자 | 0-9, a-f | |
| ?H | 16진수 대문자 | 0-9, A-F | |
| ?b | 모든 바이트 | 0x00-0xff (256개) | |
| 워크로드 프로파일 (-w, --workload-profile) |
-w 1 | Low (낮은 성능, 시스템 반응 빠름) | 다른 작업 병행 시 |
| -w 2 | Default (기본값) | 균형잡힌 설정 | |
| -w 3 | High (높은 성능, 시스템 약간 느림) | 추천, 크랙 전용 | |
| -w 4 | Nightmare (최대 성능, 시스템 거의 멈춤) | 전문가용, 위험 | |
| 룰 (-r, --rules-file) |
-r {path} | wordlist 단어 변형 룰 적용 | 예: -r rules/best64.rule |
| best64.rule | 가장 효과적인 64개 룰 (추천) | ||
| d3ad0ne.rule | 약 35,000개 룰, 복잡한 변형 | ||
| dive.rule | 약 100,000개 룰, 매우 깊은 변형 | ||
| rockyou-30000.rule | RockYou 분석 기반 30,000개 룰 | ||
| leetspeak.rule | 1337 speak 변환 (a→4, e→3) | ||
| toggles1-5.rule | 대소문자 전환 (1=간단, 5=복잡) | ||
| 결과 확인 옵션 | --show | 크랙 결과 보기 | potfile에 저장된 결과 출력 |
| --username | 사용자명 포함 표시 | 해시 파일에 사용자명 있을 때 | |
| --potfile-path | potfile 경로 지정 | 크랙 결과 저장 위치 변경 | |
| 세션 관리 | --session {name} | 세션 이름 지정 | 중단 후 재개 가능 |
| --restore | 중단된 세션 재개 | --session과 함께 사용 | |
| --restore-disable | 자동 재개 비활성화 | 매번 새로 시작 | |
| 성능 옵션 | -O | 최적화 커널 사용 | 속도 향상, 비밀번호 길이 제한 |
| --backend-devices | 사용할 GPU 지정 | 예: -d 1 (GPU 1번만 사용) | |
| (-d) | |||
| -D 1 | CUDA만 사용 (NVIDIA) | NVIDIA GPU 전용 | |
| -D 2 | OpenCL만 사용 | AMD/Intel GPU 호환 | |
| 출력 및 로그 | -o, --outfile | 크랙 결과 파일 저장 | 예: -o cracked.txt |
| --outfile-format | 출력 형식 지정 | 1=hash:plain, 2=plain, 3=hash:hex | |
| --status | 자동 상태 출력 | 주기적으로 진행 상황 표시 | |
| --status-timer | 상태 출력 주기(초) | 예: --status-timer 10 | |
| 제한 옵션 | --increment | 길이 증가 모드 | 1자부터 점진적으로 증가 |
| --increment-min | 최소 길이 | 예: --increment-min 4 | |
| --increment-max | 최대 길이 | 예: --increment-max 8 | |
| --runtime | 실행 시간 제한(초) | 예: --runtime 3600 (1시간) | |
| 기타 옵션 | --force | 경고 무시하고 강제 실행 | 권장하지 않음 |
| --quiet | 배너 및 상태 출력 숨김 | 스크립트 실행 시 유용 | |
| --stdout | 실제 크랙 없이 출력만 | 룰 테스트용 | |
| -h, --help | 도움말 표시 | 전체 옵션 확인 | |
| --version | 버전 확인 | hashcat 버전 표시 | |
| -b, --benchmark | 벤치마크 실행 | GPU 성능 테스트 |
- 위 옵션을 이용하여 아래와 같이 실행할 수 있다.
hashcat -a 0 -m 3200 hash.txt wordlist.txt

- 아래의 옵션을 통해 현재 진행상태 열람, 일시중지, 종료 등의 명령을 내릴 수 있다.
| 키 | 역할 |
| [s]tatus | 현재 크랙 진행 상황 출력 (속도, 진행률, 예상 완료 시간 등) |
| [p]ause | 크랙 작업 일시 정지 |
| [b]ypass | 현재 wordlist/rule을 건너뛰고 다음 단계로 이동 |
| [c]heckpoint | 현재 진행 상태를 저장하고 정지 (이어서 재시작 가능) |
| [f]inish | 현재 진행 중인 단계까지만 완료 후 종료 |
| [q]uit | 즉시 종료 |
2. rockyou
- 실제 유출된 비밀번호 약 1,434만 개가 포함된 대표적인 wordlist를 제공한다.
- 아래의 사이트에서 rockyou.txt를 다운로드 한다.
Releases · brannondorsey/naive-hashcat
Crack password hashes without the fuss :cat2:. Contribute to brannondorsey/naive-hashcat development by creating an account on GitHub.
github.com

3. genPass
- 개인정보 기반 Wordlist 생성 도구이다.
- 아래의 사이트에서 genPass.py를 다운로드 한다.
genPass/genPass.py at main · KR-mick3y/genPass
Generator Password from username. Contribute to KR-mick3y/genPass development by creating an account on GitHub.
github.com

- genPass의 옵션은 아래와 같다.
| 옵션 | 전체 옵션명 | 설명 | 필수 여부 | 사용 예시 |
| -h | --help | 도움말 표시 | 선택 | genPass.py -h |
| -f | --file | 사용자 정보가 포함된 입력 파일 지정 | 선택 | -f users.txt |
| -o | --output | 생성된 비밀번호 목록을 저장할 출력 파일 | 필수 | -o passlist.txt |
| -n | --number | 추가 숫자 사용 (조합에 포함할 숫자) | 선택 | -n 2024 |
| -c | --char | 추가 문자열 사용 (회사명, 키워드 등) | 선택 | -c company |
| -L | --light | 경량 목록 생성(w-first만, 제한된 숫자, easy base 제외) | 선택 | -L |
| -k | --keywords | 관리자/시스템 키워드 패턴 포함(test, admin, root 등) | 선택 | -k |
- 사용자 정보가 포함된 입력 파일 생성한다.
#대상자의 이름이 '홍길동' 이라면 아래와 같이 생성한다.
#양식: [성] [이름1] [이름2] [성_한글자판] [이름1_한글자판] [이름2_한글자판]
hong gil dong ghd rlf ehd

- 위 옵션을 이용하여 아래와 같이 실행, 개인정보(이름) 기반 wordlist를 생성할 수 있다.
python genPass.py -f target.txt -n 1,123 -c !,!@# -k -o wordlist.txt

다. 크랙 실습
1. Bcrypt Hash 생성
- 아래의 사이트에서 테스트할 Bcrypt Hash를 생성하고, target.txt 파일에 저장한다.
Bcrypt Generator - Online Hash Generator and Checker
Free online bcrypt hash generator and verifier. Create secure password hashes with adjustable rounds. Client-side processing ensures your data stays private.
bcrypt-generator.com
2. wordlist 생성
- 무차별 대입공격을 하기에는 현실적으로 불가능하므로, wordlist를 이용하여 많이 크랙한다.
- genpass 또는 rockyou로 wordlist를 준비한다.
3. 크랙 시도
- 본인이 사용하고 싶은 옵션을 이용하여 크랙을 시도한다.
- 크랙에 성공할 경우 아래와 같이 해시와 크랙된 패스워드가 같이 나열되어 출력된다.

'프로그램 사용방법' 카테고리의 다른 글
| SQLMap 모든 옵션 및 사용 방법 정리(POST, JSON, Tor 등) (0) | 2025.11.08 |
|---|---|
| 가장쉬운 OpenVAS 설치 및 실행 방법 정리 (0) | 2024.01.15 |
| BurpSuite 자동 업데이트 기능 끄는 방법 (0) | 2023.08.22 |
| 아이폰·갤럭시폰·윈도우·맥북 파일 주고받는 방법 정리 (0) | 2023.08.18 |
| Quick Share를 이용한 파일 전송방법(스마트폰 ↔ 컴퓨터) (0) | 2023.08.06 |