2011-01-12 16 views
6

के लिए पूरी तरह यादृच्छिक एक-बार पैड मुझे कुछ डेटा एन्क्रिप्ट करने के लिए एक बार पैड बनाने की आवश्यकता है (आकार में कुछ केबी)। rand() जैसे मूल यादृच्छिक संख्या पीढ़ी से जुड़े सभी छद्म-यादृच्छिक समस्याओं से बचने के लिए मुझे इस वन-टाइम पैड को उत्पन्न करने के बारे में कैसे जाना चाहिए?एन्क्रिप्शन

क्या कोई मौजूदा, विश्वसनीय उपकरण या लाइब्रेरी है जिसका मैं उपयोग कर सकता हूं?

+0

आप कौन सी भाषा/ऑपरेटिंग सिस्टम/रनटाइम पर्यावरण का उपयोग कर रहे हैं? –

+1

कुछ अच्छे समाधानों के लिए यहां देखें: http://stackoverflow.com/questions/3436376/what-is-the-most-secure-seed-for-random-number- जनरेशन –

+0

@Erik, इससे कोई फर्क नहीं पड़ता बहुत। अधिमानतः विंडोज़, हालांकि। –

उत्तर

4

Random.ORG आज़माएं। उनके पास विभिन्न निःशुल्क (और भुगतान) सेवाएं हैं जो वायुमंडलीय शोर के आधार पर वास्तव में यादृच्छिक संख्या उत्पन्न करती हैं (या कम से कम यही वह करने का दावा करती है)।

+0

यह आशाजनक लग रहा है। –

+8

जब तक आप किसी और को अपने सुपर-गुप्त एक बार पैड को नहीं जानते हैं। और आप अपने हमलावरों को तार पर इसे रोकने में सक्षम होने पर ध्यान नहीं देते हैं। –

5

अधिकांश आधुनिक ऑपरेटिंग सिस्टमों में cryptographically-secure pseudo-random number generator है।

उदाहरण के लिए, विंडोज CryptGenRandom है। आप RNGCryptoServiceProvider कक्षा का उपयोग करके .NET से उसी स्ट्रीम तक पहुंच सकते हैं। सी ++ से, आप Microsoft C++ लाइब्रेरी फ़ंक्शन rand_s का उपयोग कर उसी स्ट्रीम तक पहुंच सकते हैं। पायथन से, ओएस मॉड्यूल में फ़ंक्शन urandom (लिंक किए गए पृष्ठ के नीचे देखें) का उपयोग करके यह सुलभ है।

सामान्य पीआरएनजी के विपरीत, सीएसपीआरएनजी कठोर सांख्यिकीय यादृच्छिक परीक्षणों को पारित करने के लिए डिज़ाइन किए गए हैं। उन्हें गंभीर हमले के तहत भी अच्छी तरह से पकड़ने के लिए डिज़ाइन किया गया है, भले ही उनके प्रारंभिक या चल रहे राज्य एक हमलावर के लिए उपलब्ध हो जाएं।

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

सैन्य संचार से लेकर लगभग सभी ऑनलाइन लेन-देन की रक्षा करने वाले एन्क्रिप्शन से लेकर कई महत्वपूर्ण प्रणालियां, "क्रिप्टोग्राफिक-सुरक्षित छद्म-यादृच्छिक" और "यादृच्छिक" के बीच कार्यात्मक रूप से समकक्ष सुरक्षा पर भरोसा करती हैं।

EDIT: यदि आप इंटेल की आईवी ब्रिज प्रोसेसर रेंज के साथ काम करने के लिए भाग्यशाली हैं, तो अब आपके पास another very interesting alternative है।

4

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

+2

@ निक: एक बार पैड के लिए क्रिप्टोग्राफिक-सुरक्षित पीएनआरजी का उपयोग करते समय एक वास्तविक आरएनजी का उपयोग करने जैसा नहीं है, दोनों विधियां लगभग ताकतवर हैं। इसे कुछ भी नहीं के लिए "क्रिप्टोग्राफिक-सुरक्षित" कहा जाता है। और मुझे स्टीव बेलोविन के उद्धरण पसंद हैं: "मैंने देखा है कि एक बार पैड सैद्धांतिक रूप से अटूट हैं, लेकिन व्यावहारिक रूप से बहुत कमजोर हैं। इसके विपरीत, पारंपरिक सिफर सैद्धांतिक रूप से तोड़ने योग्य हैं, लेकिन व्यावहारिक रूप से मजबूत हैं।" – RoadWarrior

+2

नहीं, वे 'ताकत में लगभग समान नहीं' हैं। वास्तविक ओटीपी, सही ढंग से उपयोग किया जाता है, सचमुच अटूट है, क्योंकि सभी सादे टेक्स्ट समान रूप से संभावित हैं। इसके विपरीत, एक क्रिप्टोग्राफिक रूप से सुरक्षित पीआरएनजी में बहुत अधिक सीमित राज्य है।ओपी लगभग निश्चित रूप से वास्तव में एक पारंपरिक सिफर चाहता है - ओटीपी बहुत ही कम सही जवाब हैं - लेकिन बस "पीआरएनजी का उपयोग करना" कहना बुरा सलाह है: आप सिर्फ पीआरएनजी के आधार पर अपने स्वयं के सिफर का आविष्कार कर रहे हैं, और आप बहुत बेहतर होंगे मौजूदा सिफर का उपयोग बंद करें। –

+2

गारंटीकृत "असली ओटीपी" जैसी कोई चीज़ नहीं है। सुरक्षा केवल हमले मॉडल के सापेक्ष परिभाषित की जाती है। उदाहरण के लिए, विवर्तन बिट्स का उत्पादन करने के लिए एक हार्डवेयर सर्किट कुछ मिलीमीटर वर्ग के एकीकृत सर्किट पर बनाया जा सकता है। सबसे परिष्कृत हार्डवेयर यादृच्छिक संख्या जेनरेटर को ऐसी चिप को कहीं भी ऊपर की ओर रखकर हटाया जा सकता है जहां यादृच्छिकता का स्रोत डिजिटलीकृत होता है, आउटपुट ड्राइवर चिप में या यहां तक ​​कि कंप्यूटर से आरएनजी को जोड़ने वाली केबल में भी कहा जाता है। – RoadWarrior

संबंधित मुद्दे