2015-09-01 6 views
9

हम जानते हैं, Mersenne ट्विस्टर is not crytographically secure:क्या कोई सी ++ 11 सीएसपीआरएनजी है?

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

लेकिन कई स्रोत, जैसे Stephan T. Lavavej और यहां तक ​​कि this website। सलाह लगभग हमेशा (शब्दशः) इस तरह Mersenne ट्विस्टर उपयोग करने के लिए है:

auto engine = mt19937{random_device{}()}; 

वे std::tm जोड़ तोड़ की std::seed_seq या जटिल तरीके का उपयोग कर की तरह अलग अलग रूपों में आता है, है, लेकिन यह सबसे आसान तरीका है।

हालांकि std::random_deviceis not always reliable:

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

/dev/urandom बनाम /dev/random बहस rages on

लेकिन मानक पुस्तकालय पीआरएनजी का एक अच्छा संग्रह प्रदान करता है, लेकिन ऐसा लगता है कि यह कोई भी सीएसपीआरएनजी प्रदान नहीं करता है। मैं पॉज़िक्स, लिनक्स-केवल हेडर इत्यादि का उपयोग करने के बजाय मानक लाइब्रेरी से चिपकना पसंद करता हूं। क्या मेर्सन ट्विस्टर को क्रिप्टोग्राफिक रूप से सुरक्षित बनाने के लिए इस्तेमाल किया जा सकता है?

+0

डाउनवॉटर के लिए, मैं अपना प्रश्न कैसे सुधार सकता हूं? – user5287986

+0

डाउनवॉटर नहीं (वास्तव में ऊपर से ऊपर), लेकिन मुझे लगता है कि आपको लिंक क्लिक करने योग्य बनाना चाहिए। – dandan78

+11

* क्या मेर्सन ट्विस्टर को क्रिप्टोग्राफ़िक रूप से सुरक्षित बनाने के लिए छेड़छाड़ की जा सकती है? * नहीं –

उत्तर

5

दृश्य स्टूडियो गारंटी देता है कि random_device क्रिप्टोग्राफी द्वारा सुरक्षित और गैर नियतात्मक है: https://msdn.microsoft.com/en-us/library/bb982250.aspx

आप कुछ तेजी से या पार मंच चाहते हैं, आप हो सकता है उदाहरण के उपयोग GNUTLS के लिए: http://gnutls.org/manual/html_node/Random-number-generation.html यह समायोज्य गुणवत्ता के यादृच्छिक संख्या प्रदान करता है। GNUTLS_RND_RANDOM वह है जो आप चाहते हैं मुझे लगता है।

जैसा कि कई लोगों ने पहले ही कहा है, कृपया क्रिप्टोग्राफिक संदर्भों में एमटी के बारे में भूल जाओ।