BigInteger's .isProbablePrime () का संभावित उपयोग मामला क्या है?


84

विधिBigInteger.isProbablePrime() काफी अजीब है; दस्तावेज़ीकरण से, यह बताएगा कि क्या कोई संख्या एक प्रायिकता के साथ प्रमुख है 1 - 1 / 2^arg, जहां argपूर्णांक तर्क है।

यह काफी लंबे समय से जेडीके में मौजूद है, इसलिए इसका मतलब है कि इसका उपयोग होना चाहिए। कंप्यूटर विज्ञान और एल्गोरिदम (और गणित) में मेरा सीमित ज्ञान मुझे बताता है कि वास्तव में यह जानने के लिए कोई मतलब नहीं है कि क्या एक संख्या "शायद" एक प्रमुख है, लेकिन वास्तव में एक प्रमुख नहीं है।

तो, एक संभावित परिदृश्य क्या है जहां कोई इस पद्धति का उपयोग करना चाहेगा? क्रिप्टोग्राफी?



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

2
@ maxx777 जो दिया गया है - मैं एक वास्तविक उपयोग के मामले में पूछता हूं
fge


17
"यह काफी लंबे समय से जेडीके में मौजूद है, इसलिए इसका मतलब है कि इसका उपयोग होना चाहिए।" - या इसे एक बेकार कारण के लिए जोड़ा गया था, फिर हटाया नहीं गया क्योंकि कुछ भी कभी भी हटाया नहीं जाता है।
user253751

जवाबों:


67

हां, इस विधि का उपयोग क्रिप्टोग्राफी में किया जा सकता है। RSA एन्क्रिप्शन में कभी-कभी 1024 बिट्स (लगभग 300 अंक) के क्रम पर विशाल प्राइम नंबर की खोज शामिल होती है। आरएसए की सुरक्षा इस तथ्य पर निर्भर करती है कि एक संख्या को सम्मिलित करना जिसमें इन अभाज्य संख्याओं में से 2 को एक साथ गुणा करना बहुत कठिन और समय लेने वाला है। लेकिन इसके लिए काम करने के लिए, उन्हें प्रधान होना चाहिए।

यह पता चला है कि इन नंबरों को साबित करना मुश्किल है। लेकिन मिलर-राबिन प्राइमलिटी टेस्ट , प्राइमलिटी परीक्षणों में से एक का उपयोग करता है isProbablePrime, या तो यह पता लगाता है कि एक संख्या समग्र है या कोई निष्कर्ष नहीं देती है। इस परीक्षण nसमय को चलाने से आप यह निष्कर्ष निकाल सकते हैं कि 1 में 2 n अंतर है कि यह संख्या वास्तव में समग्र है। इसे चलाने 100से 2 100 में 1 का स्वीकार्य जोखिम होता है कि यह संख्या समग्र है।


3
@ Mr.777 मैंने राबिन-मिलर को एक या दो बार लेकिन मिलर-राबिन को दसियों बार देखा है। मुझे यकीन नहीं है कि वहाँ एक आधिकारिक नाम है।
कीसर

3
@ Mr.777 विकिपीडिया पृष्ठ से ऊपर मैंने पहले "मिलर-राबिन" को जोड़ा था, लेकिन दोनों नामों को स्वीकार करता है: "मिलर-राबिन प्राणिकता परीक्षण या राबिन-मिलर प्राणिकता परीक्षण"।
rgettman

5
का कार्यान्वयन isProbablyPrime(जहाँ तक मैं बता सकता हूँ) पूरी तरह से नियतात्मक है। परीक्षण के nसमय को चलाने से एक सही परिणाम की संभावना कैसे सुधरेगी? (भले ही यह यादृच्छिकता का एक तत्व था, किसी को आपके द्वारा बताए गए तरीके से जोखिम को प्रभावित करने के लिए कई कॉल की यादृच्छिकता के लिए स्वतंत्र होने की आवश्यकता होगी।)
टेड हॉप

11
@TedHopp कार्यान्वयन एक यादृच्छिक जनरेटर का उपयोग करता है, और एक नया यादृच्छिक संख्याओं के साथ प्रत्येक दौर एक समग्र का पता लगाने का 3/4 मौका देता है। डिफ़ॉल्ट जनरेटर सुरक्षित रैंडम है, जिसमें मजबूत यादृच्छिकता की गारंटी है।
वह दूसरा लड़का 19

4
यह मुश्किल हो सकता है, हालांकि याद रखें कि PRIMES पी में है। AKS परीक्षण मिलर-राबिन की तुलना में धीमा हो सकता है, लेकिन उनके बीच कोई घातीय अंतर या बहुपद नहीं है। आप संभावित अपराधों का एक समूह खोजने के लिए मिलर-राबिन का उपयोग कर सकते हैं और निश्चित रूप से प्रोक करने के लिए एकेएस का उपयोग कर सकते हैं कि वे primes हैं।
बाकूरी

