<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Math on kenji.blog</title><link>http://kenji.blog/hi/tags/math/</link><description>Recent content in Math on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>hi</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 22:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/hi/tags/math/index.xml" rel="self" type="application/rss+xml"/><item><title>【शुरुआती लोगों के लिए】 Transformer मॉडल की गणितीय संरचना को समझना</title><link>http://kenji.blog/hi/p/transformer-mathematical-structure/</link><pubDate>Fri, 11 Sep 2026 22:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/transformer-mathematical-structure/</guid><description>&lt;img src="http://kenji.blog/p/transformer-mathematical-structure/img/eyecatch.jpg" alt="Featured image of post 【शुरुआती लोगों के लिए】 Transformer मॉडल की गणितीय संरचना को समझना" />&lt;h1 id="परचय-transformer-क-गणत-कय-सख">परिचय: Transformer का गणित क्यों सीखें?
&lt;/h1>&lt;p>यह कहना अतिशयोक्ति नहीं होगी कि &amp;ldquo;Transformer&amp;rdquo; वह आर्किटेक्चर है जिसने आधुनिक प्राकृतिक भाषा प्रसंस्करण (NLP) और समग्र रूप से AI के इतिहास को फिर से लिखा है। 2017 में Google के शोधकर्ताओं द्वारा प्रकाशित पेपर &amp;ldquo;Attention Is All You Need&amp;rdquo; में पहली बार प्रस्तावित यह मॉडल, OpenAI की GPT सीरीज़ (ChatGPT की आधारभूत तकनीक), Google के BERT, और Anthropic के Claude जैसे बड़े भाषा मॉडल (LLMs) के मुख्य भाग (दिल) के रूप में कार्य करता है, जो आज दुनिया पर राज कर रहे हैं।&lt;/p>
&lt;p>हालांकि, अक्सर &amp;ldquo;Attention (ध्यान तंत्र) का उपयोग करके संदर्भ को समझने&amp;rdquo; जैसी गुणात्मक व्याख्याएं Transformer के काम करने के तरीके के बारे में देखने को मिलती हैं, लेकिन वास्तविकता यह है कि शुरुआती लोगों के लिए इसके पीछे की &lt;strong>गणितीय संरचना&lt;/strong> में गहराई से जाने वाले स्पष्टीकरण आश्चर्यजनक रूप से कम हैं। यह वास्तव में समझने के लिए कि AI &amp;ldquo;शब्दों&amp;rdquo; को &amp;ldquo;गणितीय सूत्रों&amp;rdquo; के रूप में कैसे संसाधित करता है और आश्चर्यजनक रूप से प्राकृतिक पाठ कैसे उत्पन्न करता है, इसके गणितीय तंत्र को समझना आवश्यक है।&lt;/p>
&lt;p>इस लेख में, हम उन लोगों के लिए जो गणित और प्रोग्रामिंग का बुनियादी ज्ञान रखते हैं (जो हाई स्कूल स्तर के मैट्रिक्स और डिफरेंशियल कैलकुलस की अवधारणाओं को समझते हैं), Transformer के मुख्य भागों जैसे &amp;ldquo;Self-Attention तंत्र&amp;rdquo;, &amp;ldquo;क्वेरी-की-वैल्यू (Q/K/V) मॉडल&amp;rdquo;, &amp;ldquo;Softmax फ़ंक्शन द्वारा सामान्यीकरण&amp;rdquo;, और &amp;ldquo;Positional Encoding&amp;rdquo; की गणितीय संरचना को पूरी तरह से और आसानी से समझने योग्य तरीके से स्पष्ट करेंगे।&lt;/p>
&lt;p>आप गणितीय सूत्रों की झड़ी से अभिभूत हो सकते हैं, लेकिन हर एक गणना का एक स्पष्ट &amp;ldquo;अर्थ&amp;rdquo; होता है। जब तक आप इस लेख को पढ़ना समाप्त करेंगे, तब तक आपको यह समझ आ जाएगा कि Transformer केवल एक जादुई ब्लैक बॉक्स नहीं deeply नहीं है, बल्कि सूक्ष्मता से डिज़ाइन किए गए गणित और सांख्यिकी का एक क्रिस्टल है।&lt;/p>
&lt;hr>
&lt;h1 id="1-परपरक-तरक-क-समए-और-transformer-क-नवचर">1. पारंपरिक तरीकों की सीमाएँ और Transformer का नवाचार
&lt;/h1>&lt;p>Transformer के आगमन से पहले, प्राकृतिक भाषा प्रसंस्करण की मुख्यधारा रिकरंट न्यूरल नेटवर्क (RNN) और इसके डेरिवेटिव जैसे LSTM (Long Short-Term Memory) थे। RNN को समय-श्रृंखला (time-series) डेटा को संसाधित करने के लिए डिज़ाइन किया गया था, और यह वाक्यों को शुरुआत से लेकर शब्द दर शब्द अनुक्रमिक रूप से पढ़ता है।&lt;/p>
&lt;p>लेकिन, RNN में दो गंभीर कमज़ोरियाँ थीं:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>दीर्घकालिक निर्भरता (Long-term dependencies) सीखने में कठिनाई&lt;/strong>: जैसे-जैसे वाक्य लंबा होता है, शुरुआत में इनपुट किए गए शब्दों की जानकारी अंत तक पहुँचने तक फीकी पड़ जाती है (वैनिशिंग ग्रेडिएंट समस्या / Vanishing gradient problem)।&lt;/li>
&lt;li>&lt;strong>समानांतर गणना (Parallel computation) असंभव&lt;/strong>: चूंकि शब्दों को क्रमिक रूप से संसाधित किया जाना चाहिए, GPU का उपयोग करके बड़े पैमाने पर समानांतर गणना मुश्किल है, और प्रशिक्षण में भारी मात्रा में समय लगता है।&lt;/li>
&lt;/ol>
&lt;p>Transformer ने RNN संरचना को पूरी तरह से त्याग कर और संदर्भ को पकड़ने के लिए केवल &amp;ldquo;Attention&amp;rdquo; का उपयोग करके एक पैराडाइम शिफ्ट (प्रतिमान बदलाव) लाया। इसने अनुक्रम (sequence) की लंबाई चाहे कितनी भी हो, बिना किसी जानकारी के नुकसान के, और गणनाओं को समानांतर करके GPU के प्रदर्शन को अधिकतम करने के लिए इसे संभव बना दिया।&lt;/p>
&lt;hr>
&lt;h1 id="2-transformer-क-समगर-आरकटकचर">2. Transformer का समग्र आर्किटेक्चर
&lt;/h1>&lt;p>सबसे पहले, आइए समग्र Transformer आर्किटेक्चर का विहंगावलोकन करें। Transformer मुख्य रूप से दो ब्लॉकों से बना है: &amp;ldquo;Encoder&amp;rdquo; (एनकोडर) और &amp;ldquo;Decoder&amp;rdquo; (डिकोडर)। अनुवाद कार्य को एक उदाहरण के रूप में लेते हुए, Encoder इनपुट भाषा (जैसे: अंग्रेजी) को एक गणितीय वेक्टर प्रतिनिधित्व में परिवर्तित करता है, और Decoder उस वेक्टर प्रतिनिधित्व के आधार पर आउटपुट भाषा (जैसे: जापानी) उत्पन्न करता है।&lt;/p>
&lt;p>नीचे दिया गया चित्र Encoder ब्लॉक की आंतरिक संरचना का सरलीकृत संस्करण है।&lt;/p>
&lt;div class="mermaid">graph TD
A["इनपुट टोकन"] --> B["इनपुट एम्बेडिंग"]
B --> C["पोजिशनल एन्कोडिंग"]
C --> D["मल्टी-हेड सेल्फ-अटेंशन"]
D --> E["ऐड एंड लेयर नॉर्मलाइज़ेशन"]
E --> F["फीड फॉरवर्ड नेटवर्क"]
F --> G["ऐड एंड लेयर नॉर्मलाइज़ेशन"]
G --> H["अगले लेयर के लिए आउटपुट"]
C -.->|"रेसिडुअल कनेक्शन"| E
E -.->|"रेसिडुअल कनेक्शन"| G&lt;/div>
&lt;p>अब से, आइए प्रत्येक घटक में किए जा रहे गणितीय कार्यों को एक-एक करके देखें।&lt;/p>
&lt;hr>
&lt;h1 id="3-शबद-क-वकटरइजशन-और-पजशनल-एनकडग-positional-encoding">3. शब्दों का वेक्टराइज़ेशन और पोजिशनल एन्कोडिंग (Positional Encoding)
&lt;/h1>&lt;p>कंप्यूटर सीधे तौर पर टेक्स्ट को नहीं समझ सकते हैं। इनपुट टेक्स्ट को सबसे पहले &amp;ldquo;टोकन (Token)&amp;rdquo; नामक इकाइयों में विभाजित किया जाता है, और प्रत्येक को एक निश्चित लंबाई वाले वेक्टर में बदल दिया जाता है। इसे &lt;strong>Input Embedding&lt;/strong> कहा जाता है।&lt;/p>
&lt;h2 id="31-input-embedding-क-गणत">3.1 Input Embedding का गणित
&lt;/h2>&lt;p>मान लें कि शब्दावली (vocabulary) का आकार $V$ है, और एम्बेडिंग वेक्टर का डायमेंशन $d_{model}$ है (मूल पेपर में $d_{model} = 512$)। एम्बेडिंग मैट्रिक्स $W_E \in \mathbb{R}^{V \times d_{model}}$ का उपयोग करके प्रत्येक शब्द $w_i$ को एक वेक्टर $x_i \in \mathbb{R}^{d_{model}}$ में बदल दिया जाता है।&lt;/p>
$$ x_i = W_E \cdot \text{one\_hot}(w_i) $$
&lt;p>नतीजतन, पूरे वाक्य को एक मैट्रिक्स $X \in \mathbb{R}^{N \times d_{model}}$ के रूप में दर्शाया जाता है ($N$ वाक्य की लंबाई है)।&lt;/p>
&lt;h2 id="32-positional-encoding-क-आवशयकत-और-सतर">3.2 Positional Encoding की आवश्यकता और सूत्र
&lt;/h2>&lt;p>Transformer, RNN की तरह क्रमिक रूप से शब्दों को संसाधित नहीं करता है, बल्कि सभी शब्दों को एक साथ समानांतर में संसाधित करता है। गणना गति के दृष्टिकोण से यह एक बड़ा लाभ है, लेकिन साथ ही यह &lt;strong>&amp;ldquo;शब्दों का क्रम (Word order)&amp;rdquo; जैसी महत्वपूर्ण जानकारी खो जाने&lt;/strong> की समस्या का कारण बनता है। उदाहरण के लिए, &amp;ldquo;कुत्ता आदमी को काटता है&amp;rdquo; और &amp;ldquo;आदमी कुत्ते को काटता है&amp;rdquo; में समान इनपुट शब्द सेट हैं, लेकिन उनके अर्थ पूरी तरह से अलग हैं।&lt;/p>
&lt;p>इस शब्द क्रम की जानकारी को मॉडल में प्रदान करने के लिए &lt;strong>Positional Encoding&lt;/strong> तैयार किया गया था।
स्थिति $pos$ पर शब्द के $i$-वें डायमेंशन के लिए Positional Encoding $PE$ की गणना निम्नलिखित त्रिकोणमितीय कार्यों (Trigonometric functions) का उपयोग करके की जाती है:&lt;/p>
$$ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$
$$ PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$
&lt;p>यहाँ, $pos$ शब्द की स्थिति ($0, 1, 2, \dots, N-1$) है, और $i$ वेक्टर डायमेंशन का इंडेक्स ($0, 1, \dots, d_{model}/2 - 1$) है।&lt;/p>
&lt;h3 id="सइन-sine-और-कसइन-cosine-क-उपयग-कय-कर">साइन (Sine) और कोसाइन (Cosine) का उपयोग क्यों करें?
&lt;/h3>&lt;p>पहली नज़र में, यह एक बहुत ही जटिल और अजीब सूत्र लग सकता है, लेकिन इसके पीछे एक गहरा गणितीय कारण है। त्रिकोणमितीय कार्यों का उपयोग करके, मॉडल न केवल &lt;strong>&amp;ldquo;पूर्ण स्थिति (Absolute position)&amp;rdquo;&lt;/strong> बल्कि &lt;strong>&amp;ldquo;सापेक्ष स्थिति (Relative position)&amp;rdquo; में अंतर&lt;/strong> को भी आसानी से सीख सकता है।&lt;/p>
&lt;p>हाई स्कूल गणित में सीखे गए त्रिकोणमितीय कार्यों के योग प्रमेय (Addition theorem) को याद करें:
&lt;/p>
$$ \sin(\alpha + \beta) = \sin\alpha \cos\beta + \cos\alpha \sin\beta $$
$$ \cos(\alpha + \beta) = \cos\alpha \cos\beta - \sin\alpha \sin\beta $$
&lt;p>एक स्थिति $pos$ से $k$ ऑफ़सेट की दूरी पर स्थित स्थिति $pos + k$ की Positional Encoding को स्थिति $pos$ के Positional Encoding के रैखिक संयोजन (Linear combination) के रूप में व्यक्त किया जा सकता है। दूसरे शब्दों में, मैट्रिक्स $M_k$ का उपयोग करके इसे इस प्रकार लिखा जा सकता है:&lt;/p>
$$ PE_{pos+k} = M_k \cdot PE_{pos} $$
&lt;p>यह Attention तंत्र को डॉट-प्रोडक्ट (Dot-product) गणना के माध्यम से आसानी से यह पहचानने की अनुमति देता है कि शब्द एक-दूसरे से &amp;ldquo;कितनी दूर&amp;rdquo; हैं। इसके अलावा, विभिन्न तरंग दैर्ध्य (wavelengths) के साथ कई साइन और कोसाइन तरंगों को मिलाकर, इसका यह भी लाभ है कि यह एक अद्वितीय स्थिति वेक्टर उत्पन्न कर सकता है चाहे वाक्य कितना भी लंबा क्यों न हो।&lt;/p>
&lt;p>अंतिम इनपुट मैट्रिक्स $X_{input}$, शब्द एम्बेडिंग वेक्टर और इस स्थिति एन्कोडिंग को जोड़कर बनता है।&lt;/p>
$$ X_{input} = X + PE $$
&lt;hr>
&lt;h1 id="4-self-attention-सलफ-अटशन-क-गहर-गणत">4. Self-Attention (सेल्फ-अटेंशन) का गहरा गणित
&lt;/h1>&lt;p>अब हम अंततः Transformer के सबसे महत्वपूर्ण घटक, &lt;strong>Self-Attention (स्व-ध्यान तंत्र)&lt;/strong> में कदम रखते हैं। Self-Attention का उद्देश्य &amp;ldquo;एक वाक्य में सभी शब्दों के बीच प्रासंगिकता (relevance) की गणना करना और संदर्भ को ध्यान में रखते हुए प्रत्येक शब्द के वेक्टर को एक समृद्ध प्रतिनिधित्व में अपडेट करना&amp;rdquo; है।&lt;/p>
&lt;p>यहाँ, एक &amp;ldquo;खोज प्रणाली (Search system)&amp;rdquo; की सादृश्यता (Analogy) का उपयोग किया जाता है।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Query (Q)&lt;/strong>: क्वेरी (खोज शब्द)। &amp;ldquo;मैं अभी क्या जानकारी ढूंढ रहा हूँ?&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Key (K)&lt;/strong>: की (शीर्षक)। &amp;ldquo;मेरे पास क्या जानकारी है?&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Value (V)&lt;/strong>: वैल्यू (सामग्री)। &amp;ldquo;मैं वास्तव में कौन सी जानकारी प्रदान करता हूँ?&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;h2 id="41-मटरकस-q-k-v-क-नरमण">4.1 मैट्रिक्स $Q, K, V$ का निर्माण
&lt;/h2>&lt;p>इनपुट मैट्रिक्स $X \in \mathbb{R}^{N \times d_{model}}$ के लिए (सरलता के लिए यहां बैच आकार को अनदेखा कर रहे हैं), हम इसे सीखने योग्य वेट मैट्रिक्स (learnable weight matrices) $W^Q, W^K, W^V \in \mathbb{R}^{d_{model} \times d_k}$ से गुणा करके क्वेरी $Q$, की $K$, और वैल्यू $V$ की गणना करते हैं। (आमतौर पर $d_k = d_v = d_{model} / h$)&lt;/p>
$$ Q = X W^Q $$
$$ K = X W^K $$
$$ V = X W^V $$
&lt;p>यहाँ, $Q, K, V$ सभी $\mathbb{R}^{N \times d_k}$ के मैट्रिक्स बन जाते हैं।&lt;/p>
&lt;h2 id="42-attention-score-क-गणन-डट-परडकट">4.2 Attention Score की गणना (डॉट-प्रोडक्ट)
&lt;/h2>&lt;p>यह मापने के लिए कि प्रत्येक शब्द की क्वेरी (Query) अन्य सभी शब्दों की की (Key) से कितनी संबंधित है, हम वेक्टर्स के &lt;strong>डॉट-प्रोडक्ट (Dot-product)&lt;/strong> की गणना करते हैं। मैट्रिक्स संचालन के रूप में लिखे जाने पर यह निम्न प्रकार होता है:&lt;/p>
$$ \text{Scores} = Q K^T $$
&lt;p>इस गणना से प्राप्त मैट्रिक्स $\text{Scores} \in \mathbb{R}^{N \times N}$ का प्रत्येक तत्व $s_{ij}$, $i$-वें शब्द की Query और $j$-वें शब्द की Key का डॉट-प्रोडक्ट है, यानी यह &amp;ldquo;प्रासंगिकता की ताकत&amp;rdquo; को दर्शाता है।&lt;/p>
&lt;h2 id="43-सकलग-scaling">4.3 स्केलिंग (Scaling)
&lt;/h2>&lt;p>डॉट-प्रोडक्ट का उपयोग करके स्कोर की गणना करने में एक समस्या है। जैसे-जैसे वेक्टर डायमेंशन $d_k$ बढ़ता है, डॉट-प्रोडक्ट का मूल्य अत्यधिक बड़ा या छोटा हो जाता है।&lt;/p>
&lt;p>आइए इसे गणितीय रूप से सिद्ध करें।
मान लें कि क्वेरी का प्रत्येक तत्व $q \sim \mathcal{N}(0, 1)$ और की का प्रत्येक तत्व $k \sim \mathcal{N}(0, 1)$ स्वतंत्र मानक सामान्य वितरण (Standard normal distribution) का पालन करता है।
डॉट-प्रोडक्ट $q \cdot k = \sum_{i=1}^{d_k} q_i k_i$ का माध्य (mean) और प्रसरण (variance) ज्ञात करें।
माध्य: चूँकि $\mathbb{E}[q_i k_i] = \mathbb{E}[q_i] \mathbb{E}[k_i] = 0 \times 0 = 0$ है, योग का माध्य भी $0$ है।
प्रसरण: $q_i k_i$ का प्रसरण, स्वतंत्रता के कारण $\text{Var}(q_i k_i) = \mathbb{E}[(q_i k_i)^2] - (\mathbb{E}[q_i k_i])^2 = 1 \times 1 - 0 = 1$ है।
इसलिए, पूरे डॉट-प्रोडक्ट का प्रसरण डायमेंशन $d_k$ के बराबर होगा।&lt;/p>
$$ \text{Var}(q \cdot k) = d_k $$
&lt;p>जैसे-जैसे प्रसरण बढ़ता है, इसके बाद लागू किए जाने वाले Softmax फ़ंक्शन में, अधिकतम मान (maximum value) के अलावा अन्य ग्रेडिएंट अत्यधिक छोटे हो जाते हैं, जिससे &amp;ldquo;वैनिशिंग ग्रेडिएंट (Vanishing gradient)&amp;rdquo; होता है, और सीखना रुक जाता है।
इसे रोकने के लिए, स्कोर को $\sqrt{d_k}$ से विभाजित (स्केल) किया जाता है ताकि प्रसरण हमेशा $1$ पर बना रहे।&lt;/p>
$$ \text{Scaled Scores} = \frac{Q K^T}{\sqrt{d_k}} $$
&lt;h2 id="44-softmax-फकशन-दवर-सभवयत-probabilization">4.4 Softmax फ़ंक्शन द्वारा संभाव्यता (Probabilization)
&lt;/h2>&lt;p>प्राप्त स्कोर को एक संभाव्यता वितरण (Probability distribution) (वेट/weights) में बदलने के लिए जिसका योग $1$ है, हम प्रत्येक पंक्ति (row) पर &lt;strong>Softmax फ़ंक्शन&lt;/strong> लागू करते हैं।&lt;/p>
$$ a_{ij} = \text{softmax}(s_i)_j = \frac{\exp(s_{ij} / \sqrt{d_k})}{\sum_{m=1}^N \exp(s_{im} / \sqrt{d_k})} $$
&lt;p>मैट्रिक्स $A \in \mathbb{R}^{N \times N}$ को Attention Weight (अटेंशन वेट) मैट्रिक्स कहा जाता है। इस मैट्रिक्स की प्रत्येक पंक्ति $i$ को देखकर, &amp;ldquo;शब्द $i$ को समझने के लिए किसी अन्य शब्द $j$ पर कितना ध्यान (Attention) दिया जाना चाहिए&amp;rdquo; इसे 0 से 1 के मान के रूप में व्यक्त किया जाता है।&lt;/p>
&lt;h2 id="45-value-क-भरत-यग-weighted-sum">4.5 Value का भारित योग (Weighted sum)
&lt;/h2>&lt;p>अंत में, प्राप्त Attention Weight मैट्रिक्स $A$ का उपयोग करके, Value मैट्रिक्स $V$ के भारित योग (Weighted sum) की गणना की जाती है।&lt;/p>
$$ \text{Output} = A V = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V $$
&lt;p>इस ऑपरेशन द्वारा आउटपुट मैट्रिक्स $Z \in \mathbb{R}^{N \times d_v}$, &amp;ldquo;संदर्भ को ध्यान में रखकर अपडेट किए गए शब्द वेक्टर अभ्यावेदन (representations)&amp;rdquo; का एक संग्रह है।
यह पेपर में परिभाषित &lt;strong>Scaled Dot-Product Attention&lt;/strong> की पूरी तस्वीर है।&lt;/p>
&lt;hr>
&lt;h1 id="5-multi-head-attention-मलट-हड-अटशन">5. Multi-Head Attention (मल्टी-हेड अटेंशन)
&lt;/h1>&lt;p>केवल एक Attention गणना (सिंगल हेड) के साथ, यह संभावना है कि यह केवल एक दृष्टिकोण (उदाहरण के लिए, &amp;ldquo;व्याकरणिक संबंध&amp;rdquo;) से संदर्भ को पकड़ सकता है। इसलिए, भाषा के विविध अर्थ संबंधी और वाक्य रचनात्मक संबंधों (जैसे &amp;ldquo;विषय और विधेय (Subject and predicate)&amp;rdquo;, &amp;ldquo;सर्वनाम और उसका संदर्भ&amp;rdquo;) को एक साथ पकड़ने के लिए, &lt;strong>Multi-Head Attention&lt;/strong> को पेश किया गया था।&lt;/p>
&lt;p>हम पहले की तरह $Q, K, V$ के निर्माण और Attention गणना को समानांतर में $h$ बार (हेड्स की संख्या। मूल पेपर में $h=8$) करते हैं।&lt;/p>
$$ \text{head}_i = \text{Attention}(X W_i^Q, X W_i^K, X W_i^V) $$
&lt;p>यहाँ, $W_i^Q, W_i^K, W_i^V \in \mathbb{R}^{d_{model} \times d_k}$ $i$-वें हेड के लिए समर्पित सीखने योग्य वेट मैट्रिक्स हैं।&lt;/p>
&lt;p>प्रत्येक हेड से आउटपुट परिणाम $\text{head}_i \in \mathbb{R}^{N \times d_v}$ को क्षैतिज रूप से जोड़ा (Concatenate) जाता है।&lt;/p>
$$ \text{Concat}(\text{head}_1, \dots, \text{head}_h) \in \mathbb{R}^{N \times (h \cdot d_v)} $$
&lt;p>आमतौर पर, इसे इस प्रकार सेट किया जाता है कि $h \cdot d_v = d_{model}$ हो, इसलिए संयोजन के बाद डायमेंशन फिर से इनपुट के समान $d_{model}$ पर वापस आ जाता है। अंत में, इस मैट्रिक्स को वेट मैट्रिक्स $W^O \in \mathbb{R}^{d_{model} \times d_{model}}$ से गुणा करके अंतिम आउटपुट प्राप्त किया जाता है।&lt;/p>
$$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O $$
&lt;div class="mermaid">graph TD
X["इनपुट X"] --> Q1["Q1"]
X --> K1["K1"]
X --> V1["V1"]
Q1 &amp; K1 &amp; V1 --> H1["हेड 1"]
X --> Q2["Q2"]
X --> K2["K2"]
X --> V2["V2"]
Q2 &amp; K2 &amp; V2 --> H2["हेड 2"]
X --> QN["..."]
X --> KN["..."]
X --> VN["..."]
QN &amp; KN &amp; VN --> HN["हेड h"]
H1 &amp; H2 &amp; HN --> C["कॉन्कैटिनेट (Concatenate)"]
C --> WO["WO से गुणा करें"]
WO --> OUT["मल्टी-हेड आउटपुट"]&lt;/div>
&lt;hr>
&lt;h1 id="6-feed-forward-neural-network-ffn">6. Feed-Forward Neural Network (FFN)
&lt;/h1>&lt;p>Multi-Head Attention का आउटपुट फिर &lt;strong>Position-wise Feed-Forward Network (FFN)&lt;/strong> में इनपुट किया जाता है।
यह एक 2-लेयर पूरी तरह से जुड़ा हुआ न्यूरल नेटवर्क (fully connected neural network) है जिसे अनुक्रम के &amp;ldquo;प्रत्येक स्थिति (शब्द) के लिए स्वतंत्र रूप से&amp;rdquo; लागू किया जाता है।&lt;/p>
&lt;p>गणितीय रूप से, इसे इस प्रकार दर्शाया जाता है:&lt;/p>
$$ \text{FFN}(x) = \max(0, x W_1 + b_1) W_2 + b_2 $$
&lt;p>यहाँ, $\max(0, z)$ ReLU (Rectified Linear Unit) एक्टिवेशन फ़ंक्शन को दर्शाता है (हाल के मॉडल में अक्सर GELU या SwiGLU का उपयोग किया जाता है)।&lt;/p>
&lt;p>इस नेटवर्क की भूमिका बहुत महत्वपूर्ण है। Attention तंत्र &amp;ldquo;शब्दों के बीच संबंध (स्थानिक और अनुक्रमिक संबंध)&amp;rdquo; सीखता है, जबकि FFN &amp;ldquo;प्रत्येक शब्द वेक्टर के गैर-रैखिक फीचर ट्रांसफॉर्मेशन (Non-linear feature transformation)&amp;rdquo; के लिए ज़िम्मेदार है।
आमतौर पर, डायमेंशन को अस्थायी रूप से पहले लेयर के वेट $W_1$ द्वारा बहुत बढ़ाया जाता है (उदाहरण के लिए, $d_{model}=512$ से $d_{ff}=2048$ तक 4 गुना विस्तारित किया जाता है), और फीचर स्पेस पर जटिल गणना करने के बाद, इसे दूसरे लेयर के वेट $W_2$ के साथ फिर से मूल डायमेंशन में लाया जाता है। इस &amp;ldquo;डायमेंशन के विस्तार और संकुचन&amp;rdquo; से मॉडल की अभिव्यंजक शक्ति में नाटकीय रूप से वृद्धि होती है।&lt;/p>
&lt;hr>
&lt;h1 id="7-अवशषट-कनकशन-residual-connection-और-लयर-नरमलइजशन-layer-normalization">7. अवशिष्ट कनेक्शन (Residual Connection) और लेयर नॉर्मलाइज़ेशन (Layer Normalization)
&lt;/h1>&lt;p>डीप लर्निंग में, जैसे-जैसे नेटवर्क में लेयर्स गहरी होती जाती हैं, प्रशिक्षण के दौरान ग्रेडिएंट गायब हो जाते हैं या फट जाते हैं (Exploding gradient), जिससे एक समस्या उत्पन्न होती है कि वे अच्छी तरह से नहीं सीख पाते। इसे रोकने के लिए, Transformer के प्रत्येक सब-लेयर (Attention और FFN) के चारों ओर &lt;strong>अवशिष्ट कनेक्शन (Residual Connection)&lt;/strong> और &lt;strong>लेयर नॉर्मलाइज़ेशन (Layer Normalization)&lt;/strong> को रखा गया है।&lt;/p>
&lt;p>गणितीय रूप से, सब-लेयर के आउटपुट को इस प्रकार संसाधित किया जाता है:&lt;/p>
$$ \text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x)) $$
&lt;h2 id="71-अवशषट-कनकशन-x--textsublayerx">7.1 अवशिष्ट कनेक्शन ($x + \text{Sublayer}(x)$)
&lt;/h2>&lt;p>इनपुट $x$ को सीधे सब-लेयर के आउटपुट में जोड़ा जाता है। इससे, बैकप्रोपेगेशन (Backpropagation) के दौरान ग्रेडिएंट शॉर्टकट के माध्यम से सीधे उथले लेयर्स (shallow layers) तक पहुंचता है, जिससे लेयर्स के गहरे होने पर भी सीखना स्थिर रहता है।&lt;/p>
&lt;h2 id="72-layer-normalization-क-गणत">7.2 Layer Normalization का गणित
&lt;/h2>&lt;p>Layer Normalization एक तकनीक है जो फीचर डायमेंशन की दिशा में माध्य और प्रसरण की गणना करके डेटा को सामान्य (normalize) करती है। बैच आकार $B$, अनुक्रम लंबाई $N$, और डायमेंशन $d_{model}$ के इनपुट में, किसी एक शब्द वेक्टर $x \in \mathbb{R}^{d_{model}}$ के लिए सामान्यीकरण किया जाता है।&lt;/p>
&lt;p>माध्य $\mu$ और प्रसरण $\sigma^2$ की गणना करें:
&lt;/p>
$$ \mu = \frac{1}{d_{model}} \sum_{i=1}^{d_{model}} x_i $$
$$ \sigma^2 = \frac{1}{d_{model}} \sum_{i=1}^{d_{model}} (x_i - \mu)^2 $$
&lt;p>फिर, सामान्यीकृत आउटपुट $\hat{x}$ प्राप्त करें:
&lt;/p>
$$ \text{LN}(x) = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \odot \gamma + \beta $$
&lt;p>
($\epsilon$ शून्य से विभाजन (division by zero) को रोकने के लिए एक बहुत छोटा स्थिरांक है। $\gamma, \beta$ सीखने योग्य स्केल और शिफ्ट पैरामीटर हैं)&lt;/p>
&lt;p>बैच दिशा में सामान्यीकरण (Batch Normalization) के बजाय लेयर दिशा में सामान्यीकरण (Layer Normalization) को अपनाने का कारण यह है कि वाक्यों जैसे चर लंबाई (variable-length) वाले अनुक्रम डेटा को संसाधित करते समय, बैचों के बीच आँकड़े अस्थिर होने का खतरा होता है। Layer Normalization के माध्यम से, Transformer बैच आकार पर निर्भर किए बिना स्थिर प्रशिक्षण प्राप्त करने में सक्षम होता है।&lt;/p>
&lt;hr>
&lt;h1 id="8-डकडर-वशषट-सरचन-masked-attention-और-cross-attention">8. डिकोडर-विशिष्ट संरचना: Masked Attention और Cross-Attention
&lt;/h1>&lt;p>अब तक बताई गई संरचना एनकोडर की है। वाक्यों को उत्पन्न करने वाले डिकोडर ब्लॉक में, संरचना थोड़ी अलग होती है।&lt;/p>
&lt;h2 id="81-masked-multi-head-attention">8.1 Masked Multi-Head Attention
&lt;/h2>&lt;p>डिकोडर की भूमिका &amp;ldquo;पिछले शब्दों से अगले शब्द की भविष्यवाणी करना&amp;rdquo; है। इसलिए, यदि यह प्रशिक्षण के दौरान &amp;ldquo;भविष्य के शब्दों&amp;rdquo; को देख लेता है, तो यह नकल (चीटिंग) होगी। इसे रोकने के लिए किया जाने वाला गणितीय संचालन &lt;strong>Masking (मास्किंग)&lt;/strong> है।&lt;/p>
&lt;p>स्कोर मैट्रिक्स $Q K^T$ में, एक मास्क मैट्रिक्स $M$ जोड़ा जाता है जो ऊपरी त्रिकोणीय हिस्से (upper triangular part, भविष्य की जानकारी के अनुरूप) में $-\infty$ के करीब बहुत छोटा मान सेट करता है।&lt;/p>
$$ M_{ij} = \begin{cases} 0 &amp; (i \le j) \\ -\infty &amp; (i > j) \end{cases} $$
$$ \text{Masked Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T + M}{\sqrt{d_k}}\right) V $$
&lt;p>Softmax फ़ंक्शन की गणना करते समय, क्योंकि $\exp(-\infty) = 0$ होता है, भविष्य के शब्दों के लिए Attention Weight पूरी तरह से $0$ हो जाता है। यह कारणता (Causality) को बनाए रखते हुए ऑटो-रिग्रेसिव (autoregressive) पीढ़ी (generation) को संभव बनाता है।&lt;/p>
&lt;h2 id="82-encoder-decoder-cross-attention">8.2 Encoder-Decoder Cross-Attention
&lt;/h2>&lt;p>डिकोडर का दूसरा सब-लेयर &lt;strong>Cross-Attention&lt;/strong> है, जो एनकोडर के आउटपुट को संदर्भित करता है।
यहाँ, $Q$ पिछले डिकोडर लेयर से उत्पन्न होता है, लेकिन $K$ और $V$ एनकोडर के अंतिम लेयर के आउटपुट से उत्पन्न होते हैं।&lt;/p>
$$ Q_{decoder} = X_{dec} W^Q $$
$$ K_{encoder} = X_{enc} W^K $$
$$ V_{encoder} = X_{enc} W^V $$
&lt;p>इस गणना के माध्यम से, मॉडल अनुवाद कार्यों में यह सीख सकता है कि &amp;ldquo;वर्तमान में अनुवाद किया जा रहा शब्द, मूल विदेशी भाषा के वाक्य के किस भाग से दृढ़ता से संबंधित है&amp;rdquo;।&lt;/p>
&lt;hr>
&lt;h1 id="9-कमपयटशनल-कमपलकसट-और-आधनक-अनकलन-optimization-क-गणत">9. कम्प्यूटेशनल कॉम्प्लेक्सिटी और आधुनिक अनुकूलन (Optimization) का गणित
&lt;/h1>&lt;p>Transformer एक बेहतरीन मॉडल है, लेकिन इसकी गणितीय संरचना के कारण इसकी कुछ &amp;ldquo;कमज़ोरियाँ&amp;rdquo; भी हैं।
Self-Attention की कम्प्यूटेशनल जटिलता (Computational complexity) पर ध्यान दें। स्कोर मैट्रिक्स $Q K^T$ की गणना में, $(N \times d_k)$ के मैट्रिक्स को $(d_k \times N)$ के मैट्रिक्स से गुणा किया जाता है, इसलिए इसकी गणना की जटिलता &lt;strong>$O(N^2 \cdot d_{model})$&lt;/strong> है।&lt;/p>
&lt;p>दूसरे शब्दों में, &lt;strong>अनुक्रम लंबाई $N$ के सापेक्ष गणना की मात्रा और मेमोरी का उपयोग वर्ग (square) में बढ़ता है&lt;/strong>।
यदि वाक्य छोटा है तो यह कोई समस्या नहीं है, लेकिन यदि आप एक पूरी किताब जैसा लंबा संदर्भ LLM में इनपुट करने का प्रयास करते हैं, तो $N$ दसियों हज़ार से लेकर लाखों तक पहुँच सकता है, और पारंपरिक Attention गणना GPU मेमोरी को तुरंत समाप्त कर देगी।&lt;/p>
&lt;p>इस $O(N^2)$ के अभिशाप को तोड़ने के लिए, हाल के वर्षों में गणितीय और हार्डवेयर दृष्टिकोण से विभिन्न अनुकूलन प्रस्तावित किए गए हैं।
इसका एक प्रमुख उदाहरण &lt;strong>FlashAttention&lt;/strong> है। FlashAttention एक एल्गोरिथ्म है जो GPU के मेमोरी पदानुक्रम (SRAM और HBM) के बीच डेटा ट्रांसफर (मेमोरी एक्सेस) को कम करने के लिए Attention गणना को टाइल-जैसी संरचना (Tiling) में विभाजित करता है। यद्यपि गणितीय रूप से यह मानक Attention (Exact Attention) के समान परिणाम देता है, फिर भी हार्डवेयर स्तर के अनुकूलन के माध्यम से यह नाटकीय गति और मेमोरी में कमी प्राप्त करता है, जिससे GPT-4 जैसे लंबे-संदर्भ वाले मॉडल संभव हो सके।&lt;/p>
&lt;p>इसके अलावा, Sparse Attention और Linear Attention पर भी बहुत शोध किया जा रहा है, जो कम्प्यूटेशनल जटिलता को $O(N \log N)$ या $O(N)$ के अनुमानित स्तर पर लाते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="10-करयनवयन-implementation-क-कलपन-pytorch-सटइल-सयड-कड">10. कार्यान्वयन (Implementation) की कल्पना (PyTorch-स्टाइल स्यूडो-कोड)
&lt;/h1>&lt;p>यदि हम अब तक की गणितीय संरचना को वास्तविक प्रोग्रामिंग कोड (Python / PyTorch) में लागू करते हैं, तो हम देखेंगे कि इसे आश्चर्यजनक रूप से सरलता से लिखा जा सकता है। नीचे Self-Attention के मुख्य भाग के लिए स्यूडो-कोड दिया गया है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn.functional&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">F&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">math&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">scaled_dot_product_attention&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mask&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">None&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># q, k, v का आकार (Shape): [batch_size, num_heads, seq_length, d_k]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d_k&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 1. डॉट-प्रोडक्ट द्वारा स्कोर गणना: Q * K^T&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># अंतिम 2 डायमेंशन को ट्रांसपोज़ (Transpose) करके मैट्रिक्स गुणन (Matrix multiplication)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">matmul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">transpose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 2. स्केलिंग (Scaling)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">scores&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">math&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sqrt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d_k&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 3. मास्किंग (Masked Attention के मामले में)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">mask&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="kc">None&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">scores&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">masked_fill&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">mask&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1e9&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 4. Softmax द्वारा संभाव्यता&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">attention_weights&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">F&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">softmax&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">scores&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="o">=-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 5. Value मैट्रिक्स का गुणन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">matmul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">attention_weights&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">attention_weights&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>आप देख सकते हैं कि गणितीय सूत्र $Q K^T / \sqrt{d_k}$ को &lt;code>torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(d_k)&lt;/code> के रूप में सहजता से लागू किया गया है। यह डीप लर्निंग का एक बहुत ही दिलचस्प पहलू है कि गणितीय सिद्धांतों को उन्नत अनुकूलन पुस्तकालयों (Optimization libraries) की मदद से केवल कुछ लाइनों के कोड में साकार किया जा सकता है।&lt;/p>
&lt;hr>
&lt;h1 id="नषकरष-गणतय-सतर-स-उभरन-वल-बदधमतत-क-सवरप">निष्कर्ष: गणितीय सूत्रों से उभरने वाला &amp;ldquo;बुद्धिमत्ता&amp;rdquo; का स्वरूप
&lt;/h1>&lt;p>इस लेख में, हमने Transformer मॉडल के भीतर गहराई में छिपी गणितीय संरचना को उजागर किया है।&lt;/p>
&lt;p>शब्दों को बहु-आयामी (Multi-dimensional) वेक्टर स्पेस में मैप करने वाली Embedding, स्थिति की जानकारी को त्रिकोणमितीय तरंगों के संयोजन के रूप में व्यक्त करने वाली Positional Encoding, और सूचना पुनर्प्राप्ति (Information retrieval) की सादृश्यता से पैदा हुआ मैट्रिक्स डॉट-प्रोडक्ट गणना वाला Self-Attention तंत्र। ये सभी घटक केवल रैखिक बीजगणित (Linear algebra), कैलकुलस (Calculus), और प्रायिकता-सांख्यिकी (Probability &amp;amp; Statistics) जैसे बुनियादी गणित का एक संचय हैं।&lt;/p>
&lt;p>लेकिन, जब ये सरल मैट्रिक्स गणनाएँ कई लेयर्स में जुड़ जाती हैं, और अरबों-खरबों मापदंडों (Parameters) के माध्यम से विशाल डेटासेट से पैटर्न सीखती हैं, तो यह हमारी &amp;ldquo;भाषा&amp;rdquo; को समझने, तार्किक तर्क करने, और कभी-कभी रचनात्मक विचार उत्पन्न करने वाले &amp;ldquo;बुद्धिमत्ता के स्वरूप&amp;rdquo; के रूप में सामने आती है।&lt;/p>
&lt;p>जैसा कि भड़काऊ शीर्षक &amp;ldquo;Attention Is All You Need&amp;rdquo; से पता चलता है, जटिल रिकरंट और कनवल्शनल (Convolutional) प्रोसेसिंग को त्यागकर पूरी तरह से &amp;ldquo;अटेंशन (प्रासंगिकता)&amp;rdquo; गणना पर केंद्रित इस आर्किटेक्चर की सुंदरता इसकी गणितीय सरलता में ही निहित है।&lt;/p>
&lt;p>भविष्य में, Transformer को पार करने वाले नए आर्किटेक्चर (जैसे स्टेट स्पेस मॉडल Mamba) उभर सकते हैं, लेकिन Transformer द्वारा स्थापित &amp;ldquo;Attention के माध्यम से संदर्भ समझ&amp;rdquo; का गणितीय ढांचा AI के इतिहास में हमेशा के लिए उकेरा जाएगा।&lt;/p>
&lt;p>यदि आपको भविष्य में ChatGPT या Claude जैसे LLM का उपयोग करने का अवसर मिलता है, तो ज़रा कल्पना करें कि बैकग्राउंड में हर सेकंड ट्रिलियन बार $Q K^T$ के मैट्रिक्स गुणन की गणना की जा रही है और Softmax फ़ंक्शन संभावनाओं का उत्पादन कर रहा है। तकनीक के प्रति आपकी समझ (Resolution) बढ़ेगी, और आपको AI की दुनिया और भी दिलचस्प लगने लगेगी।&lt;/p>
&lt;h3 id="सदरभ">संदर्भ
&lt;/h3>&lt;ul>
&lt;li>Vaswani, A., et al. (2017). &amp;ldquo;Attention Is All You Need.&amp;rdquo; &lt;em>Advances in Neural Information Processing Systems&lt;/em>.&lt;/li>
&lt;li>Alammar, J. (2018). &amp;ldquo;The Illustrated Transformer.&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>यह लेख उन लोगों के लिए एक मार्गदर्शिका के रूप में लिखा गया था जो प्राकृतिक भाषा प्रसंस्करण (NLP) और AI के गणितीय आधार सीख रहे हैं। यदि आपके कोई प्रश्न या विचार-विमर्श हैं, तो कृपया हमें टिप्पणी अनुभाग में बताएं!&lt;/em>&lt;/p></description></item><item><title>फर्मेट के छोटे प्रमेय का उपयोग करते हुए क्रिप्टोग्राफी के मूल सिद्धांत और कार्यान्वयन</title><link>http://kenji.blog/hi/p/fermats-little-theorem-cryptography-implementation/</link><pubDate>Fri, 11 Sep 2026 22:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/fermats-little-theorem-cryptography-implementation/</guid><description>&lt;img src="http://kenji.blog/p/fermats-little-theorem-cryptography-implementation/img/eyecatch.jpg" alt="Featured image of post फर्मेट के छोटे प्रमेय का उपयोग करते हुए क्रिप्टोग्राफी के मूल सिद्धांत और कार्यान्वयन" />&lt;h2 id="1-परचय-आधनक-करपटगरफ-क-समरथन-करन-वल-गणत-क-रहसय">1. परिचय: आधुनिक क्रिप्टोग्राफी का समर्थन करने वाले गणित का रहस्य
&lt;/h2>&lt;p>आधुनिक डिजिटल समाज में, विशेष रूप से इंटरनेट के माध्यम से संचार में, &amp;lsquo;क्रिप्टोग्राफी&amp;rsquo; (एन्क्रिप्शन) एक अपरिहार्य आधारभूत तकनीक बन गई है। हम वेब ब्राउज़र में HTTPS के माध्यम से सुरक्षित रूप से वेबसाइट ब्राउज़ कर सकते हैं, ऑनलाइन बैंकिंग में वित्तीय लेनदेन कर सकते हैं, और मैसेजिंग ऐप्स पर निजी बातचीत कर सकते हैं, यह सब उन्नत गणितीय सिद्धांतों द्वारा समर्थित क्रिप्टोग्राफ़िक प्रोटोकॉल के बैकग्राउंड में काम करने के कारण संभव है। इनमें से &amp;lsquo;पब्लिक-की क्रिप्टोग्राफी&amp;rsquo; (सार्वजनिक-कुंजी क्रिप्टोग्राफी) एक बहुत ही महत्वपूर्ण भूमिका निभाती है, और इसका सबसे प्रमुख उदाहरण &lt;strong>RSA क्रिप्टोग्राफी&lt;/strong> है।&lt;/p>
&lt;p>RSA सहित कई क्रिप्टोग्राफिक एल्गोरिदम की सुरक्षा और वैधता 17वीं सदी के फ्रांसीसी गणितज्ञ पियरे डी फर्मेट (Pierre de Fermat) द्वारा खोजे गए एक अत्यंत सुंदर और शक्तिशाली प्रमेय पर काफी हद तक निर्भर करती है। यह &lt;strong>फर्मेट का छोटा प्रमेय (Fermat&amp;rsquo;s Little Theorem)&lt;/strong> है। इसके अलावा, लियोनहार्ड यूलर (Leonhard Euler) का प्रमेय, जो कि इसका सामान्यीकरण है, भी क्रिप्टोग्राफिक सिद्धांत में एक निर्णायक भूमिका निभाता है।&lt;/p>
&lt;p>इस लेख में, हम शुरुआत से गहराई से बताएंगे कि कैसे फर्मेट के छोटे प्रमेय, जो कि शुद्ध गणित की एक खोज है, को आधुनिक व्यावहारिक क्रिप्टोग्राफिक तकनीकों, विशेष रूप से &amp;lsquo;अभाज्य संख्या परीक्षण&amp;rsquo; (Primality Test) और &amp;lsquo;RSA क्रिप्टोग्राफी&amp;rsquo; में लागू किया जाता है। यह एक बहुत विस्तृत तकनीकी मार्गदर्शिका होगी, जिसमें गणितीय प्रमाण, एन्क्रिप्शन और डिक्रिप्शन के तंत्र, और C++ और Python का उपयोग करके विशिष्ट एल्गोरिदम के कार्यान्वयन को शामिल किया गया है।&lt;/p>
&lt;hr>
&lt;h2 id="2-सरवगसमत-congruence-और-मडयलर-अकगणत-क-मल-सदधत">2. सर्वांगसमता (Congruence) और मॉड्यूलर अंकगणित के मूल सिद्धांत
&lt;/h2>&lt;p>फर्मेट के छोटे प्रमेय को समझने के लिए, सबसे पहले &amp;lsquo;मॉड्यूलर अंकगणित (सर्वांगसमता)&amp;rsquo; की गणितीय अवधारणा से परिचित होना आवश्यक है। मॉड्यूलर अंकगणित गणना की एक प्रणाली है जो किसी निश्चित संख्या (जिसे मॉड्यूलस कहा जाता है) से विभाजित करने पर प्राप्त &amp;lsquo;शेषफल&amp;rsquo; (remainder) पर केंद्रित होती है। चूंकि यह घड़ी के डायल (जो 12 घंटे में एक चक्कर पूरा करता है) की तरह एक गणना है, इसे अक्सर &amp;lsquo;घड़ी का गणित&amp;rsquo; भी कहा जाता है।&lt;/p>
&lt;p>जब पूर्णांक $a$ और $b$ को धनात्मक पूर्णांक $n$ से विभाजित करने पर शेषफल समान होता है, तो गणितीय रूप से इसे इस प्रकार लिखा जाता है:&lt;/p>
$$
a \equiv b \pmod n
$$
&lt;p>इसे इस प्रकार पढ़ा जाता है: &amp;ldquo;$a$ और $b$ मॉड्यूलो $n$ सर्वांगसम (congruent) हैं&amp;rdquo;। उदाहरण के लिए, 17 को 5 से भाग देने पर शेषफल 2 आता है, और 12 को 5 से भाग देने पर भी शेषफल 2 आता है। इसलिए, इसे इस प्रकार लिखा जा सकता है:&lt;/p>
$$
17 \equiv 12 \pmod 5 \equiv 2 \pmod 5
$$
&lt;p>मॉड्यूलर अंकगणित में, सामान्य बुनियादी अंकगणितीय संक्रियाएँ (जोड़, घटाव, गुणा) वैसे ही लागू होती हैं:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>जोड़ (Addition)&lt;/strong>: यदि $a \equiv b \pmod n$ और $c \equiv d \pmod n$, तो $a + c \equiv b + d \pmod n$&lt;/li>
&lt;li>&lt;strong>घटाव (Subtraction)&lt;/strong>: यदि $a \equiv b \pmod n$ और $c \equiv d \pmod n$, तो $a - c \equiv b - d \pmod n$&lt;/li>
&lt;li>&lt;strong>गुणा (Multiplication)&lt;/strong>: यदि $a \equiv b \pmod n$ और $c \equiv d \pmod n$, तो $a \times c \equiv b \times d \pmod n$&lt;/li>
&lt;li>&lt;strong>घातांक (Exponentiation)&lt;/strong>: यदि $a \equiv b \pmod n$, तो किसी भी प्राकृतिक संख्या $k$ के लिए $a^k \equiv b^k \pmod n$&lt;/li>
&lt;/ol>
&lt;p>हालाँकि, &lt;strong>भाग (Division)&lt;/strong> के संबंध में सावधानी बरतने की आवश्यकता है। सामान्य तौर पर, यदि $a \times c \equiv b \times c \pmod n$ है, तो इसका मतलब यह नहीं है कि हम दोनों पक्षों को $c$ से भाग देकर $a \equiv b \pmod n$ कर सकते हैं। यह केवल तभी सत्य होता है जब $c$ और $n$ सह-अभाज्य (coprime) हों (यानी, उनका महत्तम समापवर्तक 1 हो)। &amp;lsquo;मॉड्यूलर व्युत्क्रम (Modular inverse)&amp;rsquo; की यह अवधारणा RSA क्रिप्टोग्राफी में कुंजी निर्माण (key generation) के लिए अत्यंत महत्वपूर्ण है, जिस पर हम बाद में चर्चा करेंगे।&lt;/p>
&lt;hr>
&lt;h2 id="3-फरमट-क-छट-परमय-क-गणतय-पषठभम-और-परमण">3. फर्मेट के छोटे प्रमेय की गणितीय पृष्ठभूमि और प्रमाण
&lt;/h2>&lt;p>मॉड्यूलर अंकगणित के मूल सिद्धांतों को समझने के बाद, आइए हमारे मुख्य विषय, फर्मेट के छोटे प्रमेय (Fermat&amp;rsquo;s Little Theorem) पर नज़र डालते हैं।&lt;/p>
&lt;h3 id="31-परमय-क-परभष">3.1 प्रमेय की परिभाषा
&lt;/h3>&lt;p>फर्मेट के छोटे प्रमेय को इस प्रकार तैयार किया गया है:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>फर्मेट का छोटा प्रमेय (Fermat&amp;rsquo;s Little Theorem)&lt;/strong>
मान लीजिए कि $p$ एक अभाज्य संख्या (prime number) है, और $a$ कोई ऐसा पूर्णांक है जो $p$ का गुणज नहीं है (अर्थात $a$ और $p$ सह-अभाज्य हैं)। इस स्थिति में, निम्नलिखित सर्वांगसमता (congruence) सत्य होगी:
&lt;/p>
$$ a^{p-1} \equiv 1 \pmod p $$
&lt;/blockquote>
&lt;p>इसके अलावा, &amp;ldquo;$a$, $p$ का गुणज नहीं है&amp;rdquo; की शर्त को हटाकर इसे एक ऐसे रूप में व्यक्त करना भी आम है जो सभी पूर्णांकों $a$ के लिए सही है। उस स्थिति में, दोनों पक्षों को $a$ से गुणा करने पर निम्नलिखित प्राप्त होता है:&lt;/p>
$$
a^p \equiv a \pmod p
$$
&lt;h3 id="32-वशषट-उदहरण-क-सथ-सतयपन">3.2 विशिष्ट उदाहरणों के साथ सत्यापन
&lt;/h3>&lt;p>आइए विशिष्ट संख्याओं का उपयोग करके जांचें कि क्या यह प्रमेय वास्तव में काम करता है।
मान लें कि अभाज्य संख्या $p = 5$ है। तो $p-1 = 4$ होगा। हम $a$ के रूप में एक पूर्णांक चुनते हैं जो $p$ का गुणज नहीं है।&lt;/p>
&lt;ul>
&lt;li>यदि $a = 2$: $2^{5-1} = 2^4 = 16$. $16 \div 5 = 3$ शेषफल $1$. अतः $16 \equiv 1 \pmod 5$. (सत्यापित)&lt;/li>
&lt;li>यदि $a = 3$: $3^{5-1} = 3^4 = 81$. $81 \div 5 = 16$ शेषफल $1$. अतः $81 \equiv 1 \pmod 5$. (सत्यापित)&lt;/li>
&lt;li>यदि $a = 4$: $4^{5-1} = 4^4 = 256$. $256 \div 5 = 51$ शेषफल $1$. अतः $256 \equiv 1 \pmod 5$. (सत्यापित)&lt;/li>
&lt;/ul>
&lt;p>इस प्रकार, हम जो भी $a$ चुनते हैं (जब तक कि वह 5 का गुणज न हो), उसे घात 4 तक बढ़ाने और 5 से भाग देने पर शेषफल हमेशा 1 होगा। यह जादू जैसा लग सकता है, लेकिन यह अभाज्य संख्याओं के सुंदर गुणों से उत्पन्न होता है।&lt;/p>
&lt;h3 id="33-परमय-क-गणतय-परमण">3.3 प्रमेय का गणितीय प्रमाण
&lt;/h3>&lt;p>ऐसा क्यों होता है? यहाँ हम अवशिष्ट वर्गों (residue classes) के सेट का उपयोग करते हुए एक सुरुचिपूर्ण प्रमाण प्रस्तुत करते हैं।&lt;/p>
&lt;p>मान लीजिए एक सेट $S = \{1, 2, 3, \dots, p-1\}$ है। ये उन पूर्णांकों के प्रतिनिधि हैं जिन्हें $p$ से विभाजित करने पर शेषफल $1$ से $p-1$ तक आते हैं।
अब, एक नए सेट $T$ पर विचार करें जहाँ $S$ के प्रत्येक तत्व को $p$ के साथ सह-अभाज्य पूर्णांक $a$ से गुणा किया गया है:
&lt;/p>
$$ T = \{1a, 2a, 3a, \dots, (p-1)a\} $$
&lt;p>इस सेट $T$ के प्रत्येक तत्व को $p$ से विभाजित करने पर प्राप्त शेषफलों पर विचार करें। आश्चर्यजनक रूप से, ये शेषफल, भले ही उनका क्रम बदल गया हो, मूल सेट $S$ के तत्वों से पूरी तरह मेल खाएंगे।
ऐसा इसलिए है क्योंकि:&lt;/p>
&lt;ol>
&lt;li>$T$ का कोई भी तत्व $p$ का गुणज नहीं हो सकता (क्योंकि न तो $a$ और न ही मूल तत्व $p$ के गुणज हैं)।&lt;/li>
&lt;li>$T$ में ऐसे कोई दो भिन्न तत्व नहीं हैं जो मॉड्यूलो $p$ सर्वांगसम हों। यदि $ia \equiv ja \pmod p$ (जहाँ $i \neq j$) है, तो चूंकि $a$ और $p$ सह-अभाज्य हैं, हम $a$ से भाग दे सकते हैं और $i \equiv j \pmod p$ प्राप्त कर सकते हैं, जो एक विरोधाभास है।&lt;/li>
&lt;/ol>
&lt;p>इसलिए, $S$ के सभी तत्वों का गुणनफल और $T$ के सभी तत्वों का गुणनफल मॉड्यूलो $p$ सर्वांगसम होंगे।&lt;/p>
$$
(1a) \times (2a) \times \dots \times ((p-1)a) \equiv 1 \times 2 \times \dots \times (p-1) \pmod p
$$
&lt;p>बायें पक्ष को व्यवस्थित करने पर, चूंकि $a$, $p-1$ बार है:&lt;/p>
$$
a^{p-1} \cdot (p-1)! \equiv (p-1)! \pmod p
$$
&lt;p>चूंकि $(p-1)!$ और $p$ सह-अभाज्य हैं, हम दोनों पक्षों को $(p-1)!$ से भाग दे सकते हैं, जिससे अंततः निम्नलिखित प्रमेय प्राप्त होता है:&lt;/p>
$$
a^{p-1} \equiv 1 \pmod p
$$
&lt;p>यह फर्मेट के छोटे प्रमेय का प्रमाण है।&lt;/p>
&lt;hr>
&lt;h2 id="4-यलर-क-टटएट-फलन-eulers-totient-function-और-यलर-क-परमय">4. यूलर का टोटिएंट फलन (Euler&amp;rsquo;s Totient Function) और यूलर का प्रमेय
&lt;/h2>&lt;p>फर्मेट का छोटा प्रमेय &amp;lsquo;अभाज्य संख्या $p$&amp;rsquo; के बारे बारे में है, लेकिन लियोनहार्ड यूलर ने इसे &amp;lsquo;किसी भी धनात्मक पूर्णांक $n$&amp;rsquo; के लिए सामान्यीकृत किया। RSA क्रिप्टोग्राफी को समझने के लिए यह विस्तार आवश्यक है।&lt;/p>
&lt;h3 id="41-यलर-क-टटएट-फलन-phin">4.1 यूलर का टोटिएंट फलन $\phi(n)$
&lt;/h3>&lt;p>यूलर का टोटिएंट फलन (या यूलर का $\phi$ फलन) $\phi(n)$ एक ऐसा फलन है जो &amp;ldquo;$1$ से $n$ तक के उन पूर्णांकों की संख्या को दर्शाता है जो $n$ के साथ सह-अभाज्य हैं&amp;rdquo;।&lt;/p>
&lt;ul>
&lt;li>किसी अभाज्य संख्या $p$ के लिए, $1$ से $p-1$ तक के सभी पूर्णांक $p$ के साथ सह-अभाज्य होते हैं, इसलिए $\phi(p) = p - 1$ होगा।&lt;/li>
&lt;li>दो भिन्न अभाज्य संख्याओं $p, q$ के लिए, यदि उनका गुणनफल $n = p \times q$ है, तो $\phi(n)$ को एक बहुत ही सरल सूत्र द्वारा निकाला जा सकता है:
$$ \phi(p \times q) = \phi(p) \times \phi(q) = (p - 1)(q - 1) $$&lt;/li>
&lt;/ul>
&lt;p>यह गुण RSA क्रिप्टोग्राफी में कुंजी निर्माण का मूल तर्क (logic) बन जाता है।&lt;/p>
&lt;h3 id="42-यलर-क-परमय">4.2 यूलर का प्रमेय
&lt;/h3>&lt;p>यूलर ने फर्मेट के छोटे प्रमेय को इस प्रकार सामान्यीकृत किया:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>यूलर का प्रमेय (Euler&amp;rsquo;s Theorem)&lt;/strong>
एक धनात्मक पूर्णांक $n$ और उसके साथ सह-अभाज्य पूर्णांक $a$ के लिए, निम्नलिखित सत्य है:
&lt;/p>
$$ a^{\phi(n)} \equiv 1 \pmod n $$
&lt;/blockquote>
&lt;p>यदि $n$ एक अभाज्य संख्या $p$ है, तो $\phi(p) = p - 1$, जिसका अर्थ है कि यह स्वयं फर्मेट का छोटा प्रमेय ($a^{p-1} \equiv 1 \pmod p$) बन जाता है। दूसरे शब्दों में, फर्मेट का छोटा प्रमेय यूलर के प्रमेय का ही एक विशेष मामला है।&lt;/p>
&lt;hr>
&lt;h2 id="5-वशल-अभजय-सखयए-ढढन-फरमट-क-अभजय-परकषण-primality-test">5. विशाल अभाज्य संख्याएँ ढूँढना: फर्मेट का अभाज्य परीक्षण (Primality Test)
&lt;/h2>&lt;p>क्रिप्टोग्राफी (जैसे RSA क्रिप्टोग्राफी और डिफी-हेलमैन (Diffie-Hellman) कुंजी विनिमय) में, सैकड़ों अंकों की &amp;lsquo;विशाल अभाज्य संख्याएँ&amp;rsquo; तेज़ी से खोजना आवश्यक है। हालाँकि, यह निर्धारित करने के लिए कि क्या एक विशाल संख्या $N$ अभाज्य है, &amp;lsquo;परीक्षण विभाजन विधि&amp;rsquo; (Trial division), जिसमें $2$ से $\sqrt{N}$ तक की सभी संख्याओं से भाग देकर जाँचा जाता है, में ब्रह्मांड के जीवनकाल जितना समय लग सकता है।&lt;/p>
&lt;p>यहीं पर फर्मेट के छोटे प्रमेय का उपयोग करने वाला &amp;lsquo;प्रायिकतात्मक अभाज्य परीक्षण&amp;rsquo; (Probabilistic primality test), जिसे &lt;strong>फर्मेट टेस्ट (Fermat Primality Test)&lt;/strong> कहा जाता है, सामने आता है।&lt;/p>
&lt;h3 id="51-परयकततमक-अभजय-परकषण-कय-ह">5.1 प्रायिकतात्मक अभाज्य परीक्षण क्या है?
&lt;/h3>&lt;p>फर्मेट के छोटे प्रमेय के अनुसार, यदि $p$ अभाज्य है, तो किसी भी $a$ ($1 &lt; a &lt; p$) के लिए, $a^{p-1} \equiv 1 \pmod p$ हमेशा सत्य होगा।
इसका प्रतिलोम (contrapositive) लेने पर हम कह सकते हैं, &amp;ldquo;यदि किसी $a$ के लिए $a^{p-1} \not\equiv 1 \pmod p$ है, तो $p$ &lt;strong>निश्चित रूप से अभाज्य नहीं है (यह एक भाज्य संख्या (composite number) है)&lt;/strong>&amp;quot;।&lt;/p>
&lt;p>इसलिए, यदि हम परीक्षण करना चाहते हैं कि क्या $N$ अभाज्य है, तो हम यादृच्छिक रूप से कुछ $a$ चुनते हैं, $a^{N-1} \pmod N$ की गणना करते हैं, और जांचते हैं कि क्या यह $1$ है। यदि उत्तर एक बार भी $1$ के अलावा कुछ और आता है, तो $N$ निश्चित रूप से एक भाज्य संख्या है। यदि कई बार परीक्षण करने के बाद भी यह $1$ आता है, तो हम उच्च संभावना के साथ कह सकते हैं कि $N$ &amp;ldquo;संभवतः अभाज्य (probably prime)&amp;rdquo; है।&lt;/p>
&lt;h3 id="52-एलगरदम-क-ववरण-और-फलचरट">5.2 एल्गोरिदम का विवरण और फ़्लोचार्ट
&lt;/h3>&lt;p>फर्मेट टेस्ट का एल्गोरिदम इस प्रकार है:&lt;/p>
&lt;div class="mermaid">flowchart TD
Start["प्रारंभ"] --> Input["परीक्षण की जाने वाली संख्या p और परीक्षणों की संख्या k इनपुट करें"]
Input --> LoopStart["i = 0 से k-1 तक लूप"]
LoopStart --> Condition{"i &lt; k ?"}
Condition -- "हाँ" --> RandomA["1 &lt; a &lt; p-1 के बीच एक यादृच्छिक पूर्णांक a चुनें"]
RandomA --> Calc["मॉड्यूलर घातांक a^(p-1) mod p की गणना करें"]
Calc --> CheckPrime{"क्या परिणाम 1 है?"}
CheckPrime -- "नहीं" --> ReturnComposite["p एक भाज्य संख्या है (निश्चित)"]
CheckPrime -- "हाँ" --> Increment["i को बढ़ाएँ (increment)"]
Increment --> Condition
Condition -- "नहीं" --> ReturnPrime["p संभवतः अभाज्य है (प्रायिकतात्मक)"]
ReturnComposite --> End["समाप्त"]
ReturnPrime --> End&lt;/div>
&lt;h3 id="53-करमइकल-सखयए-pseudoprimes-क-जल">5.3 कारमाइकल संख्याएँ (Pseudoprimes) का जाल
&lt;/h3>&lt;p>फर्मेट टेस्ट बहुत तेज़ है, लेकिन इसमें एक गंभीर दोष है। कुछ ऐसी दुष्ट संख्याएँ होती हैं जो भाज्य (composite) होने के बावजूद, सभी $a$ के लिए $a^{N-1} \equiv 1 \pmod N$ को संतुष्ट करती हैं। इन्हें &lt;strong>कारमाइकल संख्याएँ (Carmichael numbers)&lt;/strong> कहा जाता है। सबसे छोटी कारमाइकल संख्या $561$ ($3 \times 11 \times 17$) है।&lt;/p>
&lt;p>कारमाइकल संख्याओं के अस्तित्व के कारण, केवल शुद्ध फर्मेट टेस्ट से पूर्ण अभाज्य परीक्षण नहीं किया जा सकता है। इसलिए, वास्तविक एन्क्रिप्शन सिस्टम (जैसे OpenSSL) मानक के रूप में &lt;strong>मिलर-राबिन (Miller-Rabin) अभाज्य परीक्षण&lt;/strong> का उपयोग करते हैं, जो फर्मेट टेस्ट का एक उन्नत संस्करण है। मिलर-राबिन परीक्षण कारमाइकल संख्याओं का पता लगा सकता है, जिससे गलत निर्णय की संभावना लगभग शून्य हो जाती है।&lt;/p>
&lt;h3 id="54-तज-मडयलर-घतक-exponentiation-by-squaring">5.4 तेज़ मॉड्यूलर घातांक (Exponentiation by Squaring)
&lt;/h3>&lt;p>अभाज्य परीक्षण एल्गोरिदम में, $a^{N-1} \pmod N$ की गणना करना आवश्यक है, लेकिन यदि $N$ बहुत बड़ा है, तो $a^{N-1}$ खगोलीय अंकों में होगा और कंप्यूटर की मेमोरी में फिट नहीं होगा।
इसका समाधान &lt;strong>निरंतर वर्ग विधि (Exponentiation by Squaring)&lt;/strong> या मॉड्यूलर घातांक (modular exponentiation) है। गणना के प्रत्येक चरण में मॉड्यूलो (mod N) लेने से, मान हमेशा $N$ से छोटा रखा जाता है, जिससे गणना बहुत तेज़ी से (समय जटिलता $O(\log N)$ में) की जा सकती है।&lt;/p>
&lt;hr>
&lt;h2 id="6-अभजय-परकषण-और-मडयलर-घतक-क-करयनवयन">6. अभाज्य परीक्षण और मॉड्यूलर घातांक का कार्यान्वयन
&lt;/h2>&lt;p>तो चलिए C++ और Python में फर्मेट अभाज्य परीक्षण और निरंतर वर्ग विधि (exponentiation by squaring) को लागू करते हैं।&lt;/p>
&lt;h3 id="61-c-म-करयनवयन">6.1 C++ में कार्यान्वयन
&lt;/h3>&lt;p>C++ में, मानक पूर्णांक प्रकार (standard integer types) आसानी से ओवरफ़्लो हो जाते हैं, इसलिए बड़ी संख्याओं को संभालने के लिए मल्टी-प्रिसिजन इंटीजर लाइब्रेरी (जैसे GMP) की आवश्यकता होती है, लेकिन यहाँ हम एल्गोरिदम को समझने के लिए 64-बिट पूर्णांक (&lt;code>unsigned long long&lt;/code>) की सीमा के भीतर एक कार्यान्वयन दिखाएंगे।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;random&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// तेज़ मॉड्यूलर घातांक (a^b mod m) - निरंतर वर्ग विधि (Exponentiation by squaring)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="nf">power_mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// यदि b का सबसे निचला बिट 1 है, तो परिणाम को a से गुणा करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">result&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// ओवरफ़्लो रोकने के लिए 128-बिट विस्तार
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// a का वर्ग करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// b को राइट शिफ्ट करें (आधा करें)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// फर्मेट का अभाज्य परीक्षण
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">bool&lt;/span> &lt;span class="nf">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">iterations&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">random_device&lt;/span> &lt;span class="n">rd&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mt19937_64&lt;/span> &lt;span class="n">gen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rd&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">uniform_int_distribution&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">dis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">iterations&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">gen&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// यदि a^(p-1) mod p, 1 नहीं है, तो यह भाज्य संख्या है
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">power_mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// संभवतः अभाज्य
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1000000007&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// ज्ञात अभाज्य
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; is probably prime.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; is composite.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="62-python-म-करयनवयन">6.2 Python में कार्यान्वयन
&lt;/h3>&lt;p>Python का मानक पूर्णांक प्रकार (standard integer type) मनमाने आकार की संख्याओं (arbitrary-precision integers) का समर्थन करता है, इसलिए ओवरफ्लो के बारे में चिंता करने की कोई आवश्यकता नहीं है। इसके अलावा, Python का अंतर्निहित फ़ंक्शन &lt;code>pow(a, b, m)&lt;/code> आंतरिक रूप से निरंतर वर्ग विधि का उपयोग करता है, इसलिए यह बहुत तेज़ है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iterations&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> फर्मेट के अभाज्य परीक्षण का उपयोग करके प्रायिकतात्मक अभाज्य परीक्षण
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">iterations&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 2 से p-2 के बीच एक यादृच्छिक संख्या a चुनें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># a^(p-1) mod p की गणना करें। अंतर्निहित pow बहुत तेज़ है।&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span> &lt;span class="c1"># निश्चित भाज्य&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">True&lt;/span> &lt;span class="c1"># संभवतः अभाज्य&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># परीक्षण&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">number_to_test&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">104729&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> संभवतः अभाज्य है।&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> एक भाज्य संख्या है।&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-rsa-करपटगरफ-म-अनपरयग-जह-फरमट-और-यलर-फलभत-हत-ह">7. RSA क्रिप्टोग्राफी में अनुप्रयोग: जहाँ फर्मेट और यूलर फलीभूत होते हैं
&lt;/h2>&lt;p>फर्मेट के छोटे प्रमेय (और यूलर के प्रमेय) का सबसे बड़ा अनुप्रयोग 1977 में रिवेस्ट, शमीर और एडलमैन द्वारा विकसित &lt;strong>RSA क्रिप्टोग्राफी&lt;/strong> है।
RSA क्रिप्टोग्राफी एक क्रांतिकारी प्रणाली है जिसे &amp;lsquo;पब्लिक-की क्रिप्टोग्राफी&amp;rsquo; (public-key cryptography) कहा जाता है। यह एक ऐसा तंत्र प्रदान करता है जहाँ एन्क्रिप्ट करने के लिए कुंजी (पब्लिक की/सार्वजनिक कुंजी) दुनिया के सामने सार्वजनिक की जा सकती है, जबकि डिक्रिप्ट करने वाली कुंजी (प्राइवेट की/निजी कुंजी) केवल प्राप्तकर्ता को ही पता होती है।&lt;/p>
&lt;p>यह विषमता (asymmetry) इस कम्प्यूटेशनल सुरक्षा पर आधारित है कि &amp;ldquo;विशाल भाज्य संख्याओं का अभाज्य गुणनखंडन (prime factorization) अत्यंत कठिन है&amp;rdquo;।&lt;/p>
&lt;h3 id="71-rsa-करपटगरफ-ततर-कज-नरमण-एनकरपशन-डकरपशन">7.1 RSA क्रिप्टोग्राफी तंत्र (कुंजी निर्माण, एन्क्रिप्शन, डिक्रिप्शन)
&lt;/h3>&lt;p>आइए मर्मेड (Mermaid) अनुक्रम आरेख (sequence diagram) के माध्यम से RSA क्रिप्टोग्राफी के समग्र संचार प्रवाह की जांच करें।&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Alice["ऐलिस (प्राप्तकर्ता)"]
participant Bob["बॉब (प्रेषक)"]
Alice->>Alice: "विशाल अभाज्य संख्याएँ p, q जनरेट करें"
Alice->>Alice: "N = p * q, φ(N) = (p-1)(q-1) की गणना करें"
Alice->>Alice: "पब्लिक की e और प्राइवेट की d की गणना करें (e*d ≡ 1 mod φ(N))"
Alice->>Bob: "पब्लिक की (N, e) भेजें"
Note over Bob: "सादा पाठ (Plaintext) M तैयार करें (M &lt; N)"
Bob->>Bob: "सिफरटेक्स्ट (Ciphertext) C = M^e mod N की गणना करें"
Bob->>Alice: "सिफरटेक्स्ट C भेजें"
Alice->>Alice: "सादा पाठ M = C^d mod N की गणना करके डिक्रिप्ट करें"&lt;/div>
&lt;p>नीचे गणितीय चरणों का विस्तृत विवरण दिया गया है।&lt;/p>
&lt;h4 id="चरण-1-कज-नरमण-परपतकरत-ऐलस-क-करय">चरण 1: कुंजी निर्माण (प्राप्तकर्ता ऐलिस का कार्य)
&lt;/h4>&lt;ol>
&lt;li>दो विशाल अभाज्य संख्याएँ $p$ और $q$ यादृच्छिक रूप से जनरेट करें (यहाँ पहले उल्लिखित अभाज्य परीक्षण विधि का उपयोग किया जाता है)।&lt;/li>
&lt;li>उनके गुणनफल $N = p \times q$ की गणना करें। यह $N$ सार्वजनिक किया जाता है।&lt;/li>
&lt;li>यूलर के टोटिएंट फलन का उपयोग करते हुए, $\phi(N) = (p-1)(q-1)$ की गणना करें।&lt;/li>
&lt;li>$\phi(N)$ के साथ सह-अभाज्य एक पूर्णांक $e$ (सार्वजनिक घातांक/public exponent) चुनें (अक्सर $e = 65537$ का उपयोग किया जाता है)।&lt;/li>
&lt;li>$e$ के मॉड्यूलर व्युत्क्रम (modular inverse) $d$ (निजी घातांक/private exponent) की गणना करें। अर्थात, ऐसा $d$ खोजें जो निम्नलिखित को संतुष्ट करे:
$$ e \cdot d \equiv 1 \pmod{\phi(N)} $$
इस गणना के लिए &lt;strong>विस्तारित यूक्लिडियन एल्गोरिदम (Extended Euclidean Algorithm)&lt;/strong> का उपयोग किया जाता है।&lt;/li>
&lt;/ol>
&lt;p>इसके साथ, &lt;strong>पब्लिक की (सार्वजनिक कुंजी) $(N, e)$&lt;/strong> और &lt;strong>प्राइवेट की (निजी कुंजी) $(N, d)$&lt;/strong> हो जाती है। ($p, q,$ और $\phi(N)$ को तुरंत नष्ट कर दिया जाना चाहिए या सख्ती से छिपाकर रखा जाना चाहिए)।&lt;/p>
&lt;h4 id="चरण-2-एनकरपशन-परषक-बब-क-करय">चरण 2: एन्क्रिप्शन (प्रेषक बॉब का कार्य)
&lt;/h4>&lt;p>मान लें कि बॉब ऐलिस को एक संदेश $M$ भेजना चाहता है ($M$ वर्णों (characters) का एक संख्यात्मक प्रतिनिधित्व है, जहाँ $0 \le M &lt; N$ है)।
बॉब ऐलिस की पब्लिक की $(N, e)$ का उपयोग करता है और सिफरटेक्स्ट (Ciphertext) $C$ बनाने के लिए निम्नलिखित गणना करता है:&lt;/p>
$$
C \equiv M^e \pmod N
$$
&lt;p>वह इस $C$ को नेटवर्क के माध्यम से ऐलिस को भेजता है।&lt;/p>
&lt;h4 id="चरण-3-डकरपशन-परपतकरत-ऐलस-क-करय">चरण 3: डिक्रिप्शन (प्राप्तकर्ता ऐलिस का कार्य)
&lt;/h4>&lt;p>सिफरटेक्स्ट $C$ प्राप्त करने के बाद, ऐलिस अपनी गुप्त प्राइवेट की $d$ का उपयोग करके निम्नलिखित गणना करती है:&lt;/p>
$$
M' \equiv C^d \pmod N
$$
&lt;p>आश्चर्यजनक रूप से, यह गणना परिणाम $M'$ मूल संदेश $M$ से पूरी तरह मेल खाता है।&lt;/p>
&lt;h3 id="72-इस-डकरपट-कय-कय-ज-सकत-ह-गणतय-परमण">7.2 इसे डिक्रिप्ट क्यों किया जा सकता है? (गणितीय प्रमाण)
&lt;/h3>&lt;p>यहीं पर फर्मेट का छोटा प्रमेय (यूलर का प्रमेय) अपनी वास्तविक शक्ति दिखाता है। $C^d \pmod N$, $M$ में वापस क्यों बदल जाता है?&lt;/p>
&lt;p>आइए डिक्रिप्शन समीकरण का विस्तार करें:
चूंकि $C \equiv M^e \pmod N$ है,
&lt;/p>
$$ C^d \equiv (M^e)^d \equiv M^{ed} \pmod N $$
&lt;p>कुंजी निर्माण चरण में, हमने $d$ को इस प्रकार चुना था कि $e \cdot d \equiv 1 \pmod{\phi(N)}$ हो। इसका मतलब है कि एक ऐसा पूर्णांक $k$ मौजूद है जिसे इस प्रकार लिखा जा सकता है:
&lt;/p>
$$ e \cdot d = 1 + k \cdot \phi(N) $$
&lt;p>इसे उपरोक्त समीकरण में प्रतिस्थापित (substitute) करने पर:
&lt;/p>
$$ M^{ed} = M^{1 + k \cdot \phi(N)} = M \cdot M^{k \cdot \phi(N)} = M \cdot (M^{\phi(N)})^k \pmod N $$
&lt;p>यहीं पर &lt;strong>यूलर का प्रमेय&lt;/strong> ($M^{\phi(N)} \equiv 1 \pmod N$) लागू होता है। (※कड़ाई से कहें तो, $M$ और $N$ का सह-अभाज्य होना आवश्यक है, लेकिन RSA में, $M$ और $N$ के सह-अभाज्य न होने की संभावना खगोलीय रूप से कम है, और यह सिद्ध किया जा सकता है कि चाइनीज़ रिमाइंडर थ्योरम (Chinese Remainder Theorem) का उपयोग करके यह सह-अभाज्य न होने पर भी काम करता है)।&lt;/p>
&lt;p>यूलर के प्रमेय को लागू करने पर, चूंकि $M^{\phi(N)} \equiv 1$ है:
&lt;/p>
$$ M \cdot (1)^k \equiv M \pmod N $$
&lt;p>सफलतापूर्वक $M$ को बहाल कर लिया गया है! संख्याओं के वे गुण, जिन्हें फर्मेट और यूलर ने सैकड़ों साल पहले खोजा था, आज आधुनिक डिजिटल संचार की गोपनीयता की पूरी तरह से गारंटी देते हैं।&lt;/p>
&lt;hr>
&lt;h2 id="8-rsa-करपटगरफ-क-टय-इमपलमटशन-python">8. RSA क्रिप्टोग्राफी का टॉय इम्प्लीमेंटेशन (Python)
&lt;/h2>&lt;p>केवल सिद्धांत के साथ इसे महसूस करना मुश्किल हो सकता है, तो चलिए Python का उपयोग करके वास्तविक RSA कुंजी जनरेशन, एन्क्रिप्शन और डिक्रिप्शन प्रक्रिया को लागू करते हैं। यह एक शैक्षिक &amp;ldquo;टॉय इम्प्लीमेंटेशन (toy implementation)&amp;rdquo; है, लेकिन इसमें प्रयुक्त गणित बिल्कुल वास्तविक के समान है।&lt;/p>
&lt;p>हम मॉड्यूलर व्युत्क्रम (modular inverse) $d$ खोजने के लिए &amp;ldquo;विस्तारित यूक्लिडियन एल्गोरिदम (Extended Euclidean Algorithm)&amp;rdquo; को भी कार्यान्वयन में शामिल करेंगे।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;span class="lnt">73
&lt;/span>&lt;span class="lnt">74
&lt;/span>&lt;span class="lnt">75
&lt;/span>&lt;span class="lnt">76
&lt;/span>&lt;span class="lnt">77
&lt;/span>&lt;span class="lnt">78
&lt;/span>&lt;span class="lnt">79
&lt;/span>&lt;span class="lnt">80
&lt;/span>&lt;span class="lnt">81
&lt;/span>&lt;span class="lnt">82
&lt;/span>&lt;span class="lnt">83
&lt;/span>&lt;span class="lnt">84
&lt;/span>&lt;span class="lnt">85
&lt;/span>&lt;span class="lnt">86
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># महत्तम समापवर्तक (GCD) खोजें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># विस्तारित यूक्लिडियन एल्गोरिदम (ax + by = gcd(a,b) के x, y खोजें)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># e*d ≡ 1 (mod φ(N)) के लिए d खोजने के लिए उपयोग किया जाता है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">raise&lt;/span> &lt;span class="ne">Exception&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;व्युत्क्रम मौजूद नहीं है&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># अभाज्य जनरेशन फ़ंक्शन (सरलीकृत संस्करण: छोटी अभाज्य संख्याएँ जनरेट करें)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">getrandbits&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># पहले बताए गए फर्मेट टेस्ट के बजाय सरल परीक्षण&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">p&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># RSA कुंजी जनरेशन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_keypair&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># सुनिश्चित करें कि p और q समान न हों&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># e के लिए अक्सर 65537 जैसी अभाज्य संख्या का उपयोग किया जाता है, लेकिन यहाँ इसे यादृच्छिक रूप से चुना गया है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># प्राइवेट की d की गणना&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># पब्लिक की (e, n), प्राइवेट की (d, n)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">((&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pk&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">plaintext&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># plaintext^e mod n की गणना करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">plaintext&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">cipher&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">sk&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># cipher^d mod n की गणना करें, और वापस वर्णों में बदलें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plain&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plain&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># निष्पादन उदाहरण&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;--- RSA क्रिप्टोग्राफी टॉय इम्प्लीमेंटेशन ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">public_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">private_key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_keypair&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 12-बिट अभाज्य संख्याओं का उपयोग&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;पब्लिक की (e, n): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">public_key&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;प्राइवेट की (d, n): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">private_key&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;Hello Math!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">मूल संदेश: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># एन्क्रिप्शन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">encrypted_msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">public_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;सिफरटेक्स्ट: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">encrypted_msg&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># डिक्रिप्शन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decrypted_msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">private_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">encrypted_msg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;डिक्रिप्ट किया गया संदेश: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted_msg&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>जब आप यह कोड चलाते हैं, तो आप देख सकते हैं कि वर्णों की एक सरणी अज्ञात संख्याओं की एक सरणी (सिफरटेक्स्ट) में परिवर्तित हो जाती है, जिसे बाद में प्राइवेट की का उपयोग करके सफलतापूर्वक मूल स्ट्रिंग में बहाल कर लिया जाता है।&lt;/p>
&lt;hr>
&lt;h2 id="9-नषकरष-गणत-क-सदरत-और-वयवहरकत-क-परतचछदन-intersection">9. निष्कर्ष: गणित की सुंदरता और व्यावहारिकता का प्रतिच्छेदन (Intersection)
&lt;/h2>&lt;p>17वीं शताब्दी में जब पियरे डी फर्मेट ने इस &amp;lsquo;छोटे प्रमेय&amp;rsquo; की खोज की थी, तब किसी ने नहीं सोचा था कि यह किसी काम आएगा। खुद फर्मेट ने शुद्ध गणितीय जिज्ञासा से संख्या सिद्धांत (number theory) पर शोध किया था।&lt;/p>
&lt;p>हालाँकि, लगभग 300 साल बाद 1970 के दशक में, कंप्यूटर नेटवर्क के शुरुआती दिनों में, सुरक्षित संचार प्रोटोकॉल स्थापित करने के लिए आवश्यक क्रिप्टोग्राफिक तकनीक के रूप में फर्मेट के प्रमेय का नाटकीय रूप से पुनरुत्थान हुआ। फर्मेट के छोटे प्रमेय पर आधारित अभाज्य परीक्षण तकनीक और यूलर के प्रमेय पर आधारित RSA क्रिप्टोग्राफी आज के इंटरनेट बुनियादी ढांचे को सचमुच में सहारा देती है।&lt;/p>
&lt;p>हमारे द्वारा प्रतिदिन भेजे जाने वाले LINE या WhatsApp संदेश, या Amazon पर हमारी खरीदारी, यह सब इसी सरल और सुंदर सूत्र $a^{p-1} \equiv 1 \pmod p$ के इर्द-गिर्द घूमती है। फर्मेट का छोटा प्रमेय हमें सिखाता है कि गणित चाहे कितना भी अमूर्त क्यों न हो, एक समय ऐसा ज़रूर आएगा जब यह मानवता के काम आएगा।&lt;/p>
&lt;p>प्रोग्रामिंग या क्रिप्टोग्राफिक सिद्धांत सीखते समय, इसके अंतर्निहित गणितीय ढांचे को समझना उन पुस्तकालयों (libraries) के व्यवहार को गहराई से समझने में एक बड़ा हथियार होगा जो ब्लैक बॉक्स के रूप में प्रदान किए जाते हैं, और यह अधिक सुरक्षित सिस्टम डिज़ाइन करने में मदद करेगा।&lt;/p></description></item><item><title>जाली-आधारित क्रिप्टोग्राफी (Lattice-based cryptography) का गणितीय अंतर्ज्ञान</title><link>http://kenji.blog/hi/p/lattice-based-cryptography-math-intuition/</link><pubDate>Fri, 11 Sep 2026 21:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/lattice-based-cryptography-math-intuition/</guid><description>&lt;img src="http://kenji.blog/p/lattice-based-cryptography-math-intuition/img/eyecatch.jpg" alt="Featured image of post जाली-आधारित क्रिप्टोग्राफी (Lattice-based cryptography) का गणितीय अंतर्ज्ञान" />&lt;h1 id="1-परचय-पसट-कवटम-करपटगरफ-pqc-क-शरआत-और-जल-आधरत-करपटगरफ-lattice-based-cryptography-क-उदय">1. परिचय: पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC) की शुरुआत और जाली-आधारित क्रिप्टोग्राफी (Lattice-based cryptography) का उदय
&lt;/h1>&lt;p>आधुनिक समाज के डिजिटल बुनियादी ढांचे का आधार RSA और एलिप्टिक कर्व क्रिप्टोग्राफी (ECC) जैसी पब्लिक-की क्रिप्टोग्राफी (Public-key cryptography) तकनीकें हैं। इन क्रिप्टोग्राफी विधियों की सुरक्षा &amp;ldquo;प्राइम फैक्टराइजेशन प्रॉब्लम (Prime Factorization Problem)&amp;rdquo; और &amp;ldquo;डिस्क्रीट लॉगरिथम प्रॉब्लम (Discrete Logarithm Problem)&amp;rdquo; जैसी गणितीय कठिनाइयों पर निर्भर करती है, जिनके बारे में माना जाता है कि पारंपरिक क्लासिकल कंप्यूटरों द्वारा उन्हें कुशलतापूर्वक हल नहीं किया जा सकता है (इसमें एक्सपोनेंशियल समय लगता है)।&lt;/p>
&lt;p>हालाँकि, 1994 में पीटर शोर (Peter Shor) द्वारा प्रस्तुत &amp;ldquo;शोर का एल्गोरिदम (Shor&amp;rsquo;s Algorithm)&amp;rdquo; ने क्रिप्टोग्राफी की दुनिया में तहलका मचा दिया। इस एल्गोरिदम ने गणितीय रूप से यह साबित कर दिया कि जब बड़े पैमाने पर क्वांटम कंप्यूटर वास्तविकता बन जाएंगे, तो वे प्राइम फैक्टराइजेशन और डिस्क्रीट लॉगरिथम समस्याओं को पॉलीनोमियल समय (Polynomial time) में हल कर देंगे। इसका अर्थ है कि वर्तमान में व्यापक रूप से उपयोग की जाने वाली पब्लिक-की क्रिप्टोग्राफी भविष्य में पूरी तरह से डिक्रिप्ट (decrypt) की जा सकेगी।&lt;/p>
&lt;p>इस तरह के &amp;ldquo;क्वांटम खतरे (Quantum Threat)&amp;rdquo; का मुकाबला करने के लिए, नई क्रिप्टोग्राफिक विधियों पर शोध करना एक तत्काल आवश्यकता बन गई, जिन्हें क्वांटम कंप्यूटरों का उपयोग करके भी तोड़ना मुश्किल हो। इस क्षेत्र को &amp;ldquo;पोस्ट-क्वांटम क्रिप्टोग्राफी (Post-Quantum Cryptography: PQC)&amp;rdquo; या &amp;ldquo;क्वांटम-प्रतिरोधी क्रिप्टोग्राफी&amp;rdquo; कहा जाता है।&lt;/p>
&lt;p>PQC के लिए कई मजबूत उम्मीदवार मौजूद हैं। इनमें हैश-आधारित क्रिप्टोग्राफी, कोड-आधारित क्रिप्टोग्राफी, मल्टीवेरिएट पॉलीनोमियल क्रिप्टोग्राफी, और आइसोजेनी-आधारित क्रिप्टोग्राफी शामिल हैं। लेकिन इनमें से जिसने वर्तमान में सबसे अधिक ध्यान आकर्षित किया है और जो NIST (नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड्स एंड टेक्नोलॉजी, USA) की PQC मानकीकरण प्रक्रिया के केंद्र में है, वह &amp;ldquo;जाली-आधारित क्रिप्टोग्राफी (Lattice-based cryptography)&amp;rdquo; है। अन्य विधियों की तुलना में, जाली-आधारित क्रिप्टोग्राफी में एन्क्रिप्शन और डिक्रिप्शन की गति बहुत तेज है। इसके अलावा, इसकी एक उत्कृष्ट विशेषता यह है कि इसमें &amp;ldquo;सबसे खराब स्थिति की जटिलता (Worst-case complexity)&amp;rdquo; से &amp;ldquo;औसत स्थिति की जटिलता (Average-case complexity)&amp;rdquo; में कमी (reduction) का गुण है, जो क्रिप्टोग्राफिक सिद्धांत में सुरक्षा का एक अत्यंत शक्तिशाली प्रमाण प्रदान करता है।&lt;/p>
&lt;p>इस लेख में, हम जाली-आधारित क्रिप्टोग्राफी की नींव, &amp;ldquo;जाली (Lattice)&amp;rdquo; की गणितीय परिभाषा से शुरू करेंगे, और फिर जाली पर कठिन समस्याओं जैसे कि SVP (सबसे छोटा वेक्टर समस्या / Shortest Vector Problem) और CVP (सबसे करीबी वेक्टर समस्या / Closest Vector Problem) पर चर्चा करेंगे। अंत में, हम &amp;ldquo;LWE समस्या (Learning With Errors)&amp;rdquo; के बारे में विस्तार से जानेंगे, जिसे आधुनिक जाली-आधारित क्रिप्टोग्राफी का हृदय कहा जा सकता है। हम गणितीय सूत्रों, ज्यामितीय अंतर्ज्ञान और ठोस संख्यात्मक उदाहरणों के साथ इसका गहराई से विश्लेषण करेंगे।&lt;/p>
&lt;h1 id="2-जल-lattice-क-गणतय-परभष-और-जयमतय-अतरजञन">2. जाली (Lattice) की गणितीय परिभाषा और ज्यामितीय अंतर्ज्ञान
&lt;/h1>&lt;h2 id="21-वकटर-सपस-और-जल">2.1 वेक्टर स्पेस और जाली
&lt;/h2>&lt;p>गणित में, &amp;ldquo;जाली (Lattice)&amp;rdquo; $n$-आयामी वास्तविक वेक्टर स्पेस $\mathbb{R}^n$ के भीतर नियमित रूप से व्यवस्थित असतत (discrete) बिंदुओं का एक सेट है। यह लीनियर अलजेब्रा में सीखे गए वेक्टर स्पेस (Vector Space) के समान है, लेकिन इनमें एक महत्वपूर्ण अंतर है। जबकि एक वेक्टर स्पेस एक सतत (continuous) स्थान है जिसे बेसिस (आधार) वेक्टरों के &amp;ldquo;वास्तविक संख्या (real number) गुणांक&amp;rdquo; वाले रैखिक संयोजन (linear combination) द्वारा दर्शाया जाता है, एक जाली एक असतत स्थान है जिसे बेसिस वेक्टरों के &amp;ldquo;पूर्णांक (integer) गुणांक&amp;rdquo; वाले रैखिक संयोजन द्वारा दर्शाया जाता है।&lt;/p>
&lt;p>आइए एक सख्त गणितीय परिभाषा दें। $m$-आयामी वास्तविक वेक्टर स्पेस $\mathbb{R}^m$ में $n$ ($n \le m$) रैखिक रूप से स्वतंत्र (linearly independent) वेक्टरों $\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n$ पर विचार करें। मान लें कि एक मैट्रिक्स $B = [\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n] \in \mathbb{R}^{m \times n}$ है, जिसके कॉलम में ये वेक्टर हैं। इस $B$ को जाली का &amp;ldquo;बेसिस (Basis)&amp;rdquo; कहा जाता है।&lt;/p>
&lt;p>इस बेसिस $B$ द्वारा उत्पन्न जाली $\mathcal{L}(B)$ को इस प्रकार परिभाषित किया गया है:&lt;/p>
$$
\mathcal{L}(B) = \left\{ \sum_{i=1}^{n} x_i \mathbf{b}_i \mathrel{\bigg|} x_i \in \mathbb{Z} \right\} = \{ B \mathbf{x} \mid \mathbf{x} \in \mathbb{Z}^n \}
$$
&lt;p>यहाँ महत्वपूर्ण बात यह है कि गुणांक $x_i$ वास्तविक संख्याओं $\mathbb{R}$ तक सीमित नहीं हैं, बल्कि पूर्णांकों $\mathbb{Z}$ तक सीमित हैं। इसके परिणामस्वरूप, अंतरिक्ष में मौजूद अनगिनत सतत बिंदुओं के बजाय, समान दूरी पर स्थित चौराहों की तरह &amp;ldquo;असतत बिंदुओं का एक सेट&amp;rdquo; बनता है।&lt;/p>
&lt;h2 id="22-जयमतय-छव">2.2 ज्यामितीय छवि
&lt;/h2>&lt;p>आइए 2-आयामी तल $\mathbb{R}^2$ के एक उदाहरण पर विचार करें। यदि हम बेसिस वेक्टर के रूप में $\mathbf{b}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ और $\mathbf{b}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$ चुनते हैं, तो उनके द्वारा उत्पन्न जाली, निर्देशांक तल पर सभी पूर्णांक निर्देशांकों $(x, y) \in \mathbb{Z}^2$ का सेट होगी। यह सबसे सरल &amp;ldquo;वर्गाकार जाली (square lattice)&amp;rdquo; है।&lt;/p>
&lt;p>हालाँकि, जालियाँ हमेशा ऑर्थोगोनल (समकोण पर) नहीं होती हैं। उदाहरण के लिए, यदि हम बेसिस $\mathbf{b}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix}$ और $\mathbf{b}_2 = \begin{pmatrix} 1 \\ 3 \end{pmatrix}$ पर विचार करें, तो उत्पन्न बिंदु एक तिरछे (skewed) जाल के चौराहों की तरह दिखेंगे।&lt;/p>
&lt;h2 id="23-बसस-क-गर-अदवतयत-non-uniqueness-और-यनमडयलर-टरसफरमशन">2.3 बेसिस की गैर-अद्वितीयता (Non-uniqueness) और यूनिमॉड्युलर ट्रांसफॉर्मेशन
&lt;/h2>&lt;p>जाली-आधारित क्रिप्टोग्राफी की सुरक्षा के मूल में एक महत्वपूर्ण गुण निहित है: &amp;ldquo;एक ही जाली उत्पन्न करने वाले अनगिनत बेसिस मौजूद होते हैं।&amp;rdquo;&lt;/p>
&lt;p>उदाहरण के लिए, ऊपर बताई गई बेसिस $\mathbf{b}_1 = (1, 0)^T, \mathbf{b}_2 = (0, 1)^T$ द्वारा उत्पन्न $\mathbb{Z}^2$ जाली, बिल्कुल उसी $\mathbb{Z}^2$ जाली को उत्पन्न करती है जिसे बेसिस $\mathbf{b}'_1 = (1, 1)^T, \mathbf{b}'_2 = (2, 3)^T$ का उपयोग करके भी उत्पन्न किया जा सकता है।&lt;/p>
&lt;p>एक बेसिस $B$ और दूसरे बेसिस $B'$ द्वारा समान जाली उत्पन्न करने के लिए आवश्यक और पर्याप्त शर्त (necessary and sufficient condition) यह है कि एक पूर्णांक घटकों वाला मैट्रिक्स $U \in \mathbb{Z}^{n \times n}$ मौजूद हो, जिसका डिटरमिनेंट $\det(U) = \pm 1$ हो, और जिसे इस प्रकार व्यक्त किया जा सके:
&lt;/p>
$$ B' = B U $$
&lt;p>
इस प्रकार के मैट्रिक्स $U$ को &amp;ldquo;यूनिमॉड्युलर मैट्रिक्स (Unimodular matrix)&amp;rdquo; कहा जाता है।&lt;/p>
&lt;p>क्रिप्टोग्राफी में इसके अनुप्रयोग का मूल विचार एक &amp;ldquo;अच्छे बेसिस&amp;rdquo; (जो लगभग ऑर्थोगोनल हो और छोटे वेक्टरों से बना हो) को सीक्रेट की (गुप्त कुंजी) के रूप में उपयोग करना है, और एक &amp;ldquo;बुरे बेसिस&amp;rdquo; (जो अत्यधिक तिरछा हो और बहुत लंबे वेक्टरों से बना हो) को पब्लिक की (सार्वजनिक कुंजी) के रूप में उपयोग करना है। उच्च आयामों में एक बुरे बेसिस से एक अच्छे बेसिस की गणना करना बहुत मुश्किल हो जाता है। यही जाली-आधारित क्रिप्टोग्राफी का मूलभूत अंतर्ज्ञान है।&lt;/p>
&lt;h1 id="3-जल-म-गणन-सबध-कठन-समसयए">3. जाली में गणना संबंधी कठिन समस्याएं
&lt;/h1>&lt;p>जाली-आधारित क्रिप्टोग्राफी की सुरक्षा जाली पर कुछ गणितीय समस्याओं को हल करने की कठिनाई पर निर्भर करती है। यहाँ हम दो सबसे बुनियादी और प्रसिद्ध समस्याओं का परिचय देंगे।&lt;/p>
&lt;h2 id="31-सबस-छट-वकटर-समसय-shortest-vector-problem-svp">3.1 सबसे छोटा वेक्टर समस्या (Shortest Vector Problem: SVP)
&lt;/h2>&lt;p>SVP जाली सिद्धांत में सबसे शास्त्रीय और प्रसिद्ध समस्या है।&lt;/p>
&lt;p>&lt;strong>परिभाषा (SVP):&lt;/strong>
मान लें कि कोई भी जाली बेसिस $B$ दिया गया है, तो उस जाली $\mathcal{L}(B)$ से संबंधित सभी गैर-शून्य वेक्टरों में से, उस वेक्टर $\mathbf{v}$ का पता लगाएं जिसका यूक्लिडियन नॉर्म (लंबाई) सबसे कम हो।&lt;/p>
&lt;p>सूत्र रूप में, यह वह $\mathbf{v}$ खोजने की समस्या है जो $\min_{\mathbf{v} \in \mathcal{L}(B) \setminus \{\mathbf{0}\}} \| \mathbf{v} \|$ को संतुष्ट करता हो। इस न्यूनतम लंबाई को $\lambda_1(\mathcal{L})$ के रूप में लिखा जाता है और इसे &amp;ldquo;जाली का पहला क्रमिक न्यूनतम मान (First successive minimum)&amp;rdquo; कहा जाता है।&lt;/p>
&lt;p>2D या 3D जैसे निचले आयामों में, आप एक चित्र बनाकर सबसे छोटे वेक्टर को अपनी आँखों से देख सकते हैं। या आप इसे गॉस (Gauss) के जाली रिडक्शन एल्गोरिदम का उपयोग करके कुशलतापूर्वक हल कर सकते हैं। हालाँकि, जब आयाम $n$ सैकड़ों से हजारों जैसे उच्च आयामों तक पहुँचता है, तो SVP को सटीक रूप से हल करना NP-हार्ड माना जाता है।&lt;/p>
&lt;p>वास्तविक क्रिप्टोग्राफी में, सटीक सबसे छोटे वेक्टर के बजाय, &amp;ldquo;लगभग सबसे छोटे वेक्टर&amp;rdquo; को खोजने वाली समस्या, एप्रोक्सिमेट SVP ($\gamma$-SVP) का उपयोग किया जाता है। यदि एप्रोक्सिमेशन फैक्टर (सन्निकटन कारक) $\gamma$ पॉलीनोमियल आकार का है, तो इस समस्या को अभी भी बहुत कठिन माना जाता है।&lt;/p>
&lt;h2 id="32-सबस-करब-वकटर-समसय-closest-vector-problem-cvp">3.2 सबसे करीबी वेक्टर समस्या (Closest Vector Problem: CVP)
&lt;/h2>&lt;p>CVP भी जाली-आधारित क्रिप्टोग्राफी में एक अत्यंत महत्वपूर्ण समस्या है।&lt;/p>
&lt;p>&lt;strong>परिभाषा (CVP):&lt;/strong>
मान लें कि कोई भी जाली बेसिस $B$ और अंतरिक्ष में कोई लक्ष्य वेक्टर $\mathbf{t} \in \mathbb{R}^m$ (जो जरूरी नहीं कि जाली बिंदु हो) दिया गया है, तो जाली के बिंदुओं में से वह जाली बिंदु $\mathbf{v} \in \mathcal{L}(B)$ खोजें जो $\mathbf{t}$ के सबसे करीब हो।&lt;/p>
&lt;p>सूत्र रूप में, यह वह जाली बिंदु $\mathbf{v}$ खोजने की समस्या है जो $\min_{\mathbf{v} \in \mathcal{L}(B)} \| \mathbf{v} - \mathbf{t} \|$ को संतुष्ट करता हो।&lt;/p>
&lt;p>SVP की तरह, उच्च आयामों में CVP भी NP-हार्ड है। क्रिप्टोग्राफिक अनुप्रयोगों के दृष्टिकोण से, LWE समस्या (जिसकी चर्चा बाद में की जाएगी) CVP के एक विशेष संस्करण (Bounded Distance Decoding: BDD) से निकटता से संबंधित है।&lt;/p>
&lt;h2 id="33-उचच-आयम-म-इनह-हल-करन-असभव-कय-ह-lll-और-bkz-क-समए">3.3 उच्च आयामों में इन्हें हल करना असंभव क्यों है? (LLL और BKZ की सीमाएँ)
&lt;/h2>&lt;p>उच्च-आयामी जाली समस्याओं को हल करने के लिए एक प्रसिद्ध एल्गोरिदम LLL एल्गोरिदम (Lenstra-Lenstra-Lovász algorithm) है। LLL एल्गोरिदम पॉलीनोमियल समय में काम करता है और जाली बेसिस को कुछ हद तक &amp;ldquo;अच्छे बेसिस&amp;rdquo; में घटा (रिड्यूस) सकता है। हालाँकि, LLL एल्गोरिदम द्वारा खोजा जाने वाला सबसे छोटा वेक्टर, वास्तविक सबसे छोटे वेक्टर की लंबाई के सापेक्ष एक एक्सपोनेंशियल ($2^{\mathcal{O}(n)}$) एप्रोक्सिमेशन फैक्टर (सन्निकटन कारक) रखता है, इसलिए यह क्रिप्टोग्राफी की सुरक्षा को तोड़ने के लिए पर्याप्त नहीं है।&lt;/p>
&lt;p>यदि LLL का उन्नत संस्करण BKZ (Block Korkine-Zolotarev) एल्गोरिदम जैसे अधिक शक्तिशाली बेसिस रिडक्शन एल्गोरिदम का उपयोग किया जाए, तो छोटे वेक्टर पाए जा सकते हैं, लेकिन इसकी कम्प्यूटेशनल जटिलता (computational complexity) ब्लॉक आकार के संबंध में एक्सपोनेंशियल रूप से बढ़ जाती है। जाली-आधारित क्रिप्टोग्राफी में, सुरक्षित पैरामीटर (जैसे आयाम $n$ का आकार) इस BKZ एल्गोरिदम के निष्पादन समय का अनुमान लगाकर निर्धारित किए जाते हैं। वर्तमान PQC मानक मापदंडों में, आयाम $n$ को 500 से 1000 या उससे अधिक के मानों के लिए चुना जाता है, और यह माना जाता है कि भविष्य के सुपर कंप्यूटरों या क्वांटम कंप्यूटरों का उपयोग करके भी इसे डिक्रिप्ट करने में ब्रह्मांड की आयु से अधिक समय लगेगा।&lt;/p>
&lt;h1 id="4-lwe-समसय-learning-with-errors-क-गणतय-नरपण">4. LWE समस्या (Learning With Errors) का गणितीय निरूपण
&lt;/h1>&lt;p>आधुनिक जाली-आधारित क्रिप्टोग्राफी का अधिकांश हिस्सा &amp;ldquo;LWE समस्या (Learning With Errors)&amp;rdquo; पर आधारित है, जिसे 2005 में ओडेड रेगेव (Oded Regev) द्वारा प्रस्तावित किया गया था। LWE समस्या की सुंदरता इसके निर्माण की सरलता और इसके शक्तिशाली गणितीय प्रमाण में निहित है, जिसे &amp;ldquo;सबसे खराब स्थिति की जटिलता से औसत स्थिति की जटिलता में कमी&amp;rdquo; कहा जाता है।&lt;/p>
&lt;h2 id="41-बन-शर-क-रखय-समकरण-क-परणल">4.1 बिना शोर के रेखीय समीकरणों की प्रणाली
&lt;/h2>&lt;p>LWE समस्या को समझने के लिए, आइए पहले बिना शोर वाले रेखीय समीकरणों की एक सरल प्रणाली पर विचार करें।
मान लें कि हमारे पास एक अज्ञात गुप्त वेक्टर $\mathbf{s} \in \mathbb{Z}_q^n$ (प्रत्येक घटक $0$ से $q-1$ तक का एक पूर्णांक है) है। यहाँ, मान लें कि $q$ एक अभाज्य संख्या है।&lt;/p>
&lt;p>हम यादृच्छिक (random) गुणांक वेक्टर $\mathbf{a}_1, \mathbf{a}_2, \dots \in \mathbb{Z}_q^n$ चुनते हैं, और गुप्त वेक्टर $\mathbf{s}$ के साथ इसके डॉट प्रोडक्ट की गणना मॉड्युलो $q$ पर करते हैं।
$b_1 = \langle \mathbf{a}_1, \mathbf{s} \rangle \pmod q$
$b_2 = \langle \mathbf{a}_2, \mathbf{s} \rangle \pmod q$
$\vdots$&lt;/p>
&lt;p>यदि हमें पर्याप्त संख्या में (कम से कम $n$) $(\mathbf{a}_i, b_i)$ के जोड़े दिए जाते हैं, तो हम लीनियर अलजेब्रा में &amp;ldquo;गौसियन एलिमिनेशन (Gaussian elimination)&amp;rdquo; का उपयोग करके गुप्त वेक्टर $\mathbf{s}$ को आसानी से पुनर्प्राप्त कर सकते हैं। यह एक ऐसी समस्या है जिसे पॉलीनोमियल समय में आसानी से हल किया जा सकता है।&lt;/p>
&lt;h2 id="42-lwe-समसय-क-परभष-शर-जडन">4.2 LWE समस्या की परिभाषा: शोर जोड़ना
&lt;/h2>&lt;p>तो, यदि हम इस समस्या में थोड़ा सा &amp;ldquo;शोर (त्रुटि / error)&amp;rdquo; जोड़ दें तो क्या होगा?
यही LWE समस्या का सार है।&lt;/p>
&lt;p>अज्ञात गुप्त वेक्टर $\mathbf{s} \in \mathbb{Z}_q^n$ के लिए, हम प्रत्येक समीकरण के परिणाम में एक छोटी सी त्रुटि $e_i \in \mathbb{Z}_q$ जोड़ते हैं।
$b_i = \langle \mathbf{a}_i, \mathbf{s} \rangle + e_i \pmod q$&lt;/p>
&lt;p>यहाँ, $e_i$ एक छोटा पूर्णांक मान है जिसका औसत 0 है और जिसका मानक विचलन (standard deviation) अपेक्षाकृत छोटा है (उदाहरण के लिए, सामान्य वितरण की तरह एक डिस्क्रीट गॉसियन वितरण (discrete Gaussian distribution) से चुना गया)।
प्रदान की गई जानकारी यादृच्छिक वेक्टर $\mathbf{a}_i$ और त्रुटि जोड़ने के बाद गणना किए गए $b_i$ के जोड़े की एक सूची है।
$( \mathbf{a}_1, b_1 ), ( \mathbf{a}_2, b_2 ), \dots, ( \mathbf{a}_m, b_m )$&lt;/p>
&lt;p>इसे मैट्रिक्स का उपयोग करके बहुत स्पष्ट रूप से दर्शाया जा सकता है।
यादृच्छिक मैट्रिक्स $A \in \mathbb{Z}_q^{m \times n}$, गुप्त वेक्टर $\mathbf{s} \in \mathbb{Z}_q^n$, और त्रुटि वेक्टर $\mathbf{e} \in \mathbb{Z}_q^m$ का उपयोग करके, हम इसे इस प्रकार लिख सकते हैं:
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q $$
&lt;p>
हमें केवल $A$ और $\mathbf{b}$ दिए जाते हैं। यहाँ से $\mathbf{s}$ ज्ञात करना &amp;ldquo;सर्च LWE समस्या (Search LWE problem)&amp;rdquo; कहलाता है।&lt;/p>
&lt;p>चूंकि इसमें त्रुटि $e_i$ शामिल है, इसलिए यदि हम गौसियन एलिमिनेशन का उपयोग करने का प्रयास करते हैं, तो समीकरणों को जोड़ने और घटाने की प्रक्रिया में त्रुटि एक्सपोनेंशियल रूप से बढ़ जाती है, जिससे सही उत्तर तक पहुँचना असंभव हो जाता है। पहली नज़र में, यह रेखीय समीकरणों की एक सरल प्रणाली की तरह लगता है, लेकिन इस छोटे से शोर के जुड़ने से ही समस्या की कठिनाई NP-हार्ड स्तर तक पहुँच जाती है।&lt;/p>
&lt;h2 id="43-डसजन-lwe-समसय-decision-lwe">4.3 डिसीजन LWE समस्या (Decision LWE)
&lt;/h2>&lt;p>क्रिप्टोग्राफिक सिद्धांत के प्रमाणों में अक्सर जिसका उपयोग किया जाता है, वह सर्च LWE समस्या का एक संस्करण है, जिसे &amp;ldquo;डिसीजन LWE समस्या (Decision LWE problem)&amp;rdquo; कहा जाता है।&lt;/p>
&lt;p>डिसीजन LWE समस्या यह निर्धारित करने की समस्या है कि नीचे दिए गए दो वितरणों (distributions) में से प्राप्त नमूनों की सूची किस वितरण से आई है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>LWE वितरण&lt;/strong>: जानबूझकर गणना की गई $(A, \mathbf{b} = A\mathbf{s} + \mathbf{e} \pmod q)$&lt;/li>
&lt;li>&lt;strong>यूनिफ़ॉर्म रैंडम वितरण&lt;/strong>: पूरी तरह से यादृच्छिक रूप से चुने गए मैट्रिक्स $A$ और वेक्टर $\mathbf{u}$ से मिलकर बना $(A, \mathbf{u})$&lt;/li>
&lt;/ol>
&lt;p>आश्चर्यजनक रूप से, यदि LWE समस्या के मापदंडों को ठीक से चुना जाता है, तो LWE वितरण से प्राप्त जोड़े पूरी तरह से यादृच्छिक डेटा के जोड़े से &amp;ldquo;कम्प्यूटेशनल रूप से अप्रभेद्य (Computationally Indistinguishable)&amp;rdquo; हो जाते हैं। यही गुण LWE-आधारित क्रिप्टोग्राफी का आधार है, जो ऐसे &amp;ldquo;सिफरटेक्स्ट (ciphertext) उत्पन्न करता है जिन्हें यादृच्छिक संख्याओं (random numbers) से अलग नहीं किया जा सकता है।&amp;rdquo;&lt;/p>
&lt;h2 id="44-सबस-खरब-सथत-स-औसत-सथत-क-जटलत-म-कम-regevs-theorem">4.4 सबसे खराब स्थिति से औसत स्थिति की जटिलता में कमी (Regev&amp;rsquo;s Theorem)
&lt;/h2>&lt;p>ओडेड रेगेव (Oded Regev) की सबसे बड़ी उपलब्धि इस LWE समस्या की कठिनाई को ऊपर बताई गई जाली समस्याओं (SVP और CVP) की कठिनाई से गणितीय रूप से जोड़ना था।&lt;/p>
&lt;p>क्वांटम रिडक्शन (Quantum reduction) का उपयोग करते हुए, उन्होंने साबित किया कि &amp;ldquo;यदि कोई पॉलीनोमियल-टाइम एल्गोरिदम मौजूद है जो औसत रूप से LWE समस्या को हल कर सकता है (यादृच्छिक रूप से चुने गए $A$ और $\mathbf{e}$ के लिए), तो एक पॉलीनोमियल-टाइम क्वांटम एल्गोरिदम भी मौजूद होगा जो किसी भी जाली के सबसे खराब स्थिति (सबसे कठिन मामले) में Gap-SVP को हल कर सकता है।&amp;rdquo; (बाद में, Peikert और अन्य लोगों द्वारा क्लासिकल रिडक्शन भी दिखाया गया है)।&lt;/p>
&lt;p>यह क्रिप्टोग्राफिक सिद्धांत में एक सपने जैसी विशेषता है। ऐसा इसलिए है क्योंकि यह इस चिंता को दूर करता है कि &amp;ldquo;हो सकता है कि क्रिप्टोग्राफी टूट गई हो क्योंकि हमने संयोग से एक कमजोर कुंजी (औसत मामलों में से एक) चुन ली हो,&amp;rdquo; और यह एक शक्तिशाली गारंटी प्रदान करता है कि &amp;ldquo;यदि औसत LWE को हल किया जा सकता है, तो जाली की सभी कठिन समस्याओं को हल किया जा सकता है (इसलिए LWE निश्चित रूप से कठिन है)।&amp;rdquo;&lt;/p>
&lt;div class="mermaid">graph TD
A["सबसे खराब स्थिति वाली जाली समस्याएं (Gap-SVP, SIVP)"] -->|Quantum/Classical Reduction| B["औसत स्थिति वाली LWE समस्या"]
B -->|Cryptographic Construction| C["LWE-आधारित क्रिप्टोसिस्टम (PKE, KEM, FHE)"]
style A fill:#ffcccc,stroke:#ff0000,stroke-width:2px,color:#000
style B fill:#ccffcc,stroke:#00aa00,stroke-width:2px,color:#000
style C fill:#ccccff,stroke:#0000ff,stroke-width:2px,color:#000&lt;/div>
&lt;h1 id="5-lwe-क-उपयग-करक-पबलक-क-करपटगरफ-रगव-करपटगरफ---regev-cryptosystem-क-नरमण">5. LWE का उपयोग करके पब्लिक-की क्रिप्टोग्राफी (रेगेव क्रिप्टोग्राफी - Regev Cryptosystem) का निर्माण
&lt;/h1>&lt;p>अब जब हम LWE समस्या की कठिनाई को समझ चुके हैं, तो आइए ओडेड रेगेव द्वारा प्रस्तावित बुनियादी पब्लिक-की क्रिप्टोग्राफी प्रणाली (Public-key cryptosystem) को देखें कि यह एन्क्रिप्शन और डिक्रिप्शन करने के लिए इसका उपयोग कैसे करती है। यहाँ हम 1-बिट संदेश $M \in \{0, 1\}$ को एन्क्रिप्ट करने के सबसे बुनियादी तंत्र की व्याख्या करेंगे।&lt;/p>
&lt;h2 id="51-कज-नरमण-key-generation">5.1 कुंजी निर्माण (Key Generation)
&lt;/h2>&lt;ol>
&lt;li>सिस्टम पैरामीटर के रूप में, एक अभाज्य संख्या $q$ (मॉड्यूलस), एक आयाम $n$, और समीकरणों की संख्या $m$ ($m > n \log q$) निर्धारित करें।&lt;/li>
&lt;li>गुप्त कुंजी (Secret Key) के रूप में एक वेक्टर $\mathbf{s} \in \mathbb{Z}_q^n$ को यादृच्छिक रूप से चुनें।&lt;/li>
&lt;li>एक यादृच्छिक मैट्रिक्स $A \in \mathbb{Z}_q^{m \times n}$ उत्पन्न करें।&lt;/li>
&lt;li>एक छोटा त्रुटि वेक्टर $\mathbf{e} \in \mathbb{Z}_q^m$ एक त्रुटि वितरण जैसे कि डिस्क्रीट गॉसियन वितरण से चुनें।&lt;/li>
&lt;li>वेक्टर $\mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q$ की गणना करें।&lt;/li>
&lt;li>पब्लिक की (Public Key) $(A, \mathbf{b})$ होगी।&lt;/li>
&lt;li>सीक्रेट की (Secret Key) $\mathbf{s}$ होगी।&lt;/li>
&lt;/ol>
&lt;p>पब्लिक की वस्तुतः &amp;ldquo;LWE समस्या का एक इंस्टेंस (instance)&amp;rdquo; है। चूँकि पब्लिक की $(A, \mathbf{b})$ से सीक्रेट की $\mathbf{s}$ ज्ञात करना सर्च LWE समस्या को हल करने के बराबर है, इसलिए सुरक्षा की गारंटी है।&lt;/p>
&lt;h2 id="52-एनकरपशन-encryption">5.2 एन्क्रिप्शन (Encryption)
&lt;/h2>&lt;p>ऐलिस, बॉब की पब्लिक की $(A, \mathbf{b})$ का उपयोग करके 1-बिट संदेश $M \in \{0, 1\}$ को एन्क्रिप्ट करती है।&lt;/p>
&lt;ol>
&lt;li>एक यादृच्छिक बाइनरी वेक्टर (जिसके घटक 0 या 1 हैं) $\mathbf{r} \in \{0, 1\}^m$ चुनें।&lt;/li>
&lt;li>सिफरटेक्स्ट (ciphertext) के पहले भाग के रूप में, वेक्टर $\mathbf{u} = A^T \mathbf{r} \pmod q$ की गणना करें। ($A^T$, $A$ का ट्रांसपोज़ मैट्रिक्स (transpose matrix) है। अर्थात्, हम $A$ की उन पंक्तियों को जोड़ रहे हैं जहाँ $\mathbf{r}$ का घटक 1 है)।&lt;/li>
&lt;li>सिफरटेक्स्ट के दूसरे भाग के रूप में, स्केलर $v = \mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q$ की गणना करें।
(यदि संदेश $M$ 0 है तो कुछ भी नहीं जोड़ा जाता है, और यदि $1$ है तो हम $q$ का ठीक आधा मान $\lfloor \frac{q}{2} \rfloor$ जोड़ते हैं)।&lt;/li>
&lt;li>सिफरटेक्स्ट (Ciphertext) $(\mathbf{u}, v)$ होगा।&lt;/li>
&lt;/ol>
&lt;p>एन्क्रिप्शन का सहज अर्थ पब्लिक की के मैट्रिक्स $A$ और वेक्टर $\mathbf{b}$ के लिए &amp;ldquo;यादृच्छिक उपसमूह का योग (sum of a random subset)&amp;rdquo; लेना है। डिसीजन LWE समस्या की कठिनाई के कारण, यह सिफरटेक्स्ट $(\mathbf{u}, v)$ एक पूरी तरह से यादृच्छिक वेक्टर और एक समान यादृच्छिक संख्या (uniform random number) से अप्रभेद्य (indistinguishable) प्रतीत होता है (सिमेंटिक सिक्योरिटी: Semantic Security)।&lt;/p>
&lt;div class="mermaid">flowchart LR
M["संदेश M {0,1} में"] --> Enc
PK["पब्लिक की (A, b)"] --> Enc
r["यादृच्छिक बाइनरी वेक्टर r"] --> Enc
subgraph Enc ["एन्क्रिप्शन प्रक्रिया"]
direction TB
u_calc["u = A^T * r mod q"]
v_calc["v = b^T * r + M * floor(q/2) mod q"]
end
Enc --> CT["सिफरटेक्स्ट (u, v)"]&lt;/div>
&lt;h2 id="53-डकरपशन-decryption">5.3 डिक्रिप्शन (Decryption)
&lt;/h2>&lt;p>बॉब अपनी गुप्त कुंजी $\mathbf{s}$ का उपयोग करके सिफरटेक्स्ट $(\mathbf{u}, v)$ को डिक्रिप्ट करता है।&lt;/p>
&lt;ol>
&lt;li>निम्नलिखित मान की गणना करें: $D = v - \mathbf{s}^T \mathbf{u} \pmod q$&lt;/li>
&lt;li>यदि गणना किया गया परिणाम $0$ के करीब है, तो $M=0$ आउटपुट करें, और यदि यह $\lfloor \frac{q}{2} \rfloor$ के करीब है, तो $M=1$ आउटपुट करें।&lt;/li>
&lt;/ol>
&lt;p>आइए गणितीय रूप से इसका विस्तार करें कि इसे इस प्रकार डिक्रिप्ट क्यों किया जा सकता है।
याद रखें कि $\mathbf{b} = A \mathbf{s} + \mathbf{e}$ था।&lt;/p>
$$
\begin{aligned}
v - \mathbf{s}^T \mathbf{u} &amp;= (\mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T (A^T \mathbf{r}) \\
&amp;= ((A \mathbf{s} + \mathbf{e})^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= (\mathbf{s}^T A^T \mathbf{r} + \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q
\end{aligned}
$$
&lt;p>यहाँ, सूत्र में से $\mathbf{s}^T A^T \mathbf{r}$ पूरी तरह से कट कर (cancel out) समाप्त हो गया!
बचा हुआ हिस्सा $\mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor$ है।&lt;/p>
&lt;p>$\mathbf{e}$ एक शोर वेक्टर है जिसके घटक बहुत छोटे हैं, और $\mathbf{r}$ एक बाइनरी वेक्टर है जिसके घटक 0 या 1 हैं। इसलिए, उनका डॉट प्रोडक्ट $\mathbf{e}^T \mathbf{r}$ भी अपेक्षाकृत छोटा मान (यदि पैरामीटर ठीक से चुने गए हैं) ही रहेगा।&lt;/p>
&lt;ul>
&lt;li>यदि $M=0$ है, तो परिणाम $\mathbf{e}^T \mathbf{r}$ होगा, जो $0$ के करीब एक छोटा मान होगा।&lt;/li>
&lt;li>यदि $M=1$ है, तो परिणाम $\mathbf{e}^T \mathbf{r} + \lfloor \frac{q}{2} \rfloor$ होगा, जो $q$ के आधे मान $\lfloor \frac{q}{2} \rfloor$ के आसपास स्थित होगा।&lt;/li>
&lt;/ul>
&lt;p>यदि मापदंडों को इस तरह से डिज़ाइन किया गया है कि त्रुटि $\mathbf{e}^T \mathbf{r}$ का निरपेक्ष मान (absolute value) $\frac{q}{4}$ से कम रहे, तो बॉब केवल यह देखकर संदेश $M$ को सटीक रूप से निर्धारित (डिक्रिप्ट) कर सकता है कि गणना का परिणाम $0$ के अधिक करीब है या $\lfloor \frac{q}{2} \rfloor$ के। यही वह सुंदर तंत्र है जिसके द्वारा LWE-आधारित क्रिप्टोग्राफी काम करती है।&lt;/p>
&lt;div class="mermaid">flowchart LR
CT["सिफरटेक्स्ट (u, v)"] --> Dec
SK["गुप्त कुंजी s"] --> Dec
subgraph Dec ["डिक्रिप्शन प्रक्रिया"]
direction TB
calc["गणना करें D = v - s^T * u mod q"]
check["जांचें कि क्या D, 0 या q/2 के करीब है"]
end
calc --> check
Dec --> M_out["पुनर्प्राप्त संदेश M"]&lt;/div>
&lt;h1 id="6-वशषट-सखयतमक-मन-क-उपयग-करत-हए-lwe-करपटगरफ-क-एक-टय-उदहरण-toy-example">6. विशिष्ट संख्यात्मक मानों का उपयोग करते हुए LWE क्रिप्टोग्राफी का एक टॉय उदाहरण (Toy Example)
&lt;/h1>&lt;p>सूत्रों की एक श्रृंखला के साथ इसे समझना मुश्किल हो सकता है, इसलिए आइए वास्तव में बहुत छोटे संख्यात्मक मापदंडों को सेट करके एन्क्रिप्शन से डिक्रिप्शन तक की गणनाओं का पालन करें।
(※ वास्तविक क्रिप्टोग्राफ़िक प्रणालियों में, सुरक्षा सुनिश्चित करने के लिए $n$ के लिए 500 या उससे अधिक और $q$ के लिए हजारों या उससे अधिक मान का उपयोग किया जाता है)&lt;/p>
&lt;p>&lt;strong>【पैरामीटर सेटिंग्स】&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>मॉड्यूलस $q = 17$ (अभाज्य संख्या। इसलिए मान $0$ से $16$ तक की सीमा में होंगे)&lt;/li>
&lt;li>आयाम $n = 2$&lt;/li>
&lt;li>समीकरणों की संख्या $m = 4$&lt;/li>
&lt;li>मान लें कि हम संदेश $M = 1$ को एन्क्रिप्ट कर रहे हैं।&lt;/li>
&lt;li>संदेश का शिफ्ट मान: $\lfloor \frac{q}{2} \rfloor = \lfloor \frac{17}{2} \rfloor = 8$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>【1. कुंजी निर्माण चरण (Key Generation Phase)】&lt;/strong>
बॉब गुप्त कुंजी $\mathbf{s}$, मैट्रिक्स $A$, और त्रुटि वेक्टर $\mathbf{e}$ को यादृच्छिक रूप से चुनता है।
&lt;/p>
$$ \mathbf{s} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \in \mathbb{Z}_{17}^2 $$
$$ A = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \in \mathbb{Z}_{17}^{4 \times 2} $$
$$ \mathbf{e} = \begin{pmatrix} 1 \\ -1 \\ 0 \\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} \pmod{17} $$
&lt;p>इसके बाद, पब्लिक की $\mathbf{b}$ की गणना करें।
&lt;/p>
$$ A \mathbf{s} = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 2\times 3 + 15\times 4 \\ 1\times 3 + 8\times 4 \\ 14\times 3 + 5\times 4 \\ 9\times 3 + 10\times 4 \end{pmatrix} = \begin{pmatrix} 6 + 60 \\ 3 + 32 \\ 42 + 20 \\ 27 + 40 \end{pmatrix} = \begin{pmatrix} 66 \\ 35 \\ 62 \\ 67 \end{pmatrix} $$
&lt;p>
इसकी गणना मॉड्युलो 17 में करें। (जैसे $66 = 17 \times 3 + 15$)
&lt;/p>
$$ A \mathbf{s} \pmod{17} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} $$
&lt;p>
त्रुटि वेक्टर $\mathbf{e}$ जोड़ें।
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} + \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} = \begin{pmatrix} 16 \\ 17 \\ 11 \\ 18 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 0 \\ 11 \\ 1 \end{pmatrix} \pmod{17} $$
&lt;p>पब्लिक की $A$ और $\mathbf{b} = (16, 0, 11, 1)^T$ होगी।&lt;/p>
&lt;p>&lt;strong>【2. एन्क्रिप्शन चरण (Encryption Phase)】&lt;/strong>
ऐलिस संदेश $M = 1$ को एन्क्रिप्ट करती है।
वह एक यादृच्छिक वेक्टर $\mathbf{r}$ चुनती है। यहाँ मान लें कि $\mathbf{r} = (1, 0, 1, 0)^T$ है।&lt;/p>
&lt;p>$\mathbf{u}$ की गणना करें।
&lt;/p>
$$ \mathbf{u} = A^T \mathbf{r} = \begin{pmatrix} 2 &amp; 1 &amp; 14 &amp; 9 \\ 15 &amp; 8 &amp; 5 &amp; 10 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 2 \times 1 + 14 \times 1 \\ 15 \times 1 + 5 \times 1 \end{pmatrix} = \begin{pmatrix} 16 \\ 20 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 3 \end{pmatrix} \pmod{17} $$
&lt;p>$v$ की गणना करें।
&lt;/p>
$$ \mathbf{b}^T \mathbf{r} = (16, 0, 11, 1) \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = 16 \times 1 + 11 \times 1 = 27 \equiv 10 \pmod{17} $$
&lt;p>
संदेश $M=1$ के अनुरूप मान $\lfloor 17/2 \rfloor = 8$ जोड़ें।
&lt;/p>
$$ v = \mathbf{b}^T \mathbf{r} + M \cdot 8 = 10 + 1 \times 8 = 18 \equiv 1 \pmod{17} $$
&lt;p>ऐलिस सिफरटेक्स्ट के रूप में $(\mathbf{u}, v) = \left( \begin{pmatrix} 16 \\ 3 \end{pmatrix}, 1 \right)$ बॉब को भेजती है।&lt;/p>
&lt;p>&lt;strong>【3. डिक्रिप्शन चरण (Decryption Phase)】&lt;/strong>
सिफरटेक्स्ट प्राप्त करने के बाद, बॉब गुप्त कुंजी $\mathbf{s} = (3, 4)^T$ का उपयोग करके इसे डिक्रिप्ट करता है।
डिक्रिप्शन प्रक्रिया सूत्र: $D = v - \mathbf{s}^T \mathbf{u} \pmod{17}$ की गणना करें।&lt;/p>
$$ \mathbf{s}^T \mathbf{u} = (3, 4) \begin{pmatrix} 16 \\ 3 \end{pmatrix} = 3 \times 16 + 4 \times 3 = 48 + 12 = 60 \equiv 9 \pmod{17} $$
$$ D = v - \mathbf{s}^T \mathbf{u} = 1 - 9 = -8 \pmod{17} $$
&lt;p>यहाँ, मॉड्युलो 17 की दुनिया में, $-8$, $9$ के बराबर है ($-8 + 17 = 9$)।
प्राप्त मान $D = 9$ का मूल्यांकन यह निर्धारित करने के लिए करें कि यह $0$ के अधिक करीब है या $8$ ($\lfloor 17/2 \rfloor$) के।
चूँकि $9$ स्पष्ट रूप से $0$ की तुलना में $8$ के अधिक करीब है, बॉब ने $M = 1$ को सफलतापूर्वक और सही ढंग से पुनर्प्राप्त कर लिया!&lt;/p>
&lt;p>यह $9$ क्यों हुआ? आइए पहले के प्रमाण को याद करें।
त्रुटि भाग $\mathbf{e}^T \mathbf{r} = (1, -1, 0, 2) (1, 0, 1, 0)^T = 1 \times 1 + 0 \times 1 = 1$ है।
इसलिए, गणना का परिणाम $\mathbf{e}^T \mathbf{r} + M \cdot 8 = 1 + 8 = 9$ है, और यह पुष्टि हो गई है कि सैद्धांतिक रूप से सही मान की गणना की गई है।&lt;/p>
&lt;h1 id="7-वयवहरक-अनपरयग-क-दश-म-वकस-ring-lwe-और-module-lwe">7. व्यावहारिक अनुप्रयोग की दिशा में विकास: Ring-LWE और Module-LWE
&lt;/h1>&lt;p>अब तक समझाई गई मानक LWE समस्या (Standard LWE) में बहुत मजबूत सुरक्षा प्रमाण है, लेकिन व्यावहारिक अनुप्रयोग में इसकी एक घातक कमजोरी है: &amp;ldquo;कुंजी का आकार विशाल हो जाता है&amp;rdquo; और &amp;ldquo;कम्प्यूटेशनल लागत अधिक होती है।&amp;rdquo;&lt;/p>
&lt;p>Standard LWE में, पब्लिक की में एक विशाल मैट्रिक्स $A \in \mathbb{Z}_q^{m \times n}$ शामिल होता है। जब पैरामीटर $n$ सैकड़ों से हजारों तक पहुँच जाता है, तो इस मैट्रिक्स का आकार कई मेगाबाइट तक पहुँच जाता है, जो इंटरनेट संचार प्रोटोकॉल (जैसे TLS) में हर बार प्रसारित और प्राप्त करने के लिए बहुत भारी होता है। इसके अलावा, मैट्रिक्स और वेक्टर के गुणन के लिए $\mathcal{O}(n^2)$ कम्प्यूटेशनल जटिलता की आवश्यकता होती है।&lt;/p>
&lt;p>इस समस्या को हल करने के लिए, &amp;ldquo;Ring-LWE (RLWE)&amp;rdquo; और &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; को पेश किया गया, जो जाली में पॉलीनोमियल रिंग्स (Polynomial rings) नामक बीजीय संरचनाओं (algebraic structures) को शामिल करते हैं।&lt;/p>
&lt;h2 id="71-ring-lwe-क-अतरजञन">7.1 Ring-LWE का अंतर्ज्ञान
&lt;/h2>&lt;p>Ring-LWE में, वेक्टर और मैट्रिक्स को पॉलीनोमियल रिंग $\mathcal{R}_q = \mathbb{Z}_q[X]/(X^n + 1)$ पर तत्वों (बहुपदों / polynomials) से बदल दिया जाता है। (जहाँ $n$ को 2 की घात के रूप में चुना जाता है)।&lt;/p>
&lt;p>Standard LWE में जहाँ पब्लिक की एक मैट्रिक्स $A$ थी, वहीं Ring-LWE में एकल बहुपद $a(x)$ का उपयोग किया जाता है। गुप्त कुंजी $s(x)$ और त्रुटि $e(x)$ भी बहुपद बन जाते हैं।
समीकरण इस प्रकार है:
&lt;/p>
$$ b(x) = a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>चूँकि यह बहुपदों का गुणन है, फास्ट फूरियर ट्रांसफॉर्म (FFT) के समान &amp;ldquo;नंबर थियोरेटिक ट्रांसफॉर्म (Number Theoretic Transform: NTT)&amp;rdquo; का उपयोग करके कम्प्यूटेशनल जटिलता को नाटकीय रूप से $\mathcal{O}(n \log n)$ तक कम किया जा सकता है। इसके अलावा, चूंकि पब्लिक की का आकार एक मैट्रिक्स से एकल बहुपद तक छोटा हो जाता है, इसलिए डेटा का आकार $\mathcal{O}(n)$ तक कम हो जाता है। यह संचार बैंडविड्थ के मामले में एक बड़ा लाभ प्रदान करता है।&lt;/p>
&lt;p>गणितीय दृष्टिकोण से, Ring-LWE एक सामान्य जाली नहीं है, बल्कि यह एक विशेष समरूपता (symmetry) वाली जाली की समस्या में बदल जाती है, जिसे &amp;ldquo;आइडियल लैटिस (Ideal Lattice)&amp;rdquo; कहा जाता है।&lt;/p>
&lt;h2 id="72-module-lwe-और-nist-क-मनककरण-kyber--ml-kem">7.2 Module-LWE और NIST का मानकीकरण (Kyber / ML-KEM)
&lt;/h2>&lt;p>हालाँकि Ring-LWE कुशल है, लेकिन यह चिंता थी कि आइडियल लैटिस की विशेष बीजीय संरचना भविष्य में हमलों का एक प्रारंभिक बिंदु बन सकती है। इसलिए, &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; को पेश किया गया, जो Standard LWE की रूढ़िवादी (conservative) सुरक्षा और Ring-LWE की दक्षता का &amp;ldquo;सर्वश्रेष्ठ संयोजन (best of both worlds)&amp;rdquo; है।&lt;/p>
&lt;p>Module-LWE में, हम बहुपदों वाले छोटे मैट्रिक्स और वेक्टरों पर विचार करते हैं। दूसरे शब्दों में, हम एक रिंग पर मॉड्यूल से निपटते हैं।
वर्तमान में, NIST द्वारा PQC कुंजी-विनिमय एल्गोरिदम (KEM) के मानक के रूप में चुना गया &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; (मानकीकृत नाम: ML-KEM), पूरी तरह से इस Module-LWE समस्या की कठिनाई पर आधारित है।&lt;/p>
&lt;h1 id="8-यह-कवटम-कपयटर-क-खलफ-सरकषत-कय-ह">8. यह क्वांटम कंप्यूटरों के खिलाफ सुरक्षित क्यों है?
&lt;/h1>&lt;p>अंत में, आइए इस मुख्य प्रश्न को छूते हैं: &amp;ldquo;ऐसा क्यों माना जाता है कि क्वांटम कंप्यूटरों का उपयोग करके भी जाली-आधारित क्रिप्टोग्राफी को नहीं तोड़ा जा सकता है?&amp;rdquo;&lt;/p>
&lt;p>Shor का एल्गोरिदम, जो क्वांटम कंप्यूटरों को RSA और एलिप्टिक कर्व क्रिप्टोग्राफी को तोड़ने की अनुमति देता है, अनिवार्य रूप से &amp;ldquo;हिडन सबग्रुप प्रॉब्लम (Hidden Subgroup Problem: HSP)&amp;rdquo; को हल करने के लिए एक एल्गोरिदम है। RSA और ECC (परिमित एबेलियन समूह / finite Abelian groups) के पीछे की गणितीय संरचना में आवधिकता (periodicity) होती है, और क्वांटम फूरियर ट्रांसफॉर्म (QFT) नामक क्वांटम एल्गोरिदम के लिए विशिष्ट ऑपरेशन का उपयोग करके इस अवधि (छिपे हुए उपसमूह) को एक बार में निकाला जा सकता है।&lt;/p>
&lt;p>हालाँकि, जाली की समस्याएं मौलिक रूप से भिन्न हैं। हालांकि जालियों में भी आवधिकता होती है, SVP और CVP के लिए &amp;ldquo;सबसे कम दूरी&amp;rdquo; और &amp;ldquo;शोर हटाने&amp;rdquo; जैसे ज्यामितीय, गैर-रेखीय (non-linear) गुणों की आवश्यकता होती है। Shor के एल्गोरिदम की तरह &amp;ldquo;एबेलियन समूह पर क्वांटम फूरियर ट्रांसफॉर्म&amp;rdquo; को सीधे लागू करने से जाली समस्याओं को हल करने के लिए उपयोगी जानकारी को कुशलतापूर्वक नहीं निकाला जा सकता है। आज तक, SVP या LWE को पॉलीनोमियल समय में हल करने वाला कोई क्वांटम एल्गोरिदम नहीं खोजा गया है। यह व्यापक रूप से माना जाता है कि क्वांटम कंप्यूटरों की समानांतर कंप्यूटिंग क्षमता के साथ भी, ब्रूट-फोर्स सर्च (Brute-force search) के करीब का तरीका (ग्रोवर के एल्गोरिदम का उपयोग करके वर्गमूल गति वृद्धि / square root speedup तक ही) एकमात्र प्रभावी साधन है।&lt;/p>
&lt;h1 id="9-नषकरष">9. निष्कर्ष
&lt;/h1>&lt;p>इस लेख में, हमने जाली-आधारित क्रिप्टोग्राफी के गणितीय अंतर्ज्ञान के बारे में विस्तार से बताया है, जिसकी शुरुआत जाली की ज्यामितीय परिभाषा से हुई, उसके बाद LWE समस्या का निरूपण किया गया, और अंततः पब्लिक-की क्रिप्टोग्राफी के निर्माण को समझाया गया।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>जाली (Lattice)&lt;/strong> एक असतत स्थान (discrete space) है जिसे बेसिस वेक्टरों के पूर्णांक गुणांकों वाले रैखिक संयोजन द्वारा दर्शाया जाता है। उच्च आयामों में एक &amp;ldquo;अच्छा बेसिस&amp;rdquo; खोजना (जो लगभग ऑर्थोगोनल हो) मुश्किल हो जाता है (SVP)।&lt;/li>
&lt;li>&lt;strong>LWE समस्या (Learning With Errors)&lt;/strong> शोर (noise) के साथ रेखीय समीकरणों की प्रणाली को हल करने की समस्या है। चूँकि यह जाली की सबसे खराब स्थिति (worst-case) वाली समस्याओं की कठिनाई से जुड़ी है, इसलिए यह सुरक्षा का एक मजबूत आधार प्रदान करती है।&lt;/li>
&lt;li>LWE समस्या का उपयोग करते हुए, जानबूझकर शोर जोड़ने या हटाने के एक सरल तंत्र के माध्यम से एन्क्रिप्शन और डिक्रिप्शन (&lt;strong>रेगेव क्रिप्टोग्राफी - Regev Cryptosystem&lt;/strong>) प्राप्त किया जाता है।&lt;/li>
&lt;li>वास्तविक प्रोटोकॉल में, संचार दक्षता और कम्प्यूटेशनल गति में सुधार करने के लिए पॉलीनोमियल रिंग्स का उपयोग करने वाले &lt;strong>Ring-LWE&lt;/strong> और &lt;strong>Module-LWE&lt;/strong> को अपनाया गया है। ये NIST के मानक &lt;strong>ML-KEM&lt;/strong> की नींव बनाते हैं।&lt;/li>
&lt;/ol>
&lt;p>जैसे-जैसे क्वांटम कंप्यूटर के रूप में अभूतपूर्व कंप्यूटिंग प्रतिमान बदलाव (paradigm shift) आ रहा है, यह बहुत ही रोमांचक है कि क्लासिकल लीनियर अलजेब्रा और नंबर थ्योरी (number theory) की गहराइयों से जन्मी &amp;ldquo;जाली-आधारित क्रिप्टोग्राफी&amp;rdquo; भविष्य की इंटरनेट सुरक्षा की नींव रखेगी। जाली-आधारित क्रिप्टोग्राफी की आधारभूत गणित बहुत अधिक जटिल नहीं है; लीनियर अलजेब्रा और प्रोबेबिलिटी (probability) के बुनियादी ज्ञान के साथ, इसकी सुंदर संरचना को पूरी तरह से समझा जा सकता है। हमें उम्मीद है कि यह लेख PQC के मूल में स्थित जाली-आधारित क्रिप्टोग्राफी को समझने में आपकी मदद करेगा।&lt;/p></description></item><item><title>रीमैन परिकल्पना और अभाज्य संख्याओं का वितरण: आधुनिक क्रिप्टोग्राफी के साथ गहरा संबंध</title><link>http://kenji.blog/hi/p/riemann-hypothesis-prime-distribution-cryptography/</link><pubDate>Fri, 11 Sep 2026 16:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/riemann-hypothesis-prime-distribution-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/riemann-hypothesis-prime-distribution-cryptography/img/eyecatch.jpg" alt="Featured image of post रीमैन परिकल्पना और अभाज्य संख्याओं का वितरण: आधुनिक क्रिप्टोग्राफी के साथ गहरा संबंध" />&lt;h1 id="1-परचय-अभजय-सखयओ-क-लकक-रहसय-और-रमन-परकलपन">1. परिचय: अभाज्य संख्याओं का लौकिक रहस्य और रीमैन परिकल्पना
&lt;/h1>&lt;p>&amp;ldquo;अभाज्य संख्याएँ (Prime Numbers)&amp;rdquo; प्राकृतिक संख्याएँ हैं जो केवल 1 और स्वयं से विभाज्य होती हैं, और उन्हें गणित की दुनिया का &amp;ldquo;परमाणु&amp;rdquo; भी कहा जाता है। अनुक्रम 2, 3, 5, 7, 11, 13&amp;hellip; पहली नज़र में अव्यवस्थित और यादृच्छिक प्रतीत होता है। प्राचीन यूनानी गणितज्ञ यूक्लिड ने यह साबित किया था कि &amp;ldquo;अभाज्य संख्याएँ अनंत हैं,&amp;rdquo; तब से अनगिनत गणितज्ञों ने अभाज्य संख्याओं के इस क्रम में छिपी नियमितता को उजागर करने का प्रयास किया है।&lt;/p>
&lt;p>इस अभाज्य संख्या के रहस्य के सबसे करीब 1859 में जर्मन गणितज्ञ बर्नहार्ड रीमैन (Bernhard Riemann) द्वारा प्रस्तावित &lt;strong>&amp;ldquo;रीमैन परिकल्पना (Riemann Hypothesis)&amp;rdquo;&lt;/strong> है। रीमैन परिकल्पना आधुनिक गणित में सबसे महत्वपूर्ण और अनसुलझी समस्याओं में से एक है, और यह क्ले मैथमेटिक्स इंस्टीट्यूट द्वारा निर्धारित मिलेनियम प्राइज समस्याओं में से एक है, जिस पर 1 मिलियन डॉलर का इनाम है।&lt;/p>
&lt;p>पहली नज़र में, अभाज्य संख्याओं के वितरण से संबंधित शुद्ध गणित की यह कठिन समस्या हमारे दैनिक जीवन से असंबंधित लग सकती है। हालाँकि, इंटरनेट की सुरक्षा जो आधुनिक समाज के बुनियादी ढांचे का समर्थन करती है, विशेष रूप से &lt;strong>आधुनिक क्रिप्टोग्राफी जैसे RSA और एलिप्टिक कर्व क्रिप्टोग्राफी (ECC)&lt;/strong>, विशाल अभाज्य संख्याओं के गुणों पर गहराई से निर्भर करती है।&lt;/p>
&lt;p>इस लेख में, हम अभाज्य संख्याओं के वितरण से लेकर अभाज्य संख्या प्रमेय, रीमैन ज़ेटा फ़ंक्शन और रीमैन परिकल्पना के मूल तक एक गणितीय यात्रा करेंगे, और यह कैसे आधुनिक क्रिप्टोग्राफी से जुड़ा है, और यदि रीमैन परिकल्पना सिद्ध हो जाती है तो दुनिया कैसी होगी, इसके बारे में बहुत विस्तृत और गहन व्याख्या करेंगे।&lt;/p>
&lt;hr>
&lt;h1 id="2-अभजय-सखय-परमय-और-अभजय-सखयओ-क-वतरण-गस-क-खज">2. अभाज्य संख्या प्रमेय और अभाज्य संख्याओं का वितरण: गॉस की खोज
&lt;/h1>&lt;p>अभाज्य संख्याएँ कैसे वितरित होती हैं, यह समझने के लिए, गणितज्ञों ने &lt;strong>अभाज्य-गणना फलन (Prime-counting function)&lt;/strong> $\pi(x)$ पर विचार किया, जो दर्शाता है कि &amp;ldquo;किसी संख्या $x$ के बराबर या उससे कम कितनी अभाज्य संख्याएँ हैं।&amp;rdquo;&lt;/p>
&lt;p>उदाहरण के लिए:&lt;/p>
&lt;ul>
&lt;li>$\pi(10) = 4$ (2, 3, 5, 7)&lt;/li>
&lt;li>$\pi(100) = 25$&lt;/li>
&lt;li>$\pi(1000) = 168$&lt;/li>
&lt;/ul>
&lt;p>15 वर्षीय प्रतिभाशाली गणितज्ञ कार्ल फ्रेडरिक गॉस (Carl Friedrich Gauss) ने अभाज्य संख्याओं की विशाल तालिकाओं की गणना की और पाया कि अभाज्य संख्याओं की आवृत्ति प्राकृतिक लघुगणक (natural logarithm) $\ln x$ के व्युत्क्रमानुपाती होकर कम हो जाती है। अर्थात्, उन्होंने अनुमान लगाया कि किसी संख्या $x$ के आसपास अभाज्य संख्या मिलने की प्रायिकता लगभग $\frac{1}{\ln x}$ है।&lt;/p>
&lt;p>इसे समाकलन (integration) का उपयोग करके व्यक्त किया गया है, जिसे &lt;strong>लघुगणकीय समाकलन (Logarithmic integral)&lt;/strong> $\text{Li}(x)$ कहा जाता है।&lt;/p>
$$ \text{Li}(x) = \int_{2}^{x} \frac{dt}{\ln t} $$
&lt;p>गॉस के अनुमान को बाद में 1896 में जैक्स हैडमार्ड और चार्ल्स जीन डे ला वैली-पूसिन द्वारा स्वतंत्र रूप से सिद्ध किया गया था, और इसे &lt;strong>अभाज्य संख्या प्रमेय (Prime Number Theorem, PNT)&lt;/strong> के रूप में स्थापित किया गया।&lt;/p>
$$ \lim_{x \to \infty} \frac{\pi(x)}{\text{Li}(x)} = 1 $$
&lt;p>या अनुमानित रूप से इसे इस प्रकार व्यक्त किया जाता है:&lt;/p>
$$ \pi(x) \sim \frac{x}{\ln x} $$
&lt;p>इस प्रमेय से, यह पता चला कि यदि स्थूल रूप से देखा जाए, तो अभाज्य संख्याओं का वितरण बहुत सहज और अनुमानित होता है। हालाँकि, यदि सूक्ष्म रूप से देखा जाए, तो $\pi(x)$ और $\text{Li}(x)$ के बीच हमेशा &amp;ldquo;त्रुटि&amp;rdquo; अर्थात् &amp;ldquo;उतार-चढ़ाव&amp;rdquo; होता है। इस उतार-चढ़ाव का वास्तविक स्वरूप ही वह सबसे बड़ा रहस्य है जिसे रीमैन परिकल्पना सुलझाने का प्रयास कर रही है।&lt;/p>
&lt;hr>
&lt;h1 id="3-रमन-जट-फकशन-और-यलर-उतपद">3. रीमैन ज़ेटा फ़ंक्शन और यूलर उत्पाद
&lt;/h1>&lt;p>अभाज्य संख्याओं के वितरण का विश्लेषण करने के लिए सबसे शक्तिशाली हथियार &lt;strong>रीमैन ज़ेटा फ़ंक्शन (Riemann Zeta Function)&lt;/strong> है। यह मूल रूप से लियोनहार्ड यूलर (Leonhard Euler) द्वारा वास्तविक संख्याओं $s > 1$ के लिए परिभाषित एक अनंत श्रृंखला थी।&lt;/p>
$$ \zeta(s) = \sum_{n=1}^\infty \frac{1}{n^s} = 1 + \frac{1}{2^s} + \frac{1}{3^s} + \frac{1}{4^s} + \dots $$
&lt;p>यूलर की सबसे बड़ी उपलब्धियों में से एक यह साबित करना था कि इस अनंत श्रृंखला को सभी अभाज्य संख्याओं $p$ पर एक अनंत उत्पाद के रूप में व्यक्त किया जा सकता है। यह &lt;strong>यूलर उत्पाद सूत्र (Euler Product Formula)&lt;/strong> है।&lt;/p>
$$ \zeta(s) = \prod_{p \text{ prime}} \frac{1}{1 - p^{-s}} = \left( \frac{1}{1 - 2^{-s}} \right) \left( \frac{1}{1 - 3^{-s}} \right) \left( \frac{1}{1 - 5^{-s}} \right) \dots $$
&lt;p>प्रमाण की सहज समझ यह है कि दाईं ओर के प्रत्येक पद को एक गुणोत्तर श्रेणी के रूप में विस्तारित करके और उन्हें गुणा करके, अंकगणित के मूलभूत प्रमेय (सभी प्राकृतिक संख्याओं को अभाज्य संख्याओं के उत्पाद के रूप में विशिष्ट रूप से दर्शाया जाता है) के कारण, बाईं ओर की प्राकृतिक संख्याओं के व्युत्क्रमों का योग पूरी तरह से पुनर्गठित हो जाता है।&lt;/p>
&lt;p>&lt;strong>यह एक ही सूत्र विश्लेषण (अनंत श्रृंखला और निरंतर कार्य) और संख्या सिद्धांत (अभाज्य संख्या और असतत संख्या) को जोड़ने वाला सेतु बन गया।&lt;/strong> ज़ेटा फ़ंक्शन की जांच करना अभाज्य संख्याओं के वितरण की जांच करने के समान है।&lt;/p>
&lt;hr>
&lt;h1 id="4-वशलषणतमक-नरतरत-और-सममशर-तल-म-वसतर">4. विश्लेषणात्मक निरंतरता और सम्मिश्र तल में विस्तार
&lt;/h1>&lt;p>रीमैन की प्रतिभा इस बात में निहित है कि उन्होंने चर $s$ को, जिसे यूलर ने केवल वास्तविक संख्याओं के लिए $\zeta(s)$ में माना था, &lt;strong>सम्मिश्र संख्या $s = \sigma + it$ ($\sigma$ वास्तविक भाग है, $t$ काल्पनिक भाग है)&lt;/strong> में विस्तारित किया।&lt;/p>
&lt;p>मूल अनंत श्रृंखला केवल $\sigma > 1$ के लिए अभिसरण करती है, लेकिन रीमैन ने &amp;ldquo;विश्लेषणात्मक निरंतरता (Analytic Continuation)&amp;rdquo; नामक तकनीक का उपयोग करके परिभाषा का विस्तार किया ताकि $\zeta(s)$ का अर्थ पूरे सम्मिश्र तल पर हो, सिवाय $s = 1$ के पोल के।&lt;/p>
&lt;p>उन्होंने ज़ेटा फ़ंक्शन द्वारा संतुष्ट एक सुंदर कार्यात्मक समीकरण (Functional equation) भी प्राप्त किया।&lt;/p>
$$ \zeta(s) = 2^s \pi^{s-1} \sin\left(\frac{\pi s}{2}\right) \Gamma(1-s) \zeta(1-s) $$
&lt;p>यहाँ $\Gamma(x)$ गामा फ़ंक्शन है। इस समीकरण के साथ, हम दाहिने आधे तल के गुणों से बाएं आधे तल के गुणों को जान सकते हैं।&lt;/p>
&lt;h3 id="शनय-zeros-of-the-zeta-function">शून्य (Zeros of the Zeta Function)
&lt;/h3>&lt;p>सम्मिश्र संख्या $s$ जहाँ ज़ेटा फ़ंक्शन का मान 0 हो जाता है, उसे &amp;ldquo;शून्य&amp;rdquo; कहा जाता है।
कार्यात्मक समीकरण से, जब $s$ एक ऋणात्मक सम संख्या ($-2, -4, -6, \dots$) होती है, $\sin(\pi s / 2)$ 0 हो जाता है, इसलिए $\zeta(s) = 0$ होता है। इन्हें &lt;strong>तुच्छ शून्य (Trivial zeros)&lt;/strong> कहा जाता है।&lt;/p>
&lt;p>हालाँकि, अभाज्य संख्याओं के वितरण में जो महत्वपूर्ण है वह अन्य शून्य हैं, अर्थात् &lt;strong>गैर-तुच्छ शून्य (Non-trivial zeros)&lt;/strong> जो $0 \le \sigma \le 1$ के &amp;ldquo;महत्वपूर्ण क्षेत्र (Critical strip)&amp;rdquo; में मौजूद हैं।&lt;/p>
&lt;hr>
&lt;h1 id="5-रमन-परकलपन-क-मल-और-सपषट-सतर">5. रीमैन परिकल्पना का मूल और स्पष्ट सूत्र
&lt;/h1>&lt;p>रीमैन ने कुछ शून्यों की गणना की और एक आश्चर्यजनक परिकल्पना प्रस्तुत की। यह &lt;strong>रीमैन परिकल्पना&lt;/strong> है।&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>रीमैन परिकल्पना (Riemann Hypothesis)&lt;/strong>
रीमैन ज़ेटा फ़ंक्शन $\zeta(s)$ के सभी गैर-तुच्छ शून्य उस रेखा पर स्थित होते हैं जिसका वास्तविक भाग $1/2$ है ($\text{Re}(s) = 1/2$)।&lt;/p>
&lt;/blockquote>
&lt;p>इस वास्तविक भाग $1/2$ वाली रेखा को &amp;ldquo;महत्वपूर्ण रेखा (Critical line)&amp;rdquo; कहा जाता है।&lt;/p>
&lt;div class="mermaid">graph TD
A["रीमैन ज़ेटा फ़ंक्शन ζ(s)"] --> B["विश्लेषणात्मक निरंतरता द्वारा सम्मिश्र तल में विस्तार"]
B --> C["तुच्छ शून्य (s = -2, -4, -6 ...)"]
B --> D["गैर-तुच्छ शून्य (0 &lt;= Re(s) &lt;= 1)"]
D --> E["रीमैन परिकल्पना"]
E --> F["सभी गैर-तुच्छ शून्य Re(s) = 1/2 पर स्थित हैं"]
F --> G["अभाज्य वितरण की त्रुटि अवधि की सीमा के प्रमाण की ओर"]&lt;/div>
&lt;p>रीमैन परिकल्पना इतनी महत्वपूर्ण क्यों है? ऐसा इसलिए है क्योंकि ज़ेटा फ़ंक्शन के शून्य अभाज्य संख्याओं के वितरण को &lt;strong>पूरी तरह से&lt;/strong> निर्धारित करते हैं।&lt;/p>
&lt;p>रीमैन और बाद के गणितज्ञ वॉन मैंगोल्ड्ट ने अभाज्य संख्याओं के वितरण का सटीक वर्णन करने के लिए एक &amp;ldquo;स्पष्ट सूत्र (Explicit formula)&amp;rdquo; प्राप्त किया। चेबीशेव फ़ंक्शन $\psi(x)$ का उपयोग करते हुए, इसे इस प्रकार व्यक्त किया जाता है:&lt;/p>
$$ \psi(x) = x - \sum_{\rho} \frac{x^\rho}{\rho} - \ln(2\pi) - \frac{1}{2}\ln(1 - x^{-2}) $$
&lt;p>यहाँ $\rho$ ज़ेटा फ़ंक्शन के सभी गैर-तुच्छ शून्यों पर योग है।
मुख्य पद $x$ है (जो अभाज्य संख्या प्रमेय से मेल खाता है), और वहां से, शून्य $\rho$ पर निर्भर तरंग जैसे पदों को जोड़ने और घटाने से, अभाज्य संख्याओं का सटीक सीढ़ी जैसा वितरण बहाल हो जाता है। यह कहा जा सकता है कि गैर-तुच्छ शून्य अभाज्य संख्याओं के वितरण की &amp;ldquo;आवृत्ति (तरंग)&amp;rdquo; का प्रतिनिधित्व करते हैं।&lt;/p>
&lt;p>यदि रीमैन परिकल्पना सही है और सभी गैर-तुच्छ शून्यों $\rho$ का वास्तविक भाग ठीक $1/2$ है, तो अभाज्य संख्या प्रमेय का त्रुटि पद सैद्धांतिक रूप से संभव न्यूनतम सीमा के भीतर होगा।&lt;/p>
$$ |\pi(x) - \text{Li}(x)| \le \frac{1}{8\pi} \sqrt{x} \ln x \quad \text{for} \quad x \ge 2657 $$
&lt;p>दूसरे शब्दों में, &lt;strong>यदि रीमैन परिकल्पना सत्य है, तो यह सिद्ध हो जाएगा कि अभाज्य संख्याएँ सबसे &amp;ldquo;नियमित और सुंदर&amp;rdquo; तरीके से वितरित हैं जिसकी हम कल्पना कर सकते हैं&lt;/strong>।&lt;/p>
&lt;hr>
&lt;h1 id="6-आधनक-करपटगरफ-और-अभजय-सखयओ-क-बच-अवभजय-सबध">6. आधुनिक क्रिप्टोग्राफी और अभाज्य संख्याओं के बीच अविभाज्य संबंध
&lt;/h1>&lt;p>अब तक यह शुद्ध गणित की एक गहरी दुनिया थी, लेकिन अभाज्य संख्याओं के ये गुण मूल रूप से आधुनिक डिजिटल समाज का समर्थन करते हैं। एक विशिष्ट उदाहरण पब्लिक-की क्रिप्टोग्राफी है, जैसे कि &lt;strong>RSA क्रिप्टोग्राफी&lt;/strong>।&lt;/p>
&lt;p>इंटरनेट पर क्रेडिट कार्ड भुगतान, पासवर्ड का प्रसारण और ब्लॉकचेन के डिजिटल हस्ताक्षर जैसे सभी संचारों की सुरक्षा &amp;ldquo;अभाज्य संख्याओं&amp;rdquo; पर निर्भर करती है।&lt;/p>
&lt;h3 id="rsa-करपटगरफ-कस-कम-करत-ह">RSA क्रिप्टोग्राफी कैसे काम करती है
&lt;/h3>&lt;p>RSA क्रिप्टोग्राफी की सुरक्षा इस गणितीय तथ्य (पूर्णांक गुणनखंड समस्या) पर आधारित है कि &amp;ldquo;कई अंकों वाली एक समग्र संख्या का गुणनखंड करना बेहद मुश्किल है।&amp;rdquo;&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>कुंजी निर्माण&lt;/strong>:
विशाल अभाज्य संख्याएँ $p$ और $q$ (उदाहरण के लिए, प्रत्येक 2048 बिट) यादृच्छिक रूप से चुनी जाती हैं।
उन्हें गुणा करके $N = p \times q$ की गणना की जाती है। यह $N$ सार्वजनिक कुंजी का हिस्सा बन जाता है।
यूलर के टॉटिएंट फ़ंक्शन $\phi(N) = (p-1)(q-1)$ का उपयोग करके, एक गुप्त कुंजी $d$ उत्पन्न की जाती है।&lt;/p>
$$ e \times d \equiv 1 \pmod{\phi(N)} $$
&lt;/li>
&lt;li>
&lt;p>&lt;strong>एन्क्रिप्शन और डिक्रिप्शन&lt;/strong>:
सादा पाठ $M$ को सार्वजनिक कुंजी $e, N$ का उपयोग करके सिफरटेक्स्ट $C$ में परिवर्तित किया जाता है।
&lt;/p>
$$ C \equiv M^e \pmod{N} $$
&lt;p>
केवल गुप्त कुंजी $d$ वाला व्यक्ति ही इसे डिक्रिप्ट कर सकता है।
&lt;/p>
$$ M \equiv C^d \pmod{N} $$
&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["सादा पाठ (Plaintext)"] --> B["सार्वजनिक कुंजी (e, N) के साथ एन्क्रिप्ट करें"]
B --> C["सिफरटेक्स्ट (Ciphertext)"]
C --> D["गुप्त कुंजी (d) के साथ डिक्रिप्ट करें"]
D --> E["मूल सादा पाठ"]
F["हमलावर (Attacker)"] -- "N का गुणनखंड करने का प्रयास करता है" --> C
F -.-> G["p और q के बिना d की गणना नहीं की जा सकती"]&lt;/div>
&lt;p>RSA क्रिप्टोग्राफी को तोड़ने के लिए, विशाल $N$ से मूल अभाज्य संख्याओं $p$ और $q$ को खोजना (गुणनखंड करना) आवश्यक है। यहां तक ​​कि वर्तमान मुख्यधारा के एल्गोरिदम (जैसे जनरल नंबर फील्ड सीव: GNFS) का उपयोग करके, सुपर कंप्यूटर का उपयोग करके सैकड़ों अंकों की संख्या का गुणनखंड करने में ब्रह्मांड की आयु से बहुत अधिक समय लगने की उम्मीद है।&lt;/p>
&lt;hr>
&lt;h1 id="7-करपटगरफ-पर-रमन-परकलपन-क-परभव">7. क्रिप्टोग्राफी पर रीमैन परिकल्पना का प्रभाव
&lt;/h1>&lt;p>तो, &amp;ldquo;रीमैन परिकल्पना&amp;rdquo; (शुद्ध गणित का शिखर) और &amp;ldquo;क्रिप्टोग्राफी&amp;rdquo; एक दूसरे को कैसे पार करते हैं?&lt;/p>
&lt;h3 id="71-अभजय-सखय-जनरशन-एलगरदम-परइमलट-टसटग-और-जनरलइजड-रमन-परकलपन-grh">7.1. अभाज्य संख्या जनरेशन एल्गोरिदम (प्राइमलिटी टेस्टिंग) और जनरलाइज्ड रीमैन परिकल्पना (GRH)
&lt;/h3>&lt;p>RSA क्रिप्टोग्राफी को संचालित करने के लिए, पहले विशाल अभाज्य संख्याएँ $p$ और $q$ उत्पन्न करनी होंगी। हालाँकि, यह निश्चित रूप से और तेज़ी से निर्धारित करना आसान नहीं है कि &amp;ldquo;क्या कोई संख्या अभाज्य है।&amp;rdquo;&lt;/p>
&lt;p>वर्तमान में, व्यावहारिक उपयोग में आने वाला &lt;strong>मिलर-राबिन प्राइमलिटी टेस्ट (Miller-Rabin primality test)&lt;/strong> एक संभाव्य एल्गोरिथ्म है। यह एल्गोरिथ्म तेज़ है, लेकिन एक &amp;ldquo;छद्म-अभाज्य&amp;rdquo; जोखिम है जहाँ यह एक समग्र संख्या को बहुत कम संभावना के साथ अभाज्य संख्या के रूप में गलत रूप से आंक सकता है।&lt;/p>
&lt;p>हालाँकि, यदि हम मान लें कि डिरिचलेट के L-फ़ंक्शंस तक रीमैन परिकल्पना का विस्तार &lt;strong>&amp;ldquo;जनरलाइज्ड रीमैन परिकल्पना (Generalized Riemann Hypothesis, GRH)&amp;rdquo;&lt;/strong> सत्य है, तो कहानी नाटकीय रूप से बदल जाती है।
यदि GRH सत्य है, तो मिलर-राबिन परीक्षण में परीक्षणों की अधिकतम संख्या की गणितीय रूप से गारंटी होती है, और यह एक संभाव्य एल्गोरिथ्म से &lt;strong>&amp;ldquo;नियतात्मक बहुपद-समय एल्गोरिथ्म&amp;rdquo; में परिवर्तित&lt;/strong> हो जाता है (यह AKS प्राइमलिटी परीक्षण की खोज से पहले भी ज्ञात एक महत्वपूर्ण तथ्य था)।&lt;/p>
&lt;p>दूसरे शब्दों में, रीमैन परिकल्पना (और इसका विस्तार) सीधे तौर पर इस बात की गारंटी देता है कि &amp;ldquo;क्या हम पूर्ण विश्वास के साथ और उच्च गति पर विशाल अभाज्य संख्याएँ उत्पन्न कर सकते हैं&amp;rdquo;, जो क्रिप्टोग्राफी की नींव उत्पन्न करने के लिए आवश्यक है।&lt;/p>
&lt;h3 id="72-गणनखड-एलगरदम-क-सथ-सबध">7.2. गुणनखंड एल्गोरिदम के साथ संबंध
&lt;/h3>&lt;p>क्रिप्टोग्राफी को क्रैक करने वाले एल्गोरिदम (जैसे कि जनरल नंबर फील्ड सीव) की कम्प्यूटेशनल जटिलता का मूल्यांकन करते समय, अभाज्य संख्याओं के वितरण का ज्ञान अपरिहार्य है। कई गुणनखंड एल्गोरिदम &amp;ldquo;सहज संख्याओं (Smooth numbers: वे संख्याएँ जिनमें केवल छोटे अभाज्य गुणनखंड होते हैं)&amp;rdquo; के वितरण पर निर्भर करते हैं।&lt;/p>
&lt;p>सहज संख्याएँ कितनी बार दिखाई देती हैं, इसका कड़ाई से मूल्यांकन करने के लिए, अभाज्य संख्याओं के वितरण की गहरी समझ आवश्यक है, और यहाँ भी, विश्लेषणात्मक संख्या सिद्धांत की तकनीकों का उपयोग किया जाता है जो सीधे ज़ेटा फ़ंक्शन और रीमैन परिकल्पना से जुड़ी हैं। यदि रीमैन परिकल्पना सिद्ध हो जाती है और अभाज्य वितरण की त्रुटि पूरी तरह से निर्धारित हो जाती है, तो गुणनखंड एल्गोरिदम की प्रदर्शन सीमाओं का अधिक सटीक आकलन करना संभव होगा।&lt;/p>
&lt;hr>
&lt;h1 id="8-यद-रमन-परकलपन-सदध-ह-जए-त-कय-करपटगरफ-टट-जएग">8. यदि रीमैन परिकल्पना सिद्ध हो जाए, तो क्या क्रिप्टोग्राफी टूट जाएगी?
&lt;/h1>&lt;p>एक शहरी किंवदंती की तरह, यह कभी-कभी कहा जाता है कि &amp;ldquo;यदि रीमैन परिकल्पना हल हो जाती है, तो RSA क्रिप्टोग्राफी तुरंत ढह जाएगी&amp;rdquo;, लेकिन &lt;strong>यह गणितीय रूप से गलत है&lt;/strong>।&lt;/p>
&lt;p>रीमैन परिकल्पना का प्रमाण अपने आप में कोई जादुई एल्गोरिथ्म नहीं बना देगा जो तुरंत गुणनखंड को नाटकीय रूप से तेज कर दे। ऐसा इसलिए है क्योंकि रीमैन परिकल्पना केवल अभाज्य संख्याओं के &amp;ldquo;स्थूल वितरण की नियमितता&amp;rdquo; के बारे में एक प्रमेय है, और यह हमें सीधे यह नहीं बताती है कि एक व्यक्तिगत संख्या $N$ को किस अभाज्य संख्या से विभाजित किया जा सकता है (स्थानीय गुण)।&lt;/p>
&lt;p>हालाँकि, इसका प्रभाव शून्य नहीं है।
ऐसा इसलिए है क्योंकि यह अत्यधिक संभव है कि रीमैन परिकल्पना को सिद्ध करने की प्रक्रिया में &lt;strong>&amp;ldquo;नए गणितीय उपकरण&amp;rdquo; और &amp;ldquo;अज्ञात विश्लेषणात्मक तरीके&amp;rdquo; खोजे जाएंगे&lt;/strong>। इतिहास को देखते हुए, जब फर्मेट का अंतिम प्रमेय और पोइंकारे अनुमान सिद्ध हुए थे, तो इस प्रक्रिया में विकसित नए सिद्धांतों ने पूरे गणित को एक बड़ी छलांग दी थी।&lt;/p>
&lt;p>यदि बीजीय ज्यामिति या गैर-विनिमेय ज्यामिति के अज्ञात तरीके स्थापित हो जाते हैं जो रीमैन ज़ेटा फ़ंक्शन के शून्यों के गुणों को पूरी तरह से हेरफेर कर सकते हैं, तो इस संभावना से इंकार नहीं किया जा सकता है कि इससे एक ग्राउंडब्रेकिंग गुणनखंडन एल्गोरिथ्म (उदाहरण के लिए, एक शास्त्रीय एल्गोरिथ्म जो बहुपद समय में कम्प्यूटेशनल जटिलता को कम करता है) की खोज हो सकती है। इस अर्थ में, क्रिप्टोग्राफर कभी भी रीमैन परिकल्पना के घटनाक्रमों से अपनी आँखें नहीं हटा सकते हैं।&lt;/p>
&lt;h3 id="कवटम-कपयटर-और-शर-क-एलगरथम">क्वांटम कंप्यूटर और शोर का एल्गोरिथ्म
&lt;/h3>&lt;p>क्रिप्टोग्राफी के लिए एक अधिक प्रत्यक्ष और यथार्थवादी खतरा रीमैन परिकल्पना का प्रमाण नहीं है बल्कि &lt;strong>क्वांटम कंप्यूटर&lt;/strong> है। 1994 में पीटर शोर (Peter Shor) द्वारा प्रकाशित &amp;ldquo;शोर का एल्गोरिथ्म&amp;rdquo; ने साबित कर दिया कि यदि पर्याप्त प्रदर्शन वाला क्वांटम कंप्यूटर है, तो गुणनखंडन को बहुपद समय में हल किया जा सकता है। इससे RSA क्रिप्टोग्राफी और एलिप्टिक कर्व क्रिप्टोग्राफी मौलिक रूप से टूट जाएगी।&lt;/p>
&lt;p>वर्तमान में, दुनिया भर में &amp;ldquo;पोस्ट-क्वांटम क्रिप्टोग्राफी (Post-Quantum Cryptography, PQC)&amp;rdquo; (जैसे लैटिस-आधारित क्रिप्टोग्राफी) का संक्रमण चल रहा है जिसे क्वांटम कंप्यूटर भी डिक्रिप्ट नहीं कर सकते हैं। अभाज्य संख्याओं पर निर्भर क्रिप्टोग्राफ़िक तकनीकें एक मायने में अपने स्वर्ण युग को समाप्त कर रही हैं, लेकिन स्वयं अभाज्य संख्याओं का गणितीय मूल्य कभी नष्ट नहीं होगा।&lt;/p>
&lt;hr>
&lt;h1 id="9-नषकरष-गणत-क-अमरतकरण-और-वसतवक-समज-क-चरह">9. निष्कर्ष: गणित के अमूर्तीकरण और वास्तविक समाज का चौराहा
&lt;/h1>&lt;div class="mermaid">graph TD
A["शुद्ध गणित की खोज"] --> B["रीमैन परिकल्पना का स्पष्टीकरण"]
B --> C["अभाज्य वितरण की पूर्ण समझ"]
C --> D["संख्या सिद्धांत और बीजीय ज्यामिति में तेजी से विकास"]
D -.-> E["नए गुणनखंडन एल्गोरिदम की संभावना"]
E -.-> F["क्रिप्टोग्राफी के सुरक्षा मूल्यांकन का अद्यतन"]
A --> G["अनुप्रयुक्त गणित और कंप्यूटर विज्ञान"]
G --> H["प्राइमलिटी टेस्टिंग और कुंजी जनरेशन की दक्षता"]
H --> F&lt;/div>
&lt;p>प्राचीन ग्रीस से अभाज्य संख्याओं की अथक खोज को रीमैन नाम के एक जीनियस द्वारा सम्मिश्र तल (ज़ेटा फ़ंक्शन के शून्य) पर एक सुंदर सिम्फनी में बदल दिया गया था। और आश्चर्यजनक रूप से, सदियों बाद, शुद्ध गणित के उस क्रिस्टल को इंटरनेट समाज की सुरक्षा की गारंटी देने के लिए सबसे मजबूत ढाल के रूप में लागू किया जा रहा है।&lt;/p>
&lt;p>रीमैन परिकल्पना एक ही समय में गणित की &amp;ldquo;अमूर्त सुंदरता&amp;rdquo; और &amp;ldquo;भौतिक दुनिया और वास्तविक समाज के लिए इसकी आश्चर्यजनक प्रयोज्यता&amp;rdquo; का प्रतीक है।&lt;/p>
&lt;p>जब गणित के इस विशाल पर्वत पर अंततः विजय प्राप्त कर ली जाएगी, जिस पर अभी तक कोई नहीं पहुंच पाया है, तो हम अभाज्य संख्याओं की लौकिक सच्चाई को पूरी तरह से समझ लेंगे, और साथ ही सूचना समाज की नींव पर एक नया दृष्टिकोण प्राप्त करेंगे। क्रिप्टोग्राफी सीखना स्वयं मानवता के ज्ञान के इतिहास का पता लगाने की यात्रा है।&lt;/p></description></item><item><title>【गणित व्याख्या】 हाई स्कूल के छात्रों के लिए RSA एन्क्रिप्शन तंत्र की सरल व्याख्या</title><link>http://kenji.blog/hi/p/rsa-encryption-math-explained-for-beginners/</link><pubDate>Fri, 11 Sep 2026 13:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/rsa-encryption-math-explained-for-beginners/</guid><description>&lt;img src="http://kenji.blog/p/rsa-encryption-math-explained-for-beginners/img/eyecatch.jpg" alt="Featured image of post 【गणित व्याख्या】 हाई स्कूल के छात्रों के लिए RSA एन्क्रिप्शन तंत्र की सरल व्याख्या" />&lt;p>इंटरनेट समाज की सुरक्षा को बुनियादी रूप से समर्थन देने वाली तकनीकों में से एक &amp;ldquo;RSA एन्क्रिप्शन&amp;rdquo; है। ऑनलाइन शॉपिंग में क्रेडिट कार्ड से भुगतान, दोस्तों के साथ सोशल मीडिया पर बातचीत, कंपनी की गोपनीय जानकारी का आदान-प्रदान, आदि—जिन संचारों का हम प्रतिदिन जाने-अनजाने उपयोग करते हैं, उनमें से अधिकांश इस RSA एन्क्रिप्शन या इसकी उत्तराधिकारी तकनीकों द्वारा सुरक्षित होते हैं।&lt;/p>
&lt;p>हालाँकि, &amp;ldquo;एन्क्रिप्शन&amp;rdquo; शब्द सुनकर आप शायद जासूसी फिल्मों में दिखने वाली जटिल एन्क्रिप्शन मशीनों या अति-उन्नत गणित की कल्पना करें जिसे केवल कुछ प्रतिभाशाली लोग ही समझ सकते हैं। यह सच है कि आधुनिक एन्क्रिप्शन सिद्धांत उन्नत गणित पर आधारित है, लेकिन &lt;strong>RSA एन्क्रिप्शन का मूल तंत्र इतना सरल है कि यदि आपको हाई स्कूल के गणित (पूर्णांकों के गुण, अभाज्य संख्याएँ, सर्वांगसमता आदि) का ज्ञान है, तो आप इसे पूरी तरह से समझ सकते हैं।&lt;/strong>&lt;/p>
&lt;p>इस लेख में, हम हाई स्कूल के गणितीय ज्ञान को शुरुआती बिंदु मानते हुए, चरण-दर-चरण विस्तार से बताएंगे कि RSA एन्क्रिप्शन किस गणितीय सिद्धांत पर काम करता है और इसे डिक्रिप्ट करना इतना कठिन क्यों है। जो लोग गणित में थोड़े कमज़ोर हैं, उन्हें भी समझ में आ सके, इसके लिए हम ठोस उदाहरणों के साथ इसे स्पष्ट रूप से समझाएंगे।&lt;/p>
&lt;hr>
&lt;h2 id="1-सममत-कज-एनकरपशन-और-सरवजनक-कज-एनकरपशन">1. सममित कुंजी एन्क्रिप्शन और सार्वजनिक कुंजी एन्क्रिप्शन
&lt;/h2>&lt;p>RSA एन्क्रिप्शन के गणितीय तंत्र में जाने से पहले, आइए एन्क्रिप्शन की बुनियादी अवधारणाओं को समझ लें। एन्क्रिप्शन विधियों को मोटे तौर पर दो प्रकारों में बांटा जा सकता है: &amp;ldquo;सममित कुंजी एन्क्रिप्शन&amp;rdquo; और &amp;ldquo;सार्वजनिक कुंजी एन्क्रिप्शन&amp;rdquo;।&lt;/p>
&lt;h3 id="11-सममत-कज-एनकरपशन-परणल-क-समए">1.1 सममित कुंजी एन्क्रिप्शन प्रणाली की सीमाएँ
&lt;/h3>&lt;p>प्राचीन काल से उपयोग की जाने वाली अधिकांश एन्क्रिप्शन प्रणालियाँ &amp;ldquo;सममित कुंजी एन्क्रिप्शन प्रणाली&amp;rdquo; कहलाती हैं। यह एक ऐसी प्रणाली है जिसमें &lt;strong>&amp;ldquo;एन्क्रिप्शन (संदेश को गुप्त सिफरटेक्स्ट में बदलना)&amp;rdquo; और &amp;ldquo;डिक्रिप्शन (सिफरटेक्स्ट को मूल संदेश में वापस लाना)&amp;rdquo; के लिए एक ही कुंजी का उपयोग किया जाता है।&lt;/strong>&lt;/p>
&lt;p>उदाहरण के लिए, मान लें कि ऐलिस, बॉब को एक गुप्त पत्र भेजना चाहती है। ऐलिस एक पैडलॉक (सममित कुंजी) का उपयोग करके पत्र को एक बक्से में बंद कर देती है। बॉब को उस बक्से को खोलने के लिए उसी कुंजी की आवश्यकता होगी जिसका ऐलिस ने उपयोग किया था।&lt;/p>
&lt;p>इस प्रणाली में एक बड़ी समस्या है: &amp;ldquo;कुंजी वितरण समस्या&amp;rdquo;। जब दूर बैठे ऐलिस और बॉब पहली बार संवाद करते हैं, तो वे बिना किसी के द्वारा सुने गए कुंजी को कैसे साझा कर सकते हैं? यदि मेल द्वारा भेजे जाते समय किसी तीसरे पक्ष द्वारा कुंजी चुरा ली जाती है, तो उसके बाद के सभी एन्क्रिप्टेड संचार लीक हो जाएंगे।&lt;/p>
&lt;h3 id="12-एक-करतकर-आवषकर-सरवजनक-कज-एनकरपशन-परणल">1.2 एक क्रांतिकारी आविष्कार: &amp;ldquo;सार्वजनिक कुंजी एन्क्रिप्शन प्रणाली&amp;rdquo;
&lt;/h3>&lt;p>कुंजी वितरण की इस समस्या को हल करने के लिए &amp;ldquo;सार्वजनिक कुंजी एन्क्रिप्शन प्रणाली&amp;rdquo; का आविष्कार किया गया था। RSA एन्क्रिप्शन भी इसी का एक प्रकार है।&lt;/p>
&lt;p>सार्वजनिक कुंजी एन्क्रिप्शन प्रणाली में, &lt;strong>&amp;ldquo;एन्क्रिप्ट करने के लिए कुंजी (सार्वजनिक कुंजी)&amp;rdquo; और &amp;ldquo;डिक्रिप्ट करने के लिए कुंजी (निजी कुंजी)&amp;rdquo; नामक दो अलग-अलग कुंजियों&lt;/strong> का उपयोग किया जाता है।&lt;/p>
&lt;ol>
&lt;li>प्राप्तकर्ता बॉब &amp;ldquo;सार्वजनिक कुंजी&amp;rdquo; और &amp;ldquo;निजी कुंजी&amp;rdquo; का एक जोड़ा बनाता है।&lt;/li>
&lt;li>बॉब &amp;ldquo;सार्वजनिक कुंजी&amp;rdquo; को दुनिया भर में प्रकाशित करता है (कोई भी इसे प्राप्त कर सकता है)।&lt;/li>
&lt;li>प्रेषक ऐलिस, बॉब की &amp;ldquo;सार्वजनिक कुंजी&amp;rdquo; का उपयोग करके संदेश को एन्क्रिप्ट करती है और उसे भेज देती है।&lt;/li>
&lt;li>एन्क्रिप्टेड संदेश को केवल &amp;ldquo;निजी कुंजी&amp;rdquo; से ही डिक्रिप्ट किया जा सकता है जो केवल बॉब के पास है।&lt;/li>
&lt;/ol>
&lt;p>यदि इसे पैडलॉक से समझा जाए, तो बॉब बहुत सारे &amp;ldquo;खुले हुए पैडलॉक (सार्वजनिक कुंजी)&amp;rdquo; बनाता है और उन्हें दुनिया भर में बाँट देता है। ऐलिस बॉब के लिए संदेश को बक्से में डालती है, और बॉब का जो पैडलॉक उसे मिला है, उससे बक्से को बंद कर देती है। एक बार ताला बंद हो जाने के बाद, इसे केवल &amp;ldquo;मास्टर कुंजी (निजी कुंजी)&amp;rdquo; से ही खोला जा सकता है जो बॉब के पास है। भले ही कोई बीच में बक्सा चुरा ले, वह उसे नहीं खोल सकता क्योंकि उसके पास मास्टर कुंजी नहीं है।&lt;/p>
&lt;div class="mermaid">graph TD
A["ऐलिस (प्रेषक)"] --> B["प्लेनटेक्स्ट (संदेश)"]
B --> C["एन्क्रिप्शन प्रक्रिया"]
D["बॉब की सार्वजनिक कुंजी (कोई भी प्राप्त कर सकता है)"] --> C
C --> E["इंटरनेट के माध्यम से भेजा गया: सिफरटेक्स्ट (एन्क्रिप्टेड)"]
E --> F["डिक्रिप्शन प्रक्रिया"]
G["बॉब की निजी कुंजी (केवल बॉब के पास)"] --> F
F --> H["पुनर्प्राप्त प्लेनटेक्स्ट (संदेश)"]
H --> I["बॉब (प्राप्तकर्ता)"]&lt;/div>
&lt;p>इस क्रांतिकारी प्रणाली को साकार करने के लिए, किसी प्रकार के &lt;strong>&amp;ldquo;एक-तरफ़ा फ़ंक्शन (वन-वे गणितीय पहेली)&amp;rdquo;&lt;/strong> की आवश्यकता होती है, जिसका अर्थ है कि सार्वजनिक कुंजी के साथ एन्क्रिप्ट करना आसान है, लेकिन निजी कुंजी के बिना इसे डिक्रिप्ट करना बिल्कुल असंभव है। उस पहेली के हिस्से के रूप में जिस चीज़ पर ध्यान दिया गया, वह हमारी परिचित &amp;ldquo;अभाज्य संख्याएँ&amp;rdquo; थीं।&lt;/p>
&lt;hr>
&lt;h2 id="2-rsa-एनकरपशन-क-समरथन-करन-वल-गणतय-आधर-1-अभजय-सखयए-और-अभजय-गणनखडन">2. RSA एन्क्रिप्शन का समर्थन करने वाला गणितीय आधार 1: अभाज्य संख्याएँ और अभाज्य गुणनखंडन
&lt;/h2>&lt;p>RSA एन्क्रिप्शन की सुरक्षा इस गणितीय तथ्य पर आधारित है कि &lt;strong>&amp;ldquo;विशाल संख्याओं का अभाज्य गुणनखंडन करना बहुत कठिन है।&amp;rdquo;&lt;/strong>&lt;/p>
&lt;h3 id="21-अभजय-सखयए-कय-ह">2.1 अभाज्य संख्याएँ क्या हैं?
&lt;/h3>&lt;p>अभाज्य संख्याएँ वे &amp;ldquo;1 से बड़ी प्राकृत संख्याएँ हैं जो केवल 1 और स्वयं से विभाज्य हैं।&amp;rdquo;
उदाहरण: $2, 3, 5, 7, 11, 13, 17, 19, 23...$&lt;/p>
&lt;p>अभाज्य संख्याएँ सभी पूर्णांकों के &amp;ldquo;परमाणुओं&amp;rdquo; की तरह हैं। किसी भी प्राकृत संख्या को अभाज्य संख्याओं के गुणा के रूप में तोड़ा जा सकता है। इसे &lt;strong>अभाज्य गुणनखंडन&lt;/strong> कहा जाता है। उदाहरण के लिए, $60 = 2^2 \times 3 \times 5$, यह सर्वविदित है कि यदि हम क्रम को अनदेखा करें तो गुणनखंडन केवल एक ही अद्वितीय तरीके से किया जा सकता है (अंकगणित का मूलभूत प्रमेय)।&lt;/p>
&lt;h3 id="22-अभजय-गणनखडन-क-कठनई-एक-तरफ-फकशन">2.2 अभाज्य गुणनखंडन की कठिनाई (एक-तरफ़ा फ़ंक्शन)
&lt;/h3>&lt;p>यहाँ जो बात महत्वपूर्ण है वह है विषमता: &lt;strong>&amp;ldquo;गुणा करना आसान है, लेकिन अभाज्य गुणनखंडन करना कठिन है।&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>उदाहरण के लिए, निम्नलिखित दो अभाज्य संख्याओं के गुणनफल की गणना अपने दिमाग में करने का प्रयास करें।
$11 \times 13 = ?$
यह आसान है। उत्तर $143$ है।&lt;/p>
&lt;p>तो, इस संख्या के बारे में क्या खयाल है?
$323$ का अभाज्य गुणनखंडन करें।
कैसा लगा? इसमें थोड़ा समय लगना चाहिए। (उत्तर $17 \times 19$ है)।&lt;/p>
&lt;p>यदि संख्याएँ छोटी हैं, तो मनुष्य भी किसी तरह गणना कर सकते हैं, लेकिन जब संख्याएँ बड़ी हो जाती हैं, Math तो कंप्यूटर का उपयोग करने पर भी गणना अत्यधिक कठिन हो जाती है। वर्तमान में मुख्यधारा के RSA एन्क्रिप्शन में, हम एक संख्या $N = p \times q$ का उपयोग करते हैं, जो दो अविश्वसनीय रूप से विशाल अभाज्य संख्याओं $p$ और $q$ को गुणा करके बनती है, जो 2048 बिट्स (दशमलव में लगभग 600 अंक) की होती हैं।&lt;/p>
&lt;p>दिए गए दो विशाल अभाज्य संख्याओं $p$ और $q$ के लिए, $N$ की गणना करना कंप्यूटर के लिए पल भर (मिलीसेकंड से भी कम) का काम है। हालाँकि, यदि केवल $N$ दिया गया हो, तो मूल $p$ और $q$ को वापस खोजना इतना समय लेने वाला है कि इसे वर्तमान के सबसे तेज़ सुपरकंप्यूटरों का उपयोग करके भी खरबों वर्षों में हल नहीं किया जा सकता।&lt;/p>
&lt;p>यही &lt;strong>&amp;ldquo;कम्प्यूटेशनल विषमता (एक तरफा आसान, दूसरी तरफा कठिन)&amp;rdquo;&lt;/strong> सार्वजनिक कुंजी और निजी कुंजी के बीच संबंध बनाने की नींव बनाती है।&lt;/p>
&lt;hr>
&lt;h2 id="3-rsa-एनकरपशन-क-समरथन-करन-वल-गणतय-आधर-2-सरवगसमत-मडयलर-अकगणत">3. RSA एन्क्रिप्शन का समर्थन करने वाला गणितीय आधार 2: सर्वांगसमता (मॉड्यूलर अंकगणित)
&lt;/h2>&lt;p>RSA एन्क्रिप्शन में गणना साधारण जोड़ या गुणा की तरह नहीं होती जहाँ संख्याएँ अनंत रूप से बड़ी हो जाती हैं, बल्कि यह किसी संख्या से विभाजित करने पर बचे &amp;ldquo;शेषफल&amp;rdquo; की दुनिया में होती है। इसे &lt;strong>सर्वांगसमता (मॉड्यूलर अंकगणित)&lt;/strong> कहा जाता है।&lt;/p>
&lt;h3 id="31-घड-क-गणत">3.1 घड़ी का गणित
&lt;/h3>&lt;p>मॉड्यूलर अंकगणित की तुलना अक्सर &amp;ldquo;घड़ी के गणित&amp;rdquo; से की जाती है। मान लें कि अभी 10 बज रहे हैं, तो 5 घंटे बाद क्या समय होगा? $10 + 5 = 15$ बजे, लेकिन एक सामान्य 12-घंटे की घड़ी में हम उत्तर देते हैं &amp;ldquo;3 बजे&amp;rdquo;। ऐसा इसलिए है क्योंकि 15 को 12 से भाग देने पर शेषफल 3 आता है।&lt;/p>
&lt;p>गणित की दुनिया में, इसे इस प्रकार लिखा जाता है:
&lt;/p>
$$ 15 \equiv 3 \pmod{12} $$
&lt;p>
इसे ऐसे पढ़ा जाता है: &amp;ldquo;15 और 3, मॉड्युलो 12 के सर्वांगसम हैं (यानी 12 से भाग देने पर शेषफल समान है)।&amp;rdquo;&lt;/p>
&lt;h3 id="32-सरवगसमत-क-मल-गण">3.2 सर्वांगसमता के मूल गुण
&lt;/h3>&lt;p>सर्वांगसमता में कुछ बहुत ही उपयोगी गुण होते हैं जो समीकरणों ($=$) के समान होते हैं। मान लीजिए कि भाजक $N$ है।
जब $a \equiv b \pmod N$ और $c \equiv d \pmod N$ हो, तो निम्नलिखित सत्य है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>जोड़:&lt;/strong> $a + c \equiv b + d \pmod N$&lt;/li>
&lt;li>&lt;strong>घटाव:&lt;/strong> $a - c \equiv b - d \pmod N$&lt;/li>
&lt;li>&lt;strong>गुणा:&lt;/strong> $a \times c \equiv b \times d \pmod N$&lt;/li>
&lt;li>&lt;strong>घातांक:&lt;/strong> $a^k \equiv b^k \pmod N$ ($k$ एक प्राकृत संख्या है)&lt;/li>
&lt;/ol>
&lt;p>&amp;ldquo;घातांक&amp;rdquo; का गुण विशेष रूप से महत्वपूर्ण है। इसका मतलब है कि &lt;strong>&amp;ldquo;शेषफल का घातांक, घातांक के शेषफल के बराबर है।&amp;rdquo;&lt;/strong>
उदाहरण के लिए, मान लें कि हम $7^{100}$ को $5$ से विभाजित करने पर शेषफल ज्ञात करना चाहते हैं। 7 को 100 बार गुणा करना और फिर उसे 5 से भाग देना बहुत मुश्किल काम है, लेकिन सर्वांगसमता के गुणों का उपयोग करके, चूँकि $7 \equiv 2 \pmod 5$ है, यह $7^{100} \equiv 2^{100} \pmod 5$ हो जाता है, जिससे गणना को काफी आसान किया जा सकता है। एन्क्रिप्शन की दुनिया में, यह गुण अपरिहार्य है क्योंकि हम बहुत बड़ी संख्याओं के घातांक से निपटते हैं।&lt;/p>
&lt;hr>
&lt;h2 id="4-rsa-एनकरपशन-क-समरथन-करन-वल-गणतय-आधर-3-यलर-क-टशट-फकशन-और-यलर-क-परमय">4. RSA एन्क्रिप्शन का समर्थन करने वाला गणितीय आधार 3: यूलर का टॉशेंट फ़ंक्शन और यूलर का प्रमेय
&lt;/h2>&lt;p>यहाँ से जादुई गणित शुरू होता है जो RSA एन्क्रिप्शन का मूल है। &amp;ldquo;यूलर का प्रमेय&amp;rdquo; सामने आता है, जो &amp;ldquo;फर्मेट के छोटे प्रमेय&amp;rdquo; का एक सामान्यीकरण है।&lt;/p>
&lt;h3 id="41-यलर-क-टशट-फकशन-phin">4.1 यूलर का टॉशेंट फ़ंक्शन $\phi(N)$
&lt;/h3>&lt;p>यूलर का टॉशेंट फ़ंक्शन ($\phi$ फ़ंक्शन) एक ऐसा फ़ंक्शन है जो किसी भी प्राकृत संख्या $N$ के लिए, &lt;strong>&amp;ldquo;1 से $N$ तक की उन प्राकृत संख्याओं की गिनती देता है, जो $N$ के साथ सह-अभाज्य (जिनका महत्तम समापवर्तक 1 है) हैं।&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>आइए कुछ उदाहरण देखें:&lt;/p>
&lt;ul>
&lt;li>$\phi(5)$: 1, 2, 3, 4, 5 में से, 5 के साथ सह-अभाज्य 1, 2, 3, 4 हैं, जो कुल 4 हैं। इसलिए $\phi(5) = 4$।&lt;/li>
&lt;li>$\phi(6)$: 1, 2, 3, 4, 5, 6 में से, 6 के साथ सह-अभाज्य केवल 1, 5 हैं, जो कुल 2 हैं। इसलिए $\phi(6) = 2$।&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>【अभाज्य संख्याओं के लिए विशेष गुण】&lt;/strong>
जब $p$ एक अभाज्य संख्या है, तो 1 से $p-1$ तक की सभी संख्याएँ $p$ के साथ सह-अभाज्य होती हैं। इसलिए,
&lt;/p>
$$ \phi(p) = p - 1 $$
&lt;p>
होता है।&lt;/p>
&lt;p>&lt;strong>【अभाज्य संख्याओं के गुणनफल के लिए विशेष गुण】&lt;/strong>
दो अलग-अलग अभाज्य संख्याओं $p$ और $q$ के लिए, यदि हम $N = p \times q$ मान लें, तो $\phi(N)$ को निम्नलिखित गणना द्वारा आसानी से निकाला जा सकता है:
&lt;/p>
$$ \phi(N) = \phi(p) \times \phi(q) = (p - 1)(q - 1) $$
&lt;p>
यह गुण RSA एन्क्रिप्शन के &amp;ldquo;गुप्त पिछले दरवाजे (ट्रैपडोर)&amp;rdquo; के रूप में कार्य करता है। एक व्यक्ति जो $p$ और $q$ (कुंजी का निर्माता) जानता है, वह पल भर में $\phi(N)$ की गणना कर सकता है, लेकिन कोई तीसरा पक्ष जो केवल $N$ जानता है, वह $\phi(N)$ नहीं खोज सकता, जब तक कि वह $N$ का अभाज्य गुणनखंडन न कर ले।&lt;/p>
&lt;h3 id="42-यलर-क-परमय">4.2 यूलर का प्रमेय
&lt;/h3>&lt;p>लियोनहार्ड यूलर ने इस $\phi(N)$ का उपयोग करके निम्नलिखित सुंदर प्रमेय सिद्ध किया:&lt;/p>
&lt;p>&lt;strong>यूलर का प्रमेय:&lt;/strong>
जब पूर्णांक $a$ और $N$ सह-अभाज्य होते हैं, तो निम्नलिखित सर्वांगसमता सत्य होती है:
&lt;/p>
$$ a^{\phi(N)} \equiv 1 \pmod N $$
&lt;p>यह एक आश्चर्यजनक गुण है कि &amp;ldquo;यदि हम किसी संख्या $a$ को $\phi(N)$ बार गुणा करते हैं और $N$ से विभाजित करते हैं, तो शेषफल हमेशा $1$ होगा।&amp;rdquo; (जब $N$ एक अभाज्य संख्या $p$ है, तो यह $a^{p-1} \equiv 1 \pmod p$ बन जाता है, जिसे फर्मेट का छोटा प्रमेय कहा जाता है)।&lt;/p>
&lt;p>आइए इस यूलर के प्रमेय को थोड़ा संशोधित करें। दोनों पक्षों को फिर से $a$ से गुणा करें:
&lt;/p>
$$ a^{\phi(N) + 1} \equiv a \pmod N $$
&lt;p>इसके अलावा, किसी भी पूर्णांक $k$ के लिए, $a^{k \cdot \phi(N)}$ भी $1^k = 1$ होगा, इसलिए निम्नलिखित समीकरण सत्य है:
&lt;/p>
$$ a^{k \cdot \phi(N) + 1} \equiv a \pmod N $$
&lt;p>यह समीकरण ही वह मूल सिद्धांत है जो RSA एन्क्रिप्शन के इस जादू को काम करने देता है: &lt;strong>&amp;ldquo;जब आप इसे एन्क्रिप्ट करते हैं और फिर डिक्रिप्ट करते हैं, तो यह अपनी मूल अवस्था में वापस आ जाता है।&amp;rdquo;&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 id="5-rsa-एनकरपशन-एलगरथम-कज-नरमण-एनकरपशन-और-डकरपशन-क-चरण">5. RSA एन्क्रिप्शन एल्गोरिथम: कुंजी निर्माण, एन्क्रिप्शन और डिक्रिप्शन के चरण
&lt;/h2>&lt;p>अब जब हमारे पास बुनियादी ज्ञान है, तो आइए अंततः RSA एन्क्रिप्शन के विशिष्ट चरणों को देखें। RSA एन्क्रिप्शन मोटे तौर पर तीन चरणों में बंटा हुआ है: &amp;ldquo;1. कुंजी निर्माण&amp;rdquo;, &amp;ldquo;2. एन्क्रिप्शन&amp;rdquo;, और &amp;ldquo;3. डिक्रिप्शन&amp;rdquo;।&lt;/p>
&lt;div class="mermaid">flowchart TD
A1["1. अभाज्य संख्याएँ p, q चुनें"] --> A2["N = p × q की गणना करें"]
A1 --> A3["φ(N) = (p-1)(q-1) की गणना करें"]
A3 --> A4["φ(N) के साथ सह-अभाज्य e चुनें"]
A3 --> A5["ऐसे d की गणना करें कि e × d ≡ 1 (mod φ(N)) हो"]
A2 --> A6["सार्वजनिक कुंजी (N, e)"]
A4 --> A6
A5 --> A7["निजी कुंजी d"]
B1["2. प्लेनटेक्स्ट संदेश M"] --> B2["C ≡ M^e (mod N) की गणना करें"]
A6 -.-> B2
B2 --> B3["सिफरटेक्स्ट C भेजें"]
B3 --> C1["3. प्राप्त सिफरटेक्स्ट C"]
C1 --> C2["M ≡ C^d (mod N) की गणना करें"]
A7 -.-> C2
C2 --> C3["मूल प्लेनटेक्स्ट संदेश M प्राप्त करें"]&lt;/div>
&lt;h3 id="51-कज-नरमण-key-generation">5.1 कुंजी निर्माण (Key Generation)
&lt;/h3>&lt;p>प्राप्तकर्ता बॉब, अपने लिए एक &amp;ldquo;सार्वजनिक कुंजी&amp;rdquo; और एक &amp;ldquo;निजी कुंजी&amp;rdquo; बनाता है।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>अभाज्य संख्याओं का चयन:&lt;/strong> दो बड़ी अभाज्य संख्याएँ $p$ और $q$ यादृच्छिक रूप से चुनें।&lt;/li>
&lt;li>&lt;strong>$N$ की गणना:&lt;/strong> $N = p \times q$ की गणना करें। यह $N$ सार्वजनिक किया जाएगा।&lt;/li>
&lt;li>&lt;strong>$\phi(N)$ की गणना:&lt;/strong> यूलर फ़ंक्शन $\phi(N) = (p - 1)(q - 1)$ की गणना करें। यह बॉब का गुप्त नंबर है।&lt;/li>
&lt;li>&lt;strong>सार्वजनिक कुंजी $e$ का चयन:&lt;/strong> एक ऐसा पूर्णांक $e$ चुनें जो $1 &lt; e &lt; \phi(N)$ हो और $\phi(N)$ के साथ सह-अभाज्य हो।&lt;/li>
&lt;li>&lt;strong>निजी कुंजी $d$ की गणना:&lt;/strong> एक ऐसा पूर्णांक $d$ खोजें जो निम्नलिखित शर्त को पूरा करता हो:
$$ e \times d \equiv 1 \pmod{\phi(N)} $$
दूसरे शब्दों में, यह एक ऐसी संख्या $d$ है जहाँ &amp;ldquo;$e \times d$ को $\phi(N)$ से भाग देने पर शेषफल $1$ होता है।&amp;rdquo;&lt;/li>
&lt;/ol>
&lt;p>इसके साथ ही कुंजियों की तैयारी पूरी हो जाती है।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>सार्वजनिक कुंजी:&lt;/strong> $(N, e)$ का जोड़ा। इसे पूरी दुनिया के लिए सार्वजनिक किया जाता है।&lt;/li>
&lt;li>&lt;strong>निजी कुंजी:&lt;/strong> $d$। इसे किसी को भी नहीं बताया जाता।&lt;/li>
&lt;/ul>
&lt;h3 id="52-एनकरपशन-encryption">5.2 एन्क्रिप्शन (Encryption)
&lt;/h3>&lt;p>मान लें कि ऐलिस, बॉब को एक गुप्त संदेश $M$ भेजना चाहती है। ($M$ पाठ को संख्यात्मक रूप में परिवर्तित करने से बनता है, और हम मान कर चलते हैं कि $0 \le M &lt; N$ है)। ऐलिस बॉब की सार्वजनिक कुंजी $(N, e)$ का उपयोग करके निम्नानुसार गणना करती है:&lt;/p>
$$ C \equiv M^e \pmod N $$
&lt;p>&amp;ldquo;संदेश $M$ को $e$ की घात तक उठाएँ, और $N$ से भाग देने पर शेषफल $C$ प्राप्त करें।&amp;rdquo; यह $C$ एन्क्रिप्टेड संदेश (सिफरटेक्स्ट) है।&lt;/p>
&lt;h3 id="53-डकरपशन-decryption">5.3 डिक्रिप्शन (Decryption)
&lt;/h3>&lt;p>बॉब को सिफरटेक्स्ट $C$ प्राप्त होता है। बॉब अपनी निजी कुंजी $d$ का उपयोग करके निम्नानुसार गणना करता है:&lt;/p>
$$ M \equiv C^d \pmod N $$
&lt;p>यदि आप &amp;ldquo;सिफरटेक्स्ट $C$ को $d$ की घात तक बढ़ाते हैं, और $N$ से भाग देने पर शेषफल&amp;rdquo; की गणना करते हैं, तो आश्चर्यजनक रूप से मूल संदेश $M$ पुनर्प्राप्त हो जाता है!&lt;/p>
&lt;hr>
&lt;h2 id="6-डकरपशन-इस-मल-अवसथ-म-वपस-कय-लत-ह-गणतय-परमण">6. डिक्रिप्शन इसे मूल अवस्था में वापस क्यों लाता है? (गणितीय प्रमाण)
&lt;/h2>&lt;p>आप सोच रहे होंगे, &amp;ldquo;$C$ की घात $d$ करने से, यह मूल $M$ में कैसे वापस आ जाता है?&amp;rdquo; यहीं पर पहले वर्णित &amp;ldquo;यूलर का प्रमेय&amp;rdquo; अपनी शक्ति दिखाता है।&lt;/p>
&lt;p>आइए डिक्रिप्शन के सूत्र $C^d \pmod N$ में एन्क्रिप्शन के सूत्र $C = M^e$ को प्रतिस्थापित करें:
&lt;/p>
$$ C^d \equiv (M^e)^d \equiv M^{ed} \pmod N $$
&lt;p>यहाँ, कुंजी निर्माण के चरण 5 को याद करें। जब बॉब ने $d$ बनाया, तो उसने इसे इस तरह चुना कि $e \times d \equiv 1 \pmod{\phi(N)}$ हो। इसका मतलब है कि &amp;ldquo;$ed$, $\phi(N)$ के गुणज में $1$ जोड़ने से बनी संख्या है।&amp;rdquo; एक पूर्णांक $k$ का उपयोग करके, इसे इस प्रकार लिखा जा सकता है:
&lt;/p>
$$ ed = k \cdot \phi(N) + 1 $$
&lt;p>इसे घातांक वाले भाग में रखें और घातांक के नियमों का उपयोग करके इसे हल करें:
&lt;/p>
$$ M^{ed} = M^{k \cdot \phi(N) + 1} = M^{k \cdot \phi(N)} \times M^1 = (M^{\phi(N)})^k \times M $$
&lt;p>यहाँ, यदि हम मान लें कि संदेश $M$ और $N$ सह-अभाज्य हैं, तो &lt;strong>यूलर के प्रमेय&lt;/strong> से, $M^{\phi(N)} \equiv 1 \pmod N$ होता है।
&lt;/p>
$$ (M^{\phi(N)})^k \times M \equiv 1^k \times M \equiv M \pmod N $$
&lt;p>इसलिए, निम्नलिखित समीकरण पूरी तरह से सत्य होता है:
&lt;/p>
$$ C^d \equiv M \pmod N $$
&lt;p>ऐलिस $d$ को नहीं जानती, और छिपकर बातें सुनने वाला भी $d$ को नहीं जानता, इसलिए केवल बॉब, जिसके पास $d$ है, $C$ से $M$ को निकाल सकता है।&lt;/p>
&lt;hr>
&lt;h2 id="7-एक-ठस-उदहरण-आइए-छट-अभजय-सखयओ-क-उपयग-करक-हथ-स-rsa-क-गणन-कर">7. एक ठोस उदाहरण: आइए छोटी अभाज्य संख्याओं का उपयोग करके हाथ से RSA की गणना करें
&lt;/h2>&lt;p>आइए वास्तव में छोटी संख्याओं (अभाज्य संख्याओं) का उपयोग करके ऐलिस से बॉब तक एन्क्रिप्टेड संचार का प्रयास करें।&lt;/p>
&lt;p>&lt;strong>【बॉब का कुंजी निर्माण चरण】&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>दो अभाज्य संख्याएँ चुनें, $p=11$ और $q=13$।&lt;/li>
&lt;li>$N = 11 \times 13 = 143$ की गणना करें।&lt;/li>
&lt;li>$\phi(N) = (11 - 1) \times (13 - 1) = 10 \times 12 = 120$ की गणना करें।&lt;/li>
&lt;li>एक सार्वजनिक कुंजी $e$ चुनें जो $\phi(N)=120$ के साथ सह-अभाज्य हो। यहाँ हम $e=7$ का उपयोग करेंगे।&lt;/li>
&lt;li>निजी कुंजी $d$ ज्ञात करें। ऐसा $d$ खोजें कि $7 \times d \equiv 1 \pmod{120}$ हो।
समीकरण $7d = 120k + 1$ में, जब $k=6$ होता है, तो मान $721$ हो जाता है, और $721 \div 7 = 103$ होता है।
इसलिए, $d = 103$ हो जाता है।&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>सार्वजनिक कुंजी: $(N=143, e=7)$&lt;/li>
&lt;li>निजी कुंजी: $d=103$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>【ऐलिस का एन्क्रिप्शन चरण】&lt;/strong>
मान लीजिए कि ऐलिस संदेश $M = 9$ भेजना चाहती है।
सूत्र: $C \equiv 9^7 \pmod{143}$
$9^7 = 4,782,969$। जब इसे 143 से भाग दिया जाता है, तो भागफल 33447 और शेषफल 48 होता है।
तो एन्क्रिप्टेड संदेश $C = 48$ हो गया।&lt;/p>
&lt;p>&lt;strong>【बॉब का डिक्रिप्शन चरण】&lt;/strong>
बॉब को एन्क्रिप्टेड संदेश $C = 48$ मिलता है और वह इसे डिक्रिप्ट करने के लिए अपनी निजी कुंजी $d = 103$ का उपयोग करता है।
सूत्र: $M \equiv 48^{103} \pmod{143}$
यदि आप कैलकुलेटर पर &lt;code>(48 ** 103) % 143&lt;/code> चलाते हैं, तो परिणाम आश्चर्यजनक रूप से &amp;ldquo;&lt;strong>9&lt;/strong>&amp;rdquo; आएगा! बॉब सफलतापूर्वक मूल संदेश प्राप्त करने में सक्षम हो गया।&lt;/p>
&lt;hr>
&lt;h2 id="8-नज-कज-d-कस-जञत-कर-वसतरत-यकलडयन-एलगरथम">8. निजी कुंजी $d$ कैसे ज्ञात करें: विस्तारित यूक्लिडियन एल्गोरिथम
&lt;/h2>&lt;p>मैन्युअल गणना के उदाहरण में, हमने अनुमान लगाकर $k$ का मान खोजा और $d=103$ प्राप्त किया, लेकिन जब संख्याएँ सैकड़ों अंकों की हो जाती हैं, तो यह विधि असंभव है। वास्तविक प्रोग्रामों में, &lt;strong>&amp;ldquo;विस्तारित यूक्लिडियन एल्गोरिथम&amp;rdquo;&lt;/strong> नामक एल्गोरिथम का उपयोग किया जाता है।&lt;/p>
&lt;p>$7d \equiv 1 \pmod{120}$ को हल करने का मतलब ऐसे पूर्णांक $d, y$ ज्ञात करना है जो $7d + 120y = 1$ को संतुष्ट करते हों। यूक्लिडियन एल्गोरिथम को उल्टे क्रम में लागू करके, इसकी गणना व्यवस्थित तरीके से की जा सकती है।&lt;/p>
&lt;ol>
&lt;li>$120 \div 7 = 17$ शेषफल $1$&lt;/li>
&lt;li>इसे पुनः व्यवस्थित करने पर, $1 = 120 - 17 \times 7$&lt;/li>
&lt;li>यानी, $-17 \times 7 \equiv 1 \pmod{120}$&lt;/li>
&lt;/ol>
&lt;p>मॉड्युलो 120 की दुनिया में $-17$ का अर्थ $120 - 17 = 103$ के समान ही है। इसलिए, $d = 103$ पल भर में मिल जाता है। यह विधि बहुत तेज़ी से गणना कर सकती है, चाहे संख्या कितनी भी विशाल क्यों न हो।&lt;/p>
&lt;hr>
&lt;h2 id="9-rsa-एनकरपशन-क-एक-और-चहर-डजटल-हसतकषर">9. RSA एन्क्रिप्शन का एक और चेहरा: डिजिटल हस्ताक्षर
&lt;/h2>&lt;p>RSA एन्क्रिप्शन के बारे में सबसे अच्छी बात यह है कि सार्वजनिक और निजी कुंजियों की भूमिकाओं को उलट कर इसे &lt;strong>&amp;ldquo;डिजिटल हस्ताक्षर&amp;rdquo;&lt;/strong> के रूप में भी इस्तेमाल किया जा सकता है।&lt;/p>
&lt;p>एन्क्रिप्शन में, प्रक्रिया थी &amp;ldquo;सार्वजनिक कुंजी के साथ एन्क्रिप्ट करें $\Rightarrow$ निजी कुंजी के साथ डिक्रिप्ट करें&amp;rdquo;।
डिजिटल हस्ताक्षर में, प्रक्रिया है &amp;ldquo;निजी कुंजी के साथ एन्क्रिप्ट करें $\Rightarrow$ सार्वजनिक कुंजी के साथ डिक्रिप्ट करें&amp;rdquo;।&lt;/p>
&lt;div class="mermaid">flowchart TD
A1["1. ऐलिस अपनी निजी कुंजी से हस्ताक्षर बनाती है"] --> A2["S ≡ M^d (mod N)"]
A2 --> A3["संदेश M और हस्ताक्षर S भेजें"]
A3 --> B1["2. बॉब सार्वजनिक कुंजी के साथ हस्ताक्षर सत्यापित करता है"]
B1 --> B2["M' ≡ S^e (mod N) की गणना करें"]
B2 --> B3["जांचें कि क्या M' और M मेल खाते हैं"]&lt;/div>
&lt;p>ऐलिस अपनी निजी कुंजी $d$ का उपयोग करके संदेश को बदलती है (यह हस्ताक्षर $S$ है) और इसे बॉब को भेजती है। बॉब सत्यापन गणना करने के लिए ऐलिस की सार्वजनिक कुंजी $e$ का उपयोग करता है। यदि गणना का परिणाम मूल संदेश से मेल खाता है, तो यह एक साथ साबित करता है कि &amp;ldquo;यह डेटा केवल ऐलिस की निजी कुंजी से ही बनाया जा सकता था&amp;rdquo; और &amp;ldquo;संदेश से रास्ते में छेड़छाड़ नहीं की गई है।&amp;rdquo;&lt;/p>
&lt;hr>
&lt;h2 id="10-एक-परगरम-क-सथ-rsa-एनकरपशन-क-अनभव-करन">10. एक प्रोग्राम के साथ RSA एन्क्रिप्शन का अनुभव करना
&lt;/h2>&lt;p>हाथ से घातांक की गणना करना कठिन है, लेकिन यदि आप Python का उपयोग करते हैं, तो इसे लागू करना बहुत आसान है। नीचे दिया गया Python कोड आपको RSA एन्क्रिप्शन के मुख्य तर्क का अनुभव करने की अनुमति देता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;महत्तम समापवर्तक ज्ञात करें&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;निजी कुंजी d ज्ञात करें (Python 3.8+ के बिल्ट-इन फ़ंक्शन का उपयोग करके)&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. कुंजी निर्माण&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">N&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;सार्वजनिक कुंजी: (N=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, e=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">), निजी कुंजी: d=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. एन्क्रिप्शन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;एन्क्रिप्टेड संदेश: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. डिक्रिप्शन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">decrypted_message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;डिक्रिप्टेड संदेश: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted_message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>चूँकि Python का &lt;code>pow(base, exp, mod)&lt;/code> फ़ंक्शन आंतरिक रूप से एक तेज़ एल्गोरिथम का उपयोग करता है जिसे &amp;ldquo;पुनरावृत्त वर्ग विधि (Exponentiation by squaring)&amp;rdquo; कहा जाता है, यह एक पल में गणना पूरी कर लेता है, भले ही संख्याएँ सैकड़ों अंकों की हों।&lt;/p>
&lt;hr>
&lt;h2 id="11-नषकरष-और-भवषय-क-एनकरपशन-तकनक">11. निष्कर्ष और भविष्य की एन्क्रिप्शन तकनीक
&lt;/h2>&lt;p>हमने हाई स्कूल के गणितीय ज्ञान के आधार पर RSA एन्क्रिप्शन के तंत्र का खुलासा किया है।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>अभाज्य गुणनखंडन की कठिनाई:&lt;/strong> $p \times q = N$ खोजना आसान है, लेकिन $N$ से $p, q$ खोजना बहुत मुश्किल है।&lt;/li>
&lt;li>&lt;strong>सर्वांगसमता और यूलर का प्रमेय:&lt;/strong> $a^{\phi(N)} \equiv 1 \pmod N$ नियम के माध्यम से, &amp;ldquo;एक निश्चित संख्या की घात तक बढ़ाने पर मूल अवस्था में वापस आने&amp;rdquo; का जादुई ट्रैपडोर पूरा हो जाता है।&lt;/li>
&lt;li>&lt;strong>सार्वजनिक और निजी कुंजियाँ:&lt;/strong> कोई भी एन्क्रिप्ट कर सकता है, लेकिन केवल वैध प्राप्तकर्ता ही इसे डिक्रिप्ट कर सकता है।&lt;/li>
&lt;/ol>
&lt;p>वर्तमान में उपयोग किए जाने वाले RSA एन्क्रिप्शन में 600 से अधिक अंकों का $N$ होता है, और दुनिया के सभी सुपर कंप्यूटरों को एक साथ काम में लगा दिया जाए, तो भी इसके अभाज्य गुणनखंडन में ब्रह्मांड की आयु से अधिक समय लगेगा। हालाँकि, यदि हाल ही में शोध किए जा रहे &amp;ldquo;क्वांटम कंप्यूटर&amp;rdquo; भविष्य में व्यावहारिक उपयोग में आते हैं, तो ऐसी संभावना है कि यह अभाज्य गुणनखंडन &amp;ldquo;शोर के एल्गोरिथम&amp;rdquo; द्वारा पल भर में हल हो जाएगा। इस कारण से, दुनिया भर में &amp;ldquo;क्वांटम-प्रतिरोधी एन्क्रिप्शन&amp;rdquo; विकसित करने के लिए तेज़ गति से काम चल रहा है, जिसे क्वांटम कंप्यूटर भी डिक्रिप्ट नहीं कर सकते।&lt;/p>
&lt;p>उन्नत गणित जिसे अक्सर &amp;ldquo;बेकार&amp;rdquo; माना जाता है, वास्तव में हमारे दैनिक जीवन को उसकी जड़ों से सुरक्षित रखता है। RSA एन्क्रिप्शन इस तरह के गणित की गहराई और सुंदरता सिखाने वाली सबसे बेहतरीन शिक्षण सामग्री है। हमें उम्मीद है कि इस लेख के माध्यम से आप एन्क्रिप्शन और गणित के आकर्षण को थोड़ा भी महसूस कर पाए होंगे।&lt;/p></description></item></channel></rss>