2009-07-16 9 views
48

मैंने फ़ाइल पर एक्सओआर एन्क्रिप्शन करने के लिए एक छोटा सी ++ प्रोग्राम लिखा था, जिसे मैं कुछ निजी फाइलों के लिए उपयोग कर सकता हूं (यदि यह क्रैक हो जाता है तो यह कोई बड़ा सौदा नहीं है - मैं केवल आकस्मिक दर्शकों के खिलाफ सुरक्षा कर रहा हूं)। असल में, मैं एक ASCII पासवर्ड लेता हूं और बार-बार फ़ाइल में डेटा के साथ पासवर्ड एक्सओआर करता हूं।एक्सओआर एन्क्रिप्शन के साथ क्या गलत है?

अब मैं उत्सुक हूं, हालांकि: अगर कोई इसे क्रैक करना चाहता था, तो वे इसके बारे में कैसे जाएंगे? क्या इसमें काफी समय लगेगा? क्या यह पासवर्ड की लंबाई पर निर्भर करता है (यानी, बड़ा क्या है ओ)?

+7

या फिर आप को तोड़ने और TrueCrypt की तरह कुछ इस्तेमाल कर सकते हैं ... –

उत्तर

107

एक्सओआर एन्क्रिप्शन के साथ समस्या यह है कि एक ही वर्ण के लंबे रनों के लिए, पासवर्ड देखना बहुत आसान है। इस तरह के लंबे रन पाठ फ़ाइलों में सबसे अधिक रिक्त स्थान हैं। मान लें कि आपका पासवर्ड 8 वर्ण है, और टेक्स्ट फ़ाइल में कुछ पंक्तियों में 16 रिक्त स्थान हैं (उदाहरण के लिए, ASCII-graphics तालिका के बीच में)। यदि आप सिर्फ XOR हैं कि आपके पासवर्ड के साथ, आप देखेंगे कि आउटपुट में वर्णों के दोहराने वाले अनुक्रम होंगे। हमलावर सिर्फ इस तरह की तलाश करेगा, मूल फ़ाइल में चरित्र का अनुमान लगाने का प्रयास करेगा (अंतरिक्ष कोशिश करने वाला पहला उम्मीदवार होगा), और दोहराने वाले समूहों की लंबाई से पासवर्ड की लंबाई प्राप्त करें।

बाइनरी फ़ाइलें और भी बदतर हो सकती हैं क्योंकि वे अक्सर 0x00 बाइट्स के दोहराने वाले अनुक्रम होते हैं। जाहिर है, उन लोगों के साथ XORing नो-ऑप है, इसलिए आपका पासवर्ड आउटपुट में सादा पाठ में दिखाई देगा! एक बहुत ही सामान्य द्विआधारी प्रारूप का एक उदाहरण जिसमें नल के लंबे अनुक्रम हैं .doc है।

+10

ध्यान दें कि यह लगभग एक अंतरिक्ष चरित्र के साथ एक पूरी फ़ाइल है, जो बिंदु पर किसी भी समझदार तार एक संभावना के रूप में बाहर छलांग XOR के लिए मामूली बात है पारण शब्द। एक बाइनरी फ़ाइल के लिए एक ASCII स्ट्रिंग के साथ XORed, परिणाम में कोई स्ट्रिंग * पासवर्ड * है। एक शेल प्रॉम्प्ट पर स्ट्रिंग कमांड उन्हें मिलेगा। – RBerteig

+36

FWIW आपको स्पष्ट होना चाहिए कि आप एक एक्सओआर योजना के बारे में बात कर रहे हैं जब "कुंजी" सादा पाठ से कम है। यदि कुंजी सादे टेक्स्ट के समान आकार है, और "वास्तव में" यादृच्छिक (कम से कम हमलावर के पीओवी से) यह एक ओटीपी है; उर्फ अटूट। –

+0

अच्छी व्याख्या। लेकिन क्या पासवर्ड को और अधिक सुरक्षित बनाया जा सकता है यदि पासवर्ड सादे टेक्स्ट के समान लंबाई है? – rvighne

