
Biham और Kocher के ज्ञात प्लेनटेक्स्ट हमले के साथ पुराने ज़िप एन्क्रिप्शन को क्रैक करें।
Biham और Kocher के ज्ञात प्लेनटेक्स्ट हमले के साथ लीगेसी ज़िप एन्क्रिप्शन को क्रैक करें।
एक ZIP संग्रह में कई प्रविष्टियाँ हो सकती हैं जिनकी सामग्री को संपीड़ित और/या एन्क्रिप्ट किया जा सकता है। विशेष रूप से, प्रविष्टियों को पासवर्ड-आधारित सममित एन्क्रिप्शन एल्गोरिदम से एन्क्रिप्ट किया जा सकता है, जिसे पारंपरिक PKWARE एन्क्रिप्शन, लीगेसी एन्क्रिप्शन या ZipCrypto कहा जाता है। यह एल्गोरिदम बाइट्स की एक छद्म-यादृच्छिक धारा (keystream) उत्पन्न करता है जिसे प्रविष्टि की सामग्री (plaintext) के साथ XOR किया जाता है ताकि एन्क्रिप्टेड डेटा (ciphertext) उत्पन्न हो। जनरेटर की अवस्था, जो तीन 32-बिट पूर्णांकों से बनी है, पासवर्ड का उपयोग करके आरंभ की जाती है और फिर एन्क्रिप्शन जारी रहने पर प्लेनटेक्स्ट के साथ लगातार अद्यतन की जाती है। यह एन्क्रिप्शन एल्गोरिदम Eli Biham और Paul C. Kocher द्वारा शोध पत्र PKZIP स्ट्रीम सिफर पर एक ज्ञात प्लेनटेक्स्ट हमला में दिखाए अनुसार ज्ञात प्लेनटेक्स्ट हमलों के लिए संवेदनशील है। सिफरटेक्स्ट और संबंधित प्लेनटेक्स्ट के 12 या अधिक बाइट्स दिए जाने पर, कीस्ट्रीम जनरेटर की आंतरिक स्थिति को पुनर्प्राप्त किया जा सकता है। यह आंतरिक स्थिति पूरी तरह से सिफरटेक्स्ट को डिसिफर करने के साथ-साथ उन अन्य प्रविष्टियों को भी डिसिफर करने के लिए पर्याप्त है जो समान पासवर्ड से एन्क्रिप्ट की गई थीं। इसका उपयोग पासवर्ड को nl-6 की जटिलता के साथ ब्रूटफोर्स करने के लिए भी किया जा सकता है, जहाँ n वर्ण सेट का आकार है और l पासवर्ड की लंबाई है।
bkcrack एक कमांड-लाइन टूल है जो इस ज्ञात प्लेनटेक्स्ट हमले को लागू करता है। मुख्य विशेषताएं हैं:
आप नवीनतम आधिकारिक रिलीज़ GitHub पर प्राप्त कर सकते हैं।
Ubuntu, MacOS और Windows के लिए पूर्व-संकलित पैकेज डाउनलोड के लिए उपलब्ध हैं। डाउनलोड किए गए संग्रह को अपनी पसंद के स्थान पर निकालें।
Windows पर, bkcrack चलाने के लिए Microsoft रनटाइम लाइब्रेरीज़ आवश्यक हैं। यदि वे आपके सिस्टम पर पहले से स्थापित नहीं हैं, तो नवीनतम Microsoft Visual C++ Redistributable पैकेज डाउनलोड और इंस्टॉल करें।
वैकल्पिक रूप से, आप CMake के साथ परियोजना को संकलित कर सकते हैं।
पहले, स्रोत फ़ाइलें डाउनलोड करें या git रिपॉजिटरी को क्लोन करें।
फिर, स्रोत ट्री में निम्नलिखित कमांड चलाने से install फ़ोल्डर में एक इंस्टॉलेशन बनेगा।
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install
cmake --build build --config Release
cmake --build build --config Release --target install
bkcrack नीचे सूचीबद्ध पैकेज रिपॉजिटरी में उपलब्ध है। ये पैकेज बाहरी अनुरक्षकों द्वारा प्रदान किए जाते हैं।
आप archive.zip नामक संग्रह में प्रविष्टि नामों और मेटाडेटा की सूची इस प्रकार देख सकते हैं:
bkcrack -L archive.zip
ZipCrypto एन्क्रिप्शन का उपयोग करने वाली प्रविष्टियाँ एक ज्ञात-प्लेनटेक्स्ट हमले के लिए संवेदनशील हैं।
हमले के लिए कम से कम 12 बाइट्स ज्ञात प्लेनटेक्स्ट की आवश्यकता होती है। उनमें से कम से कम 8 सन्निकट होने चाहिए। सन्निकट ज्ञात प्लेनटेक्स्ट जितना बड़ा होगा, हमला उतना ही तेज़ होगा।
एक ज़िप संग्रह encrypted.zip जिसमें प्रविष्टि cipher सिफरटेक्स्ट है और plain.zip जिसमें प्रविष्टि plain ज्ञात प्लेनटेक्स्ट है, bkcrack को इस प्रकार चलाया जा सकता है:
bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain
एक फ़ाइल cipherfile जिसमें सिफरटेक्स्ट (एन्क्रिप्शन हेडर के अनुरूप 12 बाइट्स से शुरू) और plainfile जिसमें ज्ञात प्लेनटेक्स्ट है, bkcrack को इस प्रकार चलाया जा सकता है:
bkcrack -c cipherfile -p plainfile
यदि प्लेनटेक्स्ट सिफरटेक्स्ट की शुरुआत के अलावा किसी अन्य भाग से संबंधित है, तो आप एक ऑफ़सेट निर्दिष्ट कर सकते हैं। यह ऋणात्मक हो सकता है यदि प्लेनटेक्स्ट में एन्क्रिप्शन हेडर का एक भाग शामिल है।
bkcrack -c cipherfile -p plainfile -o offset
यदि आप थोड़ा सन्निकट प्लेनटेक्स्ट (8 से 11 बाइट्स के बीच) जानते हैं, लेकिन कुछ अन्य ज्ञात ऑफ़सेट पर कुछ बाइट्स जानते हैं, तो आप कुल 12 ज्ञात बाइट्स की आवश्यकता को पूरा करने के लिए यह जानकारी प्रदान कर सकते हैं।
ऐसा करने के लिए, -x फ्लैग का उपयोग करें जिसके बाद एक ऑफ़सेट और हेक्साडेसिमल में बाइट्स हों।
bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21
यदि हमला सफल होता है, तो हमले के लिए उपयोग किए गए सिफरटेक्स्ट से संबंधित डिसिफर किया गया डेटा सहेजा जा सकता है:
bkcrack -c cipherfile -p plainfile -d decipheredfile
यदि कुंजियाँ किसी पिछले हमले से ज्ञात हैं, तो bkcrack का उपयोग करके डेटा को डिसिफर करना संभव है:
bkcrack -c cipherfile -k 12345678 23456789 34567890 -d decipheredfile
डिसिफर किया गया डेटा संपीड़ित हो सकता है, यह इस पर निर्भर करता है कि ज़िप फ़ाइल बनाते समय संपीड़न का उपयोग किया गया था या नहीं।
यदि deflate संपीड़न का उपयोग किया गया था, तो tools फ़ोल्डर में प्रदान की गई Python 3 स्क्रिप्ट का उपयोग डेटा को डीकंप्रेस करने के लिए किया जा सकता है।
python3 tools/inflate.py < decipheredfile > decompressedfile
एक ही चरण में एन्क्रिप्टेड संग्रह की सभी प्रविष्टियों तक पहुंच प्राप्त करने के लिए, आप समान सामग्री लेकिन बिना एन्क्रिप्शन के एक नया संग्रह उत्पन्न कर सकते हैं। यह मानता है कि प्रत्येक प्रविष्टि मूल रूप से उसी पासवर्ड से एन्क्रिप्ट की गई थी।
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -D decrypted.zip
अपनी पसंद के पासवर्ड के साथ एक नया एन्क्रिप्टेड संग्रह उत्पन्न करना भी संभव है:
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip new_password
आप नए पासवर्ड को उसके संबंधित आंतरिक प्रतिनिधित्व द्वारा भी परिभाषित कर सकते हैं।
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 --change-keys unlocked.zip 581da44e 8e40167f 50c009a0
उन दो कमांडों का उपयोग एक साथ किया जा सकता है ताकि पासवर्ड जाने बिना लेकिन केवल आंतरिक कुंजियाँ जानते हुए एन्क्रिप्टेड संग्रह की सामग्री को बदला जा सके: आप अपनी पसंद के पासवर्ड से एन्क्रिप्टेड एक प्रतिलिपि बना सकते हैं, फिर संग्रह प्रबंधक के साथ प्रतिलिपि को संपादित करें और संकेत मिलने पर चुना गया पासवर्ड दर्ज करें, और अंत में मूल एन्क्रिप्शन कुंजियों के साथ संशोधित संग्रह की एक प्रतिलिपि वापस बनाएँ।
आंतरिक कुंजियाँ दिए जाने पर, bkcrack मूल पासवर्ड खोजने का प्रयास कर सकता है।
आप किसी दिए गए कैरेक्टर सेट में वर्णों का उपयोग करके पासवर्ड खोज सकते हैं:
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p
आप खोज को किसी दी गई लंबाई या लंबाई की सीमा के पासवर्ड तक सीमित कर सकते हैं:
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 9
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 8..10
विकल्प -r <length> <charset> -l 0..<length> -b <charset> का शॉर्टकट है:
bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p
यदि आपके पास पासवर्ड कैसे बना है, इसके बारे में कुछ ज्ञान है, तो आप खोज स्थान को प्रतिबंधित करने और पुनर्प्राप्ति को बहुत तेज़ बनाने के लिए एक मास्क निर्दिष्ट कर सकते हैं। यह लंबे पासवर्ड (जैसे 12 या अधिक वर्णों वाले) के लिए प्रासंगिक है, जिनके लिए ब्रूटफोर्स बहुत समय लेने वाला हो जाता है।
उदाहरण के लिए, मान लें कि आपको अस्पष्ट रूप से याद है कि आपका पासवर्ड 8 लोअरकेस अक्षरों, एक हाइफ़न और 6 दशमलव अंकों से बना है, तो आप इस कमांड का उपयोग कर सकते हैं:
bkcrack -k 1940e266 d3fd3d89 71ce9871 -m ?l?l?l?l?l?l?l?l-?d?d?d?d?d?d
यह मिलीसेकंड में चलता है, जबकि ब्रूटफोर्स विकल्प में घंटों लगते हैं।
ब्रूटफोर्स और मास्क-आधारित पासवर्ड पुनर्प्राप्ति दोनों के लिए खोज स्थान को कैरेक्टर सेट के साथ परिभाषित किया गया है। एक कैरेक्टर सेट वर्णों का एक अनुक्रम या मौजूदा कैरेक्टर सेट के लिए शॉर्टकट है। पूर्वनिर्धारित कैरेक्टर सेट नीचे सूचीबद्ध हैं।
पूर्वनिर्धारित कैरेक्टर सेट के अतिरिक्त, आप -s विकल्प के साथ कस्टम कैरेक्टर सेट परिभाषित कर सकते हैं।
कस्टम कैरेक्टर सेट पूर्वनिर्धारित कैरेक्टर सेट या अन्य कस्टम कैरेक्टर सेट को संदर्भित कर सकते हैं।
कस्टम कैरेक्टर सेट मास्क-आधारित पुनर्प्राप्ति खोज स्थान के सटीक विनिर्देश के लिए विशेष रूप से उपयोगी हैं।
उदाहरण के लिए, यदि आप जानते हैं कि आपका पासवर्ड 10 अक्षरों (अपरकेस या लोअरकेस) और 5 बाइनरी अंकों से बना है, तो आप इस कमांड का उपयोग कर सकते हैं:
bkcrack -k b8c377a6 f603160f 1832a78b -m ?x?x?x?x?x?x?x?x?x?x?y?y?y?y?y -s x ?u?l -s y 01
एक ट्यूटोरियल example फ़ोल्डर में प्रदान किया गया है।
अधिक जानकारी के लिए, दस्तावेज़ीकरण देखें और स्रोत पढ़ें।
GitHub पर सुधार सुझाने या पुल रिक्वेस्ट सबमिट करने में संकोच न करें।
यदि आप परियोजना के प्रति अपना समर्थन दिखाना चाहते हैं, तो आप Github Sponsors के माध्यम से दान करने या परियोजना को प्रायोजित करने के लिए स्वागत है।
यह परियोजना zlib/png लाइसेंस की शर्तों के तहत प्रदान की गई है।
| शॉर्टकट | विवरण | मान |
|---|
?l | लोअरकेस अक्षर | abcdefghijklmnopqrstuvwxyz |
?u | अपरकेस अक्षर | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
?d | दशमलव अंक | 0123456789 |
?s | विशेष वर्ण | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ |
?a | अल्फा-न्यूमेरिकल वर्ण | ?l?u?d के समान |
?p | मुद्रण योग्य ASCII वर्ण | ?l?u?d?s के समान |
?b | सभी बाइट्स | 0x00 .. 0xff |