
GPU-त्वरित Pollard's Kangaroo एल्गोरिथम, जो secp256k1 पर Elliptic Curve Discrete Logarithm Problem (ECDLP) को हल करने के लिए है, और Vulkan, Metal, तथा DX12 बैकएंड का समर्थन करता है।
secp256k1 पर एलिप्टिक कर्व डिस्क्रीट लघुगणक समस्या (ECDLP) को हल करने के लिए GPU-त्वरित पोलार्ड का कंगारू एल्गोरिदम।
--benchmark, परिणाम रिकॉर्ड करने के लिए --save-benchmarksअधिकांश मौजूदा कंगारू कार्यान्वयन (JeanLucPons/Kangaroo, RCKangaroo, आदि) केवल CUDA के माध्यम से NVIDIA GPU का समर्थन करते हैं। यह कार्यान्वयन WebGPU/wgpu का उपयोग करता है जो Vulkan, Metal और DX12 के माध्यम से क्रॉस-प्लेटफ़ॉर्म GPU कम्प्यूट प्रदान करता है।
paru -S kangaroo
cargo install kangaroo
git clone https://github.com/oritwoen/kangaroo
cd kangaroo
cargo build --release
cargo build --release --features boha
kangaroo --pubkey <PUBKEY> --start <START> --range <BITS>
या तो --target या --pubkey आवश्यक है।
डेटा प्रदाता (boha) का उपयोग करना:
# Solve puzzle using boha data (auto: pubkey, start, range)
kangaroo --target boha:b1000/66
# Override range (search smaller subset)
kangaroo --target boha:b1000/66 --range 60
# List available puzzles
kangaroo --list-providers
मैन्युअल पैरामीटर:
kangaroo \
--pubkey 03a2efa402fd5268400c77c20e574ba86409ededee7c4020e4b9f0edbee53de0d4 \
--start 8000000000 \
--range 40
मॉड्यूलर बाधा के साथ (k ≡ 37 mod 60):
kangaroo \
--pubkey 03a2efa402fd5268400c77c20e574ba86409ededee7c4020e4b9f0edbee53de0d4 \
--start 8000000000 \
--range 40 \
--mod-step 3c \
--mod-start 25
यह खोज स्थान को ~60× तक कम करता है। तब उपयोगी जब आंशिक कुंजी संरचना ज्ञात हो (जैसे, पूर्वानुमानित चरण पैटर्न के साथ उत्पन्न कुंजी)।
पोलार्ड का कंगारू एल्गोरिदम O(√n) समय में असतत लघुगणक समस्या को हल करता है जहाँ n खोज सीमा है। यह इस प्रकार काम करता है:
विशिष्ट बिंदु (DP) अनुकूलन: सभी देखे गए बिंदुओं को संग्रहीत करने के बजाय, हम केवल उन बिंदुओं को संग्रहीत करते हैं जिनके x-निर्देशांक में अग्रणी शून्य बिट्स की एक विशिष्ट संख्या होती है। यह मेमोरी उपयोग को नाटकीय रूप से कम करता है जबकि टक्कर का पता लगाने की अनुमति देता है।
अपेक्षित संक्रियाएँ: ~2^(range_bits/2)
फ़ाइलों को छुए बिना अपने हार्डवेयर का परीक्षण करने के लिए kangaroo --benchmark चलाएँ। BENCHMARKS.md को अपडेट करने के लिए kangaroo --benchmark --save-benchmarks का उपयोग करें।
| उपयोग का मामला | उदाहरण |
|---|---|
| आंशिक कुंजी डिकोड | पहेली ~240 बिट्स देती है, शेष ~16 खोजने की आवश्यकता |
| ज्ञात सीमा में कुंजी | पता है कुंजी X और Y के बीच है |
| निकट-समाधान सत्यापित करें | उम्मीदवार है, उसके चारों ओर ±N बिट्स खोजें |
इसके लिए उपयोगी नहीं:
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!("Found: {}", hex::encode(&key));
break;
}
}
}
Ok(())
}
कंगारू पहेली स्रोतों के लिए बाहरी डेटा प्रदाताओं का समर्थन करता है। प्रदाता पबकी, कुंजी सीमा और अन्य पहेली मेटाडेटा प्रदान करते हैं।
boha बिटकॉइन पहेली लेनदेन (b1000) सहित क्रिप्टो पहेली डेटा प्रदान करता है।
boha समर्थन के साथ बनाएँ:
cargo build --release --features boha
उपयोग:
# Solve specific puzzle
kangaroo --target boha:b1000/66
# List solvable puzzles (unsolved with known pubkey)
kangaroo --list-providers
प्रदाता सीमा ओवरराइड को मान्य करता है - आप पहेली की कुंजी सीमा के बाहर खोज नहीं कर सकते।
src/
├── main.rs # CLI प्रवेश बिंदु
├── lib.rs # लाइब्रेरी प्रवेश + Args + run()
├── solver.rs # GPU सॉल्वर समन्वय
├── cli.rs # CLI उपयोगिताएँ (ट्रेसिंग, प्रोग्रेस बार)
├── benchmark.rs # अंतर्निहित बेंचमार्क सूट
├── modular.rs # मॉड्यूलर बाधा रूपांतरण
├── math.rs # 256-बिट अंकगणित, DP मास्क जनरेशन
├── convert.rs # GPU↔CPU के लिए लिंब/बाइट रूपांतरण
├── 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 # मुख्य कंगारू कम्प्यूट शेडर
MIT लाइसेंस - विवरण के लिए LICENSE देखें।
| तर्क | डिफ़ॉल्ट | विवरण |
|---|
-t, --target | - | डेटा प्रदाता लक्ष्य (जैसे, boha:b1000/135) |
-p, --pubkey | - | लक्ष्य सार्वजनिक कुंजी (संपीड़ित हेक्स, 33 बाइट्स) |
-s, --start | 0 | खोज सीमा की शुरुआत (हेक्स, 0x उपसर्ग के बिना) |
-r, --range | 32 | बिट्स में खोज सीमा (कुंजी [start, start + 2^range - 1] में है) |
-d, --dp-bits | auto | विशिष्ट बिंदु बिट्स |
-k, --kangaroos | auto | समानांतर कंगारुओं की संख्या |
--gpu | 0 | GPU डिवाइस इंडेक्स |
--backend | auto | GPU बैकएंड: auto, vulkan, dx12, metal, gl |
-o, --output | - | परिणाम के लिए आउटपुट फ़ाइल |
-q, --quiet | false | न्यूनतम आउटपुट, केवल मिली कुंजी प्रिंट करें |
--max-ops | 0 | अधिकतम संक्रियाएँ (0 = असीमित) |
--cpu | false | GPU के बजाय CPU सॉल्वर का उपयोग करें |
--json | false | JSON प्रारूप में बेंचमार्क परिणाम आउटपुट करें |
--benchmark | false | बेंचमार्क सूट चलाएँ |
--save-benchmarks | false | जब --benchmark का उपयोग किया जाता है तो बेंचमार्क परिणाम BENCHMARKS.md में सहेजें |
--mod-step | 1 | मॉड्यूलर स्टेप M (हेक्स): केवल k ≡ R (mod M) खोजें |
--mod-start | 0 | मॉड्यूलर शेष R (हेक्स): 0 ≤ R < M |
--list-providers | false | प्रदाताओं से उपलब्ध पहेलियाँ सूचीबद्ध करें |