66

मैं एक्सओआर की कमजोरियों के Pavel Minaev'sexplanation के साथ सहमत हूं।

  1. निर्धारित कब तक कुंजी है: जो लोग रुचि रखते हैं के लिए, यहाँ मानक कुछ ही मिनटों में तुच्छ XOR एन्क्रिप्शन को तोड़ने के लिए इस्तेमाल किया एल्गोरिथ्म की एक बुनियादी अवलोकन है। यह एन्क्रिप्टेड डेटा X12ing X12ing द्वारा किया जाता है स्थानों के साथ-साथ विभिन्न स्थानों स्थानों को स्थानांतरित कर दिया गया है और यह जांच कर रहा है कि कितने बाइट समान हैं।

  2. बाइट्स कि बराबर हैं एक निश्चित प्रतिशत (6% ब्रूस Schneier के एप्लाइड क्रिप्टोग्राफी को accoridng दूसरा संस्करण), तो आप keylength की एक बहु द्वारा डेटा स्थानांतरित कर दिया है की तुलना में अधिक हैं । की छोटी राशि को स्थानांतरित करके परिणामस्वरूप बराबर बाइट्स की मात्रा में परिणाम मिलता है, तो आपको कीलथेंथ मिलती है।

  3. कीलेंथ, और एक्सओआर द्वारा सिफर टेक्स्ट को शिफ्ट करें। यह को सादे टेक्स्ट के साथ सादे टेक्स्ट ने कुंजी की लंबाई को स्थानांतरित कर दिया है। सामग्री संदेश निर्धारित करने के लिए पर्याप्त सादा टेक्स्ट होना चाहिए।

और पढ़ें Encryption Matters, Part 1

+0

क्या आप भाग 3 की व्याख्या कर सकते हैं? मैंने इसका प्रयास किया है लेकिन यह काम नहीं कर रहा है। उदाहरण के लिए यदि मैं इसे दशमलव संख्या में करता हूं। सादा पाठ 23456 है, कुंजी 12 है, सिफर तब 31577 है, तो एक्सओआर मुझे गिब्बरिश देता है –

2

पर एक good encryption का लक्ष्य यह गणितीय मुश्किल कुंजी के बिना डिक्रिप्ट करने के लिए बनाने के लिए है।
इसमें कुंजी की रक्षा करने की इच्छा शामिल है।
XOR technique मूल रूप से वर्णित एक बहुत ही सरल सिफर आसानी से टूटा हुआ है।

यह ध्यान रखना महत्वपूर्ण है कि एक्सओआर cryptographic algorithms के भीतर उपयोग किया जाता है।
ये एल्गोरिदम इसके चारों ओर गणितीय कठिनाई के परिचय पर काम करते हैं।

21

XOR एन्क्रिप्शन यथोचित * मजबूत हो सकता है, तो निम्न शर्तों को पूरा:

  • सादा पाठ और पासवर्ड एक ही लंबाई के बारे में कर रहे हैं।
  • पासवर्ड को एक से अधिक संदेशों को एन्क्रिप्ट करने के लिए पुन: उपयोग नहीं किया जाता है।
  • पासवर्ड का अनुमान लगाया नहीं जा सकता है, आईई शब्दकोश या अन्य गणितीय माध्यमों से। अभ्यास में इसका मतलब है कि बिट्स यादृच्छिक हैं।

* उचित रूप से मजबूत अर्थ यह जीनक्यू के पद के रूप में तुच्छ, गणितीय माध्यमों द्वारा तोड़ा नहीं जा सकता है। यह अभी भी आपके पासवर्ड से कोई मजबूत नहीं है।

+21

यह एक बार का पैड होगा: http://en.wikipedia.org/wiki/One-time_pad – ChrisW

+6

