Bcrypt(비크립트) Hash 정의 및 크랙 방법 정리

2026. 3. 8. 09:50·프로그램 사용방법
728x90
반응형

가. 해시 및 크랙 개념 정리

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. 크랙 시도

- 본인이 사용하고 싶은 옵션을 이용하여 크랙을 시도한다.

- 크랙에 성공할 경우 아래와 같이 해시와 크랙된 패스워드가 같이 나열되어 출력된다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그램 사용방법' 카테고리의 다른 글

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
'프로그램 사용방법' 카테고리의 다른 글
  • SQLMap 모든 옵션 및 사용 방법 정리(POST, JSON, Tor 등)
  • 가장쉬운 OpenVAS 설치 및 실행 방법 정리
  • BurpSuite 자동 업데이트 기능 끄는 방법
  • 아이폰·갤럭시폰·윈도우·맥북 파일 주고받는 방법 정리
학식(hagsig)
학식(hagsig)
정보보안을 배우고자 하는 모든 이들의 식당입니다. 모의해킹, 취약점 진단, 서버, 네트워크, 프로그래밍 등등 다양한 분야를 배우실 수 있습니다.
  • 학식(hagsig)
    학식 - 정보보안 전문 블로그
    학식(hagsig)
  • 전체
    오늘
    어제
  • 공지사항

    • 게시된 정보를 악용하여 발생하는 모든 책임은 사용자에게 있⋯
    • 무단 전재 및 재배포를 금지합니다.
    • 분류 전체보기 (302)
      • 교육정보 (15)
        • IT국비지원 (12)
        • 기업면접코칭 (3)
      • 인프라 취약점 진단 · 모의해킹 (24)
        • 윈도우 서버 진단 · 모의해킹 (22)
        • 리눅스 서버 진단 · 모의해킹 (2)
      • Mobile App 취약점 진단 · 모의해킹 (98)
        • AOS App 취약점 진단 · 모의해킹 (40)
        • iOS App 취약점 진단 · 모의해킹 (58)
      • 웹 취약점 진단 · 모의해킹 (3)
      • 클라우드 취약점 진단 · 모의해킹 (5)
        • AWS 취약점 진단 · 모의해킹 (0)
        • 컨테이너 보안 (5)
      • CS App 취약점 진단 · 모의해킹 (8)
      • AI 취약점진단 · 모의해킹 (8)
      • 산업 제어 시스템 진단 · 모의해킹 (0)
      • 침해 사고 대응 (15)
      • 디지털 포렌식 (2)
      • 자체개발 프로그램 (1)
        • TLS Security Checker (1)
      • IT 자격증 (26)
        • AWS 자격증 (11)
      • 프로그램 사용방법 (15)
      • 리눅스 (1)
      • 파이썬 (12)
      • 오류 해결 (2)
      • 잡학 지식 (41)
      • 코로나19 (12)
      • 학식 일상 (11)
        • 사진 (1)
        • 음악 (6)
        • 가게 정보 (3)
      • 제품 리뷰 (2)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
학식(hagsig)
Bcrypt(비크립트) Hash 정의 및 크랙 방법 정리
상단으로

티스토리툴바