Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
kangaroo — GPU 가속 Pollard's Kangaroo 알고리즘을 사용하여 secp256k1에서 타원 곡선 이산 로그 문제(ECDLP)를 해결하며, Vulkan, Metal 및 DX12 백엔드를 지원합니다. | Kitploit
도구/GitHubGitHub/oritwoen/kangaroo
Encryption/Decryption ToolsVulnerability AnalysisCryptographyBinary AnalysisPapers & ResearchLearning & Education
GitHuboritwoen/kangaroo

kangaroo

GPU 가속 Pollard's Kangaroo 알고리즘을 사용하여 secp256k1에서 타원 곡선 이산 로그 문제(ECDLP)를 해결하며, Vulkan, Metal 및 DX12 백엔드를 지원합니다.

저장소 보기
25174개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

캥거루

Crates.io Downloads License Ask DeepWiki

secp256k1에서 타원 곡선 이산 로그 문제(ECDLP)를 해결하기 위한 GPU 가속 Pollard의 캥거루 알고리즘.

특징

  • 🖥️ 크로스 플랫폼 GPU — wgpu를 통한 Vulkan (AMD, NVIDIA, Intel), Metal (Apple Silicon), DX12 (Windows)
  • 🦀 순수 Rust + WGSL — CUDA 의존성 없음, 런타임에 컴퓨트 셰이더 컴파일
  • ⚡ 구별점(Distinguished Points) — 자동 튜닝 DP 비트를 통한 효율적인 충돌 감지
  • 🔄 부정 맵(Negation map) — 사이클 가드가 있는 Y-패리티 방향 이동으로 약 1.29배 속도 향상
  • 🦘 다중 세트 캥거루 — 높은 충돌 확률을 위한 길들임(tame), 야생1(wild1), 야생2(wild2) 무리
  • 🎯 모듈러 제약 조건 — k ≡ R (mod M)인 경우 탐색 공간을 M만큼 축소
  • ⚙️ 자동 보정 — 시작 시 GPU 디스패치 타이밍 및 작업 그룹 크기 조정
  • 📊 내장 벤치마크 — --benchmark로 하드웨어 테스트, --save-benchmarks로 결과 기록
  • 📦 데이터 제공자 — 플러그 가능한 퍼즐 소스 (비트코인 퍼즐용 boha 통합)
  • 💻 CPU 폴백 — 테스트 및 비교를 위한 순수 CPU 솔버

이 프로젝트의 이유

기존의 대부분 캥거루 구현(JeanLucPons/Kangaroo, RCKangaroo 등)은 CUDA를 통해서만 NVIDIA GPU를 지원합니다. 이 구현은 WebGPU/wgpu를 사용하여 Vulkan, Metal, DX12를 통한 크로스 플랫폼 GPU 컴퓨트를 제공합니다.

설치

Arch Linux (AUR)

root@kitploit:~
paru -S kangaroo

Cargo

root@kitploit:~
cargo install kangaroo

소스에서 빌드

root@kitploit:~
git clone https://github.com/oritwoen/kangaroo
cd kangaroo
cargo build --release

boha 제공자 사용

root@kitploit:~
cargo build --release --features boha

사용법

root@kitploit:~
kangaroo --pubkey <PUBKEY> --start <START> --range <BITS>

인자

--target 또는 --pubkey 중 하나가 필수입니다.

예제

데이터 제공자(boha) 사용:

root@kitploit:~
# boha 데이터를 사용하여 퍼즐 해결 (자동: pubkey, start, range)
kangaroo --target boha:b1000/66

# 범위 재정의 (더 작은 부분 검색)
kangaroo --target boha:b1000/66 --range 60

# 사용 가능한 퍼즐 나열
kangaroo --list-providers

수동 매개변수:

root@kitploit:~
kangaroo \
    --pubkey 03a2efa402fd5268400c77c20e574ba86409ededee7c4020e4b9f0edbee53de0d4 \
    --start 8000000000 \
    --range 40

모듈러 제약 조건 포함 (k ≡ 37 mod 60):

root@kitploit:~
kangaroo \
    --pubkey 03a2efa402fd5268400c77c20e574ba86409ededee7c4020e4b9f0edbee53de0d4 \
    --start 8000000000 \
    --range 40 \
    --mod-step 3c \
    --mod-start 25

이렇게 하면 탐색 공간이 약 60배 줄어듭니다. 부분 키 구조가 알려져 있을 때 유용합니다 (예: 예측 가능한 단계 패턴으로 생성된 키).

작동 방식

Pollard의 캥거루 알고리즘은 O(√n) 시간 내에 이산 로그 문제를 해결합니다. 여기서 n은 검색 범위입니다. 작동 방식:

  1. **길들인 캥거루(Tame)**는 알려진 지점에서 시작하여 무작위 점프를 수행합니다.
  2. **야생 캥거루(Wild)**는 대상 공개 키에서 시작하여 동일한 유형의 점프를 수행합니다.
  3. 야생과 길들인 캥거루가 동일한 지점에 도달하면(충돌), 개인 키를 계산할 수 있습니다.

구별점(Distinguished Points, DP) 최적화: 모든 방문 지점을 저장하는 대신, x-좌표가 특정 개수의 선행 제로 비트를 가진 지점만 저장합니다. 이렇게 하면 메모리 사용량이 크게 줄어들면서도 충돌 감지가 가능합니다.

성능

예상 연산: ~2^(range_bits/2)

파일에 접근하지 않고 하드웨어를 테스트하려면 kangaroo --benchmark를 실행하세요. kangaroo --benchmark --save-benchmarks를 사용하여 BENCHMARKS.md를 업데이트할 수 있습니다.

사용 사례