एक बार पैड के लिए , कुंजी सादे पाठ के समान लंबाई होना चाहिए। जब यह सच होता है, और कुंजी का पुन: उपयोग नहीं किया जाता है, तो एक बार पैड बिल्कुल सुरक्षित होता है। यदि आप क्रिप्टोग्राफी के इतिहास में रूचि रखते हैं, तो मैं डेविड कान द्वारा कोडब्रेकर्स की अत्यधिक अनुशंसा करता हूं: http://www.amazon.ca/Codebreakers- व्यापक- इतिहास- संचार- इंटरनेट/डीपी/068483130 9 –

+8

* "उचित रूप से सुरक्षित" * - एक बार पैड किसी भी माध्यम से तोड़ा नहीं जा सकता है, (मान लें कि पैड पूरी तरह से यादृच्छिक है)। वे एन्क्रिप्शन की * केवल * बिल्कुल सुरक्षित विधि हैं। –

2

नॉर्टन एंटी-वायरस पिछले अक्षरों के लिए कुंजी के रूप में पिछले अनएन्क्रिप्टेड पत्र का उपयोग करने की तकनीक का उपयोग करने के लिए उपयोग किया जाता था। अगर मुझे सही याद आती है, तो मुझे समझने के लिए मुझे अतिरिक्त आधे घंटे लग गए।

यदि आप आकस्मिक दर्शक को रोकना चाहते हैं, तो यह काफी अच्छा है; मैंने निष्पादन योग्य के भीतर तार छिपाने के लिए उपयोग किया है। हालांकि, वास्तव में कोशिश करने वाले किसी भी व्यक्ति को 10 मिनट तक नहीं खड़ा होगा।

सभी ने कहा, इन दिनों बहुत बेहतर एन्क्रिप्शन विधियां आसानी से उपलब्ध हैं, इसलिए अपने आप को बेहतर तरीके से क्यों न लें। यदि आप "आकस्मिक" उपयोगकर्ता से छिपाने की कोशिश कर रहे हैं, तो जीजीआईपी की तरह कुछ भी काम बेहतर होगा।

12

अंक पहले ही उल्लेख करने के अलावा, XOR एन्क्रिप्शन पूरी तरह से जाना जाता प्लेन टेक्स्ट हमले के लिए असुरक्षित है:

cryptotext = plaintext XOR key 
key = cryptotext XOR plaintext = plaintext XOR key XOR plaintext 

जहां XORring प्लेन टेक्स्ट बाहर एक दूसरे को रद्द, बस कुंजी छोड़कर।

ज्ञात-सादे टेक्स्ट हमलों के लिए कमजोर नहीं होने के कारण किसी भी "सुरक्षित" एन्क्रिप्शन विधि के लिए एक आवश्यक लेकिन पर्याप्त संपत्ति नहीं है, जहां एक ही कुंजी का उपयोग एक से अधिक सादे टेक्स्ट ब्लॉक (यानी एक बार पैड अभी भी सुरक्षित है) के लिए किया जाता है।

+7

+1 यह उल्लेखनीय है कि फ़ाइल का एक छोटा सा हिस्सा भी ज्ञात है (जैसे कि अधिकांश फ़ाइल-स्वरूपों द्वारा उपयोग किए जाने वाले शीर्षलेख), कुंजी को आसानी से प्राप्त किया जा सकता है और पूरी फ़ाइल डिक्रिप्ट की जा सकती है। –

3

मैं सिर्फ आकस्मिक दर्शकों

जब तक यह धारणा रखती है के रूप में, अपने एन्क्रिप्शन योजना ठीक है के खिलाफ की रक्षा कर रहा हूँ। जो लोग सोचते हैं कि इंटरनेट एक्सप्लोरर "तेह इंटर्ननेट" है इसे तोड़ने में सक्षम नहीं हैं।

यदि नहीं, तो बस कुछ क्रिप्टो लाइब्रेरी का उपयोग करें। समरूप क्रिप्टो के लिए ब्लोफिश या एईएस जैसे पहले से ही बहुत अच्छे एल्गोरिदम हैं।

1

आरसी 4 अनिवार्य रूप से एक्सओआर एन्क्रिप्शन है! जैसा कि कई धारा सिफर हैं - कुंजी कुंजी है (कोई इरादा नहीं है!) आपको कभी भी कुंजी का पुन: उपयोग नहीं करना चाहिए। कभी!

