[펌] pyCUDA 코딩을 퍼플렉시티 딥리서치 기능으로 구현
출처 : https://blog.naver.com/ulsancoding/223765450682
pyCUDA를 적용한 암호해제 파이썬 코드가 블로그 하단에 제공됩니다.
pyCUDA로 암호화 해제 파이썬 코드 제작하기
GPU를 사용하면 Brutal-Force 암호 해독 속도를 얼마나 향상시킬 수 있을까?
GPU를 사용하여 암호 해독 속도를 향상시키는 정도는 작업의 병렬화 가능성과 보유한 GPU의 성능에 따라 다르지만, 일반적으로 CPU만 사용해서 해석하는 경우보다 5배~ 10배 이상의 성능 향상이 가능하다.
칼리 리눅스에 탑재된 John the Ripper로는 GPU 병렬처리가 지원이 안되지만, Hashcat은 AMD, nVidia, Intel 등의 GPU 지원 병렬 처리가 가능한 소프트웨어다.
GPU Driver requirements:
AMD GPUs on Linux require "AMDGPU" (21.50 or later) and
"ROCm" (5.0 or later)
AMD의 ROCm은 리눅스 OS만 지원되고, 윈도 OS를 지원하지않아서, ZLUDA등 다른 대안들을 사용해야한다.
AMD GPUs on Windows require "AMD Adrenalin Edition" (Adrenalin 22.5.1 exactly)
Intel CPUs require "OpenCL Runtime for Intel Core and Intel Xeon Processors" (16.1.1 or later)
NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or later)
GPU 기반 암호화 성능
GPU를 활용하는 SW 암호 모듈은 CPU 기반 모듈보다 최소 550%에서 최대 1090%까지 연산 성능이 더 향상된 것으로 보고되었다.
pyCUDA 코딩을 퍼플렉시티 딥리서치 기능으로 구현
pyCUDA를 적용한 암호해제 파이썬 코드가 블로그 하단에 제공됩니다. pyCUDA로 암호화 해제 파이썬...
blog.naver.com
이를테면 5자리 digits 숫자 암호라면 11111부터 99999까지 89999 건의 경우의 수를 GPU 메모리에 전부 펼쳐버리는 방식의 다중 병렬 연산 능력 덕분으로, 대량의 데이터를 CPU보다 더 효율적으로 처리할 수 있다.
5자리 숫자 암호로 설정한 encrypted(99840).ZIP 파일을 대상으로 파이썬 해제 코드를 작성하면, 필자 집의 구형 PC에서 약 18분이 걸리던 파이썬 코드도 nVidia A100 GPU가 장착된 수퍼컴에선 단 4.8초만에 풀게 할수도 있었다. 굳이CUDA를 사용하지않아도 좋은 수치가 나올수 있지만, 암호가 6자리나 8자리로 늘어나면 기하급수적으로 연산량이 늘어난다. 1대의 머신에 8개의 RTX 4090 GPU를 설치했다면 8자리 암호정도는 약 48분 만에 2천억개의 조합을 해독할 수 있다는 연구 결과가 있다.
Microsoft 운영체제엔 두가지 SAM 패스워드 인증및 저장 방식이 있다. 구형인 LM과 비교적 신형인 NT라는 인증이다. 칼리리눅스에 탑재된 John the Ripper는 윈도 2000 서버처럼 구형 방식의 SAM 패스워드 암호도 옵션만 적절하게 주면 풀어낼수 있다.
$john --format=LM win2000_pwd.txt
구형 보안 소프트웨어중에 <카인과 아벨>이 이러한 NTLM 방식으로 저장된 윈도OS 암호를 Brutal-Force 방식으로 강제 해제하는 툴로 유명했다. 윈도7 등 비교적 최신 SAM 패스워드 암호화는 --format=NT 라고 교체하면 가능하다.
$john --format=NT win7_pwd.txt
RTX 4090이면 NTLM 인증 프로토콜과 Bcrypt 암호라도 RTX 3090 GPU보다 약 두 배 빠른 것으로 나타났다.
만약 집에 빵빵한 엔비디아, AMD 그래픽카드등을 두 개 이상 보유한 게이머라면 누구나 며칠 만에 평균적인 암호 정도는 가뿐하게 해독할 수 있다.

오픈소스로 소스코드 자체가 공개되어있는 해시캣의 특징 및 장점이다.
World's fastest password cracker
World's first and only in-kernel rule engine
Multi-OS (Linux, Windows and macOS)
Multi-Platform (CPU, GPU, APU, OpenCL runtime, etc)
Multi-Hash (Cracking multiple hashes at the same time)
Multi-Devices (Utilizing multiple devices in same system)
Multi-Device-Types (Utilizing mixed device types in same system)
Supports password candidate brain functionality
Supports distributed cracking networks (using overlay)
Supports interactive pause / resume
Supports sessions
Supports restore
Supports reading password candidates from file and stdin
Supports hex-salt and hex-charset
350+ Hash-types implemented with performance in mind
Supports automatic performance tuning
Supports automatic keyspace ordering markov-chains
Integrated thermal watchdog
HashCat V.6.2.6은 시스템 관리자와 모의침투연구자들이 가장 좋아하는 유명한 암호 크래킹 도구다. 모의침투 테스터는 nVidia A100 수퍼컴등이 추가로 준비되어있다면 몇 가지 간단한 파이썬 코드를 작성하거나 다른데서 작성된 코드를 복사해 넣고, 특정 사용자 암호를 강제 크랙할 수 있다.

