एक डिजिटल हस्ताक्षर बड़े-पूर्णांकों को कैसे संभालता है?
जटिलता के लिए, डिजिटल हस्ताक्षर पैरामीटर के रूप में बड़े-पूर्णांक का उपयोग करते हैं।
ऊपर दिए गए चित्र से, चर a
को छोड़कर, सभी चर बड़े-पूर्णांक हैं (या हो सकते हैं)। जब किसी हस्ताक्षर को सत्यापित करने की आवश्यकता होती है, तो कोई कम्प्यूटेशनल समस्याओं को कैसे संभालता है?
Ya
,S1
,S2
और q
बड़े पूर्णांक हैं। बड़े-पूर्णांकों के बीच तालमेल बिठाना वास्तव में कठिन है। गणना के समय को कम करने का एक तरीका है अन्यथा लोग डिजिटल हस्ताक्षर का उपयोग नहीं कर सकते।
क्या कोई जानता है कि बड़े-पूर्णांक से कैसे निपटें ??
2 जवाब
खोज के बाद मुझे एक समाधान मिला। विचार तीन मापदंडों के साथ पाउ () का उपयोग कर रहा है। मूल सूत्र है:
v2 = (pow(y_a,s1)*pow(s1,s2))%q
जब पाउ () फ़ंक्शन में केवल दो पैरामीटर होते हैं, तो यह उतना तेज़ नहीं होता जितना कि इसके तीन पैरामीटर होते हैं। इस मामले में पाउ() में केवल y_a और s1 दो पैरामीटर हैं।
नया सूत्र है:
v2 = pow(y_a,s1,q)%q * pow(s1,s2,q)%q
पाउ () बनाने के तीन पैरामीटर हैं, गणना की गति में नाटकीय रूप से वृद्धि हुई है।
जिसे आप "बिग-इंटीजर" कहते हैं, जिसे "बिग्नम" अंकगणित भी कहा जाता है, एईएस जैसे सममित एन्क्रिप्शन की तुलना में संसाधित प्रति बाइट सीपीयू चक्र के संदर्भ में वास्तव में धीमा है। लेकिन, सार्वजनिक कुंजी क्रिप्टोग्राफी में, उदा। डिजिटल हस्ताक्षरों में, प्रोटोकॉल इस तरह से डिज़ाइन किए जाते हैं कि बिग्नम अंकगणित का उपयोग कम से कम हो। उदाहरण के लिए, एक बहुत बड़े संदेश का डिजिटल हस्ताक्षर बनाने के लिए, बिग्नम अंकगणित पूरे संदेश पर लागू नहीं होता है। इसके बजाय, संदेश को पहले क्रिप्टोग्राफिक रूप से मजबूत हैश फ़ंक्शन द्वारा संपीड़ित किया जाता है जो एक छोटा डाइजेस्ट उत्पन्न करता है, उदाहरण के लिए, 384 बिट्स। फिर, बिग्नम अंकगणित केवल इस छोटे से पाचन पर लागू होता है। हैश फ़ंक्शन बहुत तेज़ हैं। उदाहरण के लिए, 2015 में जारी एक इंटेल स्काईलेक सीपीयू पर, कोर i7 6700K की तरह, एक हैश फ़ंक्शन संदेश के प्रति बाइट सीपीयू चक्रों की लगभग निम्नलिखित संख्या लेता है: MD5 - 5, SHA1 - 4, SHA2-384 - 5, SHA3-384 - 11.
सार्वजनिक कुंजी क्रिप्टोग्राफी पर आधारित अन्य सुरक्षा प्रोटोकॉल में भी यही है, जैसे टीएलएस में: बिग्नम अंकगणित का उपयोग केवल सत्र की शुरुआत में किया जाता है, जबकि आगे डेटा ट्रांसफर में बिग्नम अंकगणित शामिल नहीं होता है। और "सत्र बहाली" के लिए टीएलएस प्रोटोकॉल के विस्तार हैं जो बिग्नम अंकगणित के उपयोग को और कम करने में मदद करते हैं।
कंप्यूटर विज्ञान में, मनमाना-सटीक अंकगणित, जिसे भी कहा जाता है बिग्नम अंकगणित, बहु-सटीक अंकगणित, या कभी-कभी अनंत-सटीक अंकगणित, इंगित करता है कि गणनाएं हैं उन संख्याओं पर प्रदर्शन किया जाता है जिनकी सटीकता के अंक केवल द्वारा सीमित होते हैं होस्ट सिस्टम की उपलब्ध मेमोरी। यह तेजी से विपरीत है निश्चित-सटीक अंकगणित अधिकांश अंकगणितीय तर्क इकाई (ALU) में पाया जाता है हार्डवेयर, जो आम तौर पर 8 और 64 बिट की सटीकता के बीच प्रदान करता है। (स्रोत: विकिपीडिया लेख मनमानी-सटीक अंकगणित पर)
कुछ प्रोग्रामिंग भाषाओं को बड़ी संख्या में अंकगणित को संभालने के लिए एक पुस्तकालय की आवश्यकता होती है, जबकि अन्य भाषाओं में पुस्तकालय का निर्माण होता है। उदाहरण के लिए, आप पुस्तकालय को जोड़ने की चिंता किए बिना बड़ी संख्या में अंकगणितीय संचालन करने के लिए सीधे पायथन प्रोग्रामिंग भाषा का उपयोग कर सकते हैं। पायथन "बिग्नम" पूर्णांक प्रकार का समर्थन करता है, जो मनमाने ढंग से बड़ी संख्या को संभाल सकता है। 2006 में जारी पायथन संस्करण 2.5 में, या बाद के संस्करण में, इस प्रकार को लंबा कहा जाता है और इसे इंट प्रकार से अलग किया जाता है, लेकिन दुभाषिया स्वचालित रूप से अधिक उपयुक्त प्रकार का उपयोग करेगा। पायथन में, आपको केवल मानक प्रदर्शन करने की आवश्यकता है गणितीय संचालन, और 32-बिट सीमा से परे कोई भी संख्या स्वचालित रूप से और पारदर्शी रूप से बिग्नम में परिवर्तित हो जाएगी।
आप विकिपीडिया पर विभिन्न प्रोग्रामिंग भाषाओं के लिए "बिग्नम" अंकगणित का समर्थन करने वाले पुस्तकालयों की सूची प्राप्त कर सकते हैं.
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।