1

मैं उत्तर में देर से थोड़ा हूं, लेकिन चूंकि किसी ने इसका अभी तक उल्लेख नहीं किया है: इसे विगनेर सिफर कहा जाता है।

विकिपीडिया इसे तोड़ने के लिए cryptanalysis attacks की संख्या देता है; यहां तक ​​कि सरल, हालांकि, अधिकांश फ़ाइल-स्वरूपों में एक निश्चित शीर्षलेख होता है, इसलिए एन्क्रिप्टेड-हेडर के साथ सादे टेक्स्ट-हेडर को एक्सओआर करना होगा, जिससे आपको कुंजी मिल जाएगी।

1

"6%" जीनक्यू का उल्लेख अंग्रेजी टेलीग्राफ पाठ के लिए संयोग की अनुक्रमणिका है - 26 अक्षरों, विराम चिह्न और अंकों के साथ वर्तनी के साथ। लंबे ग्रंथों के लिए वास्तविक मूल्य 0.0665 है।

< 4% 26-वर्ण वर्णमाला में यादृच्छिक पाठ के लिए संयोग की अनुक्रमणिका है, जो 1/26 या 0.385 है।

यदि आप एक अलग भाषा या एक अलग वर्णमाला का उपयोग कर रहे हैं, तो विशिष्ट मान अलग-अलग होंगे। यदि आप ASCII वर्ण सेट, यूनिकोड, या बाइनरी बाइट्स का उपयोग कर रहे हैं, तो विशिष्ट मान बहुत अलग होंगे। लेकिन सादा पाठ और यादृच्छिक पाठ के आईसी के बीच का अंतर आम तौर पर उपस्थित होगा। (संपीड़ित बाइनरी में आईसीएस यादृच्छिक के बहुत करीब हो सकते हैं, और किसी भी आधुनिक कंप्यूटर सिफर के साथ एन्क्रिप्ट किए गए किसी भी फ़ाइल में आईसी होगा जो बिल्कुल यादृच्छिक पाठ की है।)

एक बार जब आप अपने खिलाफ टेक्स्ट एक्सओर्ड कर चुके हैं, तो क्या होगा आपने छोड़ा है एक autokey सिफर के बराबर है। विकिपीडिया इस तरह के एक सिफर

http://en.wikipedia.org/wiki/Autokey_cipher

2

एक और चाल अपने पासवर्ड के लिए एक md5() हैश उत्पन्न करने के लिए है तोड़ने का एक अच्छा उदाहरण है। आप छोटे वाक्यांशों के लिए बेहतर वितरण प्रदान करने के लिए सुरक्षित टेक्स्ट की लंबाई का उपयोग करके ऑफसेट के रूप में या अपने पासवर्ड के साथ संयोजन करके इसे और भी अनूठा बना सकते हैं। और लंबे वाक्यांशों के लिए, अपने एमडी 5() हैश को प्रत्येक 16-बाइट ब्लॉक को पिछले हैश के साथ जोड़कर विकसित करें - पूरे एक्सओआर कुंजी को "यादृच्छिक" और गैर-दोहराव दें।

प्रत्येक कुंजी लंबाई के साथ कई कुंजी का प्रयोग करें एक प्रमुख संख्या के बराबर है, लेकिन चाबी के लिए कभी नहीं एक ही लंबाई:

5