사용 사례예시
부분 키가 디코딩됨퍼즐이 약 240비트를 제공하고, 나머지 약 16비트를 찾아야 함
키가 알려진 범위 내에 있음키가 X와 Y 사이라는 것을 알고 있음
근접 해 검증후보가 있고, 그 주변 ±N 비트를 검색

유용하지 않은 경우:

  • 전체 256비트 키 검색 (수학적으로 불가능)
  • BIP39 암호문구 무차별 대입 (대신 사전 공격 사용)
  • 부분 키 정보가 없는 퍼즐

라이브러리 사용법

root@kitploit:~
use kangaroo::{KangarooSolver, GpuContext, GpuBackend, parse_pubkey, parse_hex_u256, verify_key};

fn main() -> anyhow::Result<()> {
    let pubkey = parse_pubkey("03...")?;
    let start = parse_hex_u256("8000000000")?;

    let ctx = pollster::block_on(GpuContext::new(0, GpuBackend::Auto))?;
    let mut solver = KangarooSolver::new(
        ctx,
        pubkey.clone(),
        start,
        40,  // range_bits
        12,  // dp_bits
        1024, // num_kangaroos
    )?;

    loop {
        if let Some(key) = solver.step()? {
            if verify_key(&key, &pubkey) {
                println!("찾음: {}", hex::encode(&key));
                break;
            }
        }
    }

    Ok(())
}

데이터 제공자

Kangaroo는 퍼즐 소스를 위한 외부 데이터 제공자를 지원합니다. 제공자는 공개 키, 키 범위 및 기타 퍼즐 메타데이터를 제공합니다.

boha (선택적 기능)

boha는 비트코인 퍼즐 트랜잭션(b1000)을 포함한 암호화 퍼즐 데이터를 제공합니다.

boha 지원으로 빌드:

root@kitploit:~
cargo build --release --features boha

사용법:

root@kitploit:~
# 특정 퍼즐 해결
kangaroo --target boha:b1000/66

# 해결 가능한 퍼즐 나열 (미해결이며 공개 키가 알려진 것)
kangaroo --list-providers

제공자는 범위 재정의를 검증합니다. 퍼즐의 키 범위를 벗어나서 검색할 수 없습니다.

아키텍처

root@kitploit:~
src/
├── main.rs              # CLI 진입점
├── lib.rs               # 라이브러리 진입점 + Args + run()
├── solver.rs            # GPU 솔버 조정
├── cli.rs               # CLI 유틸리티 (tracing, 진행률 표시줄)
├── benchmark.rs         # 내장 벤치마크 스위트
├── modular.rs           # 모듈러 제약 조건 변환
├── math.rs              # 256비트 연산, DP 마스크 생성
├── convert.rs           # GPU↔CPU용 Limb/바이트 변환
├── provider/
│   ├── mod.rs           # 제공자 시스템 인터페이스
│   └── boha.rs          # boha 제공자 (기능 게이트)
├── cpu/
│   ├── cpu_solver.rs    # 순수 CPU 솔버 (테스트/비교용)
│   ├── dp_table.rs      # 구별점 충돌 감지
│   └── init.rs          # 캥거루 초기화 + 점프 테이블
├── crypto/
│   └── mod.rs           # k256/secp256k1 래퍼
├── gpu/
│   ├── pipeline.rs      # 컴퓨트 파이프라인 설정
│   └── buffers.rs       # GPU 버퍼 관리
├── gpu_crypto/
│   ├── context.rs       # GPU 컨텍스트 + 백엔드 선택
│   └── shaders/         # WGSL 셰이더 라이브러리
│       ├── field.wgsl   # secp256k1 필드 연산
│       └── curve.wgsl   # 자코비안 점 연산
└── shaders/
    └── kangaroo_affine.wgsl  # 메인 캥거루 컴퓨트 셰이더

요구 사항

  • Rust 1.70+
  • Vulkan 지원 GPU (AMD, NVIDIA, Intel) 또는 Metal (macOS)
  • Linux AMD RADV 사용 시 Mesa 25.x 이상 필요 (이전 Mesa 버전은 셰이더 루프에서 WGSL 동적 인덱싱 충돌 가능)
  • GPU 드라이버 설치

라이선스

MIT 라이선스 - 자세한 내용은 LICENSE를 참조하세요.

관련 프로젝트

  • JeanLucPons/Kangaroo - CUDA 구현 (NVIDIA 전용)
  • RCKangaroo - CUDA 구현 (NVIDIA 전용)
  • boha - 암호화 퍼즐 및 현상금 데이터 라이브러리
도구 다운로드
인자기본값설명
-t, --target-데이터 제공자 대상 (예: boha:b1000/135)
-p, --pubkey-대상 공개 키 (압축 16진수, 33바이트)
-s, --start0검색 범위 시작 (16진수, 0x 접두사 없음)
-r, --range32검색 범위 비트 (키는 [start, start + 2^range - 1] 사이)
-d, --dp-bitsauto구별점 비트 수
-k, --kangaroosauto병렬 캥거루 수
--gpu0GPU 장치 인덱스
--backendautoGPU 백엔드: auto, vulkan, dx12, metal, gl
-o, --output-결과를 저장할 파일
-q, --quietfalse최소 출력, 찾은 키만 출력
--max-ops0최대 연산 수 (0 = 무제한)
--cpufalseGPU 대신 CPU 솔버 사용
--jsonfalse벤치마크 결과를 JSON 형식으로 출력
--benchmarkfalse벤치마크 스위트 실행
--save-benchmarksfalse--benchmark 사용 시 벤치마크 결과를 BENCHMARKS.md에 저장
--mod-step1모듈러 단계 M (16진수): k ≡ R (mod M)만 검색
--mod-start0모듈러 나머지 R (16진수): 0 ≤ R < M
--list-providersfalse제공자의 사용 가능한 퍼즐 나열