20

यदि परीक्षण बताता है कि पूर्णांक प्रमुख नहीं है , तो आप निश्चित रूप से मान सकते हैं कि 100%।

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

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

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


4
यह ध्यान देने योग्य है कि AKS केवल अगस्त 2002 में खोजा गया था, जबकि यह विधि फरवरी 2002 से JDK में रही है
James_pic

3
नहीं, रुको, यह फरवरी 1997 से probablePrimeisProbablePrime
जेडीके में है

1
दरअसल, अग्रवाल, कयाल और सक्सेना के 2002 के पेपर "PRIMES इन पी" का शीर्षक है, नियतात्मक (सामान्य पूर्णांक) के लिए बहुपद ( एन की थोड़ी लंबाई में ) जटिलता का पहला बिना शर्त प्रमाण है: प्रचंडता परीक्षण। मिलर (1975) ने दिखाया था कि, GRH को मानते हुए , पूर्णांक की शुद्धता को बिट लंबाई की चौथी शक्ति के आनुपातिक रूप से चरणों में निर्धारित किया जा सकता है, जो वर्तमान में AKS या अन्य वेरिएंट की तुलना में बहुत बेहतर घातांक है।
हार्डमैथ

जबकि AKS असमान रूप से तेज है, ECPP जैसे तरीके 'क्रिप्टोग्राफिक' या 'औद्योगिक' अपराधों के लिए बहुत अधिक कुशल होंगे।
ब्रेट हेल

2
एकेएस पागलपन से धीमा है, और भूवैज्ञानिक पैमाने के समय में किसी भी संख्या के लिए एपीआर-सीएल से अधिक तेज नहीं होगा, मानव स्तर से बहुत कम। एपीआर-सीएल और ईसीपीपी 1997 में पहले से ही थे। ब्रेट का उल्लेख है, अगर हम एक प्रमाण चाहते हैं तो ईसीपीपी एक अच्छा विकल्प है। ये सभी संभावित मुख्य विधियों (जैसे MR, BPSW, फ्रोबेनियस) की तुलना में धीमी हैं।
दनाज

19

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

कितना ऊँचा है? खैर, एक क्रिप्टो आवेदन में, एक आम तौर पर .isProbablePrime()128 और 256 के बीच एक तर्क के साथ कॉल करेगा। इस प्रकार, इस तरह के एक परीक्षण को पारित करने वाले गैर-अभाज्य संख्या की संभावना 2 128 या 2 256 में से एक से कम है ।

आइए डालते हैं परिप्रेक्ष्य में: यदि आपके पास 10 बिलियन कंप्यूटर थे, तो प्रत्येक में 10 बिलियन संभावित प्राइम नंबर प्रति सेकंड (जो कि किसी भी आधुनिक सीपीयू पर प्रति नंबर एक घड़ी चक्र से कम होगा), और उन नंबरों की मौलिकता के साथ परीक्षण किया गया था .isProbablePrime(128), आप औसतन, हर 100 बिलियन वर्षों में एक बार नॉन-प्राइम नंबर आने की उम्मीद है ।

यही है, यह मामला होगा, अगर उन 10 बिलियन कंप्यूटर किसी भी तरह से सैकड़ों अरबों वर्षों तक बिना किसी हार्डवेयर विफलता के अनुभव कर सकते हैं । व्यवहार में, हालांकि, यह एक बहुत अधिक संभावना है कि एक यादृच्छिक कॉस्मिक किरण के लिए सही समय और वापसी मान फ्लिप करने के स्थान पर अपने कंप्यूटर हड़ताल है की .isProbablePrime(128)किसी अन्य पता लगाने योग्य प्रभाव पैदा करने के बिना, असत्य से सत्य में, की तुलना में यह एक गैर के लिए है -प्रमाण संख्या वास्तव में उस निश्चित स्तर पर संभाव्य परिमाण परीक्षण पास करने के लिए।

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

चूँकि इस आधारभूत दर से बहुत नीचे तक उपयोग की जाने वाली मिलर-राबिन प्राइमलिटी टेस्ट की आंतरिक झूठी सकारात्मक दर को धकेलना आसान है .isProbablePrime(), बस कई बार परीक्षण को पर्याप्त रूप से दोहराकर, और तब से, कई बार दोहराया गया, मिलर-राबिन परीक्षण अभी भी है AKS जैसे सर्वश्रेष्ठ ज्ञात नियतात्मक प्राणिकता परीक्षणों की तुलना में व्यवहार में बहुत तेज है, यह क्रिप्टोग्राफिक अनुप्रयोगों के लिए मानक प्राणिकता परीक्षण है।

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


