सिक्स-बाइट्स
श्रेणी: क्रिप्टोग्राफी
कठिनाई: आसान
चुनौती लेखक: KNOXDEV
टीम: ओसिरिस प्रोटोकॉल (https://ctftime.org/team/151343/#.Ynh0zJJAj_s.link)
चुनौती संकेत
मेरे दोस्त ने मुझे झंडा भेजा, लेकिन यह एन्क्रिप्टेड है! मैंने उन्हें छह काटने के बारे में कुछ चिल्लाते सुना ... लेकिन मुझे समझ में नहीं आया कि उनका क्या मतलब है! क्या आप ध्वज को डिक्रिप्ट कर सकते हैं?
सिफरटेक्स्ट: kwsbqhS} aYLH !WYg+kDIV0yp[k
पहला चरण
यह चुनौती निश्चित रूप से CTF के दीवाने के लिए पार्क में टहलना चाहिए और ज्ञात सादे पाठ हमलों और xors के सामान्य विषय का उपयोग करता है। एक नौसिखिया के लिए, यह चुनौती एक अनूठी बाधा प्रस्तुत करती है - यह कैसे निर्धारित किया जाए कि किस एन्क्रिप्शन का उपयोग किया गया था। हम यह समझने के लिए संकेत (और शायद थोड़ा सा भाग्य) का उपयोग कर सकते हैं कि एक कुंजी में 6 बाइट्स का उपयोग होने की संभावना है। सिफर का अल्पविकसित ज्ञान होने से इस चुनौती को हल करने में मदद मिलती है - हालाँकि, हम एक कुंजी के आधार पर अनुमान लगा सकते हैं कि हम इस मामले में XOR के किसी न किसी रूप में स्ट्रीम सिफर का उपयोग करेंगे।
XOR . क्या है
एक्सक्लूसिव OR (XOR) - जिसे एक्सक्लूसिव डिसजंक्शन के रूप में भी जाना जाता है - सिफर का एक रूप है जहां बिटवाइज़ xor ऑपरेटर का उपयोग बाइट द्वारा बाइट द्वारा एक कुंजी और प्लेन टेक्स्ट के बीच सिफरटेक्स्ट बनाने के लिए या सिफरटेक्स्ट और की के बीच में किया जाता है। मूलपाठ।
XOR फ़ंक्शन निम्नलिखित नियमों का पालन करता है जो इस चुनौती के तर्क को समझने में सहायक होते हैं:
ए एक्सओआर ए = 0 ए एक्सओआर 0 = ए
ए एक्सओआर बी = बी एक्सओआर ए (कम्यूटेटिव प्रॉपर्टी)
(ए एक्सओआर बी) एक्सओआर सी = ए एक्सओआर (बी एक्सओआर सी) (एसोसिएटिव प्रॉपर्टी)
हमारे लिए आइए परिभाषित करें: सिफरटेक्स्ट = प्लेनटेक्स्ट एक्सओआर की
एक्सओआर भेद्यता
सिद्धांत रूप में XOR अति सुरक्षित है यदि:
- अज्ञात यादृच्छिक कुंजी का उपयोग किया जाता है
- पाठ का कोई भाग ज्ञात नहीं है
हम जानते हैं कि प्लेनटेक्स्ट XOR CipherText = Key (सबूत को अंत में देखें)
ज्ञात सादा पाठ लागू करना
याद रखें कि ध्वज प्रारूप sdctf{ है (यह 6 बाइट्स है जो एक और संकेत के रूप में कार्य करना चाहिए)।
अब ध्वज को खोजने के लिए Plaintext XOR CipherText = Key लागू करते हैं। यहां एक उदाहरण दिया गया है कि यह हमारे पहले मूल्य के साथ कैसे काम करता है:
सादा पाठ: s (बाइनरी: 01110011)
सिफरटेक्स्ट: k (बाइनरी: 01101011)
01110011 एक्सओआर
01101011
— — — — — — —
00011000 (हेक्स: 18)
हमें चाबी का पहला भाग मिला। हम इसी प्रक्रिया को अगले 5 बाइट्स पर लागू कर सकते हैं या कुछ और हाई-टेक टूलिंग का उपयोग कर सकते हैं।
कुछ साफ-सुथरे उपकरणों के साथ कुंजी प्राप्त करना
साइबरशेफ एक अभूतपूर्व उपकरण है यदि आपने पहले इसका उपयोग नहीं किया है। आइए "XOR Brute Force" का उपयोग करने के लिए अपना नुस्खा सेट करें। इनपुट बॉक्स में हम पहला कैरेक्टर (k) डालेंगे। एक्सओआर ब्रूट फोर्स में सुनिश्चित करें कि कुंजी लंबाई 1 पर सेट है और पालना एस के ज्ञात-सादे टेक्स्ट पर सेट है। नुस्खा लौटता है:
कुंजी = 18: एस
कुंजी = 38: एस
18 का चयन करें क्योंकि ध्वज प्रारूप लोअरकेस है। कुंजी प्राप्त करने के लिए अगले 5 बाइट्स के साथ इस प्रक्रिया को दोहराएं।
कुंजी = 18 13 10 16 17 13
सिफर को हल करना
अंत में, सादा पाठ प्राप्त करने के लिए कुंजी और सिफरटेक्स्ट लें। साइबरशेफ का उपयोग करते हुए XOR को कुंजी के साथ 18 13 10 16 17 13 और इनपुट को सिफरटेक्स्ट kwsbqhS} aYLH !WYg+kDIV0yp[k के रूप में उपयोग करें
यह देता है: sdctf{KnOwN_PL1ANt3xT_A#acK} और समस्या हल हो गई।
सादा पाठ का प्रमाण XOR सिफरटेक्स्ट = कुंजी
प्लेनटेक्स्ट को याद करें XOR की = सिफरटेक्स्ट
लेट प्लेनटेक्स्ट = ए की = बी और सिफरटेक्स्ट = सी
इसलिए: ए एक्सओआर बी = सी
दोनों पक्षों द्वारा एक्सओआर ए (चूंकि दोनों पक्ष बराबर हैं, परिणाम समान है): ए एक्सओआर (ए एक्सओआर बी) = ए एक्सओआर सी
सहयोगी संपत्ति लागू करें: (ए एक्सओआर ए) एक्सओआर बी = ए एक्सओआर सी
एक एक्सओआर ए = 0: 0 एक्सओआर बी = ए एक्सओआर सी लागू करें
सरल करें 0 XOR B: B = A XOR C (ऐसा इसलिए है क्योंकि बिटवाइज़ 0 XOR 0 0 है और 0 XOR 1 1 है इसलिए 0 XOR B, B है)।
अंत में, मानों को बदलें: कुंजी = प्लेनटेक्स्ट XOR सिफरटेक्स्ट।