GPU 기반 RAR 비밀번호 복구 최적화

본 논문은 SHA‑1 해시와 AES 암호화가 적용된 RAR 파일의 비밀번호를 GPU를 이용해 브루트포스 방식으로 복구하는 방법을 제안한다. 핵심 연산인 SHA‑1 해시를 병렬화하기 어려워 한 GPU 스레드가 하나의 후보 비밀번호를 담당하는 coarse‑grained 방식을 채택하고, CPU‑GPU 비동기 실행, 중복 연산 제거, 조건문 최소화, 레지스터 활

GPU 기반 RAR 비밀번호 복구 최적화

초록

본 논문은 SHA‑1 해시와 AES 암호화가 적용된 RAR 파일의 비밀번호를 GPU를 이용해 브루트포스 방식으로 복구하는 방법을 제안한다. 핵심 연산인 SHA‑1 해시를 병렬화하기 어려워 한 GPU 스레드가 하나의 후보 비밀번호를 담당하는 coarse‑grained 방식을 채택하고, CPU‑GPU 비동기 실행, 중복 연산 제거, 조건문 최소화, 레지스터 활용 등 세 가지 최적화를 적용하였다. 실험 결과 AMD FirePro W8000 GPU에서 기존 CPU 구현 대비 43~57배의 속도 향상을 달성하였다.

상세 요약

RAR 파일은 압축 단계에서 SHA‑1 해시를 이용해 키 스트림을 생성하고, 그 스트림을 AES‑128‑CBC 모드로 암호화한다. 비밀번호 복구는 가능한 모든 비밀번호 후보에 대해 동일한 키 스트림을 재생산하고, 압축된 데이터의 체크섬을 검증하는 과정을 반복해야 하므로 본질적으로 완전 탐색(brute‑force)이다. SHA‑1 해시는 80라운드의 복잡한 연산을 포함하고 있어 단일 스레드 내에서 높은 연산량을 요구한다. 논문은 이러한 특성을 고려해 “한 스레드당 하나의 비밀번호”라는 coarse‑grained 병렬 모델을 선택하였다. 이는 GPU의 수천 개 코어가 동시에 독립적인 후보를 처리하도록 하여 메모리 접근 패턴을 단순화하고, 스레드 간 동기화 오버헤드를 최소화한다.

첫 번째 최적화는 CPU와 GPU 간 비동기 파이프라인을 구축한 것이다. 비밀번호 후보 생성과 초기 데이터 전송은 CPU에서 수행하고, GPU는 연산이 끝난 후 결과만 반환한다. 이렇게 하면 CPU는 GPU가 연산 중일 때도 다른 작업을 수행할 수 있어 전체 처리량이 증가한다. 두 번째 최적화는 SHA‑1 라운드에서 반복적으로 사용되는 상수와 중간값을 미리 계산해 두고, 각 스레드가 이를 재사용하도록 설계한 것이다. 이를 통해 동일한 연산을 중복 수행하는 비용을 크게 줄였다. 세 번째 최적화는 조건문과 분기문을 최소화하는 것으로, 특히 라운드마다 발생하는 비트 연산과 선택 연산을 비트 마스크와 논리 연산으로 대체함으로써 GPU 워프(warp) 내에서 발생하는 분기 발산을 억제했다. 마지막으로 레지스터 사용을 최적화하여, 중간 해시 값을 전역 메모리가 아닌 레지스터 파일에 저장함으로써 메모리 대기 시간을 최소화하였다.

실험에서는 AMD FirePro W8000 GPU와 Intel Core i5‑6600K CPU를 비교하였다. 동일한 비밀번호 사전과 8‑character 알파벳·숫자 조합을 대상으로 테스트했을 때, 최적화된 GPU 구현은 평균 43배, 최악의 경우 57배의 속도 향상을 보였다. 이는 기존 연구에서 보고된 GPU 기반 RAR 복구 속도보다 2배 이상 높은 수치이며, 특히 레지스터와 조건문 최적화가 전체 성능에 가장 큰 영향을 미친 것으로 분석된다. 그러나 GPU 메모리 용량 제한과 후보 비밀번호 사전의 크기에 따라 스케일링 한계가 존재하며, 향후 다중 GPU 클러스터링이나 FPGA 기반 가속기와의 비교 연구가 필요하다.


📜 논문 원문 (영문)

🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...