모의해킹업체가 국내 모 회사와의 모의해킹 사례에서 우연찮게 웹서버에서 얻어걸린 3DES 방식의 .ASP에 적용된 암호화 해시를 해제시켜야할 일이 생겼다. 이걸 해제시키면 성공 보수가 3천만원이 더 나오는데, 해시캣으로는 잘 풀리지 않았고, 고객사에 파견을 나온상태라 적당한 GPU도 없는 상태였기에 AWS의 GPU를 임대해서 재시도했다고한다.
법인카드로 결제한 회사비용으로 3DES 암호화 해시를 순식간에 뚫을수 있었다. 해커들도 당연히 이런 점을 매우 잘 알고 있어 고성능 그래픽 카드를 암호 해제의 무기로 사용하는 데 익숙하다.
딕셔너리 기반 Brutal-Force 공격, 마스크 공격, Rule-based 공격, SALT를 가미한 드롭박스 유출본 파일에 대한 HashCat과 GPU의 마리아쥬는 환상적인 조합이다.
Havebeenipawned.com과 같은 유출정보 사이트에서 제공하는 어도비에서 유출된 비밀번호는 인터넷에서 이미 마구 떠돌아다니는 중이다.
전 직장의 이메일주소를 넣어보면 어도비 포토샵 구독 정품 등록에 사용했던 회사 이메일은 일찌감치 전부 털린 상태이고, 몇천만 개가 유출된건지 사실 짐작도 가지않는다. 그냥 암호를 바꾸는 수 밖에 없다.
보통 웹사이트 가입시 8자리 이상 입력하라는 제약 때문인지 유출된 비밀번호 중 보통 8자리 비밀번호가 가장 흔하다. 그런데, RTX 4090이 여러 대 있다면 대충 어림잡아 48분만에 암호를 손에 넣을 수 있다.
레인보우 테이블이 담긴 웨스턴디지털 하드드라이브를 구매해서 대입해보는 시도도 있겠지만, 웹사이트 암호가 최소 8자 이상이고 필수 규칙인 최소한 하나의 숫자와 특수 문자 포함을 따른다고 가정해도
HashCat은 가장 일반적으로 사용되는 비밀번호 세트로 시험하도록 구동시키면 48분안에 2,000억 개의 가능한 모든 조합을 GPU를 최대한 활용해서 시도해 볼 수 있다.
GPU 8장이라는 규모의 경제만 따르면 크래킹 비용이 줄어들고 있는데다 양자 컴퓨팅으로 소인수분해에 의한 암호들은 전부 크래킹이 가능해질 전망이다. 양자컴으로도 아직 AES방식의 암호자체는 전혀 공략이 되지않는다. 큐비트가 더 증가하기전에 하루라도 빨리 양자내성암호로 교체를 해야 어느 정도 버틸 수 있을것이다.
멀티코어 구조의 패러럴 처리 효율
GPU는 멀티코어 구조로 인해 CPU보다 병렬 처리가 효율적이다.
특히, CUDA를 이용한 구현은 암호화 및 해독 작업에서 CPU 대비 큰 속도 향상을 얻을 수 있다.
GPU 메모리 복사와 같은 병목 현상을 최소화하는 것이 중요하다. 작업량을 적절히 분배하고 최적화된 알고리즘을 사용하는 것이 필수적이다.
CUDA커널 코드
GPU를 활용하면 암호 해독 속도가 CPU 대비 크게 향상되며, 특히 패스워드 크래킹처럼 병렬 연산에 최적화된 작업에 알맞다.
주요 코드 몇개만 보자.
# CUDA 커널 코드
cuda_code = """
__global__ void try_passwords(const int* passwords, int* result, int num_passwords) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < num_passwords) {
// 여기서 실제 암호 확인 로직을 구현한다.
// ZIP 파일 암호 확인은 CPU에서 수행해야 하므로,
// 여기서는 단순히 결과를 표시만 한다.
result[idx] = passwords[idx];
}
}
"""
다음은 GPU 메모리를 할당하고 데이터를 GPU로 복사하는 코드 조각이다.
# GPU 메모리 할당하는 코드
passwords_gpu = cuda.mem_alloc(passwords.nbytes)
result_gpu = cuda.mem_alloc(passwords.nbytes)
# 데이터를 GPU로 복사
cuda.memcpy_htod(passwords_gpu, passwords)
거꾸로 GPU메모리의 값을 CPU로 데이터 복사하는 코드다.
# CPU로 데이터 복사
passwords = passwords_gpu.get()
파이썬 파일 다운로드