तरीके XOR काम करने के लिए। मूल फ़ाइल नाम का उपयोग किसी अन्य कुंजी के रूप में करें लेकिन फ़ाइल नाम पुनर्प्राप्त करने के लिए एक तंत्र बनाना याद रखें। फिर एक एक्सटेंशन के साथ एक नया फ़ाइल नाम बनाएं जो आपको बताएगा कि यह एक एन्क्रिप्टेड फ़ाइल है। प्राइम-संख्या लंबाई की एकाधिक कुंजियों का उपयोग करने का कारण यह है कि परिणामस्वरूप एक्सओआर कुंजी दोहराए जाने से पहले लंबाई में एक टाइम की कुंजी बी होने का कारण बनती है। एन्क्रिप्टेड होने से पहले फ़ाइल से बाहर किसी भी दोहराव पैटर्न को संपीड़ित करें। प्रत्येक एक्स ऑफसेट को यादृच्छिक संख्या और एक्सओआर उत्पन्न करें (याद रखें, यह संख्या भी पुन: प्रयोज्य होनी चाहिए। आप फ़ाइल लम्बाई के रैंडम सीड का उपयोग कर सकते हैं।

यह सब करने के बाद, यदि आप 31 की लंबाई 5 कुंजी का उपयोग करते हैं और अधिक, आप लगभग एक सौ मेग की मुख्य लंबाई के साथ समाप्त हो जाएंगे!

कुंजी के लिए, फ़ाइल नाम एक (पूर्ण पथ सहित), एसटीआर (फाइलसाइज) + एसटीआर (दायर) + एसटीआर (तिथि) + एसटीआर (समय), यादृच्छिक जनरेशन कुंजी, आपका पूरा नाम, एक निजी कुंजी एक बार बनाई गई।

प्रत्येक फ़ाइल एन्क्रिप्टेड के लिए उपयोग की जाने वाली कुंजियों को संग्रहीत करने के लिए एक डेटाबेस, लेकिन यूएसबी मेमोरी स्टिक पर डेटा फ़ाइल को रखने के लिए डेटाबेस और 01 पर रखें।

यह चित्रों और संगीत जैसी फ़ाइलों पर दोहराने वाले पैटर्न को रोकना चाहिए, लेकिन फिल्में, चार गीगा लंबाई या उससे अधिक होने पर, अभी भी कमजोर हो सकती है, इसलिए छठी कुंजी की आवश्यकता हो सकती है।

मैं व्यक्तिगत रूप से मेमोरी स्टिक (माइक्रोसॉफ्ट एक्सेस के साथ उपयोग के लिए डेटा फ़ाइल) पर एन्क्रिप्टेड डेटा फ़ाइल है। मैंने इसे एन्क्रिप्ट करने के लिए 3-कुंजी विधि का उपयोग किया क्योंकि यह कभी भी इतना बड़ा नहीं होगा, संबंधित कुंजी वाली फ़ाइलों की निर्देशिका होगी।

यादृच्छिक रूप से एक बहुत बड़ी कुंजी उत्पन्न करने के बजाय कई चाबियों का कारण यह है कि प्राइम्स टाइम्स प्राइम बहुत तेज़ हो जाते हैं और मेरे पास कुंजी के निर्माण पर कुछ नियंत्रण होता है और आप जानते हैं कि वास्तव में वास्तव में ऐसी कोई चीज़ नहीं है जो वास्तव में यादृच्छिक है नंबर। अगर मैंने एक बड़ी यादृच्छिक संख्या बनाई है, तो कोई और वही नंबर उत्पन्न कर सकता है।

कुंजी का उपयोग करने का तरीका: फ़ाइल को एक कुंजी के साथ एन्क्रिप्ट करें, फिर अगला, फिर अगली तक सभी कुंजियों का उपयोग नहीं किया जाता है। जब तक पूरी फ़ाइल उस कुंजी से एन्क्रिप्ट नहीं की जाती है तब तक प्रत्येक कुंजी का बार-बार उपयोग किया जाता है।

क्योंकि चाबियाँ अलग-अलग लंबाई के हैं, दोहराने का ओवरलैप प्रत्येक कुंजी के लिए अलग है और इसलिए एक व्युत्पन्न कुंजी को कुंजी एक बार कुंजी की लंबाई बनाता है। यह तर्क शेष कुंजी के लिए दोहराता है। प्राइम संख्याओं का कारण यह है कि दोहराना मुख्य लंबाई के विभाजन पर होता है ताकि आप विभाजन को 1 या कुंजी, हेनसे, प्राइम की लंबाई बनना चाहें।

ठीक है, यह फ़ाइल पर एक साधारण एक्सओआर से अधिक है लेकिन अवधारणा वही है।

लांस