गलती का मुद्दा एक कारण है कि AKS वास्तव में उपयोग नहीं किया गया है (आश्चर्यजनक धीमी गति अन्य है), और ECPP अधिक सामान्य है। जैसा कि आप ध्यान दें, एल्गोरिदम में कार्यान्वयन त्रुटियां काफी संभव हैं, इसलिए स्वतंत्र कोड के साथ सत्यापित प्रमाणपत्र होना सहायक है।
दनाज

8

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


तो, क्या व्यावहारिकता प्रयोजनों के लिए है? और इस तथ्य के कारण कि प्रधान कारक एक एनपी समस्या है?
18

@fge - हां, मैंने जो प्रस्ताव प्रस्ताव रखा है वह व्यावहारिकता के लिए है। मुझे नहीं पता है कि यह प्रधान कारक के साथ मदद करता है, जो कि परिमाण के परीक्षण की तुलना में काफी कठिन समस्या है। उत्तरार्द्ध के लिए, एक बहुपद-कालिक एल्गोरिथ्म है: एकेएस प्राइमलिटी टेस्ट
टेड होप

5
@fge: फैक्टराइज़ेशन वास्तव में एनपी में है, लेकिन मुझे संदेह है कि आपका मतलब "एनपी-पूर्ण" है, जो कि फैक्टरिज़ेशन के लिए ज्ञात नहीं है। इसके विपरीत एनपी-हार्ड होने का दृढ़ता से संदेह है ।
हमखोलम ने मोनिका

6

क्रिप्टोग्राफी में संभावित प्राइम्स खोजना एक महत्वपूर्ण समस्या है। यह पता चलता है कि संभावित k-bit प्राइम को खोजने के लिए एक उचित रणनीति बार-बार एक यादृच्छिक k-बिट संख्या का चयन करना है, और इस तरह की विधि का उपयोग करके संभावित व्यावहारिकता के लिए परीक्षण करना है isProbablePrime()

आगे की चर्चा के लिए, एप्लाइड क्रिप्टोग्राफी की हैंडबुक की धारा 4.4.1 देखें ।

इसके अलावा Brandt और Damgård द्वारा वृद्धिशील खोज द्वारा संभावित अपराधों की पीढ़ी को देखें ।


5

RSA प्रमुख पीढ़ी जैसे एल्गोरिदम यह निर्धारित करने में सक्षम हैं कि कोई संख्या प्रधान है या नहीं।

हालाँकि, उस समय जिस isProbablePrimeविधि को JDK (फरवरी 1997) में जोड़ा गया था , उस समय यह निर्धारित करने का कोई सिद्ध तरीका नहीं था कि क्या उचित समय में कोई संख्या प्रमुख थी। उस समय का सबसे प्रसिद्ध दृष्टिकोण मिलर-राबिन एल्गोरिथ्म था - एक संभाव्य एल्गोरिथ्म जो कभी-कभी झूठी सकारात्मकता देता है (यानी, गैर-अपराधों को primes के रूप में रिपोर्ट करेगा), लेकिन झूठी सकारात्मक की संभावना को कम करने के लिए तैयार किया जा सकता है, कीमत पर। रनटाइम में मामूली वृद्धि होती है।

तब से, एल्गोरिदम का पता चला है जो निश्चित रूप से तय कर सकता है कि क्या एक संख्या मुख्य रूप से जल्दी से है, जैसे कि एकेएस एल्गोरिथ्म जिसे अगस्त 2002 में खोजा गया था। हालांकि, यह ध्यान दिया जाना चाहिए कि ये एल्गोरिदम अभी भी मिलर-राबिन के रूप में तेज़ नहीं हैं।

शायद एक बेहतर सवाल यह है कि isPrime2002 के बाद से जेडीके में कोई तरीका क्यों नहीं जोड़ा गया।


ऐतिहासिक परिप्रेक्ष्य के लिए धन्यवाद! ऐसा लगता है कि @ Jemk के बारे में अपनी टिप्पणी के साथ @immibis सही रास्ते पर था, लेकिन कभी नहीं हटाया गया ", फिर? :)
१४'१४:

1
मुझे पता है कि जावा प्रसिद्ध पुस्तकालय से सामान को कभी नहीं हटाता है, लेकिन मुझे यकीन नहीं है कि वे इसे हटा सकते हैं, भले ही वे कर सकते हों। कुछ अनुप्रयोगों के लिए, 99.999999999% होना निश्चित है कि कुछ का प्राइम काफी अच्छा है, और 100% सुनिश्चित होने की तुलना में बहुत तेज़ है।
जेम्स_पिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.