मोंटगोमरी मॉड्यूलर गुणन: Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Algorithm for fast modular multiplication}} मॉड्यूलर अंकगणितीय संगणना में, मोंटगोमर...")
 
No edit summary
Line 1: Line 1:
{{short description|Algorithm for fast modular multiplication}}
{{short description|Algorithm for fast modular multiplication}}
[[मॉड्यूलर अंकगणित]]ीय संगणना में, मोंटगोमरी मॉड्यूलर गुणन, जिसे आमतौर पर मोंटगोमरी गुणन के रूप में संदर्भित किया जाता है, तेजी से मॉड्यूलर गुणन करने की एक विधि है। इसे 1985 में अमेरिकी गणितज्ञ पीटर मॉन्टगोमरी (गणितज्ञ) द्वारा पेश किया गया था | पीटर एल. मॉन्टगोमरी।<ref name="montg1985">{{cite journal
[[मॉड्यूलर अंकगणित]]ीय संगणना में, मोंटगोमरी मॉड्यूलर गुणन, जिसे आमतौर पर मोंटगोमरी गुणन के रूप में संदर्भित किया जाता है, तेजी से मॉड्यूलर गुणन करने की विधि है। इसे 1985 में अमेरिकी गणितज्ञ पीटर मॉन्टगोमरी (गणितज्ञ) द्वारा पेश किया गया था | पीटर एल. मॉन्टगोमरी।<ref name="montg1985">{{cite journal
|authorlink=Peter Montgomery (mathematician) |first=Peter |last=Montgomery
|authorlink=Peter Montgomery (mathematician) |first=Peter |last=Montgomery
|doi=10.1090/S0025-5718-1985-0777282-X |doi-access=free
|doi=10.1090/S0025-5718-1985-0777282-X |doi-access=free
Line 8: Line 8:
|url=https://www.ams.org/journals/mcom/1985-44-170/S0025-5718-1985-0777282-X/S0025-5718-1985-0777282-X.pdf
|url=https://www.ams.org/journals/mcom/1985-44-170/S0025-5718-1985-0777282-X/S0025-5718-1985-0777282-X.pdf
}}</ref><ref name="kochanski">Martin Kochanski, [http://www.nugae.com/encryption/fap4/montgomery.htm "Montgomery Multiplication"] {{Webarchive|url=https://web.archive.org/web/20100327211550/http://www.nugae.com/encryption/fap4/montgomery.htm |date=2010-03-27 }} a colloquial explanation.</ref>
}}</ref><ref name="kochanski">Martin Kochanski, [http://www.nugae.com/encryption/fap4/montgomery.htm "Montgomery Multiplication"] {{Webarchive|url=https://web.archive.org/web/20100327211550/http://www.nugae.com/encryption/fap4/montgomery.htm |date=2010-03-27 }} a colloquial explanation.</ref>
मोंटगोमरी मॉड्यूलर गुणन संख्याओं के एक विशेष प्रतिनिधित्व पर निर्भर करता है जिसे मोंटगोमरी फॉर्म कहा जाता है। एल्गोरिथ्म मोंटगोमरी रूपों का उपयोग करता है {{mvar|a}} और {{mvar|b}} के मोंटगोमरी रूप की कुशलतापूर्वक गणना करने के लिए {{math|''ab'' mod ''N''}}. दक्षता महंगे डिवीजन संचालन से बचने से आती है। शास्त्रीय मॉड्यूलर गुणन डबल-चौड़ाई वाले उत्पाद को कम करता है {{math|''ab''}} विभाजन का उपयोग करके {{mvar|N}} और केवल शेष को रखते हुए। इस विभाजन के लिए भागफल अंकों के अनुमान और सुधार की आवश्यकता है। इसके विपरीत, मोंटगोमरी रूप एक स्थिरांक पर निर्भर करता है {{mvar|R > N}} जो कि [[कोप्राइम पूर्णांक]] है {{mvar|N}}, और मोंटगोमरी गुणन में आवश्यक एकमात्र विभाजन द्वारा विभाजन है {{mvar|R}}. अटल {{mvar|R}} चुना जा सकता है ताकि विभाजन द्वारा {{mvar|R}} आसान है, एल्गोरिथम की गति में काफी सुधार करता है। व्यवहार में, {{mvar|R}} हमेशा दो की शक्ति होती है, क्योंकि दो की शक्तियों द्वारा विभाजन को [[ थोड़ा स्थानांतरण ]] द्वारा लागू किया जा सकता है।
मोंटगोमरी मॉड्यूलर गुणन संख्याओं के विशेष प्रतिनिधित्व पर निर्भर करता है जिसे मोंटगोमरी फॉर्म कहा जाता है। एल्गोरिथ्म मोंटगोमरी रूपों का उपयोग करता है {{mvar|a}} और {{mvar|b}} के मोंटगोमरी रूप की कुशलतापूर्वक गणना करने के लिए {{math|''ab'' mod ''N''}}. दक्षता महंगे डिवीजन संचालन से बचने से आती है। शास्त्रीय मॉड्यूलर गुणन डबल-चौड़ाई वाले उत्पाद को कम करता है {{math|''ab''}} विभाजन का उपयोग करके {{mvar|N}} और केवल शेष को रखते हुए। इस विभाजन के लिए भागफल अंकों के अनुमान और सुधार की आवश्यकता है। इसके विपरीत, मोंटगोमरी रूप स्थिरांक पर निर्भर करता है {{mvar|R > N}} जो कि [[कोप्राइम पूर्णांक]] है {{mvar|N}}, और मोंटगोमरी गुणन में आवश्यक एकमात्र विभाजन द्वारा विभाजन है {{mvar|R}}. अटल {{mvar|R}} चुना जा सकता है ताकि विभाजन द्वारा {{mvar|R}} आसान है, एल्गोरिथम की गति में काफी सुधार करता है। व्यवहार में, {{mvar|R}} हमेशा दो की शक्ति होती है, क्योंकि दो की शक्तियों द्वारा विभाजन को [[ थोड़ा स्थानांतरण |थोड़ा स्थानांतरण]] द्वारा लागू किया जा सकता है।


कन्वर्ट करने की जरूरत है {{mvar|a}} और {{mvar|b}} मोंटगोमरी रूप में और उनके उत्पाद मोंटगोमरी रूप से बाहर का मतलब है कि मोंटगोमरी गुणन द्वारा एकल उत्पाद की गणना पारंपरिक या बैरेट कटौती एल्गोरिदम की तुलना में धीमी है। हालांकि, एक पंक्ति में कई गुणन करते समय, जैसा कि [[मॉड्यूलर घातांक]] में होता है, मध्यवर्ती परिणाम मोंटगोमरी रूप में छोड़े जा सकते हैं। तब प्रारंभिक और अंतिम रूपांतरण समग्र संगणना का एक नगण्य अंश बन जाता है। [[आरएसए (क्रिप्टोसिस्टम)]] और डिफी-हेलमैन की एक्सचेंज जैसे कई महत्वपूर्ण क्रिप्टो सिस्टम अंकगणितीय संचालन मोडुलो एक बड़ी विषम संख्या पर आधारित हैं, और इन क्रिप्टोसिस्टम्स के लिए, मोंटगोमरी गुणन का उपयोग करके संगणना {{mvar|R}} a power of two उपलब्ध विकल्पों से तेज है।<ref>[[Alfred J. Menezes]], Paul C. van Oorschot, and [[Scott A. Vanstone]]. [http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf ''Handbook of Applied Cryptography'']. CRC Press, 1996. {{isbn|0-8493-8523-7}}, chapter 14.</ref>
कन्वर्ट करने की जरूरत है {{mvar|a}} और {{mvar|b}} मोंटगोमरी रूप में और उनके उत्पाद मोंटगोमरी रूप से बाहर का मतलब है कि मोंटगोमरी गुणन द्वारा एकल उत्पाद की गणना पारंपरिक या बैरेट कटौती एल्गोरिदम की तुलना में धीमी है। हालांकि, पंक्ति में कई गुणन करते समय, जैसा कि [[मॉड्यूलर घातांक]] में होता है, मध्यवर्ती परिणाम मोंटगोमरी रूप में छोड़े जा सकते हैं। तब प्रारंभिक और अंतिम रूपांतरण समग्र संगणना का नगण्य अंश बन जाता है। [[आरएसए (क्रिप्टोसिस्टम)]] और डिफी-हेलमैन की एक्सचेंज जैसे कई महत्वपूर्ण क्रिप्टो सिस्टम अंकगणितीय संचालन मोडुलो बड़ी विषम संख्या पर आधारित हैं, और इन क्रिप्टोसिस्टम्स के लिए, मोंटगोमरी गुणन का उपयोग करके संगणना {{mvar|R}} a power of two उपलब्ध विकल्पों से तेज है।<ref>[[Alfred J. Menezes]], Paul C. van Oorschot, and [[Scott A. Vanstone]]. [http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf ''Handbook of Applied Cryptography'']. CRC Press, 1996. {{isbn|0-8493-8523-7}}, chapter 14.</ref>




Line 17: Line 17:
होने देना {{mvar|N}} धनात्मक पूर्णांक मापांक दर्शाता है। [[भागफल की अंगूठी]] {{math|'''Z'''/''N'''''Z'''}} में अवशेष वर्ग मॉड्यूल शामिल हैं {{mvar|N}}, यानी इसके तत्व फॉर्म के सेट हैं
होने देना {{mvar|N}} धनात्मक पूर्णांक मापांक दर्शाता है। [[भागफल की अंगूठी]] {{math|'''Z'''/''N'''''Z'''}} में अवशेष वर्ग मॉड्यूल शामिल हैं {{mvar|N}}, यानी इसके तत्व फॉर्म के सेट हैं
:<math>\{ a + kN \colon k \in \mathbf{Z} \},</math>
:<math>\{ a + kN \colon k \in \mathbf{Z} \},</math>
कहाँ {{mvar|a}} पूर्णांकों के बीच है। प्रत्येक अवशेष वर्ग पूर्णांकों का एक समूह है जैसे कि सेट में किसी भी दो पूर्णांकों का अंतर विभाज्य है {{mvar|N}} (और अवशेष वर्ग उस संपत्ति के संबंध में अधिकतम है; पूर्णांकों को अवशेष वर्ग से बाहर नहीं छोड़ा जाता है जब तक कि वे विभाज्यता की स्थिति का उल्लंघन नहीं करते)। अवशेष वर्ग के अनुरूप {{mvar|a}} अंकित है {{math|{{overline|''a''}}}}. अवशेष वर्गों की समानता को सर्वांगसमता कहा जाता है और निरूपित किया जाता है
कहाँ {{mvar|a}} पूर्णांकों के बीच है। प्रत्येक अवशेष वर्ग पूर्णांकों का समूह है जैसे कि सेट में किसी भी दो पूर्णांकों का अंतर विभाज्य है {{mvar|N}} (और अवशेष वर्ग उस संपत्ति के संबंध में अधिकतम है; पूर्णांकों को अवशेष वर्ग से बाहर नहीं छोड़ा जाता है जब तक कि वे विभाज्यता की स्थिति का उल्लंघन नहीं करते)। अवशेष वर्ग के अनुरूप {{mvar|a}} अंकित है {{math|{{overline|''a''}}}}. अवशेष वर्गों की समानता को सर्वांगसमता कहा जाता है और निरूपित किया जाता है
:<math>\bar a \equiv \bar b \pmod{N}.</math>
:<math>\bar a \equiv \bar b \pmod{N}.</math>
कंप्यूटर पर संपूर्ण अवशेष वर्ग को संग्रहीत करना असंभव है क्योंकि अवशेष वर्ग में असीम रूप से कई तत्व होते हैं। इसके बजाय, अवशेष वर्गों को प्रतिनिधि के रूप में संग्रहीत किया जाता है। परंपरागत रूप से, ये प्रतिनिधि पूर्णांक होते हैं {{mvar|a}} जिसके लिए {{math|0 &le; ''a'' &le; ''N'' &minus; 1}}. अगर {{mvar|a}} एक पूर्णांक है, तो इसका प्रतिनिधि है {{math|{{overline|''a''}}}} लिखा है {{math|''a'' mod ''N''}}. सर्वांगसमता लिखते समय, एक पूर्णांक की पहचान उस अवशेष वर्ग के साथ करना आम है जो यह प्रतिनिधित्व करता है। इस परिपाटी के साथ उपरोक्त समानता लिखी जाती है {{math|''a'' ≡ ''b'' mod ''N''}}.
कंप्यूटर पर संपूर्ण अवशेष वर्ग को संग्रहीत करना असंभव है क्योंकि अवशेष वर्ग में असीम रूप से कई तत्व होते हैं। इसके बजाय, अवशेष वर्गों को प्रतिनिधि के रूप में संग्रहीत किया जाता है। परंपरागत रूप से, ये प्रतिनिधि पूर्णांक होते हैं {{mvar|a}} जिसके लिए {{math|0 &le; ''a'' &le; ''N'' &minus; 1}}. अगर {{mvar|a}} पूर्णांक है, तो इसका प्रतिनिधि है {{math|{{overline|''a''}}}} लिखा है {{math|''a'' mod ''N''}}. सर्वांगसमता लिखते समय, पूर्णांक की पहचान उस अवशेष वर्ग के साथ करना आम है जो यह प्रतिनिधित्व करता है। इस परिपाटी के साथ उपरोक्त समानता लिखी जाती है {{math|''a'' ≡ ''b'' mod ''N''}}.


अवशेष वर्गों पर अंकगणित पहले उनके प्रतिनिधियों पर पूर्णांक अंकगणित करके किया जाता है। पूर्णांक ऑपरेशन का आउटपुट अवशेष वर्ग को निर्धारित करता है, और मॉड्यूलर ऑपरेशन का आउटपुट अवशेष वर्ग के प्रतिनिधि की गणना करके निर्धारित किया जाता है। उदाहरण के लिए, अगर {{math|1=''N'' = 17}}, फिर अवशेष वर्गों का योग {{math|{{overline|7}}}} और {{math|{{overline|15}}}} की गणना पूर्णांक योग ज्ञात करके की जाती है {{math|1=7 + 15 = 22}}, फिर निर्धारण {{math|22 mod 17}}, 0 और 16 के बीच का पूर्णांक जिसका अंतर 22 के साथ 17 का गुणक है। इस मामले में, वह पूर्णांक 5 है, इसलिए {{math|{{overline|7}} + {{overline|15}} ≡ {{overline|5}} mod 17}}.
अवशेष वर्गों पर अंकगणित पहले उनके प्रतिनिधियों पर पूर्णांक अंकगणित करके किया जाता है। पूर्णांक ऑपरेशन का आउटपुट अवशेष वर्ग को निर्धारित करता है, और मॉड्यूलर ऑपरेशन का आउटपुट अवशेष वर्ग के प्रतिनिधि की गणना करके निर्धारित किया जाता है। उदाहरण के लिए, अगर {{math|1=''N'' = 17}}, फिर अवशेष वर्गों का योग {{math|{{overline|7}}}} और {{math|{{overline|15}}}} की गणना पूर्णांक योग ज्ञात करके की जाती है {{math|1=7 + 15 = 22}}, फिर निर्धारण {{math|22 mod 17}}, 0 और 16 के बीच का पूर्णांक जिसका अंतर 22 के साथ 17 का गुणक है। इस मामले में, वह पूर्णांक 5 है, इसलिए {{math|{{overline|7}} + {{overline|15}} ≡ {{overline|5}} mod 17}}.
Line 25: Line 25:
== मोंटगोमरी फॉर्म ==
== मोंटगोमरी फॉर्म ==


अगर {{mvar|a}} और {{mvar|b}} श्रेणी में पूर्णांक हैं {{math|[0, ''N'' &minus; 1]}}, तो उनका योग सीमा में है {{math|[0, 2''N'' &minus; 2]}} और उनका अंतर सीमा में है {{math|[&minus;''N'' + 1, ''N'' &minus; 1]}}, इसलिए प्रतिनिधि का निर्धारण करना {{math|[0, ''N'' &minus; 1]}} के लिए अधिकतम एक घटाव या जोड़ (क्रमशः) आवश्यक है {{mvar|N}}. हालाँकि, उत्पाद {{math|''ab''}} के दायरे में है {{math|[0, ''N''<sup>2</sup> &minus; 2''N'' + 1]}}. मध्यवर्ती पूर्णांक उत्पाद का भंडारण {{math|''ab''}} को या तो दोगुने बिट्स की आवश्यकता होती है {{mvar|a}} या {{mvar|b}}, और कुशलता से प्रतिनिधि का निर्धारण {{math|[0, ''N'' &minus; 1]}} विभाजन की आवश्यकता है। गणितीय रूप से, 0 और के बीच का पूर्णांक {{math|''N'' &minus; 1}} के अनुरूप है {{math|''ab''}} को यूक्लिडियन डिवीजन#प्रमेय के कथन को लागू करके व्यक्त किया जा सकता है:
अगर {{mvar|a}} और {{mvar|b}} श्रेणी में पूर्णांक हैं {{math|[0, ''N'' &minus; 1]}}, तो उनका योग सीमा में है {{math|[0, 2''N'' &minus; 2]}} और उनका अंतर सीमा में है {{math|[&minus;''N'' + 1, ''N'' &minus; 1]}}, इसलिए प्रतिनिधि का निर्धारण करना {{math|[0, ''N'' &minus; 1]}} के लिए अधिकतम घटाव या जोड़ (क्रमशः) आवश्यक है {{mvar|N}}. हालाँकि, उत्पाद {{math|''ab''}} के दायरे में है {{math|[0, ''N''<sup>2</sup> &minus; 2''N'' + 1]}}. मध्यवर्ती पूर्णांक उत्पाद का भंडारण {{math|''ab''}} को या तो दोगुने बिट्स की आवश्यकता होती है {{mvar|a}} या {{mvar|b}}, और कुशलता से प्रतिनिधि का निर्धारण {{math|[0, ''N'' &minus; 1]}} विभाजन की आवश्यकता है। गणितीय रूप से, 0 और के बीच का पूर्णांक {{math|''N'' &minus; 1}} के अनुरूप है {{math|''ab''}} को यूक्लिडियन डिवीजन#प्रमेय के कथन को लागू करके व्यक्त किया जा सकता है:
:<math>ab = qN + r,</math>
:<math>ab = qN + r,</math>
कहाँ {{mvar|q}} भागफल है <math>\lfloor ab / N \rfloor</math> और {{mvar|r}}, शेष, अंतराल में है {{math|[0, ''N'' &minus; 1]}}. शेष {{mvar|r}} है {{math|''ab'' mod ''N''}}. निर्धारण {{mvar|r}} कंप्यूटिंग द्वारा किया जा सकता है {{mvar|q}}, फिर घटाना {{math|''qN''}} से {{math|''ab''}}. उदाहरण के लिए, फिर से <math>N=17</math>, उत्पाद {{math|{{overline|7}} ⋅ {{overline|15}}}} कंप्यूटिंग द्वारा निर्धारित किया जाता है <math>7 \cdot 15 = 105</math>, विभाजित करना <math>\lfloor 105 / 17 \rfloor = 6</math>, और घटाना <math>105 - 6 \cdot 17 = 105 - 102 = 3</math>.
कहाँ {{mvar|q}} भागफल है <math>\lfloor ab / N \rfloor</math> और {{mvar|r}}, शेष, अंतराल में है {{math|[0, ''N'' &minus; 1]}}. शेष {{mvar|r}} है {{math|''ab'' mod ''N''}}. निर्धारण {{mvar|r}} कंप्यूटिंग द्वारा किया जा सकता है {{mvar|q}}, फिर घटाना {{math|''qN''}} से {{math|''ab''}}. उदाहरण के लिए, फिर से <math>N=17</math>, उत्पाद {{math|{{overline|7}} ⋅ {{overline|15}}}} कंप्यूटिंग द्वारा निर्धारित किया जाता है <math>7 \cdot 15 = 105</math>, विभाजित करना <math>\lfloor 105 / 17 \rfloor = 6</math>, और घटाना <math>105 - 6 \cdot 17 = 105 - 102 = 3</math>.


क्योंकि की गणना {{mvar|q}} विभाजन की आवश्यकता है, यह अधिकांश कंप्यूटर हार्डवेयर पर अवांछनीय रूप से महंगा है। मोंटगोमरी फॉर्म रिंग के तत्वों को व्यक्त करने का एक अलग तरीका है जिसमें मॉड्यूलर उत्पादों की गणना महंगे डिवीजनों के बिना की जा सकती है। जबकि विभाजन अभी भी जरूरी हैं, उन्हें एक अलग भाजक के संबंध में किया जा सकता है {{mvar|R}}. इस विभाजक को दो की शक्ति के रूप में चुना जा सकता है, जिसके लिए विभाजन को शिफ्टिंग, या मशीनी शब्दों की पूरी संख्या से बदला जा सकता है, जिसके लिए शब्दों को छोड़ कर विभाजन को बदला जा सकता है। ये विभाजन तेज़ हैं, इसलिए मोंटगोमरी फॉर्म का उपयोग करके मॉड्यूलर उत्पादों की गणना करने की अधिकांश लागत साधारण उत्पादों की गणना करने की लागत है।
क्योंकि की गणना {{mvar|q}} विभाजन की आवश्यकता है, यह अधिकांश कंप्यूटर हार्डवेयर पर अवांछनीय रूप से महंगा है। मोंटगोमरी फॉर्म रिंग के तत्वों को व्यक्त करने का अलग तरीका है जिसमें मॉड्यूलर उत्पादों की गणना महंगे डिवीजनों के बिना की जा सकती है। जबकि विभाजन अभी भी जरूरी हैं, उन्हें अलग भाजक के संबंध में किया जा सकता है {{mvar|R}}. इस विभाजक को दो की शक्ति के रूप में चुना जा सकता है, जिसके लिए विभाजन को शिफ्टिंग, या मशीनी शब्दों की पूरी संख्या से बदला जा सकता है, जिसके लिए शब्दों को छोड़ कर विभाजन को बदला जा सकता है। ये विभाजन तेज़ हैं, इसलिए मोंटगोमरी फॉर्म का उपयोग करके मॉड्यूलर उत्पादों की गणना करने की अधिकांश लागत साधारण उत्पादों की गणना करने की लागत है।


सहायक मापांक {{mvar|R}} एक धनात्मक पूर्णांक होना चाहिए जैसे कि {{math|1=gcd(''R'', ''N'') = 1}}. कम्प्यूटेशनल उद्देश्यों के लिए यह भी आवश्यक है कि विभाजन और कमी मोडुलो {{mvar|R}} सस्ती हैं, और मॉड्यूलस मॉड्यूलर गुणन के लिए तब तक उपयोगी नहीं है जब तक {{math|''R'' &gt; ''N''}}. अवशेष वर्ग का मोंटगोमरी रूप {{math|{{overline|''a''}}}} इसके संबंध में {{mvar|R}} है {{math|''aR'' mod ''N''}}, अर्थात यह अवशेष वर्ग का प्रतिनिधि है {{math|{{overline|''aR''}}}}. उदाहरण के लिए, मान लीजिए {{math|1=''N'' = 17}} ओर वो {{math|1=''R'' = 100}}. 3, 5, 7 और 15 के मोंटगोमरी रूप हैं {{math|1=300 mod 17 = 11}}, {{math|1=500 mod 17 = 7}}, {{math|1=700 mod 17 = 3}}, और {{math|1=1500 mod 17 = 4}}.
सहायक मापांक {{mvar|R}} धनात्मक पूर्णांक होना चाहिए जैसे कि {{math|1=gcd(''R'', ''N'') = 1}}. कम्प्यूटेशनल उद्देश्यों के लिए यह भी आवश्यक है कि विभाजन और कमी मोडुलो {{mvar|R}} सस्ती हैं, और मॉड्यूलस मॉड्यूलर गुणन के लिए तब तक उपयोगी नहीं है जब तक {{math|''R'' &gt; ''N''}}. अवशेष वर्ग का मोंटगोमरी रूप {{math|{{overline|''a''}}}} इसके संबंध में {{mvar|R}} है {{math|''aR'' mod ''N''}}, अर्थात यह अवशेष वर्ग का प्रतिनिधि है {{math|{{overline|''aR''}}}}. उदाहरण के लिए, मान लीजिए {{math|1=''N'' = 17}} ओर वो {{math|1=''R'' = 100}}. 3, 5, 7 और 15 के मोंटगोमरी रूप हैं {{math|1=300 mod 17 = 11}}, {{math|1=500 mod 17 = 7}}, {{math|1=700 mod 17 = 3}}, और {{math|1=1500 mod 17 = 4}}.


मोंटगोमरी रूप में जोड़ और घटाव वितरण कानून के कारण सामान्य मॉड्यूलर जोड़ और घटाव के समान हैं:
मोंटगोमरी रूप में जोड़ और घटाव वितरण कानून के कारण सामान्य मॉड्यूलर जोड़ और घटाव के समान हैं:
:<math>aR + bR = (a + b)R,</math>
:<math>aR + bR = (a + b)R,</math>
:<math>aR - bR = (a - b)R.</math>
:<math>aR - bR = (a - b)R.</math>
यह इस तथ्य का परिणाम है कि, क्योंकि {{math|1=gcd(''R'', ''N'') = 1}}, गुणा करके {{mvar|R}} योज्य समूह पर एक समरूपता है {{math|'''Z'''/''N'''''Z'''}}. उदाहरण के लिए, {{math|1=(7 + 15) mod 17 = 5}}, जो मोंटगोमरी रूप में बन जाता है {{math|1=(3 + 4) mod 17 = 7}}.
यह इस तथ्य का परिणाम है कि, क्योंकि {{math|1=gcd(''R'', ''N'') = 1}}, गुणा करके {{mvar|R}} योज्य समूह पर समरूपता है {{math|'''Z'''/''N'''''Z'''}}. उदाहरण के लिए, {{math|1=(7 + 15) mod 17 = 5}}, जो मोंटगोमरी रूप में बन जाता है {{math|1=(3 + 4) mod 17 = 7}}.


मॉन्टगोमरी रूप में गुणन, हालांकि, अधिक जटिल प्रतीत होता है। का सामान्य उत्पाद {{math|''aR''}} और {{math|''bR''}} के उत्पाद का प्रतिनिधित्व नहीं करता है {{mvar|a}} और {{mvar|b}} क्योंकि इसका एक अतिरिक्त कारक है {{mvar|R}}:
मॉन्टगोमरी रूप में गुणन, हालांकि, अधिक जटिल प्रतीत होता है। का सामान्य उत्पाद {{math|''aR''}} और {{math|''bR''}} के उत्पाद का प्रतिनिधित्व नहीं करता है {{mvar|a}} और {{mvar|b}} क्योंकि इसका अतिरिक्त कारक है {{mvar|R}}:
:<math>(aR \bmod N)(bR \bmod N) \bmod N = (abR)R \bmod N.</math>
:<math>(aR \bmod N)(bR \bmod N) \bmod N = (abR)R \bmod N.</math>
मोंटगोमरी रूप में कंप्यूटिंग उत्पादों के अतिरिक्त कारक को हटाने की आवश्यकता है {{mvar|R}}. जबकि विभाजन द्वारा {{mvar|R}} सस्ता है, मध्यवर्ती उत्पाद है {{math|(''aR'' mod ''N'')(''bR'' mod ''N'')}} से विभाज्य नहीं है {{mvar|R}} क्योंकि मॉडुलो ऑपरेशन ने उस संपत्ति को नष्ट कर दिया है। उदाहरण के लिए, 7 और 15 मॉड्यूल 17 के मोंटगोमरी रूपों का उत्पाद 3 और 4 का उत्पाद है, जो कि 12 है। चूंकि 12 100 से विभाज्य नहीं है, इसलिए अतिरिक्त कारक को हटाने के लिए अतिरिक्त प्रयास की आवश्यकता है {{mvar|R}}.
मोंटगोमरी रूप में कंप्यूटिंग उत्पादों के अतिरिक्त कारक को हटाने की आवश्यकता है {{mvar|R}}. जबकि विभाजन द्वारा {{mvar|R}} सस्ता है, मध्यवर्ती उत्पाद है {{math|(''aR'' mod ''N'')(''bR'' mod ''N'')}} से विभाज्य नहीं है {{mvar|R}} क्योंकि मॉडुलो ऑपरेशन ने उस संपत्ति को नष्ट कर दिया है। उदाहरण के लिए, 7 और 15 मॉड्यूल 17 के मोंटगोमरी रूपों का उत्पाद 3 और 4 का उत्पाद है, जो कि 12 है। चूंकि 12 100 से विभाज्य नहीं है, इसलिए अतिरिक्त कारक को हटाने के लिए अतिरिक्त प्रयास की आवश्यकता है {{mvar|R}}.


के अतिरिक्त कारक को हटाना {{mvar|R}} को एक पूर्णांक से गुणा करके किया जा सकता है {{math|''R''&prime;}} ऐसा है कि {{math|''RR''&prime; &equiv; 1 (mod ''N'')}}, यानी एक द्वारा {{math|''R''&prime;}} जिसका अवशेष वर्ग मॉड्यूलर व्युत्क्रम है {{mvar|R}} ख़िलाफ़ {{mvar|N}}. फिर, काम कर रहे मॉड्यूलो {{mvar|N}},
के अतिरिक्त कारक को हटाना {{mvar|R}} को पूर्णांक से गुणा करके किया जा सकता है {{math|''R''&prime;}} ऐसा है कि {{math|''RR''&prime; &equiv; 1 (mod ''N'')}}, यानी द्वारा {{math|''R''&prime;}} जिसका अवशेष वर्ग मॉड्यूलर व्युत्क्रम है {{mvar|R}} ख़िलाफ़ {{mvar|N}}. फिर, काम कर रहे मॉड्यूलो {{mvar|N}},
:<math>(aR \bmod N)(bR \bmod N)R' \equiv (aR)(bR)R^{-1} \equiv (ab)R \pmod{N}.</math>
:<math>(aR \bmod N)(bR \bmod N)R' \equiv (aR)(bR)R^{-1} \equiv (ab)R \pmod{N}.</math>
पूर्णांक {{math|''R''&prime;}} इस धारणा के कारण मौजूद है कि {{mvar|R}} और {{mvar|N}} कोप्राइम हैं। इसका निर्माण विस्तारित यूक्लिडियन एल्गोरिथम का उपयोग करके किया जा सकता है। [[विस्तारित यूक्लिडियन एल्गोरिथ्म]] कुशलतापूर्वक पूर्णांकों को निर्धारित करता है {{math|''R''&prime;}} और {{math|''N''&prime;}} जो बेज़ाउट की पहचान को संतुष्ट करते हैं:
पूर्णांक {{math|''R''&prime;}} इस धारणा के कारण मौजूद है कि {{mvar|R}} और {{mvar|N}} कोप्राइम हैं। इसका निर्माण विस्तारित यूक्लिडियन एल्गोरिथम का उपयोग करके किया जा सकता है। [[विस्तारित यूक्लिडियन एल्गोरिथ्म]] कुशलतापूर्वक पूर्णांकों को निर्धारित करता है {{math|''R''&prime;}} और {{math|''N''&prime;}} जो बेज़ाउट की पहचान को संतुष्ट करते हैं:
{{math|0 &lt; ''R''&prime; &lt; ''N''}}, {{math|0 &lt; ''N''&prime; &lt; ''R''}}, और:
{{math|0 &lt; ''R''&prime; &lt; ''N''}}, {{math|0 &lt; ''N''&prime; &lt; ''R''}}, और:
:<math>RR' - NN' = 1.</math>
:<math>RR' - NN' = 1.</math>
इससे पता चलता है कि मोंटगोमरी रूप में गुणा करना संभव है। मोंटगोमरी रूप में संख्याओं को गुणा करने के लिए एक सीधा एल्गोरिथम इसलिए गुणा करना है {{math|''aR'' mod ''N''}}, {{math|''bR'' mod ''N''}}, और {{math|''R''&prime;}} पूर्णांक के रूप में और मॉड्यूलो को कम करें {{mvar|N}}.
इससे पता चलता है कि मोंटगोमरी रूप में गुणा करना संभव है। मोंटगोमरी रूप में संख्याओं को गुणा करने के लिए सीधा एल्गोरिथम इसलिए गुणा करना है {{math|''aR'' mod ''N''}}, {{math|''bR'' mod ''N''}}, और {{math|''R''&prime;}} पूर्णांक के रूप में और मॉड्यूलो को कम करें {{mvar|N}}.


उदाहरण के लिए, 7 और 15 मॉड्यूल 17 को मोंटगोमरी फॉर्म में फिर से गुणा करने के लिए {{math|1=''R'' = 100}}, उपरोक्तानुसार 12 प्राप्त करने के लिए 3 और 4 के गुणनफल की गणना करें। विस्तारित यूक्लिडियन एल्गोरिथ्म का तात्पर्य है {{math|1=8⋅100 &minus; 47⋅17 = 1}}, इसलिए {{math|1=''R''&prime; = 8}}. 96 प्राप्त करने के लिए 12 को 8 से गुणा करें और 11 प्राप्त करने के लिए मॉडुलो 17 को कम करें। यह अपेक्षा के अनुरूप 3 का मोंटगोमरी रूप है।
उदाहरण के लिए, 7 और 15 मॉड्यूल 17 को मोंटगोमरी फॉर्म में फिर से गुणा करने के लिए {{math|1=''R'' = 100}}, उपरोक्तानुसार 12 प्राप्त करने के लिए 3 और 4 के गुणनफल की गणना करें। विस्तारित यूक्लिडियन एल्गोरिथ्म का तात्पर्य है {{math|1=8⋅100 &minus; 47⋅17 = 1}}, इसलिए {{math|1=''R''&prime; = 8}}. 96 प्राप्त करने के लिए 12 को 8 से गुणा करें और 11 प्राप्त करने के लिए मॉडुलो 17 को कम करें। यह अपेक्षा के अनुरूप 3 का मोंटगोमरी रूप है।
Line 53: Line 53:
== आरईडीसी एल्गोरिदम ==
== आरईडीसी एल्गोरिदम ==


जबकि उपरोक्त एल्गोरिदम सही है, यह गुणा करने की आवश्यकता के कारण मानक प्रतिनिधित्व में गुणा से धीमा है {{math|''R''&prime;}} और विभाजित करें {{mvar|N}}. मोंटगोमरी रिडक्शन, जिसे आरईडीसी के रूप में भी जाना जाता है, एक एल्गोरिथ्म है जो एक साथ उत्पाद की गणना करता है {{math|''R''&prime;}} और मॉड्यूलो को कम करता है {{mvar|N}} भोली विधि की तुलना में अधिक तेज़ी से। पारंपरिक मॉड्यूलर कमी के विपरीत, जो संख्या को इससे छोटा बनाने पर केंद्रित है {{mvar|N}}, मोंटगोमरी कटौती संख्या को और अधिक विभाज्य बनाने पर केंद्रित है {{mvar|R}}. यह एक छोटे गुणक को जोड़कर ऐसा करता है {{mvar|N}} जिसे अवशेष मोडुलो को रद्द करने के लिए चुना जाता है {{mvar|R}}. से परिणाम विभाजित करना {{mvar|R}} बहुत कम संख्या देता है। यह संख्या इतनी कम है कि यह लगभग रिडक्शन मॉडुलो है {{mvar|N}}, और कमी मोडुलो की गणना {{mvar|N}} केवल एक अंतिम सशर्त घटाव की आवश्यकता है। क्योंकि सभी संगणनाओं के संबंध में केवल कमी और विभाजन का उपयोग करके किया जाता है {{mvar|R}}, नहीं {{mvar|N}}, एल्गोरिद्म विभाजन द्वारा सीधी मॉड्यूलर कमी की तुलना में तेज़ी से चलता है।
जबकि उपरोक्त एल्गोरिदम सही है, यह गुणा करने की आवश्यकता के कारण मानक प्रतिनिधित्व में गुणा से धीमा है {{math|''R''&prime;}} और विभाजित करें {{mvar|N}}. मोंटगोमरी रिडक्शन, जिसे आरईडीसी के रूप में भी जाना जाता है, एल्गोरिथ्म है जो साथ उत्पाद की गणना करता है {{math|''R''&prime;}} और मॉड्यूलो को कम करता है {{mvar|N}} भोली विधि की तुलना में अधिक तेज़ी से। पारंपरिक मॉड्यूलर कमी के विपरीत, जो संख्या को इससे छोटा बनाने पर केंद्रित है {{mvar|N}}, मोंटगोमरी कटौती संख्या को और अधिक विभाज्य बनाने पर केंद्रित है {{mvar|R}}. यह छोटे गुणक को जोड़कर ऐसा करता है {{mvar|N}} जिसे अवशेष मोडुलो को रद्द करने के लिए चुना जाता है {{mvar|R}}. से परिणाम विभाजित करना {{mvar|R}} बहुत कम संख्या देता है। यह संख्या इतनी कम है कि यह लगभग रिडक्शन मॉडुलो है {{mvar|N}}, और कमी मोडुलो की गणना {{mvar|N}} केवल अंतिम सशर्त घटाव की आवश्यकता है। क्योंकि सभी संगणनाओं के संबंध में केवल कमी और विभाजन का उपयोग करके किया जाता है {{mvar|R}}, नहीं {{mvar|N}}, एल्गोरिद्म विभाजन द्वारा सीधी मॉड्यूलर कमी की तुलना में तेज़ी से चलता है।
  समारोह आरईडीसी है
  समारोह आरईडीसी है
    इनपुट: पूर्णांक ''आर'' और ''एन'' के साथ {{nowrap|1=gcd(''R'', ''N'') = 1}},
  इनपुट: पूर्णांक ''आर'' और ''एन'' के साथ {{nowrap|1=gcd(''R'', ''N'') = 1}},
            पूर्णांक एन' में {{nowrap|[0, ''R'' &minus; 1]}} ऐसा है कि {{nowrap|''NN''&prime; ≡ &minus;1 mod ''R''}},
    पूर्णांक एन' में {{nowrap|[0, ''R'' &minus; 1]}} ऐसा है कि {{nowrap|''NN''&prime; ≡ &minus;1 mod ''R''}},
            सीमा में पूर्णांक टी {{nowrap|[0, ''RN'' &minus; 1]}}.
    सीमा में पूर्णांक टी {{nowrap|[0, ''RN'' &minus; 1]}}.
    आउटपुट: श्रेणी में पूर्णांक ''एस'' {{nowrap|[0, ''N'' &minus; 1]}} ऐसा है कि {{nowrap|''S'' ≡ ''TR''<sup>&minus;1</sup> mod ''N''}}
  आउटपुट: श्रेणी में पूर्णांक ''एस'' {{nowrap|[0, ''N'' &minus; 1]}} ऐसा है कि {{nowrap|''S'' ≡ ''TR''<sup>&minus;1</sup> mod ''N''}}
   
   
    एम ← ((टी मॉड आर) एन ') मॉड आर
  एम ← ((टी मॉड आर) एन ') मॉड आर
    टी ← (टी + एमएन) / आर
  टी ← (टी + एमएन) / आर
    'अगर' टी ≥ एन 'फिर'
  'अगर' टी ≥ एन 'फिर'
        'वापस करना' {{nowrap|''t'' &minus; ''N''}}
  'वापस करना' {{nowrap|''t'' &minus; ''N''}}
    अन्य
  अन्य
        वापसी ''टी''
  वापसी ''टी''
    अगर अंत
  अगर अंत
  अंत समारोह
  अंत समारोह


यह देखने के लिए कि यह एल्गोरिदम सही है, पहले उसका निरीक्षण करें {{mvar|m}} ठीक से चुना जाता है ताकि {{math|''T'' + ''mN''}} से विभाज्य है {{mvar|R}}. एक संख्या से विभाज्य है {{mvar|R}} अगर और केवल अगर यह शून्य मॉड के अनुरूप है {{mvar|R}}, और हमारे पास है:
यह देखने के लिए कि यह एल्गोरिदम सही है, पहले उसका निरीक्षण करें {{mvar|m}} ठीक से चुना जाता है ताकि {{math|''T'' + ''mN''}} से विभाज्य है {{mvar|R}}. संख्या से विभाज्य है {{mvar|R}} अगर और केवल अगर यह शून्य मॉड के अनुरूप है {{mvar|R}}, और हमारे पास है:
:<math>T + mN \equiv T + (((T \bmod R)N') \bmod R)N \equiv T + T N' N \equiv T - T \equiv 0 \pmod{R}.</math>
:<math>T + mN \equiv T + (((T \bmod R)N') \bmod R)N \equiv T + T N' N \equiv T - T \equiv 0 \pmod{R}.</math>
इसलिए, {{mvar|t}} एक पूर्णांक है। दूसरा, आउटपुट या तो है {{mvar|t}} या {{math|''t'' &minus; ''N''}}, दोनों के सर्वांगसम हैं {{math|''t'' mod ''N''}}, तो यह साबित करने के लिए कि आउटपुट सर्वांगसम है {{math|''TR''<sup>&minus;1</sup> mod ''N''}}, यह साबित करने के लिए पर्याप्त है {{mvar|t}} है। सापेक्ष {{mvar|N}}, {{mvar|t}} संतुष्ट करता है:
इसलिए, {{mvar|t}} पूर्णांक है। दूसरा, आउटपुट या तो है {{mvar|t}} या {{math|''t'' &minus; ''N''}}, दोनों के सर्वांगसम हैं {{math|''t'' mod ''N''}}, तो यह साबित करने के लिए कि आउटपुट सर्वांगसम है {{math|''TR''<sup>&minus;1</sup> mod ''N''}}, यह साबित करने के लिए पर्याप्त है {{mvar|t}} है। सापेक्ष {{mvar|N}}, {{mvar|t}} संतुष्ट करता है:
:<math>t \equiv (T + mN)R^{-1} \equiv TR^{-1} + (mR^{-1})N \equiv TR^{-1} \pmod{N}.</math>
:<math>t \equiv (T + mN)R^{-1} \equiv TR^{-1} + (mR^{-1})N \equiv TR^{-1} \pmod{N}.</math>
इसलिए, आउटपुट में सही अवशेष वर्ग है। तीसरा, {{mvar|m}} में है {{math|[0, ''R'' &minus; 1]}}, और इसलिए {{math|''T'' + ''mN''}} 0 और के बीच है {{math|(''RN'' &minus; 1) + (''R'' &minus; 1)''N'' &lt; 2''RN''}}. इस तरह {{mvar|t}} मै रुक जाना {{math|2''N''}}, और क्योंकि यह एक पूर्णांक है, यह डालता है {{mvar|t}} सीमा में {{math|[0, 2''N'' &minus; 1]}}. इसलिए कम कर रहा है {{mvar|t}} वांछित सीमा में अधिकतम एक घटाव की आवश्यकता होती है, इसलिए एल्गोरिथम का आउटपुट सही सीमा में होता है।
इसलिए, आउटपुट में सही अवशेष वर्ग है। तीसरा, {{mvar|m}} में है {{math|[0, ''R'' &minus; 1]}}, और इसलिए {{math|''T'' + ''mN''}} 0 और के बीच है {{math|(''RN'' &minus; 1) + (''R'' &minus; 1)''N'' &lt; 2''RN''}}. इस तरह {{mvar|t}} मै रुक जाना {{math|2''N''}}, और क्योंकि यह पूर्णांक है, यह डालता है {{mvar|t}} सीमा में {{math|[0, 2''N'' &minus; 1]}}. इसलिए कम कर रहा है {{mvar|t}} वांछित सीमा में अधिकतम घटाव की आवश्यकता होती है, इसलिए एल्गोरिथम का आउटपुट सही सीमा में होता है।


7 और 15 मॉड्यूल 17 के उत्पाद की गणना करने के लिए आरईडीसी का उपयोग करने के लिए, पहले मोंटगोमेरी फॉर्म में कनवर्ट करें और उपरोक्त के रूप में 12 प्राप्त करने के लिए पूर्णांक के रूप में गुणा करें। इसके बाद आरईडीसी अप्लाई करें {{math|1=''R'' = 100}}, {{math|1=''N'' = 17}}, {{math|1=''N''&prime; = 47}}, और {{math|1=''T'' = 12}}. पहला कदम तय है {{mvar|m}} को {{math|1=12 ⋅ 47 mod 100 = 64}}. दूसरा चरण तय है {{mvar|t}} को {{math|(12 + 64 ⋅ 17) / 100}}. नोटिस जो {{math|12 + 64 ⋅ 17}} 1100 है, उम्मीद के मुताबिक 100 का गुणक। {{mvar|t}} 11 पर सेट है, जो 17 से कम है, इसलिए अंतिम परिणाम 11 है, जो पिछले अनुभाग की गणना से सहमत है।
7 और 15 मॉड्यूल 17 के उत्पाद की गणना करने के लिए आरईडीसी का उपयोग करने के लिए, पहले मोंटगोमेरी फॉर्म में कनवर्ट करें और उपरोक्त के रूप में 12 प्राप्त करने के लिए पूर्णांक के रूप में गुणा करें। इसके बाद आरईडीसी अप्लाई करें {{math|1=''R'' = 100}}, {{math|1=''N'' = 17}}, {{math|1=''N''&prime; = 47}}, और {{math|1=''T'' = 12}}. पहला कदम तय है {{mvar|m}} को {{math|1=12 ⋅ 47 mod 100 = 64}}. दूसरा चरण तय है {{mvar|t}} को {{math|(12 + 64 ⋅ 17) / 100}}. नोटिस जो {{math|12 + 64 ⋅ 17}} 1100 है, उम्मीद के मुताबिक 100 का गुणक। {{mvar|t}} 11 पर सेट है, जो 17 से कम है, इसलिए अंतिम परिणाम 11 है, जो पिछले अनुभाग की गणना से सहमत है।


एक अन्य उदाहरण के रूप में, उत्पाद पर विचार करें {{math|7 ⋅ 15 mod 17}} लेकिन इसके साथ {{math|1=''R'' = 10}}. विस्तारित यूक्लिडियन एल्गोरिथम का उपयोग करके गणना करें {{math|1=&minus;5 ⋅ 10 + 3 ⋅ 17 = 1}}, इसलिए {{math|''N''&prime;}} होगा {{math|1=&minus;3 mod 10 = 7}}. 7 और 15 के मोंटगोमरी रूप हैं {{math|1=70 mod 17 = 2}} और {{math|1=150 mod 17 = 14}}, क्रमश। उनका उत्पाद 28 इनपुट है {{mvar|T}} आरईडीसी के लिए, और उसके बाद से {{math|1=28 &lt; ''RN'' = 170}}, आरईडीसी की धारणाएं संतुष्ट हैं। आरईडीसी चलाने के लिए, सेट करें {{mvar|m}} को {{math|1=(28 mod 10) ⋅ 7 mod 10 = 196 mod 10 {{=}} 6}}. तब {{math|1=28 + 6 ⋅ 17 = 130}}, इसलिए {{math|1=''t'' = 13}}. क्योंकि {{math|1=30 mod 17 = 13}}, यह मोंटगोमरी का रूप है {{math|1=3 = 7 ⋅ 15 mod 17}}.
एक अन्य उदाहरण के रूप में, उत्पाद पर विचार करें {{math|7 ⋅ 15 mod 17}} लेकिन इसके साथ {{math|1=''R'' = 10}}. विस्तारित यूक्लिडियन एल्गोरिथम का उपयोग करके गणना करें {{math|1=&minus;5 ⋅ 10 + 3 ⋅ 17 = 1}}, इसलिए {{math|''N''&prime;}} होगा {{math|1=&minus;3 mod 10 = 7}}. 7 और 15 के मोंटगोमरी रूप हैं {{math|1=70 mod 17 = 2}} और {{math|1=150 mod 17 = 14}}, क्रमश। उनका उत्पाद 28 इनपुट है {{mvar|T}} आरईडीसी के लिए, और उसके बाद से {{math|1=28 &lt; ''RN'' = 170}}, आरईडीसी की धारणाएं संतुष्ट हैं। आरईडीसी चलाने के लिए, सेट करें {{mvar|m}} को {{math|1=(28 mod 10) ⋅ 7 mod 10 = 196 mod 10 {{=}} 6}}. तब {{math|1=28 + 6 ⋅ 17 = 130}}, इसलिए {{math|1=''t'' = 13}}. क्योंकि {{math|1=30 mod 17 = 13}}, यह मोंटगोमरी का रूप है {{math|1=3 = 7 ⋅ 15 mod 17}}.
Line 81: Line 81:
== मोंटगोमरी रूप में अंकगणित ==
== मोंटगोमरी रूप में अंकगणित ==


ब्याज मॉड्यूलो के कई संचालन {{mvar|N}} मोंटगोमरी रूप में समान रूप से अच्छी तरह से व्यक्त किया जा सकता है। जोड़, घटाव, निषेध, समानता के लिए तुलना, एक पूर्णांक द्वारा गुणा जो मोंटगोमरी रूप में नहीं है, और सबसे बड़ा सामान्य विभाजक है {{mvar|N}} सभी मानक एल्गोरिदम के साथ किया जा सकता है। [[जैकोबी प्रतीक]] की गणना इस प्रकार की जा सकती है <math>\big(\tfrac{a}{N}\big) = \big(\tfrac{aR}{N}\big) / \big(\tfrac{R}{N}\big)</math> जब तक कि <math>\big(\tfrac{R}{N}\big)</math> रखा है।
ब्याज मॉड्यूलो के कई संचालन {{mvar|N}} मोंटगोमरी रूप में समान रूप से अच्छी तरह से व्यक्त किया जा सकता है। जोड़, घटाव, निषेध, समानता के लिए तुलना, पूर्णांक द्वारा गुणा जो मोंटगोमरी रूप में नहीं है, और सबसे बड़ा सामान्य विभाजक है {{mvar|N}} सभी मानक एल्गोरिदम के साथ किया जा सकता है। [[जैकोबी प्रतीक]] की गणना इस प्रकार की जा सकती है <math>\big(\tfrac{a}{N}\big) = \big(\tfrac{aR}{N}\big) / \big(\tfrac{R}{N}\big)</math> जब तक कि <math>\big(\tfrac{R}{N}\big)</math> रखा है।


कब {{math|''R'' &gt; ''N''}}, अधिकांश अन्य अंकगणितीय संक्रियाएँ REDC के संदर्भ में व्यक्त की जा सकती हैं। इस धारणा का तात्पर्य है कि दो प्रतिनिधियों के उत्पाद मॉड {{mvar|N}} मै रुक जाना {{mvar|RN}}, सही आउटपुट उत्पन्न करने के लिए REDC के लिए आवश्यक सटीक परिकल्पना। विशेष रूप से, का उत्पाद {{math|''aR'' mod ''N''}} और {{math|''bR'' mod ''N''}} है {{math|REDC((''aR'' mod ''N'')(''bR'' mod ''N''))}}. गुणा और आरईडीसी के संयुक्त संचालन को अक्सर मोंटगोमरी गुणन कहा जाता है।
कब {{math|''R'' &gt; ''N''}}, अधिकांश अन्य अंकगणितीय संक्रियाएँ REDC के संदर्भ में व्यक्त की जा सकती हैं। इस धारणा का तात्पर्य है कि दो प्रतिनिधियों के उत्पाद मॉड {{mvar|N}} मै रुक जाना {{mvar|RN}}, सही आउटपुट उत्पन्न करने के लिए REDC के लिए आवश्यक सटीक परिकल्पना। विशेष रूप से, का उत्पाद {{math|''aR'' mod ''N''}} और {{math|''bR'' mod ''N''}} है {{math|REDC((''aR'' mod ''N'')(''bR'' mod ''N''))}}. गुणा और आरईडीसी के संयुक्त संचालन को अक्सर मोंटगोमरी गुणन कहा जाता है।
Line 87: Line 87:
मोंटगोमरी रूप में रूपांतरण कंप्यूटिंग द्वारा किया जाता है {{math|REDC((''a'' mod ''N'')(''R''<sup>2</sup> mod ''N''))}}. कंप्यूटिंग द्वारा मोंटगोमरी फॉर्म से रूपांतरण किया जाता है {{math|REDC(''aR'' mod ''N'')}}. का मॉड्यूलर व्युत्क्रम {{math|''aR'' mod ''N''}} है {{math|REDC((''aR'' mod ''N'')<sup>&minus;1</sup>(''R''<sup>3</sup> mod ''N''))}}. प्रारंभिक गुणनफल को 1 के मोंटगोमरी निरूपण के लिए प्रारंभ करके, वर्ग करके घातांक का उपयोग करके मॉड्यूलर घातांक किया जा सकता है, अर्थात {{math|''R'' mod ''N''}}, और मोंटगोमरी गुणा द्वारा गुणा और वर्ग चरणों को प्रतिस्थापित करके।
मोंटगोमरी रूप में रूपांतरण कंप्यूटिंग द्वारा किया जाता है {{math|REDC((''a'' mod ''N'')(''R''<sup>2</sup> mod ''N''))}}. कंप्यूटिंग द्वारा मोंटगोमरी फॉर्म से रूपांतरण किया जाता है {{math|REDC(''aR'' mod ''N'')}}. का मॉड्यूलर व्युत्क्रम {{math|''aR'' mod ''N''}} है {{math|REDC((''aR'' mod ''N'')<sup>&minus;1</sup>(''R''<sup>3</sup> mod ''N''))}}. प्रारंभिक गुणनफल को 1 के मोंटगोमरी निरूपण के लिए प्रारंभ करके, वर्ग करके घातांक का उपयोग करके मॉड्यूलर घातांक किया जा सकता है, अर्थात {{math|''R'' mod ''N''}}, और मोंटगोमरी गुणा द्वारा गुणा और वर्ग चरणों को प्रतिस्थापित करके।


इन परिचालनों को करने के लिए कम से कम जानना आवश्यक है {{math|''N''&prime;}} और {{math|''R''<sup>2</sup> mod ''N''}}. कब {{mvar|R}} एक छोटे सकारात्मक पूर्णांक की शक्ति है {{mvar|b}}, {{math|''N''&prime;}} की गणना हेंसल लेम्मा द्वारा की जा सकती है: का व्युत्क्रम {{mvar|N}} मापांक {{mvar|b}} की गणना एक भोले एल्गोरिथम द्वारा की जाती है (उदाहरण के लिए, if {{math|1=''b'' = 2}} तो व्युत्क्रम 1 है), और हेंसल की लेम्मा का उपयोग बार-बार व्युत्क्रम मॉड्यूल उच्च और उच्च शक्तियों को खोजने के लिए किया जाता है {{mvar|b}}, जब उलटा मोडुलो रुक जाता है {{mvar|R}} ज्ञात है; {{math|''N''&prime;}} इस व्युत्क्रम का निषेध है। स्थिरांक {{math|''R'' mod ''N''}} और {{math|''R''<sup>3</sup> mod ''N''}} के रूप में उत्पन्न किया जा सकता है {{math|REDC(''R''<sup>2</sup> mod ''N'')}} और के रूप में {{math|REDC((''R''<sup>2</sup> mod ''N'')(''R''<sup>2</sup> mod ''N''))}}. मौलिक ऑपरेशन किसी उत्पाद के आरईडीसी की गणना करना है। जब स्टैंडअलोन आरईडीसी की आवश्यकता होती है, तो इसकी गणना किसी उत्पाद के आरईडीसी के रूप में की जा सकती है {{math|1 mod ''N''}}. एकमात्र स्थान जहां प्रत्यक्ष कमी मोडुलो है {{mvar|N}} आवश्यक है के पूर्वगणना में है {{math|''R''<sup>2</sup> mod ''N''}}.
इन परिचालनों को करने के लिए कम से कम जानना आवश्यक है {{math|''N''&prime;}} और {{math|''R''<sup>2</sup> mod ''N''}}. कब {{mvar|R}} छोटे सकारात्मक पूर्णांक की शक्ति है {{mvar|b}}, {{math|''N''&prime;}} की गणना हेंसल लेम्मा द्वारा की जा सकती है: का व्युत्क्रम {{mvar|N}} मापांक {{mvar|b}} की गणना भोले एल्गोरिथम द्वारा की जाती है (उदाहरण के लिए, if {{math|1=''b'' = 2}} तो व्युत्क्रम 1 है), और हेंसल की लेम्मा का उपयोग बार-बार व्युत्क्रम मॉड्यूल उच्च और उच्च शक्तियों को खोजने के लिए किया जाता है {{mvar|b}}, जब उलटा मोडुलो रुक जाता है {{mvar|R}} ज्ञात है; {{math|''N''&prime;}} इस व्युत्क्रम का निषेध है। स्थिरांक {{math|''R'' mod ''N''}} और {{math|''R''<sup>3</sup> mod ''N''}} के रूप में उत्पन्न किया जा सकता है {{math|REDC(''R''<sup>2</sup> mod ''N'')}} और के रूप में {{math|REDC((''R''<sup>2</sup> mod ''N'')(''R''<sup>2</sup> mod ''N''))}}. मौलिक ऑपरेशन किसी उत्पाद के आरईडीसी की गणना करना है। जब स्टैंडअलोन आरईडीसी की आवश्यकता होती है, तो इसकी गणना किसी उत्पाद के आरईडीसी के रूप में की जा सकती है {{math|1 mod ''N''}}. एकमात्र स्थान जहां प्रत्यक्ष कमी मोडुलो है {{mvar|N}} आवश्यक है के पूर्वगणना में है {{math|''R''<sup>2</sup> mod ''N''}}.


== मल्टीप्रिसिजन पूर्णांकों पर मोंटगोमरी अंकगणित ==
== मल्टीप्रिसिजन पूर्णांकों पर मोंटगोमरी अंकगणित ==


अधिकांश क्रिप्टोग्राफ़िक अनुप्रयोगों के लिए संख्याओं की आवश्यकता होती है जो सैकड़ों या हजारों बिट्स लंबी होती हैं। ऐसी संख्याएँ एक मशीन शब्द में संग्रहीत करने के लिए बहुत बड़ी हैं। आमतौर पर, हार्डवेयर गुणन मॉड को कुछ आधार करता है {{mvar|B}}, इसलिए बड़े गुणा करने के लिए कई छोटे गुणाओं के संयोजन की आवश्यकता होती है। आधार {{mvar|B}} आमतौर पर माइक्रोइलेक्ट्रॉनिक अनुप्रयोगों के लिए 2 होता है, 2<sup>8</sup> 8-बिट फ़र्मवेयर के लिए,<ref name="kizhvatov" />या 2<sup>32</sup> या 2<sup>64</sup> सॉफ्टवेयर अनुप्रयोगों के लिए।
अधिकांश क्रिप्टोग्राफ़िक अनुप्रयोगों के लिए संख्याओं की आवश्यकता होती है जो सैकड़ों या हजारों बिट्स लंबी होती हैं। ऐसी संख्याएँ मशीन शब्द में संग्रहीत करने के लिए बहुत बड़ी हैं। आमतौर पर, हार्डवेयर गुणन मॉड को कुछ आधार करता है {{mvar|B}}, इसलिए बड़े गुणा करने के लिए कई छोटे गुणाओं के संयोजन की आवश्यकता होती है। आधार {{mvar|B}} आमतौर पर माइक्रोइलेक्ट्रॉनिक अनुप्रयोगों के लिए 2 होता है, 2<sup>8</sup> 8-बिट फ़र्मवेयर के लिए,<ref name="kizhvatov" />या 2<sup>32</sup> या 2<sup>64</sup> सॉफ्टवेयर अनुप्रयोगों के लिए।


REDC एल्गोरिद्म के लिए उत्पाद मॉड्यूल की आवश्यकता होती है {{mvar|R}}, और आम तौर पर {{math|''R'' &gt; ''N''}} ताकि उत्पादों की गणना करने के लिए आरईडीसी का उपयोग किया जा सके। हालाँकि, कब {{mvar|R}} की शक्ति है {{mvar|B}}, REDC का एक प्रकार है जिसके लिए केवल मशीन शब्द आकार के पूर्णांकों के उत्पादों की आवश्यकता होती है। मान लीजिए कि सकारात्मक बहु-परिशुद्धता पूर्णांक थोड़ा एंडियन संग्रहीत हैं, अर्थात, {{mvar|x}} को एक सरणी के रूप में संग्रहीत किया जाता है {{math|''x''[0], ..., ''x''[ℓ - 1]}} ऐसा है कि {{math|0 &le; ''x''[''i''] &lt; ''B''}} सभी के लिए {{mvar|i}} और {{math|1=''x'' = &sum; ''x''[''i''] ''B<sup>i</sup>''}}. एल्गोरिदम एक बहु-परिशुद्धता पूर्णांक से शुरू होता है {{mvar|T}} और इसे एक बार में एक शब्द कम कर देता है। पहले का एक उपयुक्त गुणक {{mvar|N}} बनाने के लिए जोड़ा जाता है {{mvar|T}} द्वारा विभाज्य {{mvar|B}}. फिर का एक गुणक {{mvar|N}} बनाने के लिए जोड़ा जाता है {{mvar|T}} द्वारा विभाज्य {{math|''B''<sup>2</sup>}}, और इसी तरह। अंततः {{mvar|T}} से विभाज्य है {{mvar|R}}, और विभाजन के बाद {{mvar|R}}एल्गोरिदम उसी स्थान पर है जहाँ REDC की गणना के बाद थी {{mvar|t}}.
REDC एल्गोरिद्म के लिए उत्पाद मॉड्यूल की आवश्यकता होती है {{mvar|R}}, और आम तौर पर {{math|''R'' &gt; ''N''}} ताकि उत्पादों की गणना करने के लिए आरईडीसी का उपयोग किया जा सके। हालाँकि, कब {{mvar|R}} की शक्ति है {{mvar|B}}, REDC का प्रकार है जिसके लिए केवल मशीन शब्द आकार के पूर्णांकों के उत्पादों की आवश्यकता होती है। मान लीजिए कि सकारात्मक बहु-परिशुद्धता पूर्णांक थोड़ा एंडियन संग्रहीत हैं, अर्थात, {{mvar|x}} को सरणी के रूप में संग्रहीत किया जाता है {{math|''x''[0], ..., ''x''[ℓ - 1]}} ऐसा है कि {{math|0 &le; ''x''[''i''] &lt; ''B''}} सभी के लिए {{mvar|i}} और {{math|1=''x'' = &sum; ''x''[''i''] ''B<sup>i</sup>''}}. एल्गोरिदम बहु-परिशुद्धता पूर्णांक से शुरू होता है {{mvar|T}} और इसे बार में शब्द कम कर देता है। पहले का उपयुक्त गुणक {{mvar|N}} बनाने के लिए जोड़ा जाता है {{mvar|T}} द्वारा विभाज्य {{mvar|B}}. फिर का गुणक {{mvar|N}} बनाने के लिए जोड़ा जाता है {{mvar|T}} द्वारा विभाज्य {{math|''B''<sup>2</sup>}}, और इसी तरह। अंततः {{mvar|T}} से विभाज्य है {{mvar|R}}, और विभाजन के बाद {{mvar|R}}एल्गोरिदम उसी स्थान पर है जहाँ REDC की गणना के बाद थी {{mvar|t}}.


  फंक्शन मल्टीप्रिसिजनआरईडीसी है
  फंक्शन मल्टीप्रिसिजनआरईडीसी है
    इनपुट: पूर्णांक ''एन'' के साथ {{nowrap|1=gcd(''B'', ''N'') = 1}}, पी शब्दों की एक सरणी के रूप में संग्रहीत,
  इनपुट: पूर्णांक ''एन'' के साथ {{nowrap|1=gcd(''B'', ''N'') = 1}}, पी शब्दों की सरणी के रूप में संग्रहीत,
            पूर्णांक {{nowrap|1=''R'' = ''B''<sup>''r''</sup>}}, --इस प्रकार, आर = लॉग<sub>''B''</sub> आर
    पूर्णांक {{nowrap|1=''R'' = ''B''<sup>''r''</sup>}}, --इस प्रकार, आर = लॉग<sub>''B''</sub> आर
            पूर्णांक एन' में {{nowrap|[0, ''B'' &minus; 1]}} ऐसा है कि {{nowrap|''NN''&prime; ≡ &minus;1 (mod ''B'')}},
    पूर्णांक एन' में {{nowrap|[0, ''B'' &minus; 1]}} ऐसा है कि {{nowrap|''NN''&prime; ≡ &minus;1 (mod ''B'')}},
            सीमा में पूर्णांक टी {{nowrap|0 &le; ''T'' &lt; ''RN''}}, की एक सरणी के रूप में संग्रहीत {{nowrap|''r'' + ''p''}} शब्द।
    सीमा में पूर्णांक टी {{nowrap|0 &le; ''T'' &lt; ''RN''}}, की सरणी के रूप में संग्रहीत {{nowrap|''r'' + ''p''}} शब्द।
   
   
    आउटपुट: पूर्णांक ''S'' in {{nowrap|[0, ''N'' &minus; 1]}} ऐसा है कि {{nowrap|''TR''<sup>&minus;1</sup> ≡ ''S'' (mod ''N'')}}, पी शब्दों की एक सरणी के रूप में संग्रहीत।
  आउटपुट: पूर्णांक ''S'' in {{nowrap|[0, ''N'' &minus; 1]}} ऐसा है कि {{nowrap|''TR''<sup>&minus;1</sup> ≡ ''S'' (mod ''N'')}}, पी शब्दों की सरणी के रूप में संग्रहीत।
   
   
    तय करना {{nowrap|1=''T''[''r'' + ''p''] = 0}} (अतिरिक्त कैरी शब्द)
  तय करना {{nowrap|1=''T''[''r'' + ''p''] = 0}} (अतिरिक्त कैरी शब्द)
    'के लिए' {{nowrap|0 &le; ''i'' &lt; ''r''}} करना
  'के लिए' {{nowrap|0 &le; ''i'' &lt; ''r''}} करना
        ''--loop1- टी को विभाज्य बनाएं {{nowrap|B<sup>i+1</sup>}}
  ''--loop1- टी को विभाज्य बनाएं {{nowrap|B<sup>i+1</sup>}}
   
   
        सी ← 0
  सी ← 0
        एम ← {{nowrap|''T''[''i''] ⋅ ''N''&prime; mod ''B''}}
  एम ← {{nowrap|''T''[''i''] ⋅ ''N''&prime; mod ''B''}}
        के लिए {{nowrap|0 &le; ''j'' &lt; ''p''}} करना
  के लिए {{nowrap|0 &le; ''j'' &lt; ''p''}} करना
            ''--लूप2- का निम्न शब्द जोड़ें {{nowrap|m ⋅ N[j]}} और पहले से कैरी करें, और नया कैरी ढूंढें
    ''--लूप2- का निम्न शब्द जोड़ें {{nowrap|m ⋅ N[j]}} और पहले से कैरी करें, और नया कैरी ढूंढें
   
   
            एक्स ← {{nowrap|''T''[''i'' + ''j''] + ''m'' ⋅ ''N''[''j''] + ''c''}}
    एक्स ← {{nowrap|''T''[''i'' + ''j''] + ''m'' ⋅ ''N''[''j''] + ''c''}}
            टी [आई + जे] ← {{nowrap|''x'' mod ''B''}}
    टी [आई + जे] ← {{nowrap|''x'' mod ''B''}}
            सी ← {{nowrap|⌊''x'' / ''B''⌋}}
    सी ← {{nowrap|⌊''x'' / ''B''⌋}}
        के लिए समाप्त
  के लिए समाप्त
        के लिए {{nowrap|''p'' &le; ''j'' &le; ''r'' + ''p'' &minus; ''i''}} करना
  के लिए {{nowrap|''p'' &le; ''j'' &le; ''r'' + ''p'' &minus; ''i''}} करना
            ''--लूप3- ले जाना जारी रखें''
    ''--लूप3- ले जाना जारी रखें''
   
   
            ''एक्स'' ← {{nowrap|''T''[''i'' + ''j''] + ''c''}}
    ''एक्स'' ← {{nowrap|''T''[''i'' + ''j''] + ''c''}}
            टी [आई + जे] ← {{nowrap|''x'' mod ''B''}}
    टी [आई + जे] ← {{nowrap|''x'' mod ''B''}}
            सी ← {{nowrap|⌊''x'' / ''B''⌋}}
    सी ← {{nowrap|⌊''x'' / ''B''⌋}}
        के लिए समाप्त
  के लिए समाप्त
    के लिए समाप्त
  के लिए समाप्त
   
   
    के लिए {{nowrap|0 &le; ''i'' &lt; ''p''}} करना
  के लिए {{nowrap|0 &le; ''i'' &lt; ''p''}} करना
        ''एस''[''आई''] ← ''टी''[''आई'' + ''आर'']
  ''एस''[''आई''] ← ''टी''[''आई'' + ''आर'']
    के लिए समाप्त
  के लिए समाप्त
   
   
    अगर {{nowrap|''S'' &ge; ''N''}} तब
  अगर {{nowrap|''S'' &ge; ''N''}} तब
        वापस करना {{nowrap|''S'' &minus; ''N''}}
  वापस करना {{nowrap|''S'' &minus; ''N''}}
    अन्य
  अन्य
        वापस करना {{var|S}}
  वापस करना {{var|S}}
    अगर अंत
  अगर अंत
  अंत समारोह
  अंत समारोह
अंतिम तुलना और घटाव मानक एल्गोरिदम द्वारा किया जाता है।
अंतिम तुलना और घटाव मानक एल्गोरिदम द्वारा किया जाता है।


उपरोक्त एल्गोरिथ्म अनिवार्य रूप से उन्हीं कारणों से सही है जो REDC सही हैं। हर बार के माध्यम से {{mvar|i}} कुंडली, {{mvar|m}} चुना जाता है ताकि {{math|''T''[''i''] + ''mN''[0]}} से विभाज्य है {{mvar|B}}. तब {{mvar|mNB<sup>i</sup>}} जोड़ा जाता है {{mvar|T}}. क्योंकि यह मात्रा जीरो मॉड है {{mvar|N}}, इसे जोड़ने से का मान प्रभावित नहीं होता है {{math|''T'' mod ''N''}}. अगर {{mvar|m<sub>i</sub>}} के मान को दर्शाता है {{mvar|m}} में गणना की गई {{mvar|i}लूप का } वाँ पुनरावृत्ति, फिर एल्गोरिथम सेट करता है {{mvar|S}} को {{math|''T'' + (&sum; ''m<sub>i</sub> B<sup>i</sup>'')''N''}}. क्योंकि MultiPrecisionREDC और REDC एक ही आउटपुट का उत्पादन करते हैं, यह योग विकल्प के समान है {{mvar|m}} कि REDC एल्गोरिथम बना देगा।
उपरोक्त एल्गोरिथ्म अनिवार्य रूप से उन्हीं कारणों से सही है जो REDC सही हैं। हर बार के माध्यम से {{mvar|i}} कुंडली, {{mvar|m}} चुना जाता है ताकि {{math|''T''[''i''] + ''mN''[0]}} से विभाज्य है {{mvar|B}}. तब {{mvar|mNB<sup>i</sup>}} जोड़ा जाता है {{mvar|T}}. क्योंकि यह मात्रा जीरो मॉड है {{mvar|N}}, इसे जोड़ने से का मान प्रभावित नहीं होता है {{math|''T'' mod ''N''}}. अगर {{mvar|m<sub>i</sub>}} के मान को दर्शाता है {{mvar|m}} में गणना की गई {{mvar|i}लूप का } वाँ पुनरावृत्ति, फिर एल्गोरिथम सेट करता है {{mvar|S}} को {{math|''T'' + (&sum; ''m<sub>i</sub> B<sup>i</sup>'')''N''}}. क्योंकि MultiPrecisionREDC और REDC ही आउटपुट का उत्पादन करते हैं, यह योग विकल्प के समान है {{mvar|m}} कि REDC एल्गोरिथम बना देगा।


का अंतिम शब्द {{mvar|T}}, {{math|''T''[''r'' + ''p'']}} (और इसके परिणामस्वरूप {{math|''S''[''p'']}}), का उपयोग केवल कैरी रखने के लिए किया जाता है, क्योंकि प्रारंभिक कमी का परिणाम की सीमा में परिणाम के लिए बाध्य होता है {{math|0 &le; ''S'' &lt; ''2N''}}. इससे यह निष्कर्ष निकलता है कि इस अतिरिक्त कैरी शब्द से पूरी तरह बचा जा सकता है यदि यह पहले से ज्ञात हो {{math|''R'' &ge; ''2N''}}. एक विशिष्ट बाइनरी कार्यान्वयन पर, यह कहने के बराबर है कि यदि बिट्स की संख्या हो तो इस कैरी शब्द से बचा जा सकता है {{mvar|N}} बिट्स की संख्या से छोटा है {{mvar|R}}. अन्यथा, वहन या तो शून्य या एक होगा। प्रोसेसर के आधार पर, इस शब्द को पूर्ण आकार के शब्द के बजाय कैरी फ़्लैग के रूप में संग्रहीत करना संभव हो सकता है।
का अंतिम शब्द {{mvar|T}}, {{math|''T''[''r'' + ''p'']}} (और इसके परिणामस्वरूप {{math|''S''[''p'']}}), का उपयोग केवल कैरी रखने के लिए किया जाता है, क्योंकि प्रारंभिक कमी का परिणाम की सीमा में परिणाम के लिए बाध्य होता है {{math|0 &le; ''S'' &lt; ''2N''}}. इससे यह निष्कर्ष निकलता है कि इस अतिरिक्त कैरी शब्द से पूरी तरह बचा जा सकता है यदि यह पहले से ज्ञात हो {{math|''R'' &ge; ''2N''}}. विशिष्ट बाइनरी कार्यान्वयन पर, यह कहने के बराबर है कि यदि बिट्स की संख्या हो तो इस कैरी शब्द से बचा जा सकता है {{mvar|N}} बिट्स की संख्या से छोटा है {{mvar|R}}. अन्यथा, वहन या तो शून्य या होगा। प्रोसेसर के आधार पर, इस शब्द को पूर्ण आकार के शब्द के बजाय कैरी फ़्लैग के रूप में संग्रहीत करना संभव हो सकता है।


मल्टीप्रिसिजन गुणन और आरईडीसी को एक एल्गोरिथम में जोड़ना संभव है। इस संयुक्त एल्गोरिथ्म को आमतौर पर मोंटगोमरी गुणन कहा जाता है। Koç, Acar, और Kaliski द्वारा कई अलग-अलग कार्यान्वयनों का वर्णन किया गया है।<ref>{{cite journal |author1=Çetin K. Koç |author2=Tolga Acar |author3=Burton S. Kaliski, Jr. |title=मोंटगोमरी गुणन एल्गोरिदम का विश्लेषण और तुलना|journal=[[IEEE Micro]] |date=June 1996 |volume=16 |number=3 |pages=26–33 |doi=10.1109/40.502403 |citeseerx=10.1.1.26.3120 |url=https://www.microsoft.com/en-us/research/wp-content/uploads/1996/01/j37acmon.pdf}}</ref> एल्गोरिथ्म जितना कम उपयोग कर सकता है {{math|''p'' + 2}} स्टोरेज के शब्द (प्लस कैरी बिट)।
मल्टीप्रिसिजन गुणन और आरईडीसी को एल्गोरिथम में जोड़ना संभव है। इस संयुक्त एल्गोरिथ्म को आमतौर पर मोंटगोमरी गुणन कहा जाता है। Koç, Acar, और Kaliski द्वारा कई अलग-अलग कार्यान्वयनों का वर्णन किया गया है।<ref>{{cite journal |author1=Çetin K. Koç |author2=Tolga Acar |author3=Burton S. Kaliski, Jr. |title=मोंटगोमरी गुणन एल्गोरिदम का विश्लेषण और तुलना|journal=[[IEEE Micro]] |date=June 1996 |volume=16 |number=3 |pages=26–33 |doi=10.1109/40.502403 |citeseerx=10.1.1.26.3120 |url=https://www.microsoft.com/en-us/research/wp-content/uploads/1996/01/j37acmon.pdf}}</ref> एल्गोरिथ्म जितना कम उपयोग कर सकता है {{math|''p'' + 2}} स्टोरेज के शब्द (प्लस कैरी बिट)।


एक उदाहरण के रूप में, चलो {{math|1=''B'' = 10}}, {{math|1=''N'' = 997}}, और {{math|1=''R'' = 1000}}. लगता है कि {{math|1=''a'' = 314}} और {{math|1=''b'' = 271}}. मोंटगोमरी का प्रतिनिधित्व {{mvar|a}} और {{mvar|b}} हैं {{math|1=314000 mod 997 = 942}} और {{math|1=271000 mod 997 = 813}}. गणना करना {{math|1=942 ⋅ 813 = 765846}}. प्रारंभिक इनपुट {{mvar|T}} से MultiPrecisionREDC होगा [6, 4, 8, 5, 6, 7]। जो नंबर {{mvar|N}} को [7, 9, 9] के रूप में दर्शाया जाएगा। विस्तारित यूक्लिडियन एल्गोरिथ्म कहता है कि {{math|1=&minus;299 ⋅ 10 + 3 ⋅ 997 = 1}}, इसलिए {{math|''N''&prime;}} 7 होगा।
एक उदाहरण के रूप में, चलो {{math|1=''B'' = 10}}, {{math|1=''N'' = 997}}, और {{math|1=''R'' = 1000}}. लगता है कि {{math|1=''a'' = 314}} और {{math|1=''b'' = 271}}. मोंटगोमरी का प्रतिनिधित्व {{mvar|a}} और {{mvar|b}} हैं {{math|1=314000 mod 997 = 942}} और {{math|1=271000 mod 997 = 813}}. गणना करना {{math|1=942 ⋅ 813 = 765846}}. प्रारंभिक इनपुट {{mvar|T}} से MultiPrecisionREDC होगा [6, 4, 8, 5, 6, 7]। जो नंबर {{mvar|N}} को [7, 9, 9] के रूप में दर्शाया जाएगा। विस्तारित यूक्लिडियन एल्गोरिथ्म कहता है कि {{math|1=&minus;299 ⋅ 10 + 3 ⋅ 997 = 1}}, इसलिए {{math|''N''&prime;}} 7 होगा।
Line 183: Line 183:
इसलिए, अंतिम तुलना और घटाव से पहले, {{math|1=''S'' = 1047}}. अंतिम घटाव संख्या 50 देता है। मोंटगोमरी के प्रतिनिधित्व के बाद से {{math|1=314 ⋅ 271 mod 997 = 349}} है {{math|1=349000 mod 997 = 50}}, यह अपेक्षित परिणाम है।
इसलिए, अंतिम तुलना और घटाव से पहले, {{math|1=''S'' = 1047}}. अंतिम घटाव संख्या 50 देता है। मोंटगोमरी के प्रतिनिधित्व के बाद से {{math|1=314 ⋅ 271 mod 997 = 349}} है {{math|1=349000 mod 997 = 50}}, यह अपेक्षित परिणाम है।


बेस 2 में काम करते समय, सही का निर्धारण करना {{mvar|m}} प्रत्येक चरण में विशेष रूप से आसान है: यदि वर्तमान कामकाजी बिट सम है, तो {{mvar|m}} शून्य है और यदि यह विषम है, तो {{mvar|m}} एक है। इसके अलावा, क्योंकि MultiPrecisionREDC के प्रत्येक चरण को केवल सबसे कम बिट जानने की आवश्यकता होती है, मॉन्टगोमरी गुणन को [[कैरी-सेव योजक]] के साथ आसानी से जोड़ा जा सकता है।
बेस 2 में काम करते समय, सही का निर्धारण करना {{mvar|m}} प्रत्येक चरण में विशेष रूप से आसान है: यदि वर्तमान कामकाजी बिट सम है, तो {{mvar|m}} शून्य है और यदि यह विषम है, तो {{mvar|m}} है। इसके अलावा, क्योंकि MultiPrecisionREDC के प्रत्येक चरण को केवल सबसे कम बिट जानने की आवश्यकता होती है, मॉन्टगोमरी गुणन को [[कैरी-सेव योजक]] के साथ आसानी से जोड़ा जा सकता है।


== साइड-चैनल हमले ==
== साइड-चैनल हमले ==

Revision as of 21:41, 22 May 2023

मॉड्यूलर अंकगणितीय संगणना में, मोंटगोमरी मॉड्यूलर गुणन, जिसे आमतौर पर मोंटगोमरी गुणन के रूप में संदर्भित किया जाता है, तेजी से मॉड्यूलर गुणन करने की विधि है। इसे 1985 में अमेरिकी गणितज्ञ पीटर मॉन्टगोमरी (गणितज्ञ) द्वारा पेश किया गया था | पीटर एल. मॉन्टगोमरी।[1][2] मोंटगोमरी मॉड्यूलर गुणन संख्याओं के विशेष प्रतिनिधित्व पर निर्भर करता है जिसे मोंटगोमरी फॉर्म कहा जाता है। एल्गोरिथ्म मोंटगोमरी रूपों का उपयोग करता है a और b के मोंटगोमरी रूप की कुशलतापूर्वक गणना करने के लिए ab mod N. दक्षता महंगे डिवीजन संचालन से बचने से आती है। शास्त्रीय मॉड्यूलर गुणन डबल-चौड़ाई वाले उत्पाद को कम करता है ab विभाजन का उपयोग करके N और केवल शेष को रखते हुए। इस विभाजन के लिए भागफल अंकों के अनुमान और सुधार की आवश्यकता है। इसके विपरीत, मोंटगोमरी रूप स्थिरांक पर निर्भर करता है R > N जो कि कोप्राइम पूर्णांक है N, और मोंटगोमरी गुणन में आवश्यक एकमात्र विभाजन द्वारा विभाजन है R. अटल R चुना जा सकता है ताकि विभाजन द्वारा R आसान है, एल्गोरिथम की गति में काफी सुधार करता है। व्यवहार में, R हमेशा दो की शक्ति होती है, क्योंकि दो की शक्तियों द्वारा विभाजन को थोड़ा स्थानांतरण द्वारा लागू किया जा सकता है।

कन्वर्ट करने की जरूरत है a और b मोंटगोमरी रूप में और उनके उत्पाद मोंटगोमरी रूप से बाहर का मतलब है कि मोंटगोमरी गुणन द्वारा एकल उत्पाद की गणना पारंपरिक या बैरेट कटौती एल्गोरिदम की तुलना में धीमी है। हालांकि, पंक्ति में कई गुणन करते समय, जैसा कि मॉड्यूलर घातांक में होता है, मध्यवर्ती परिणाम मोंटगोमरी रूप में छोड़े जा सकते हैं। तब प्रारंभिक और अंतिम रूपांतरण समग्र संगणना का नगण्य अंश बन जाता है। आरएसए (क्रिप्टोसिस्टम) और डिफी-हेलमैन की एक्सचेंज जैसे कई महत्वपूर्ण क्रिप्टो सिस्टम अंकगणितीय संचालन मोडुलो बड़ी विषम संख्या पर आधारित हैं, और इन क्रिप्टोसिस्टम्स के लिए, मोंटगोमरी गुणन का उपयोग करके संगणना R a power of two उपलब्ध विकल्पों से तेज है।[3]


मॉड्यूलर अंकगणित

होने देना N धनात्मक पूर्णांक मापांक दर्शाता है। भागफल की अंगूठी Z/NZ में अवशेष वर्ग मॉड्यूल शामिल हैं N, यानी इसके तत्व फॉर्म के सेट हैं

कहाँ a पूर्णांकों के बीच है। प्रत्येक अवशेष वर्ग पूर्णांकों का समूह है जैसे कि सेट में किसी भी दो पूर्णांकों का अंतर विभाज्य है N (और अवशेष वर्ग उस संपत्ति के संबंध में अधिकतम है; पूर्णांकों को अवशेष वर्ग से बाहर नहीं छोड़ा जाता है जब तक कि वे विभाज्यता की स्थिति का उल्लंघन नहीं करते)। अवशेष वर्ग के अनुरूप a अंकित है a. अवशेष वर्गों की समानता को सर्वांगसमता कहा जाता है और निरूपित किया जाता है

कंप्यूटर पर संपूर्ण अवशेष वर्ग को संग्रहीत करना असंभव है क्योंकि अवशेष वर्ग में असीम रूप से कई तत्व होते हैं। इसके बजाय, अवशेष वर्गों को प्रतिनिधि के रूप में संग्रहीत किया जाता है। परंपरागत रूप से, ये प्रतिनिधि पूर्णांक होते हैं a जिसके लिए 0 ≤ aN − 1. अगर a पूर्णांक है, तो इसका प्रतिनिधि है a लिखा है a mod N. सर्वांगसमता लिखते समय, पूर्णांक की पहचान उस अवशेष वर्ग के साथ करना आम है जो यह प्रतिनिधित्व करता है। इस परिपाटी के साथ उपरोक्त समानता लिखी जाती है ab mod N.

अवशेष वर्गों पर अंकगणित पहले उनके प्रतिनिधियों पर पूर्णांक अंकगणित करके किया जाता है। पूर्णांक ऑपरेशन का आउटपुट अवशेष वर्ग को निर्धारित करता है, और मॉड्यूलर ऑपरेशन का आउटपुट अवशेष वर्ग के प्रतिनिधि की गणना करके निर्धारित किया जाता है। उदाहरण के लिए, अगर N = 17, फिर अवशेष वर्गों का योग 7 और 15 की गणना पूर्णांक योग ज्ञात करके की जाती है 7 + 15 = 22, फिर निर्धारण 22 mod 17, 0 और 16 के बीच का पूर्णांक जिसका अंतर 22 के साथ 17 का गुणक है। इस मामले में, वह पूर्णांक 5 है, इसलिए 7 + 155 mod 17.

मोंटगोमरी फॉर्म

अगर a और b श्रेणी में पूर्णांक हैं [0, N − 1], तो उनका योग सीमा में है [0, 2N − 2] और उनका अंतर सीमा में है [−N + 1, N − 1], इसलिए प्रतिनिधि का निर्धारण करना [0, N − 1] के लिए अधिकतम घटाव या जोड़ (क्रमशः) आवश्यक है N. हालाँकि, उत्पाद ab के दायरे में है [0, N2 − 2N + 1]. मध्यवर्ती पूर्णांक उत्पाद का भंडारण ab को या तो दोगुने बिट्स की आवश्यकता होती है a या b, और कुशलता से प्रतिनिधि का निर्धारण [0, N − 1] विभाजन की आवश्यकता है। गणितीय रूप से, 0 और के बीच का पूर्णांक N − 1 के अनुरूप है ab को यूक्लिडियन डिवीजन#प्रमेय के कथन को लागू करके व्यक्त किया जा सकता है:

कहाँ q भागफल है और r, शेष, अंतराल में है [0, N − 1]. शेष r है ab mod N. निर्धारण r कंप्यूटिंग द्वारा किया जा सकता है q, फिर घटाना qN से ab. उदाहरण के लिए, फिर से , उत्पाद 715 कंप्यूटिंग द्वारा निर्धारित किया जाता है , विभाजित करना , और घटाना .

क्योंकि की गणना q विभाजन की आवश्यकता है, यह अधिकांश कंप्यूटर हार्डवेयर पर अवांछनीय रूप से महंगा है। मोंटगोमरी फॉर्म रिंग के तत्वों को व्यक्त करने का अलग तरीका है जिसमें मॉड्यूलर उत्पादों की गणना महंगे डिवीजनों के बिना की जा सकती है। जबकि विभाजन अभी भी जरूरी हैं, उन्हें अलग भाजक के संबंध में किया जा सकता है R. इस विभाजक को दो की शक्ति के रूप में चुना जा सकता है, जिसके लिए विभाजन को शिफ्टिंग, या मशीनी शब्दों की पूरी संख्या से बदला जा सकता है, जिसके लिए शब्दों को छोड़ कर विभाजन को बदला जा सकता है। ये विभाजन तेज़ हैं, इसलिए मोंटगोमरी फॉर्म का उपयोग करके मॉड्यूलर उत्पादों की गणना करने की अधिकांश लागत साधारण उत्पादों की गणना करने की लागत है।

सहायक मापांक R धनात्मक पूर्णांक होना चाहिए जैसे कि gcd(R, N) = 1. कम्प्यूटेशनल उद्देश्यों के लिए यह भी आवश्यक है कि विभाजन और कमी मोडुलो R सस्ती हैं, और मॉड्यूलस मॉड्यूलर गुणन के लिए तब तक उपयोगी नहीं है जब तक R > N. अवशेष वर्ग का मोंटगोमरी रूप a इसके संबंध में R है aR mod N, अर्थात यह अवशेष वर्ग का प्रतिनिधि है aR. उदाहरण के लिए, मान लीजिए N = 17 ओर वो R = 100. 3, 5, 7 और 15 के मोंटगोमरी रूप हैं 300 mod 17 = 11, 500 mod 17 = 7, 700 mod 17 = 3, और 1500 mod 17 = 4.

मोंटगोमरी रूप में जोड़ और घटाव वितरण कानून के कारण सामान्य मॉड्यूलर जोड़ और घटाव के समान हैं:

यह इस तथ्य का परिणाम है कि, क्योंकि gcd(R, N) = 1, गुणा करके R योज्य समूह पर समरूपता है Z/NZ. उदाहरण के लिए, (7 + 15) mod 17 = 5, जो मोंटगोमरी रूप में बन जाता है (3 + 4) mod 17 = 7.

मॉन्टगोमरी रूप में गुणन, हालांकि, अधिक जटिल प्रतीत होता है। का सामान्य उत्पाद aR और bR के उत्पाद का प्रतिनिधित्व नहीं करता है a और b क्योंकि इसका अतिरिक्त कारक है R:

मोंटगोमरी रूप में कंप्यूटिंग उत्पादों के अतिरिक्त कारक को हटाने की आवश्यकता है R. जबकि विभाजन द्वारा R सस्ता है, मध्यवर्ती उत्पाद है (aR mod N)(bR mod N) से विभाज्य नहीं है R क्योंकि मॉडुलो ऑपरेशन ने उस संपत्ति को नष्ट कर दिया है। उदाहरण के लिए, 7 और 15 मॉड्यूल 17 के मोंटगोमरी रूपों का उत्पाद 3 और 4 का उत्पाद है, जो कि 12 है। चूंकि 12 100 से विभाज्य नहीं है, इसलिए अतिरिक्त कारक को हटाने के लिए अतिरिक्त प्रयास की आवश्यकता है R.

के अतिरिक्त कारक को हटाना R को पूर्णांक से गुणा करके किया जा सकता है R ऐसा है कि RR′ ≡ 1 (mod N), यानी द्वारा R जिसका अवशेष वर्ग मॉड्यूलर व्युत्क्रम है R ख़िलाफ़ N. फिर, काम कर रहे मॉड्यूलो N,

पूर्णांक R इस धारणा के कारण मौजूद है कि R और N कोप्राइम हैं। इसका निर्माण विस्तारित यूक्लिडियन एल्गोरिथम का उपयोग करके किया जा सकता है। विस्तारित यूक्लिडियन एल्गोरिथ्म कुशलतापूर्वक पूर्णांकों को निर्धारित करता है R और N जो बेज़ाउट की पहचान को संतुष्ट करते हैं: 0 < R′ < N, 0 < N′ < R, और:

इससे पता चलता है कि मोंटगोमरी रूप में गुणा करना संभव है। मोंटगोमरी रूप में संख्याओं को गुणा करने के लिए सीधा एल्गोरिथम इसलिए गुणा करना है aR mod N, bR mod N, और R पूर्णांक के रूप में और मॉड्यूलो को कम करें N.

उदाहरण के लिए, 7 और 15 मॉड्यूल 17 को मोंटगोमरी फॉर्म में फिर से गुणा करने के लिए R = 100, उपरोक्तानुसार 12 प्राप्त करने के लिए 3 और 4 के गुणनफल की गणना करें। विस्तारित यूक्लिडियन एल्गोरिथ्म का तात्पर्य है 8⋅100 − 47⋅17 = 1, इसलिए R′ = 8. 96 प्राप्त करने के लिए 12 को 8 से गुणा करें और 11 प्राप्त करने के लिए मॉडुलो 17 को कम करें। यह अपेक्षा के अनुरूप 3 का मोंटगोमरी रूप है।

आरईडीसी एल्गोरिदम

जबकि उपरोक्त एल्गोरिदम सही है, यह गुणा करने की आवश्यकता के कारण मानक प्रतिनिधित्व में गुणा से धीमा है R और विभाजित करें N. मोंटगोमरी रिडक्शन, जिसे आरईडीसी के रूप में भी जाना जाता है, एल्गोरिथ्म है जो साथ उत्पाद की गणना करता है R और मॉड्यूलो को कम करता है N भोली विधि की तुलना में अधिक तेज़ी से। पारंपरिक मॉड्यूलर कमी के विपरीत, जो संख्या को इससे छोटा बनाने पर केंद्रित है N, मोंटगोमरी कटौती संख्या को और अधिक विभाज्य बनाने पर केंद्रित है R. यह छोटे गुणक को जोड़कर ऐसा करता है N जिसे अवशेष मोडुलो को रद्द करने के लिए चुना जाता है R. से परिणाम विभाजित करना R बहुत कम संख्या देता है। यह संख्या इतनी कम है कि यह लगभग रिडक्शन मॉडुलो है N, और कमी मोडुलो की गणना N केवल अंतिम सशर्त घटाव की आवश्यकता है। क्योंकि सभी संगणनाओं के संबंध में केवल कमी और विभाजन का उपयोग करके किया जाता है R, नहीं N, एल्गोरिद्म विभाजन द्वारा सीधी मॉड्यूलर कमी की तुलना में तेज़ी से चलता है।

समारोह आरईडीसी है
 इनपुट: पूर्णांक आर और एन के साथ gcd(R, N) = 1,
   पूर्णांक एन' में [0, R − 1] ऐसा है कि NN′ ≡ −1 mod R,
   सीमा में पूर्णांक टी [0, RN − 1].
 आउटपुट: श्रेणी में पूर्णांक एस [0, N − 1] ऐसा है कि STR−1 mod N

 एम ← ((टी मॉड आर) एन ') मॉड आर
 टी ← (टी + एमएन) / आर
 'अगर' टी ≥ एन 'फिर'
  'वापस करना' tN
 अन्य
  वापसी टी
 अगर अंत
अंत समारोह

यह देखने के लिए कि यह एल्गोरिदम सही है, पहले उसका निरीक्षण करें m ठीक से चुना जाता है ताकि T + mN से विभाज्य है R. संख्या से विभाज्य है R अगर और केवल अगर यह शून्य मॉड के अनुरूप है R, और हमारे पास है:

इसलिए, t पूर्णांक है। दूसरा, आउटपुट या तो है t या tN, दोनों के सर्वांगसम हैं t mod N, तो यह साबित करने के लिए कि आउटपुट सर्वांगसम है TR−1 mod N, यह साबित करने के लिए पर्याप्त है t है। सापेक्ष N, t संतुष्ट करता है:

इसलिए, आउटपुट में सही अवशेष वर्ग है। तीसरा, m में है [0, R − 1], और इसलिए T + mN 0 और के बीच है (RN − 1) + (R − 1)N < 2RN. इस तरह t मै रुक जाना 2N, और क्योंकि यह पूर्णांक है, यह डालता है t सीमा में [0, 2N − 1]. इसलिए कम कर रहा है t वांछित सीमा में अधिकतम घटाव की आवश्यकता होती है, इसलिए एल्गोरिथम का आउटपुट सही सीमा में होता है।

7 और 15 मॉड्यूल 17 के उत्पाद की गणना करने के लिए आरईडीसी का उपयोग करने के लिए, पहले मोंटगोमेरी फॉर्म में कनवर्ट करें और उपरोक्त के रूप में 12 प्राप्त करने के लिए पूर्णांक के रूप में गुणा करें। इसके बाद आरईडीसी अप्लाई करें R = 100, N = 17, N′ = 47, और T = 12. पहला कदम तय है m को 12 ⋅ 47 mod 100 = 64. दूसरा चरण तय है t को (12 + 64 ⋅ 17) / 100. नोटिस जो 12 + 64 ⋅ 17 1100 है, उम्मीद के मुताबिक 100 का गुणक। t 11 पर सेट है, जो 17 से कम है, इसलिए अंतिम परिणाम 11 है, जो पिछले अनुभाग की गणना से सहमत है।

एक अन्य उदाहरण के रूप में, उत्पाद पर विचार करें 7 ⋅ 15 mod 17 लेकिन इसके साथ R = 10. विस्तारित यूक्लिडियन एल्गोरिथम का उपयोग करके गणना करें −5 ⋅ 10 + 3 ⋅ 17 = 1, इसलिए N होगा −3 mod 10 = 7. 7 और 15 के मोंटगोमरी रूप हैं 70 mod 17 = 2 और 150 mod 17 = 14, क्रमश। उनका उत्पाद 28 इनपुट है T आरईडीसी के लिए, और उसके बाद से 28 < RN = 170, आरईडीसी की धारणाएं संतुष्ट हैं। आरईडीसी चलाने के लिए, सेट करें m को (28 mod 10) ⋅ 7 mod 10 = 196 mod 10 = 6. तब 28 + 6 ⋅ 17 = 130, इसलिए t = 13. क्योंकि 30 mod 17 = 13, यह मोंटगोमरी का रूप है 3 = 7 ⋅ 15 mod 17.

मोंटगोमरी रूप में अंकगणित

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

कब R > N, अधिकांश अन्य अंकगणितीय संक्रियाएँ REDC के संदर्भ में व्यक्त की जा सकती हैं। इस धारणा का तात्पर्य है कि दो प्रतिनिधियों के उत्पाद मॉड N मै रुक जाना RN, सही आउटपुट उत्पन्न करने के लिए REDC के लिए आवश्यक सटीक परिकल्पना। विशेष रूप से, का उत्पाद aR mod N और bR mod N है REDC((aR mod N)(bR mod N)). गुणा और आरईडीसी के संयुक्त संचालन को अक्सर मोंटगोमरी गुणन कहा जाता है।

मोंटगोमरी रूप में रूपांतरण कंप्यूटिंग द्वारा किया जाता है REDC((a mod N)(R2 mod N)). कंप्यूटिंग द्वारा मोंटगोमरी फॉर्म से रूपांतरण किया जाता है REDC(aR mod N). का मॉड्यूलर व्युत्क्रम aR mod N है REDC((aR mod N)−1(R3 mod N)). प्रारंभिक गुणनफल को 1 के मोंटगोमरी निरूपण के लिए प्रारंभ करके, वर्ग करके घातांक का उपयोग करके मॉड्यूलर घातांक किया जा सकता है, अर्थात R mod N, और मोंटगोमरी गुणा द्वारा गुणा और वर्ग चरणों को प्रतिस्थापित करके।

इन परिचालनों को करने के लिए कम से कम जानना आवश्यक है N और R2 mod N. कब R छोटे सकारात्मक पूर्णांक की शक्ति है b, N की गणना हेंसल लेम्मा द्वारा की जा सकती है: का व्युत्क्रम N मापांक b की गणना भोले एल्गोरिथम द्वारा की जाती है (उदाहरण के लिए, if b = 2 तो व्युत्क्रम 1 है), और हेंसल की लेम्मा का उपयोग बार-बार व्युत्क्रम मॉड्यूल उच्च और उच्च शक्तियों को खोजने के लिए किया जाता है b, जब उलटा मोडुलो रुक जाता है R ज्ञात है; N इस व्युत्क्रम का निषेध है। स्थिरांक R mod N और R3 mod N के रूप में उत्पन्न किया जा सकता है REDC(R2 mod N) और के रूप में REDC((R2 mod N)(R2 mod N)). मौलिक ऑपरेशन किसी उत्पाद के आरईडीसी की गणना करना है। जब स्टैंडअलोन आरईडीसी की आवश्यकता होती है, तो इसकी गणना किसी उत्पाद के आरईडीसी के रूप में की जा सकती है 1 mod N. एकमात्र स्थान जहां प्रत्यक्ष कमी मोडुलो है N आवश्यक है के पूर्वगणना में है R2 mod N.

मल्टीप्रिसिजन पूर्णांकों पर मोंटगोमरी अंकगणित

अधिकांश क्रिप्टोग्राफ़िक अनुप्रयोगों के लिए संख्याओं की आवश्यकता होती है जो सैकड़ों या हजारों बिट्स लंबी होती हैं। ऐसी संख्याएँ मशीन शब्द में संग्रहीत करने के लिए बहुत बड़ी हैं। आमतौर पर, हार्डवेयर गुणन मॉड को कुछ आधार करता है B, इसलिए बड़े गुणा करने के लिए कई छोटे गुणाओं के संयोजन की आवश्यकता होती है। आधार B आमतौर पर माइक्रोइलेक्ट्रॉनिक अनुप्रयोगों के लिए 2 होता है, 28 8-बिट फ़र्मवेयर के लिए,[4]या 232 या 264 सॉफ्टवेयर अनुप्रयोगों के लिए।

REDC एल्गोरिद्म के लिए उत्पाद मॉड्यूल की आवश्यकता होती है R, और आम तौर पर R > N ताकि उत्पादों की गणना करने के लिए आरईडीसी का उपयोग किया जा सके। हालाँकि, कब R की शक्ति है B, REDC का प्रकार है जिसके लिए केवल मशीन शब्द आकार के पूर्णांकों के उत्पादों की आवश्यकता होती है। मान लीजिए कि सकारात्मक बहु-परिशुद्धता पूर्णांक थोड़ा एंडियन संग्रहीत हैं, अर्थात, x को सरणी के रूप में संग्रहीत किया जाता है x[0], ..., x[ℓ - 1] ऐसा है कि 0 ≤ x[i] < B सभी के लिए i और x = ∑ x[i] Bi. एल्गोरिदम बहु-परिशुद्धता पूर्णांक से शुरू होता है T और इसे बार में शब्द कम कर देता है। पहले का उपयुक्त गुणक N बनाने के लिए जोड़ा जाता है T द्वारा विभाज्य B. फिर का गुणक N बनाने के लिए जोड़ा जाता है T द्वारा विभाज्य B2, और इसी तरह। अंततः T से विभाज्य है R, और विभाजन के बाद Rएल्गोरिदम उसी स्थान पर है जहाँ REDC की गणना के बाद थी t.

फंक्शन मल्टीप्रिसिजनआरईडीसी है
 इनपुट: पूर्णांक एन के साथ gcd(B, N) = 1, पी शब्दों की सरणी के रूप में संग्रहीत,
   पूर्णांक R = Br, --इस प्रकार, आर = लॉगB आर
   पूर्णांक एन' में [0, B − 1] ऐसा है कि NN′ ≡ −1 (mod B),
   सीमा में पूर्णांक टी 0 ≤ T < RN, की सरणी के रूप में संग्रहीत r + p शब्द।

 आउटपुट: पूर्णांक S in [0, N − 1] ऐसा है कि TR−1S (mod N), पी शब्दों की सरणी के रूप में संग्रहीत।

 तय करना T[r + p] = 0 (अतिरिक्त कैरी शब्द)
 'के लिए' 0 ≤ i < r करना
  --loop1- टी को विभाज्य बनाएं Bi+1

  सी ← 0
  एम ← T[i] ⋅ N′ mod B
  के लिए 0 ≤ j < p करना
   --लूप2- का निम्न शब्द जोड़ें m ⋅ N[j] और पहले से कैरी करें, और नया कैरी ढूंढें

   एक्स ← T[i + j] + mN[j] + c
   टी [आई + जे] ← x mod B
   सी ← x / B
  के लिए समाप्त
  के लिए pjr + pi करना
   --लूप3- ले जाना जारी रखें

   एक्सT[i + j] + c
   टी [आई + जे] ← x mod B
   सी ← x / B
  के लिए समाप्त
 के लिए समाप्त

 के लिए 0 ≤ i < p करना
  एस[आई] ← टी[आई + आर]
 के लिए समाप्त

 अगर SN तब
  वापस करना SN
 अन्य
  वापस करना S
 अगर अंत
अंत समारोह

अंतिम तुलना और घटाव मानक एल्गोरिदम द्वारा किया जाता है।

उपरोक्त एल्गोरिथ्म अनिवार्य रूप से उन्हीं कारणों से सही है जो REDC सही हैं। हर बार के माध्यम से i कुंडली, m चुना जाता है ताकि T[i] + mN[0] से विभाज्य है B. तब mNBi जोड़ा जाता है T. क्योंकि यह मात्रा जीरो मॉड है N, इसे जोड़ने से का मान प्रभावित नहीं होता है T mod N. अगर mi के मान को दर्शाता है m में गणना की गई {{mvar|i}लूप का } वाँ पुनरावृत्ति, फिर एल्गोरिथम सेट करता है S को T + (∑ mi Bi)N. क्योंकि MultiPrecisionREDC और REDC ही आउटपुट का उत्पादन करते हैं, यह योग विकल्प के समान है m कि REDC एल्गोरिथम बना देगा।

का अंतिम शब्द T, T[r + p] (और इसके परिणामस्वरूप S[p]), का उपयोग केवल कैरी रखने के लिए किया जाता है, क्योंकि प्रारंभिक कमी का परिणाम की सीमा में परिणाम के लिए बाध्य होता है 0 ≤ S < 2N. इससे यह निष्कर्ष निकलता है कि इस अतिरिक्त कैरी शब्द से पूरी तरह बचा जा सकता है यदि यह पहले से ज्ञात हो R2N. विशिष्ट बाइनरी कार्यान्वयन पर, यह कहने के बराबर है कि यदि बिट्स की संख्या हो तो इस कैरी शब्द से बचा जा सकता है N बिट्स की संख्या से छोटा है R. अन्यथा, वहन या तो शून्य या होगा। प्रोसेसर के आधार पर, इस शब्द को पूर्ण आकार के शब्द के बजाय कैरी फ़्लैग के रूप में संग्रहीत करना संभव हो सकता है।

मल्टीप्रिसिजन गुणन और आरईडीसी को एल्गोरिथम में जोड़ना संभव है। इस संयुक्त एल्गोरिथ्म को आमतौर पर मोंटगोमरी गुणन कहा जाता है। Koç, Acar, और Kaliski द्वारा कई अलग-अलग कार्यान्वयनों का वर्णन किया गया है।[5] एल्गोरिथ्म जितना कम उपयोग कर सकता है p + 2 स्टोरेज के शब्द (प्लस कैरी बिट)।

एक उदाहरण के रूप में, चलो B = 10, N = 997, और R = 1000. लगता है कि a = 314 और b = 271. मोंटगोमरी का प्रतिनिधित्व a और b हैं 314000 mod 997 = 942 और 271000 mod 997 = 813. गणना करना 942 ⋅ 813 = 765846. प्रारंभिक इनपुट T से MultiPrecisionREDC होगा [6, 4, 8, 5, 6, 7]। जो नंबर N को [7, 9, 9] के रूप में दर्शाया जाएगा। विस्तारित यूक्लिडियन एल्गोरिथ्म कहता है कि −299 ⋅ 10 + 3 ⋅ 997 = 1, इसलिए N 7 होगा।

मैं ← 0
एम ← 6 ⋅ 7 mod 10 = 2

जे टी सी
- ------- -
0 0485670 2 (पहले पाश की पहली पुनरावृत्ति के बाद)
1 0485670 2
2 0485670 2
3 0487670 0 (दूसरे लूप के पहले पुनरावृत्ति के बाद)
4 0487670 0
5 0487670 0
6 0487670 0

मैं ← 1
एम ← 4 ⋅ 7 mod 10 = 8

जे टी सी
- ------- -
0 0087670 6 (पहले पाश की पहली पुनरावृत्ति के बाद)
1 0067670 8
2 0067670 8
3 0067470 1 (दूसरे लूप के पहले पुनरावृत्ति के बाद)
4 0067480 0
5 0067480 0

मैं ← 2
एम ← 6 ⋅ 7 mod 10 = 2

जे टी सी
- ------- -
0 0007480 2 (पहले लूप की पहली पुनरावृत्ति के बाद)
1 0007480 2
2 0007480 2
3 0007400 1 (दूसरे लूप की पहली पुनरावृत्ति के बाद)
4 0007401 0

इसलिए, अंतिम तुलना और घटाव से पहले, S = 1047. अंतिम घटाव संख्या 50 देता है। मोंटगोमरी के प्रतिनिधित्व के बाद से 314 ⋅ 271 mod 997 = 349 है 349000 mod 997 = 50, यह अपेक्षित परिणाम है।

बेस 2 में काम करते समय, सही का निर्धारण करना m प्रत्येक चरण में विशेष रूप से आसान है: यदि वर्तमान कामकाजी बिट सम है, तो m शून्य है और यदि यह विषम है, तो m है। इसके अलावा, क्योंकि MultiPrecisionREDC के प्रत्येक चरण को केवल सबसे कम बिट जानने की आवश्यकता होती है, मॉन्टगोमरी गुणन को कैरी-सेव योजक के साथ आसानी से जोड़ा जा सकता है।

साइड-चैनल हमले

चूंकि भागफल अंकों के अनुमान गलत होने पर मॉन्टगोमरी कटौती पारंपरिक विभाजन में आवश्यक सुधार चरणों से बचती है, यह ज्यादातर सशर्त शाखाओं से मुक्त है जो समय और पावर साइड-चैनल हमलों के प्राथमिक लक्ष्य हैं; निष्पादित निर्देशों का क्रम इनपुट ऑपरेंड मूल्यों से स्वतंत्र है। एकमात्र अपवाद मापांक का अंतिम सशर्त घटाव है, लेकिन इसे प्रतिरोधी बनाने के लिए इसे आसानी से संशोधित किया जाता है (हमेशा कुछ घटाना, या तो मापांक या शून्य)।[4] यह निश्चित रूप से आवश्यक है कि गुणन आदिम के आसपास निर्मित घातांक एल्गोरिथ्म भी प्रतिरोधी हो।[4][6]


यह भी देखें

  • बैरेट कमी

संदर्भ

  1. Montgomery, Peter (April 1985). "Modular Multiplication Without Trial Division" (PDF). Mathematics of Computation. 44 (170): 519–521. doi:10.1090/S0025-5718-1985-0777282-X.
  2. Martin Kochanski, "Montgomery Multiplication" Archived 2010-03-27 at the Wayback Machine a colloquial explanation.
  3. Alfred J. Menezes, Paul C. van Oorschot, and Scott A. Vanstone. Handbook of Applied Cryptography. CRC Press, 1996. ISBN 0-8493-8523-7, chapter 14.
  4. 4.0 4.1 4.2 Liu, Zhe; Großschädl, Johann; Kizhvatov, Ilya (29 November 2010). Efficient and Side-Channel Resistant RSA Implementation for 8-bit AVR Microcontrollers (PDF). 1st International Workshop on the Security of the Internet of Things. Tokyo. (Presentation slides.)
  5. Çetin K. Koç; Tolga Acar; Burton S. Kaliski, Jr. (June 1996). "मोंटगोमरी गुणन एल्गोरिदम का विश्लेषण और तुलना" (PDF). IEEE Micro. 16 (3): 26–33. CiteSeerX 10.1.1.26.3120. doi:10.1109/40.502403.
  6. Marc Joye and Sung-Ming Yen. "The Montgomery Powering Ladder". 2002.


बाहरी संबंध