
GPU आधारित ओनियन हैश जनरेटर
स्कैलियन (Scallion) OpenCL और RSA सीखने का एक शौक प्रोजेक्ट था। हम वर्तमान में scallion का रखरखाव नहीं कर रहे हैं। यह दो महत्वपूर्ण तरीकों से खराब हो गया है:
पर्याप्त ध्यान और प्रयास के साथ, ऊपर दी गई दोनों चुनौतियों को पार करना संभव होगा। हम Tor v3 समर्थन प्राप्त करने के लिए GPU ECDSA कुंजी उत्पादन एल्गोरिदम के लिए समर्थन लागू कर सकते हैं। हम OpenSSL को अपडेट कर सकते हैं और गणित फ़ंक्शन को किसी अन्य लाइब्रेरी से बदल सकते हैं, या OpenSSL लाइब्रेरी के लिए अपना स्वयं का प्रबंधित कोड रैपर बना सकते हैं। हालांकि, vanitygen-plus जैसे रखरखाव वाले प्रोजेक्ट में v3 प्याज पतों के लिए समर्थन जोड़ना बेहतर होगा।
Scallion आपको OpenCL का उपयोग करके वैनिटी GPG कुंजियाँ और .onion पते (Tor के छिपी सेवाओं के लिए) बनाने देता है।
Scallion Mono (Arch Linux में परीक्षण) और .NET 3.5+ (Windows 7 और Server 2008 पर परीक्षण) पर चलता है।
Scallion वर्तमान में बीटा चरण में है और सक्रिय विकास के अंतर्गत है। फिर भी, हमें लगता है कि यह उपयोग के लिए तैयार है। सुधार मुख्य रूप से प्रदर्शन, यूज़र इंटरफ़ेस और स्थापना में आसानी में अपेक्षित हैं, न कि कुंजियाँ उत्पन्न करने के लिए उपयोग किए जाने वाले समग्र एल्गोरिदम में।
Scallion MIT लाइसेंस के तहत उपलब्ध है। यदि आप अपने प्रोजेक्ट में इस प्रोजेक्ट के कोड का उपयोग करते हैं, तो हम [email protected] पर इसके बारे में सुनना सराहेंगे।
यहाँ कुछ अक्सर पूछे जाने वाले प्रश्न और उनके उत्तर दिए गए हैं:
GPG कुंजियाँ क्यों उत्पन्न करें?
Scallion का उपयोग वेब ऑफ़ ट्रस्ट के मजबूत सेट में हर 32बिट कुंजी आईडी के लिए टकराव खोजने के लिए किया गया था, जो दर्शाता है कि 32बिट कुंजी आईडी कितनी असुरक्षित हैं। DEFCON पर एक वार्ता (वीडियो) थी/है और अतिरिक्त जानकारी https://evil32.com/ पर पाई जा सकती है।
मान्य वर्ण क्या हैं?
Tor .onion पते Base32 का उपयोग करते हैं, जिसमें सभी अक्षर और 2 से 7 तक के अंक शामिल हैं। वे केस-असंवेदनशील हैं।
GPG फ़िंगरप्रिंट हेक्साडेसिमल का उपयोग करते हैं, जिसमें अंक 0-9 और अक्षर A-F शामिल हैं।
क्या आप Bitcoin ASICs (जैसे Jalapeno, KnC) का उपयोग इस प्रक्रिया को तेज करने के लिए कर सकते हैं?
दुर्भाग्य से, नहीं। जबकि Scallion द्वारा उपयोग की जाने वाली प्रक्रिया अवधारणात्मक रूप से समान है (एक नॉन्स बढ़ाएँ और हैश की जाँच करें), विवरण अलग हैं (SHA-1 बनाम Bitcoin के लिए डबल SHA-256)। इसके अलावा, Bitcoin ASICs उतने तेज़ हैं जितने कि वे हैं क्योंकि वे Bitcoin माइनिंग अनुप्रयोगों के लिए अत्यधिक तैयार हैं। उदाहरण के लिए, यहाँ डेटाशीट है CoinCraft A-1 के लिए, एक ASIC जो कभी सामने नहीं आया, लेकिन संभवतः सामान्य दृष्टिकोण का संकेत है। माइक्रोकंट्रोलर एक Bitcoin ब्लॉक के अंतिम 128-बिट, पिछले बिट्स के हैश मिडस्टेट, एक लक्ष्य कठिनाई और प्रयास करने के लिए अधिकतम नॉन्स के रूप में कार्य भेजता है। ASIC नॉन्स डालने के लिए स्थान चुनता है, और वह चुनता है कि कौन से ब्लॉक हैश को पूरा करते हैं। Scallion को नॉन्स को एक अलग स्थान पर डालना होता है, और यह सिर्फ "XXXX से कम" के बजाय एक पैटर्न मैच की जाँच करता है।
आप एकाधिक उपकरणों का उपयोग कैसे कर सकते हैं?
कई Scallion इंस्टेंस चलाएँ। 😄 Scallion खोजें संभाव्य हैं, इसलिए आप दूसरे डिवाइस के साथ काम नहीं दोहराएँगे। वास्तविक बहु-उपकरण समर्थन बहुत कठिन नहीं होगा, लेकिन यह बहुत कुछ नहीं जोड़ेगा। मैंने tmux या screen में कई scallion इंस्टेंस बड़ी सफलता के साथ चलाए हैं। जब कोई एक पैटर्न ढूंढता है तो आपको सभी जॉब्स को मैन्युअल रूप से रोकना होगा (या आउटपुट फ़ाइल की निगरानी करने और परिणाम दिखने पर सभी को मारने के लिए एक शेल स्क्रिप्ट लिखनी होगी)।
सिर्फ नवीनतम बाइनरी संस्करण चाहिए? इसे यहाँ प्राप्त करें।
पूर्वापेक्षाएँ
अपने Linux वितरण के लिए नवीनतम mono प्राप्त करें:
सामान्य निर्भरताएँ स्थापित करें:
sudo apt-get update
sudo apt-get install libssl-dev mono-devel
AMD/OpenSource बिल्ड
sudo apt-get install ocl-icd-opencl-dev
Nvidia बिल्ड
sudo apt-get install nvidia-opencl-dev nvidia-opencl-icd
अंत में
msbuild scallion.sln
nvidia-docker कंटेनर रनटाइम रखें
कंटेनर बनाएँ:
docker build -t scallion -f Dockerfile.nvidia .
चलाएँ:
docker run --runtime=nvidia -ti --rm scallion -l
खोज के दौरान Scallion को पुनरारंभ करने से "प्रगति" नहीं खोएगी। यह एक संभाव्य खोज है और Scallion "प्रगति" नहीं करता है
डिवाइस सूचीबद्ध करें
$ mono scallion/bin/Debug/scallion.exe -l
हैश उत्पन्न करें
$ mono scallion/bin/Debug/scallion.exe -d 0 उपसर्ग
Cooking up some delicious scallions...
Using kernel optimized from file kernel.cl (Optimized4)
Using work group size 128
Compiling kernel... done.
Testing SHA1 hash...
CPU SHA-1: d3486ae9136e7856bc42212385ea797094475802
GPU SHA-1: d3486ae9136e7856bc42212385ea797094475802
Looks good!
LoopIteration:40 HashCount:671.09MH Speed:9.5MH/s Runtime:00:01:10 Predicted:00:00:56 Found new key! Found 1 unique keys.
<XmlMatchOutput>
<GeneratedDate>2014-08-05T07:14:50.329955Z</GeneratedDate>
<Hash>prefix64kxpwmzdz.onion</Hash>
<PrivateKey>-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCmYmTnwGOCpsPOqvs5mZQbIM1TTqOHK1r6zGvpk61ZaT7z2BCE
FPvdTdkZ4tQ3/95ufjhPx7EVDjeJ/JUbT0QAW/YflzUfFJuBli0J2eUJzhhiHpC/
1d3rb6Uhnwvv3xSnfG8m7LeI/Ao3FLtyZFgGZPwsw3BZYyJn3sD1mJIJrQIEB/ZP
ZwKBgCTUQTR4zcz65zSOfo95l3YetVhfmApYcQQd8HTxgTqEsjr00XzW799ioIWt
vaKMCtJlkWLz4N1EqflOH3WnXsEkNA5AVFe1FTirijuaH7e46fuaPJWhaSq1qERT
eQT1jY2jytnsJT0VR7e2F83FKINjLeccnkkiVknsjrOPrzkXAkEA0Ky+vQdEj64e
iP4Rxc1NreB7oKor40+w7XSA0hyLA3JQjaHcseg/bqYxPZ5J4JkCNmjavGdM1v6E
OsVVaMWQ7QJBAMweWSWtLp6rVOvTcjZg+l5+D2NH+KbhHbNLBcSDIvHNmD9RzGM1
Xvt+rR0FA0wUDelcdJt0R29v2t19k2IBA8ECQFMDRoOQ+GBSoDUs7PUWdcXtM7Nt
QW350QEJ1hBJkG2SqyNJuepH4PIktjfytgcwQi9w7iFafyxcAAEYgj4HZw8CQAUI
3xXEA2yZf9/wYax6/Gm67cpKc3sgKVczFxsHhzEml6hi5u0FG7aNs7jQTRMW0aVF
P8Ecx3l7iZ6TeakqGhcCQGdhCaEb7bybAmwQ520omqfHWSte2Wyh+sWZXNy49EBg
d1mBig/w54sOBCUHjfkO9gyiANP/uBbR6k/bnmF4dMc=
-----END RSA PRIVATE KEY-----
</PrivateKey>
<PublicModulusBytes>pmJk58BjgqbDzqr7OZmUGyDNU06jhyta+sxr6ZOtWWk+89gQhBT73U3ZGeLUN//ebn44T8exFQ43ifyVG09EAFv2H5c1HxSbgZYtCdnlCc4YYh6Qv9Xd62+lIZ8L798Up3xvJuy3iPwKNxS7cmRYBmT8LMNwWWMiZ97A9ZiSCa0=</PublicModulusBytes>
<PublicExponentBytes>B/ZPZw==</PublicExponentBytes>
</XmlMatchOutput>
init: 491ms / 1 (491ms, 2.04/s)
generate key: 1193ms / 6 (198.83ms, 5.03/s)
cpu precompute: 10ms / 6 (1.67ms, 600/s)
total without init: 70640ms / 1 (70640ms, 0.01/s)
set buffers: 0ms / 40 (0ms, 0/s)
write buffers: 3ms / 40 (0.08ms, 13333.33/s)
read results: 67442ms / 40 (1686.05ms, 0.59/s)
check results: 185ms / 40 (4.63ms, 216.22/s)
9.50 million hashes per second
Stopping the GPU and shutting down...
Scallion एक आदिम regex सिंटैक्स के माध्यम से एक या अधिक पैटर्न खोजने का समर्थन करता है। केवल कैरेक्टर क्लास (जैसे [abcd]) समर्थित हैं। . कैरेक्टर किसी भी कैरेक्टर को दर्शाता है। Onion पते हमेशा 16 कैरेक्टर लंबे होते हैं और GPG फ़िंगरप्रिंट हमेशा 40 कैरेक्टर होते हैं। आप मैच के अंत में $ डालकर एक प्रत्यय पा सकते हैं (जैसे DEAD$)। अंत में, एकाधिक पैटर्न खोजने के लिए पाइप सिंटैक्स (जैसे pattern1|pattern2) का उपयोग किया जा सकता है। एकाधिक पैटर्न (उचित सीमा के भीतर) खोजने से गति में महत्वपूर्ण कमी नहीं होगी। कई regexps GPU पर एक एकल पैटर्न उत्पन्न करेंगे और गति में कोई कमी नहीं होगी।
उदाहरणों के साथ कुछ उपयोग के मामले:
बेहतर पठनीयता के लिए एक संख्या के बाद एक उपसर्ग उत्पन्न करें:
mono scallion.exe prefix[234567]
एक साथ कई पैटर्न खोजें (n.b. -c के कारण scallion हिट मिलने पर भी उत्पन्न करना जारी रखता है)
mono scallion.exe -c prefix scallion hashes
mono scallion.exe -c "prefix|scallion|hashes"
प्रत्यय "badbeef" खोजें
mono scallion.exe .........badbeef
mono scallion.exe --gpg badbeef$ # GPG कुंजी उत्पन्न करें
जटिल स्व-व्याख्यात्मक उदाहरण:
mono scallion.exe "suffixa$|suffixb$|prefixa|prefixb|a.suffix$|a.test.$"
उच्च स्तर पर Scallion इस प्रकार काम करता है:
मूल एल्गोरिद्म ऊपर वर्णित है। गति/प्रदर्शन बड़े पैमाने पर समानांतरीकरण का परिणाम है, दोनों GPU और CPU पर।
यह महसूस करना महत्वपूर्ण है कि Scallion एक संभाव्य खोज करता है। वास्तविक समय पूर्वानुमानित से काफी भिन्न हो सकते हैं
प्रारंभिक RSA कुंजी उत्पादन CPU पर किया जाता है। एक ivybridge i7 एक एकल कोर का उपयोग करके प्रति सेकंड 51 कुंजियाँ उत्पन्न कर सकता है। प्रत्येक कुंजी खनन के लिए 1 गीगाहैश के घातांक प्रदान कर सकती है और एक सभ्य CPU वर्तमान कार्यान्वयन के अनुसार कई GPUs के साथ तालमेल बनाए रख सकता है।
SHA1 हैशिंग GPU पर की जाती है। कई GPUs के लिए हैशरेट जिनका हमने परीक्षण किया है, नीचे दिए गए हैं (निर्माता द्वारा समूहित और शक्ति के अनुसार क्रमबद्ध):
MH/s = प्रति सेकंड मिलियन हैश
यह ध्यान देने योग्य है कि Intel ने अपने प्रोसेसर के लिए OpenCL ड्राइवर जारी किए हैं और CPU पर छोटी टक्करें पाई जा सकती हैं।
किसी दिए गए आंशिक टक्कर के लिए आवश्यक सेकंड की संख्या की गणना करने के लिए (औसतन), सूत्र का उपयोग करें:
| Type | Estimated time |
|---|---|
| GPG Key | 2^(4*length-1) / hashspeed |
| .onion Address | 2^(5*length-1) / hashspeed |
उदाहरण के लिए मेरे nVidia Quadro K2000M पर, मैं लगभग 90 MH/s देखता हूँ। उस गति से मैं लगभग 1h 41m में आठ कैरेक्टर का .onion उपसर्ग उत्पन्न कर सकता हूँ, 2^(5*8-1)/90 मिलियन = 101 मिनट।
Scallion डिफ़ॉल्ट रूप से आपके डिवाइस के रिपोर्ट किए गए पसंदीदा कार्यसमूह आकार का उपयोग करेगा। यह एक उचित डिफ़ॉल्ट है लेकिन कार्यसमूह के साथ प्रयोग करने से प्रदर्शन बढ़ सकता है।
Scallion द्वारा उत्पन्न कुंजियाँ shallot द्वारा उत्पन्न कुंजियों के समान हैं। उनके पास असामान्य रूप से बड़े सार्वजनिक घातांक होते हैं, लेकिन उन्हें openssl के RSA_check_key फ़ंक्शन के माध्यम से PKCS #1 v2.1 द्वारा अनुशंसित सत्यता जाँच के पूर्ण सेट से गुजरना पड़ता है। Scallion कई RSA कुंजी आकारों का समर्थन करता है, जिसमें 1024b, 2048b और 4096b के लिए अनुकूलित कर्नेल शामिल हैं। अन्य कुंजी आकार काम कर सकते हैं, लेकिन परीक्षण नहीं किया गया है।
बिटकॉइन पते पर दान निर्देशित करने के लिए स्वतंत्र महसूस करें: 1FxQcu6vhpwsqcTjPsjK43CZ9vjnuk4Hmo
| GPU | Speed |
|---|
| Intel i7-2620M | 9.9 MH/s |
| Intel i5-5200U | 118 MH/s |
| NVIDIA GT 520 | 38.7 MH/s |
| NVIDIA Quadro K2000M | 90 MH/s |
| NVIDIA GTS 250 | 128 MH/s |
| NVIDIA GTS 450 | 144 MH/s |
| NVIDIA GTX 670 | 480 MH/s |
| NVIDIA GTX 970 | 2350 MH/s |
| NVIDIA GTX 980 | 3260 MH/s |
| NVIDIA GTX 1050 (M) | 1400 MH/s |
| NVIDIA GTX 1070 | 4140 MH/s |
| NVIDIA GTX 1070 TI | 5100 MH/s |
| NVIDIA GTX TITAN X | 4412 MH/s |
| NVIDIA GTX 1080 | 5760 MH/s |
| NVIDIA Tesla V100 | 11646 MH/s |
| AMD A8-7600 APU | 120 MH/s |
| AMD Radeon HD5770 | 520 MH/s |
| AMD Radeon HD6850 | 600 MH/s |
| AMD Radeon RX 460 | 840 MH/s |
| AMD Radeon RX 470 | 957 MH/s |
| AMD Radeon R9 380X | 2058 MH/s |
| AMD FirePro W9100 | 2566 MH/s |
| AMD Radeon RX 480 | 2700 MH/s |
| AMD Radeon RX 580 | 3180 MH/s |
| AMD Radeon R9 Nano | 3325 MH/s |
| AMD Vega Frontier Edition | 7119 MH/s |