मुझे सी ++ 11 में क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक डेटा जेनरेट करने की आवश्यकता है और मुझे चिंता है कि सभी डेटा के लिए random_device का उपयोग करके प्रदर्शन को गंभीर रूप से सीमित कर दिया जाएगा (स्टीफन टी। Lavavej के "rand() Considered Harmful" की स्लाइड 23 देखें, जहां वह कहता है कि जब वह इसका परीक्षण किया गया (उसकी प्रणाली पर), random_device 1.93 एमबी/एस था और mt19937 49 9 एमबी/एस था) क्योंकि यह कोड मोबाइल उपकरणों (जेएनआई और आईओएस के माध्यम से एंड्रॉइड) पर चल रहा है जो शायद ऊपर की संख्या से धीमे हैं।क्या मैं शोधन के साथ random_device और mt19937 के संयोजन से क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक डेटा उत्पन्न कर सकता हूं?
इसके अलावा मुझे पता है कि mt19937 क्रिप्टोग्राफी द्वारा सुरक्षित नहीं है हूँ, wikipedia से: "MT19937 के मामले में पुनरावृत्तियों की एक पर्याप्त संख्या (624 का अवलोकन करने के बाद से इस जहाँ से भविष्य पुनरावृत्तियों उत्पादित कर रहे हैं राज्य वेक्टर के आकार है) किसी को भविष्य के पुनरावृत्तियों की भविष्यवाणी करने की अनुमति देता है "।
उपर्युक्त सभी सूचनाओं को ध्यान में रखते हुए, क्या मैं mt19937 के प्रत्येक 624 पुनरावृत्तियों random_device से एक नया यादृच्छिक बीज उत्पन्न करके क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक डेटा उत्पन्न कर सकता हूं? या (संभवतः) बेहतर अभी तक, प्रत्येक एक्स पुनरावृत्तियों जहां एक्स एक यादृच्छिक संख्या है (random_device या mt19937 से random_device द्वारा बीजित) 1 और 624 के बीच?
'random_device' को भी गैर-निर्धारक होने की आवश्यकता नहीं है, इसलिए मुझे लगता है कि यह एक बहुत अच्छा विचार नहीं है। यदि आपको वास्तव में गैर-निर्धारिती डेटा की आवश्यकता है, तो ओएस ऑफ़र जो भी क्रिप्टो एपीआई का उपयोग करना संभवतः जाने का तरीका है। – Praetorian
@Praetorian आईओएस पर, एलएलवीएम/dev/urandom का उपयोग स्रोत के रूप में करता है जो [इस] के अनुसार क्रिप्टोग्राफ़िक रूप से सुरक्षित होने की गारंटी है (https://www.apple.com/br/ipad/business/docs/iOS_Security_Oct12.pdf) (पेज 7)। एंड्रॉइड पर, जीसीसी या तो/dev/random// dev/urandom का स्रोत के रूप में उपयोग करता है, इसलिए मैं ओपनएसएसएल और अन्य द्वारा उपयोग किए जाने वाले "/ dev/random" के साथ प्रारंभ करना चुन सकता हूं और गारंटी देता हूं (एंड्रॉइड की सर्वोत्तम क्षमता के लिए) कि यह गैर-निर्धारक –
है यदि आप जानते हैं कि प्राथमिकता 'random_device' के स्रोत एक सीएसपीआरएनजी के रूप में उपयोग के लिए उपयुक्त हैं, तो जाहिर है कि यह एक उपयुक्त विकल्प है। लेकिन मैं अभी भी आपके 'mt19937' विचार से सावधान रहूंगा। जब क्रिप्टोग्राफी की बात आती है तो एक साधारण नियम होना चाहिए, जब तक कि आप इस क्षेत्र में एक विशेषज्ञ न हों, हमेशा कुछ स्पष्ट रूप से चालाक करने पर मौजूदा सिद्ध समाधान पसंद करते हैं। वास्तव में उपन्यास विचार के साथ आने की तुलना में कुछ खराब करने की संभावना बहुत अधिक है। क्या आपने अपने विचार के थ्रूपुट का परीक्षण किया है? 'mt19937' में राज्य के 19937 बिट्स हैं, इसलिए अक्सर शोधन' random_device' से बेहतर प्रदर्शन नहीं कर सकता है – Praetorian