2013-12-08 9 views
10

के लिए पाइथन की पिक्रिप्टो लाइब्रेरी क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म-यादृच्छिक संख्याओं के लिए मुझे os.urandom() या Crypto.Random.new() का उपयोग करना चाहिए या नहीं समझने की कोशिश कर रहा था।यादृच्छिक संख्या पीढ़ी बनाम os.urandom

निम्नलिखित वेबसाइट os.urandom() उपयोग करने के लिए सुझाव है कि लगता है:

https://github.com/mozilla/PyHawk/pull/13

लेकिन मैं वास्तव में नहीं दिख रहा है यही कारण है कि और अन्य वेबसाइटों मैं ऑनलाइन पाया वास्तव में जो एक का उपयोग करने की व्याख्या नहीं करते।

यदि कोई जानता है कि क्रिप्टोग्राफिक उपयोग के लिए कौन सा सुरक्षित है, तो मैं सलाह की सराहना करता हूं!

उन चीज़ों में से एक जो विशेष रूप से मुझे चिंता करते हैं, मैं यादृच्छिक संख्या उत्पन्न करने के लिए इसका उपयोग करने की योजना बना रहा हूं, लेकिन मुझे चिंता है कि एक दिन मैं कुछ यादृच्छिक संख्या उत्पन्न करता हूं और अगले दिन जेनरेटर की स्थिति समान होती है और यह एक ही "यादृच्छिक" संख्या उत्पन्न करना शुरू होता है।

+0

कोई भी काम करता है। – U2EF1

+1

@ यू 2 ईएफ 1 सीएसपीआरएनजी की शुद्धता के रूप में महत्वपूर्ण और कड़ी-से-सत्यापित कुछ के लिए, आपको एक ऑफहेड दावे से थोड़ा अधिक प्रदान करना होगा। – delnan

+0

['ssl.RAND_bytes()' docs] (http://docs.python.org/3.4/library/ssl.html#ssl.RAND_bytes) पढ़ने के लिए अनुशंसा करते हैं [विकिपीडिया] (http://en.wikipedia.org एक सीएसपीआरएनजी की आवश्यकताओं को प्राप्त करने के लिए/विकी/Cryptographically_secure_pseudorandom_number_generator)। – jfs

उत्तर

9

लिंक आपके द्वारा दिया गया में, केवल कारण urandom() पसंद करते हैं करने के लिए दिया है कि यह भी कम समय में कोड खींच लिया (ओएस "इसमें से अधिकांश" लागू करता है, और os.urandom() अजगर करने के लिए बनाया गया है) है।

यदि आप पाइथन पैकेज वितरित करने जा रहे हैं, तो आप बाहरी निर्भरताओं को कम करके उपयोगकर्ताओं के जीवन को सरल बना सकते हैं। आपके द्वारा मिले लिंक का यह पूरा बिंदु है।

गुणवत्ता के मामले में, किसी भी तरह से ठीक काम करना चाहिए। मैं urandom() पसंद करता हूं क्योंकि मैं समझता हूं कि यह क्या करता है; मैंने PyCrypto की गड़बड़ी में कभी खोला नहीं। लेकिन को में वातावरण में उपयोग के लिए आलोचना की गई है। Click this और बात यह है कि

सस्ती वस्तु बेचनेवाला, Pinkas, & मार्च 2006 में Reinman प्रकाशित लिनक्स यादृच्छिक संख्या जनरेटर का एक विस्तृत क्रिप्टोग्राफिक विश्लेषण ...

4

urandom एक चेतावनी के साथ क्रिप्टोग्राफ़िक रूप से सुरक्षित संख्या लौटाता है। यदि यह एंट्रॉपी से बाहर चला जाता है (माउस आंदोलन द्वारा उत्पन्न वास्तविक यादृच्छिक डेटा, आईवी ब्रिज + चिप्स आदि पर सीपीयू तापमान में उतार-चढ़ाव), यह कम सुरक्षित छद्म-यादृच्छिक संख्याओं का उत्पादन शुरू कर देगा। ये एक मजबूत जनरेटर द्वारा उत्पन्न होते हैं, लेकिन आपके आवेदन के आधार पर वे पर्याप्त यादृच्छिक नहीं हो सकते हैं। यूनिक्स सिस्टम पर, /dev/random अधिक एन्ट्रॉपी की प्रतीक्षा करते समय अवरुद्ध होगा, जबकि /dev/urandom छद्म-यादृच्छिक संख्याएं उत्पन्न करना शुरू कर देगा।

मैं पीईक्रिप्टो पर जानकार नहीं हूं, हालांकि स्रोत पढ़ने पर, ऐसा लगता है कि Crypto/Random/OSRNG/posix.py बस /dev/urandom से पढ़ता है - इसलिए मैं पसंद के बारे में बहुत ज्यादा चिंता नहीं करता।

9

मैं os.urandom के लिए जाना शुरू होता है के लिए नीचे स्क्रॉल। मैंने (हालिया) पाइथन कार्यान्वयन की जांच की है, यह को कनेक्शन /dev/urandom या अन्य गैर-लिनक्स प्लेटफ़ॉर्म पर समकक्ष डिवाइस को खोलकर सही चीज़ करता है।

दूसरी ओर, PyCrypto का Crypto.Random फोर्टुना पर आधारित एक बहुत ही जटिल आवरण है। अंतर्निहित ओएस की कुछ त्रुटियों को कम करने की उम्मीद में ऐसा जटिल निर्माण संभवतः किया गया था।दुर्भाग्य:

  • यह अभी भी एन्ट्रापी /dev/urandom (लिनक्स पर) से, खींचती है, इसलिए यदि ओएस टूटी हुई है, PyCrypto के Crypto.Random भी ध्वस्त किया जा सकता (अपने उद्देश्य को हराने)
  • यह विकल्प उलटा असर हुआ है, क्योंकि यह बहुत कठिन है फोर्किंग और मामलों से निपटने के लिए जहां एक ही एन्ट्रॉपी को विभिन्न प्रक्रियाओं द्वारा पुन: उपयोग किया जाता है (CVE-2013-1445 देखें)।
  • फोर्टुना कोड यूनिट परीक्षणों द्वारा बिल्कुल कवर नहीं किया गया है और फोर्टुना एल्गोरिदम स्वयं परीक्षण वैक्टरों के साथ नहीं आता है। वह अकेला आपको विश्वास की एक बड़ी (बड़ी) छलांग लगाने के लिए मजबूर करता है।
संबंधित मुद्दे