<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cryptography on kenji.blog</title><link>http://kenji.blog/hi/categories/cryptography/</link><description>Recent content in Cryptography 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/categories/cryptography/index.xml" rel="self" type="application/rss+xml"/><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>ज़ीरो-नॉलेज प्रूफ़ (ZKP) कैसे काम करता है और Web3・सुरक्षा में इसके नवीनतम अनुप्रयोग</title><link>http://kenji.blog/hi/p/zero-knowledge-proofs-zkp-web3-security/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/zero-knowledge-proofs-zkp-web3-security/</guid><description>&lt;img src="http://kenji.blog/p/zero-knowledge-proofs-zkp-web3-security/img/eyecatch.jpg" alt="Featured image of post ज़ीरो-नॉलेज प्रूफ़ (ZKP) कैसे काम करता है और Web3・सुरक्षा में इसके नवीनतम अनुप्रयोग" />&lt;h2 id="परसतवन">प्रस्तावना
&lt;/h2>&lt;p>आधुनिक डिजिटल समाज में, डेटा गोपनीयता और स्केलेबिलिटी दो सबसे महत्वपूर्ण मुद्दे बन गए हैं। व्यक्तिगत जानकारी लीक होने और इसके दुरुपयोग के बढ़ते जोखिम के बीच, ऐसी तकनीक की अत्यधिक मांग है जो &amp;ldquo;अपनी जानकारी दूसरों को बताए बिना यह साबित कर सके कि आप उस जानकारी को रखते हैं&amp;rdquo;। इसे संभव बनाने वाली तकनीक &lt;strong>शून्य-ज्ञान प्रमाण (Zero-Knowledge Proof: ZKP)&lt;/strong> है।&lt;/p>
&lt;p>शून्य-ज्ञान प्रमाण 1980 के दशक में पहली बार Shafi Goldwasser, Silvio Micali, और Charles Rackoff द्वारा प्रस्तावित एक क्रिप्टोग्राफ़िक अवधारणा है, जो लंबे समय तक केवल सैद्धांतिक अनुसंधान तक सीमित रही। हालांकि, ब्लॉकचेन तकनीक और Web3 के उदय से स्थिति पूरी तरह बदल गई है। ZKP एक &amp;ldquo;जादू की छड़ी&amp;rdquo; के रूप में उभरा है जो एक ही समय में Ethereum जैसे पब्लिक ब्लॉकचेन द्वारा सामना की जाने वाली स्केलेबिलिटी समस्या (प्रोसेसिंग क्षमता की सीमा) और गोपनीयता समस्या (सभी ट्रांज़ैक्शन का सार्वजनिक होना) को हल करता है।&lt;/p>
&lt;p>इस लेख में, हम शून्य-ज्ञान प्रमाण की बुनियादी अवधारणाओं से लेकर वर्तमान में मुख्यधारा में चल रहे &lt;strong>zk-SNARKs&lt;/strong> और &lt;strong>zk-STARKs&lt;/strong> के गहरे गणितीय और क्रिप्टोग्राफिक तंत्रों, और ZK-Rollups एवं विकेंद्रीकृत पहचान (DID) जैसे नवीनतम Web3 और सुरक्षा अनुप्रयोगों तक बहुत विस्तृत और तकनीकी गहराई के साथ चर्चा करेंगे।&lt;/p>
&lt;hr>
&lt;h2 id="शनय-जञन-परमण-zkp-कय-ह">शून्य-ज्ञान प्रमाण (ZKP) क्या है?
&lt;/h2>&lt;p>शून्य-ज्ञान प्रमाण (ZKP) एक ऐसे प्रोटोकॉल को संदर्भित करता है जिसमें सिद्ध करने वाला (Prover) सत्यापनकर्ता (Verifier) को यह साबित करता है कि कोई कथन सत्य है, लेकिन &amp;ldquo;वह उस कथन के सत्य होने के तथ्य के अलावा कोई भी अन्य जानकारी संचारित नहीं करता है&amp;rdquo;।&lt;/p>
&lt;h3 id="zkp-दवर-पर-क-जन-वल-3-आवशयकतए">ZKP द्वारा पूरी की जाने वाली 3 आवश्यकताएं
&lt;/h3>&lt;p>ZKP के रूप में स्थापित होने के लिए, निम्नलिखित 3 विशेषताओं को सख्ती से पूरा करना आवश्यक है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>पूर्णता (Completeness)&lt;/strong>
यदि कथन सत्य है, और प्रोवर और वेरिफायर दोनों सही ढंग से प्रोटोकॉल का पालन करते हैं, तो वेरिफायर को बहुत अधिक संभावना के साथ उस प्रमाण को स्वीकार (Accept) करना होगा।&lt;/li>
&lt;li>&lt;strong>सत्यता (Soundness)&lt;/strong>
यदि कथन असत्य है, तो चाहे प्रोवर कितना भी शक्तिशाली और दुर्भावनापूर्ण क्यों न हो, वेरिफायर को धोखा देकर प्रमाण स्वीकार करवाना (एक नगण्य संभावना को छोड़कर) असंभव है।&lt;/li>
&lt;li>&lt;strong>शून्य-ज्ञान (Zero-Knowledge)&lt;/strong>
यदि कथन सत्य है, तो वेरिफायर प्रमाण प्रक्रिया से &amp;ldquo;कथन सत्य है&amp;rdquo; के तथ्य के अलावा कोई भी जानकारी प्राप्त नहीं कर सकता है। वेरिफायर के दृष्टिकोण से, यह गणितीय परिभाषा द्वारा साबित होता है कि प्रमाण प्रक्रिया का अनुकरण (simulate) करना संभव है (एक सिमुलेटर मौजूद है)।&lt;/li>
&lt;/ol>
&lt;h3 id="इटरएकटव-परमण-और-गर-इटरएकटव-परमण">इंटरएक्टिव प्रमाण और गैर-इंटरएक्टिव प्रमाण
&lt;/h3>&lt;p>ZKP के दो प्रकार होते हैं: &lt;strong>इंटरएक्टिव (संवादात्मक) प्रमाण&lt;/strong>, जिसमें प्रोवर और वेरिफायर कई बार संवाद करते हैं, और &lt;strong>गैर-इंटरएक्टिव (असंवादात्मक) प्रमाण&lt;/strong>, जिसमें प्रोवर केवल एक बार प्रमाण डेटा भेजता है और प्रक्रिया समाप्त हो जाती है।&lt;/p>
&lt;h4 id="इटरएकटव-परमण-interactive-zkp">इंटरएक्टिव प्रमाण (Interactive ZKP)
&lt;/h4>&lt;p>शुरुआती ZKP को इंटरएक्टिव प्रोटोकॉल के रूप में डिज़ाइन किया गया था। प्रसिद्ध &amp;ldquo;अलीबाबा की गुफा&amp;rdquo; की कहानी इसका एक उदाहरण है। एक सामान्य प्रोटोकॉल का प्रवाह इस प्रकार है:&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Prover as "Prover (प्रमाणक)"
participant Verifier as "Verifier (सत्यापनकर्ता)"
Note over Prover, Verifier: "इंटरएक्टिव प्रमाण प्रोटोकॉल का मूल प्रवाह"
Prover->>Verifier: "1. कमिटमेंट भेजें (Commitment)"
Verifier->>Prover: "2. रैंडम चैलेंज भेजें (Challenge)"
Prover->>Verifier: "3. रिस्पांस की गणना करें और भेजें (Response)"
Note over Verifier: "रिस्पांस का सत्यापन करें (Verification)"
Verifier-->>Prover: "4. स्वीकारें या अस्वीकारें (Accept / Reject)"
Note over Prover, Verifier: "※ सटीकता बढ़ाने के लिए, इसे दर्जनों बार दोहराएं"&lt;/div>
&lt;p>यह विधि शक्तिशाली है, लेकिन इसके लिए वेरिफायर का ऑनलाइन होना आवश्यक है, जिससे ब्लॉकचेन जैसी एसिंक्रोनस (asynchronous) वितरित प्रणालियों (distributed systems) पर लागू करना असुविधाजनक हो जाता है। ब्लॉकचेन में, हर किसी को किसी भी समय पिछले प्रमाणों को सत्यापित करने में सक्षम होना चाहिए।&lt;/p>
&lt;h4 id="फएट-शमर-रपतरण-fiat-shamir-heuristic-और-गर-इटरएकटव-बनन">फिएट-शमीर रूपांतरण (Fiat-Shamir Heuristic) और गैर-इंटरएक्टिव बनाना
&lt;/h4>&lt;p>इंटरएक्टिव प्रमाणों को गैर-इंटरएक्टिव शून्य-ज्ञान प्रमाणों (NIZK) में बदलने की एक क्रांतिकारी तकनीक &lt;strong>फिएट-शमीर रूपांतरण (Fiat-Shamir Heuristic)&lt;/strong> है।&lt;/p>
&lt;p>वेरिफायर द्वारा भेजे गए &amp;ldquo;रैंडम चैलेंज&amp;rdquo; के बजाय, प्रोवर अपने स्वयं के कमिटमेंट और सार्वजनिक जानकारी के हैश मान का उपयोग करके &amp;ldquo;छद्म-रैंडम चैलेंज&amp;rdquo; उत्पन्न करता है। यदि हम यह मान लें कि क्रिप्टोग्राफिक हैश फ़ंक्शन (जैसे SHA-256 या Keccak) रैंडम ओरेकल (random oracle) के रूप में कार्य करते हैं, तो प्रोवर चुनौतियों का पहले से अनुमान या हेरफेर नहीं कर सकता है। इस प्रकार इंटरएक्टिव प्रमाण के समान सुरक्षा बनाए रखते हुए, एक संदेश भेजकर प्रमाण पूरा किया जा सकता है।&lt;/p>
&lt;hr>
&lt;h2 id="zk-snarks-क-तकनक-ववरण">zk-SNARKs का तकनीकी विवरण
&lt;/h2>&lt;p>वर्तमान में ZKP में सबसे व्यापक रूप से इस्तेमाल किया जाने वाला &lt;strong>zk-SNARKs&lt;/strong> (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) है। जैसा कि नाम से ही स्पष्ट है, यह शून्य-ज्ञान (zk) रखता है, प्रमाण का आकार बहुत छोटा है, सत्यापन बहुत तेज़ (Succinct) है, और यह गैर-इंटरएक्टिव (Non-Interactive) ज्ञान का तर्क (Argument of Knowledge) है।&lt;/p>
&lt;p>zk-SNARKs का आधार उन्नत बीजीय ज्यामिति (algebraic geometry) और क्रिप्टोग्राफी है। यह प्रोग्राम निष्पादन और गणना को विशिष्ट बहुपद (polynomial) समीकरणों के सत्यापन में बदल देता है।&lt;/p>
&lt;h3 id="1-अकगणतय-सरकट-arithmetic-circuit-और-r1cs-rank-1-constraint-system-म-रपतरण">1. अंकगणितीय सर्किट (Arithmetic Circuit) और R1CS (Rank-1 Constraint System) में रूपांतरण
&lt;/h3>&lt;p>सबसे पहले, किसी भी गणना जिसे आप साबित करना चाहते हैं (एल्गोरिदम या स्मार्ट कॉन्ट्रैक्ट का लॉजिक) उसे एक &lt;strong>अंकगणितीय सर्किट (Arithmetic Circuit)&lt;/strong> में परिवर्तित किया जाता है जिसमें जोड़ (addition) और गुणा (multiplication) गेट होते हैं।&lt;/p>
&lt;p>इसके बाद, इस अंकगणितीय सर्किट को &lt;strong>R1CS (Rank-1 Constraint System)&lt;/strong> नामक मैट्रिक्स समीकरणों के सेट में परिवर्तित किया जाता है। R1CS चर (variable) वेक्टर $x$ के लिए ऐसे मैट्रिसेस $A, B, C$ को खोजने की समस्या है जो निम्नलिखित बाधा को पूरा करते हैं:&lt;/p>
$$ (A \cdot x) \circ (B \cdot x) = C \cdot x $$
&lt;p>यहाँ, $\circ$ हैडामार्ड उत्पाद (Hadamard product) (तत्व-वार गुणा) को दर्शाता है। यह बाधा सुनिश्चित करती है कि सर्किट में सभी लॉजिक गेट (विशेष रूप से गुणन गेट) सही ढंग से गणना किए गए हैं।&lt;/p>
&lt;h3 id="2-qap-quadratic-arithmetic-program-म-रपतरण">2. QAP (Quadratic Arithmetic Program) में रूपांतरण
&lt;/h3>&lt;p>चूँकि R1CS में अनगिनत मैट्रिक्स बाधाएं मौजूद हैं, इसलिए उन्हें व्यक्तिगत रूप से सत्यापित करना बहुत अक्षम है। इसलिए, लैग्रेंज इंटरपोलेशन (Lagrange interpolation) का उपयोग करके, इन बाधाओं को एक एकल बहुपद समीकरण (polynomial equation) में संकुचित (compress) किया जाता है। यही &lt;strong>QAP (Quadratic Arithmetic Program)&lt;/strong> है।&lt;/p>
&lt;p>QAP में परिवर्तित करके, साबित की जाने वाली समस्या इस प्रश्न में बदल जाती है: &amp;ldquo;क्या कोई विशिष्ट बहुपद $P(x)$, किसी अन्य ज्ञात बहुपद $Z(x)$ द्वारा पूरी तरह से विभाजित हो जाता है?&amp;rdquo;&lt;/p>
$$ P(x) = L(x) \cdot R(x) - O(x) $$
&lt;p>यहाँ, $L(x), R(x), O(x)$ क्रमशः मैट्रिसेस $A, B, C$ की पंक्तियों (rows) के अनुरूप बहुपदों के संयोजन हैं। यदि प्रोवर सही उत्तर (Witness) जानता है, तो $P(x)$ के प्रत्येक मूल (root) पर मान 0 होगा, जिससे $P(x)$ लक्ष्य बहुपद $Z(x)$ को एक गुणनखंड (factor) के रूप में रखेगा। अर्थात्, एक ऐसा बहुपद $H(x)$ मौजूद है जिससे निम्नलिखित समीकरण सत्य होता है:&lt;/p>
$$ P(x) = H(x) \cdot Z(x) $$
&lt;p>वेरिफायर एक यादृच्छिक (random) गुप्त बिंदु (secret point) $s$ पर यह जाँच कर सकता है कि क्या समीकरण $P(s) = H(s) \cdot Z(s)$ सत्य है, जिससे वह तुरंत सत्यापित कर सकता है कि पूरी गणना सही ढंग से की गई थी। यह &amp;ldquo;Succinct (संक्षिप्तता)&amp;rdquo; का रहस्य है।&lt;/p>
&lt;h3 id="3-इलपटक-करव-करपटगरफ-elliptic-curve-cryptography-और-पयरग-bilinear-pairings">3. इलिप्टिक कर्व क्रिप्टोग्राफी (Elliptic Curve Cryptography) और पेयरिंग (Bilinear Pairings)
&lt;/h3>&lt;p>हालाँकि, यदि वेरिफायर गुप्त बिंदु $s$ को जानता है, तो प्रोवर एक जाली बहुपद गढ़ सकता है और समीकरण को पूरा कर सकता है (सत्यता का पतन)। इसलिए, बिना किसी को $s$ बताए गणना करना आवश्यक है (होमोमोर्फिक एन्क्रिप्शन का उपयोग करके)।&lt;/p>
&lt;p>इसे &lt;strong>इलिप्टिक कर्व पेयरिंग (Bilinear Pairings)&lt;/strong> के उपयोग से महसूस किया जाता है।
पेयरिंग $e$ एक विशेष फ़ंक्शन है जो दो एन्क्रिप्टेड मानों से एक मान की गणना कर सकता है जो उनके गुणनफल (product) के एन्क्रिप्शन के बराबर है।&lt;/p>
$$ e(g_1^a, g_2^b) = e(g_1, g_2)^{ab} $$
&lt;p>प्रोवर, बिना $s$ को जाने, $s$ की घातों (powers) के एन्क्रिप्टेड मानों (इसे CRS: Common Reference String कहा जाता है) का उपयोग करके बहुपद $P(s)$ और $H(s)$ के एन्क्रिप्टेड मानों की गणना करता है। वेरिफायर पेयरिंग फ़ंक्शन का उपयोग करके यह सत्यापित करता है कि एन्क्रिप्टेड मानों के साथ $P(s) = H(s) \cdot Z(s)$ का संबंध सत्य है या नहीं।&lt;/p>
&lt;h3 id="4-टरसटड-सटअप-trusted-setup">4. ट्रस्टेड सेटअप (Trusted Setup)
&lt;/h3>&lt;p>zk-SNARKs (विशेष रूप से शुरुआती Groth16 जैसी प्रणाली) की सबसे बड़ी कमजोरी यह है कि गुप्त बिंदु $s$ उत्पन्न करने की प्रक्रिया के लिए एक तथाकथित &lt;strong>ट्रस्टेड सेटअप (Trusted Setup)&lt;/strong> की आवश्यकता होती है। यदि $s$ का निर्माता इसके मान को नष्ट किए बिना बनाए रखता है, तो वह मनमाना जाली प्रमाण उत्पन्न कर सकता है (Toxic Waste समस्या)।&lt;/p>
&lt;p>इसे रोकने के लिए, Multi-Party Computation (MPC) का उपयोग करके &amp;ldquo;Ceremony&amp;rdquo; नामक एक अनुष्ठान किया जाता है। कई प्रतिभागी रैंडमनेस प्रदान करने के लिए सहयोग करते हैं, और यदि कम से कम एक प्रतिभागी ईमानदारी से अपने यादृच्छिक मान को नष्ट कर देता है, तो पूरी प्रणाली की सुरक्षा बनी रहती है। हालाँकि, इस निर्भरता को खत्म करने के लिए वर्षों से शोध जारी है।&lt;/p>
&lt;hr>
&lt;h2 id="zk-starks-क-तकनक-ववरण">zk-STARKs का तकनीकी विवरण
&lt;/h2>&lt;p>ट्रस्टेड सेटअप पर निर्भरता और क्वांटम कंप्यूटर द्वारा इलिप्टिक कर्व क्रिप्टोग्राफी को तोड़ने के जोखिम के समाधान के रूप में &lt;strong>zk-STARKs&lt;/strong> (Zero-Knowledge Scalable Transparent Argument of Knowledge) सामने आया।&lt;/p>
&lt;p>Eli Ben-Sasson और अन्य लोगों द्वारा विकसित STARKs, &amp;ldquo;Transparent (पारदर्शिता)&amp;rdquo; नाम के अनुरूप बिना किसी ट्रस्टेड सेटअप की आवश्यकता के काम करता है, और &amp;ldquo;Scalable (स्केलेबिलिटी)&amp;rdquo; के अनुरूप, गणना की मात्रा बढ़ने पर भी प्रमाण का आकार और सत्यापन समय कुशलता से बनाए रखता है।&lt;/p>
&lt;h3 id="1-पलनमयल-कमटमट-polynomial-commitment-और-fri-परटकल">1. पॉलीनोमियल कमिटमेंट (Polynomial Commitment) और FRI प्रोटोकॉल
&lt;/h3>&lt;p>zk-STARKs इलिप्टिक कर्व क्रिप्टोग्राफी के बजाय &lt;strong>केवल हैश फ़ंक्शन&lt;/strong> पर अपनी सुरक्षा का आधार रखता है। इसलिए, इसमें पोस्ट-क्वांटम क्रिप्टोग्राफी (क्वांटम-सुरक्षित क्रिप्टोग्राफी) के गुण हैं।&lt;/p>
&lt;p>गणना के सत्यापन को AIR (Algebraic Intermediate Representation) नामक प्रारूप में परिवर्तित किया जाता है, जिसके बाद एक-आयामी (1D) या बहु-आयामी (multidimensional) बहुपदों (polynomials) के गुणों का उपयोग करके सत्यापन किया जाता है। STARKs का मूल &lt;strong>FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity)&lt;/strong> प्रोटोकॉल है।&lt;/p>
&lt;p>FRI प्रोटोकॉल एक ऐसी तकनीक है जो यह सत्यापित करती है कि &amp;ldquo;क्या कोई फलन (function) एक विशिष्ट डिग्री (degree) वाले बहुपद के काफी करीब (Proximity) है&amp;rdquo;। प्रोवर मर्कल ट्री (Merkle Tree) की पत्तियों (leaves) के रूप में बहुपद मानों को कमिट करता है (Polynomial Commitment)।&lt;/p>
&lt;div class="mermaid">graph TD
Root["Merkle Root (कमिटमेंट)"] --> Node0["Node 0"]
Root --> Node1["Node 1"]
Node0 --> Leaf0["P(x_0)"]
Node0 --> Leaf1["P(x_1)"]
Node1 --> Leaf2["P(x_2)"]
Node1 --> Leaf3["P(x_3)"]&lt;/div>
&lt;p>वेरिफायर प्रोवर से कुछ रैंडम बिंदुओं (points) का खुलासा करने का अनुरोध करता है, और मर्कल प्रूफ (Merkle Proof) का उपयोग करके यह पुष्टि करता है कि वे कमिटमेंट में शामिल हैं। इसे बार-बार (recursively) दोहराकर, यह बहुत अधिक संभावना के साथ गारंटी देता है कि मूल बहुपद की डिग्री (degree) वास्तव में कम है।&lt;/p>
&lt;h3 id="zk-snarks-और-zk-starks-क-तलन">zk-SNARKs और zk-STARKs की तुलना
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">विशेषता&lt;/th>
&lt;th style="text-align:left">zk-SNARKs&lt;/th>
&lt;th style="text-align:left">zk-STARKs&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>क्रिप्टोग्राफिक धारणा&lt;/strong>&lt;/td>
&lt;td style="text-align:left">इलिप्टिक कर्व, पेयरिंग&lt;/td>
&lt;td style="text-align:left">कोलिजन-रेसिस्टेंट हैश फ़ंक्शन&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>ट्रस्टेड सेटअप&lt;/strong>&lt;/td>
&lt;td style="text-align:left">आवश्यक (Plonk जैसे कुछ यूनिवर्सल हैं)&lt;/td>
&lt;td style="text-align:left">अनावश्यक (Transparent)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>क्वांटम-प्रतिरोध&lt;/strong>&lt;/td>
&lt;td style="text-align:left">नहीं&lt;/td>
&lt;td style="text-align:left">हाँ&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>प्रमाण का आकार&lt;/strong>&lt;/td>
&lt;td style="text-align:left">बहुत छोटा (~200 Byte)&lt;/td>
&lt;td style="text-align:left">थोड़ा बड़ा (कुछ दर्जनों KB)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>प्रमाण उत्पन्न करने की कम्प्यूटेशनल लागत&lt;/strong>&lt;/td>
&lt;td style="text-align:left">उच्च&lt;/td>
&lt;td style="text-align:left">SNARKs की तुलना में अपेक्षाकृत कम&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>सत्यापन लागत (Gas फीस)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">बहुत कम (स्थिर)&lt;/td>
&lt;td style="text-align:left">कम (लॉगरिदमिक रूप से बढ़ता है)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>हाल के वर्षों में, Plonk और Halo2 जैसे &amp;ldquo;SNARKs जिन्हें ट्रस्टेड सेटअप की आवश्यकता नहीं होती, या केवल एक बार की आवश्यकता होती है&amp;rdquo; उभरे हैं, और SNARKs तथा STARKs के बीच की सीमा धीरे-धीरे धुंधली होती जा रही है, लेकिन मूलभूत गणितीय दृष्टिकोण का अंतर अभी भी महत्वपूर्ण है।&lt;/p>
&lt;hr>
&lt;h2 id="शनय-जञन-परमण-क-web3-और-सरकष-म-नवनतम-अनपरयग">शून्य-ज्ञान प्रमाण के Web3 और सुरक्षा में नवीनतम अनुप्रयोग
&lt;/h2>&lt;p>सिद्धांत से व्यवहार की ओर बढ़ते हुए, ZKP अब Web3 और साइबर सुरक्षा में सबसे आगे क्रांति ला रहा है।&lt;/p>
&lt;h3 id="1-zk-rollups-दवर-ethereum-क-अलटमट-सकलग">1. ZK-Rollups द्वारा Ethereum की अल्टीमेट स्केलिंग
&lt;/h3>&lt;p>Ethereum जैसे L1 (लेयर 1) ब्लॉकचेन विकेंद्रीकरण (decentralization) और सुरक्षा पर इतना अधिक जोर देते हैं कि वे स्केलेबिलिटी के मामले में एक बड़ी बाधा (trilemma) का सामना करते हैं। इसका समाधान करने वाला अंतिम L2 (लेयर 2) सॉल्यूशन &lt;strong>ZK-Rollups&lt;/strong> है।&lt;/p>
&lt;p>ZK-Rollups में, हजारों ट्रांज़ैक्शन को ऑफ-चेन (L2) संसाधित किया जाता है, और एक एकल &amp;ldquo;ZKP (Validity Proof)&amp;rdquo; उत्पन्न किया जाता है जो यह दर्शाता है कि वे सभी सही ढंग से निष्पादित (execute) किए गए थे। L1 चेन पर स्मार्ट कॉन्ट्रैक्ट को केवल इस प्रमाण को सत्यापित करना होता है।&lt;/p>
&lt;div class="mermaid">flowchart LR
Users["Users (Tx भेजना)"] --> Sequencer["Sequencer (Tx संग्रह और निष्पादन)"]
Sequencer --> Prover["Prover (ZKP जनरेशन)"]
Sequencer --> L1Contract["L1 स्मार्ट कॉन्ट्रैक्ट (Tx डेटा का प्रकाशन)"]
Prover --> L1Contract["ZKP (प्रमाण) सबमिट करना"]
L1Contract --> Verify["सत्यापन और स्थिति अद्यतन"]&lt;/div>
&lt;p>ZK-Rollups का सबसे बड़ा लाभ यह है कि Optimistic Rollups (जैसे Arbitrum या Optimism) के विपरीत, इसमें फ्रॉड प्रूफ (Fraud Proof) के लिए कोई चैलेंज अवधि (आमतौर पर 7 दिन) की आवश्यकता नहीं होती है। चूँकि क्रिप्टोग्राफिक रूप से सटीकता की गारंटी होती है, इसलिए प्रमाण के सत्यापित होते ही L1 से धन की निकासी (Finality) पूरी हो जाती है। वर्तमान में, zkSync, Starknet, Scroll, और Polygon zkEVM जैसे प्रोजेक्ट्स के बीच भयंकर प्रतिस्पर्धा चल रही है, और EVM (Ethereum Virtual Machine) के अनुकूल &lt;strong>zkEVM&lt;/strong> के विकास से इकोसिस्टम तेज़ी से बढ़ रहा है।&lt;/p>
&lt;h3 id="2-परइवस-परजरवग-आइडटट-zkp-for-identity">2. प्राइवेसी-प्रिजर्विंग आइडेंटिटी (ZKP for Identity)
&lt;/h3>&lt;p>डिजिटल दुनिया में व्यक्तिगत प्रमाणीकरण (authentication) का तरीका भी ZKP से मौलिक रूप से बदल जाएगा।
उदाहरण के लिए, &amp;ldquo;क्या आप 18 वर्ष से अधिक आयु के हैं?&amp;rdquo; प्रश्न के लिए, पारंपरिक प्रणालियों में आपको अपना ड्राइविंग लाइसेंस या पासपोर्ट प्रस्तुत करना पड़ता है, जो दूसरे पक्ष को आपका नाम या पता जैसी अनावश्यक व्यक्तिगत जानकारी भी प्रदान कर देता है।&lt;/p>
&lt;p>ZKP के साथ, सार्वजनिक संस्थानों द्वारा जारी डिजिटल प्रमाणपत्रों (Verifiable Credentials) के आधार पर, &lt;strong>केवल इस तथ्य को गणितीय रूप से प्रमाणित करना संभव है&lt;/strong> कि &amp;ldquo;मेरी जन्म तिथि के आधार पर, मैं वर्तमान तिथि पर 18 वर्ष से अधिक आयु का हूँ।&amp;rdquo; वेरिफायर को केवल प्रमाणपत्र के हस्ताक्षर और ZKP को सत्यापित करने की आवश्यकता है, और उसे उपयोगकर्ता की जन्म तिथि या पहचान जानने की आवश्यकता नहीं है।&lt;/p>
&lt;p>Worldcoin जैसे Proof of Personhood (मानवता का प्रमाण) प्रोजेक्ट्स में, आईरिस (iris) डेटा को सीधे संग्रहीत और साझा करने के बजाय ZKP का उपयोग किया जाता है, ताकि केवल यह प्रमाणित किया जा सके कि व्यक्ति &amp;ldquo;एक अद्वितीय इंसान&amp;rdquo; है।&lt;/p>
&lt;h3 id="3-गपनय-समरट-कनटरकट-और-एटरपरइज-उपयग">3. गोपनीय स्मार्ट कॉन्ट्रैक्ट और एंटरप्राइज़ उपयोग
&lt;/h3>&lt;p>सार्वजनिक ब्लॉकचेन की यह विशेषता कि &amp;ldquo;सभी डेटा सार्वजनिक रूप से दिखाई देते हैं&amp;rdquo;, उन कंपनियों के लिए एक बड़ी बाधा थी जो ब्लॉकचेन पर गोपनीय लेनदेन या आपूर्ति श्रृंखला (supply chain) डेटा को संभालना चाहते हैं।&lt;/p>
&lt;p>ZKP तकनीक (जैसे Aleo या Aztec जैसे गोपनीयता-केंद्रित नेटवर्क) का उपयोग करके, ट्रांज़ैक्शन के इनपुट, आउटपुट, और यहां तक कि निष्पादित किए जा रहे स्मार्ट कॉन्ट्रैक्ट के लॉजिक को एन्क्रिप्टेड रखा जा सकता है, जबकि पब्लिक चेन पर केवल स्थिति अपडेट की सटीकता दर्ज की जाती है। यह DeFi (विकेंद्रीकृत वित्त) में फ्रंट-रनिंग (MEV) को रोकने में मदद करता है, और पब्लिक चेन की उच्च सुरक्षा का आनंद लेते हुए कंपनियों के बीच गोपनीय कंसोर्टियम नेटवर्क के निर्माण को सक्षम बनाता है।&lt;/p>
&lt;hr>
&lt;h2 id="zkp-क-भवषय-क-चनतय-और-सभवनए">ZKP की भविष्य की चुनौतियाँ और संभावनाएँ
&lt;/h2>&lt;p>ZKP निश्चित रूप से अगली पीढ़ी की मूलभूत तकनीक है, लेकिन इसमें अभी भी कुछ चुनौतियां बाकी हैं:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>प्रमाण उत्पन्न करने की कम्प्यूटेशनल लागत और हार्डवेयर एक्सेलेरेशन&lt;/strong>
ZKP उत्पन्न करने के लिए बड़े पैमाने पर बहुपद गणना, FFT (Fast Fourier Transform), और MSM (Multi-Scalar Multiplication) की आवश्यकता होती है। वर्तमान में, प्रमाण निर्माण में तेज़ी लाने के लिए समर्पित हार्डवेयर (FPGA या ASIC) विकसित करने और &lt;strong>ZKP माइनिंग&lt;/strong> (Prover Network) को विकसित करने के लिए बड़े पैमाने पर अनुसंधान चल रहा है।&lt;/li>
&lt;li>&lt;strong>मानकीकरण (Standardization) और डेवलपर अनुभव (DX) में सुधार&lt;/strong>
Circom, Cairo, Noir, और Leo जैसी कई विशेष भाषाएँ ZKP सर्किट लिखने के लिए उभरी हैं। इन भाषाओं को एकीकृत करने वाले मानकों का विकास, और ऐसे कंपाइलर जो मौजूदा Rust या C++ से स्वचालित रूप से ZKP सर्किट उत्पन्न कर सकें, सामान्य सॉफ्टवेयर इंजीनियरों द्वारा ZKP को अपनाने की कुंजी होंगे।&lt;/li>
&lt;/ol>
&lt;h2 id="नषकरष">निष्कर्ष
&lt;/h2>&lt;p>शून्य-ज्ञान प्रमाण (ZKP) मात्र &amp;ldquo;क्रिप्टोकरेंसी की गुमनामी बढ़ाने वाली तकनीक&amp;rdquo; से विकसित होकर &amp;ldquo;पूरे इंटरनेट के लिए विश्वास (Trust) को फिर से परिभाषित करने वाली सामान्य-उद्देश्य तकनीक&amp;rdquo; में बदल गया है। गणितीय सूत्रों और क्रिप्टोग्राफी की गहराइयों में गढ़ा गया एक छोटा सा प्रमाण ब्लॉकचेन की स्केलेबिलिटी को असीम रूप से बढ़ाएगा और हमारी गोपनीयता की रक्षा करने वाली एक ढाल के रूप में कार्य करेगा।&lt;/p>
&lt;p>Web3 को बड़े पैमाने पर अपनाने (mass adoption) और एक सुरक्षित तथा निजी अगली पीढ़ी के इंटरनेट के निर्माण की दिशा में, शून्य-ज्ञान प्रमाण सबसे महत्वपूर्ण घटक के रूप में काम करना जारी रखेगा। ZKP तकनीक के भविष्य के विकास पर हमारी नज़र बनी रहनी चाहिए।&lt;/p>
&lt;hr>
&lt;p>&lt;em>संदर्भ और संबंधित लिंक&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Groth, J. (2016). &amp;ldquo;On the Size of Pairing-based Non-interactive Arguments&amp;rdquo;&lt;/li>
&lt;li>Ben-Sasson, E., et al. (2018). &amp;ldquo;Scalable, transparent, and post-quantum secure computational integrity&amp;rdquo;&lt;/li>
&lt;li>Vitalik Buterin&amp;rsquo;s blog on zk-SNARKs and zk-STARKs&lt;/li>
&lt;/ul></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>क्रिप्टोग्राफी का इतिहास: सीज़र साइफर से पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC) तक</title><link>http://kenji.blog/hi/p/history-of-cryptography-caesar-to-pqc/</link><pubDate>Fri, 11 Sep 2026 15:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/history-of-cryptography-caesar-to-pqc/</guid><description>&lt;img src="http://kenji.blog/p/history-of-cryptography-caesar-to-pqc/img/eyecatch.jpg" alt="Featured image of post क्रिप्टोग्राफी का इतिहास: सीज़र साइफर से पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC) तक" />&lt;h1 id="1-परचय-करपटगरफ-cryptography-कय-ह">1. परिचय: क्रिप्टोग्राफी (Cryptography) क्या है?
&lt;/h1>&lt;p>क्रिप्टोग्राफी (Cryptography) जानकारी को गोपनीय रखने की एक तकनीक है, जिसका विकास मानव इतिहास के साथ हुआ है। प्राचीन युद्धों में गुप्त आदेशों के प्रसारण से लेकर आधुनिक इंटरनेट पर क्रेडिट कार्ड की जानकारी की सुरक्षा तक, क्रिप्टोग्राफी का उद्देश्य एक समान रहा है। वह है: &amp;ldquo;यह सुनिश्चित करना कि केवल इच्छित प्राप्तकर्ता ही जानकारी को समझ सके और कोई तीसरा व्यक्ति इसे डिक्रिप्ट (decrypt) न कर सके।&amp;rdquo;&lt;/p>
&lt;p>आधुनिक सूचना सुरक्षा (information security) में, क्रिप्टोग्राफी केवल &amp;ldquo;सूचना की गोपनीयता (Confidentiality)&amp;rdquo; तक सीमित नहीं है, बल्कि यह डेटा की &amp;ldquo;अखंडता (Integrity)&amp;rdquo;, &amp;ldquo;प्रमाणीकरण (Authentication)&amp;rdquo;, और &amp;ldquo;गैर-अस्वीकरण (Non-repudiation)&amp;rdquo; जैसी महत्वपूर्ण भूमिकाएँ भी निभाती है।&lt;/p>
&lt;p>इस लेख में, हम प्राचीन सरल प्रतिस्थापन साइफर (substitution cipher) से शुरू करके, मैकेनिकल साइफर, आधुनिक सिमेट्रिक (symmetric) और पब्लिक-की (public-key) क्रिप्टोग्राफी, और अंततः क्वांटम कंप्यूटर के व्यावहारिक उपयोग के साथ आने वाले &amp;ldquo;पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC)&amp;rdquo; युग तक, तकनीकी और गणितीय दृष्टिकोण से क्रिप्टोग्राफी के विकास के इतिहास की विस्तार से पड़ताल करेंगे।&lt;/p>
&lt;hr>
&lt;h1 id="2-कलसकल-करपटगरफ-क-यग-अकषर-क-परतसथपन-और-पनरवयवसथ">2. क्लासिकल क्रिप्टोग्राफी का युग: अक्षरों का प्रतिस्थापन और पुनर्व्यवस्था
&lt;/h1>&lt;p>क्रिप्टोग्राफी की उत्पत्ति ईसा पूर्व युग की है। प्रारंभिक साइफर मुख्य रूप से दो दृष्टिकोणों से बने थे: &amp;ldquo;स्थानांतरण (Transposition - पुनर्व्यवस्था)&amp;rdquo; और &amp;ldquo;प्रतिस्थापन (Substitution - बदलना)&amp;quot;।&lt;/p>
&lt;h2 id="सइटल-scytale-सइफर-सथनतरण-सइफर">साइटेल (Scytale) साइफर (स्थानांतरण साइफर)
&lt;/h2>&lt;p>5वीं शताब्दी ईसा पूर्व में प्राचीन ग्रीस के स्पार्टा में इस्तेमाल किया गया &amp;ldquo;साइटेल (Scytale)&amp;rdquo; सबसे पुराने क्रिप्टोग्राफिक उपकरणों में से एक है। इसमें एक विशिष्ट मोटाई की लकड़ी की छड़ी के चारों ओर चर्मपत्र (parchment) की एक लंबी पट्टी लपेटी जाती थी, और उस पर क्षैतिज रूप से संदेश लिखा जाता था। जब कागज को खोला जाता था, तो अक्षर एक निरर्थक क्रम में व्यवस्थित हो जाते थे, लेकिन जब समान मोटाई की छड़ी वाला प्राप्तकर्ता कागज को फिर से लपेटता था, तो मूल संदेश पढ़ा जा सकता था।&lt;/p>
&lt;h2 id="सजर-सइफर-मनअलफबटक-परतसथपन-सइफर">सीज़र साइफर (मोनोअल्फाबेटिक प्रतिस्थापन साइफर)
&lt;/h2>&lt;p>प्रथम शताब्दी ईसा पूर्व में, प्राचीन रोमन नायक जूलियस सीज़र द्वारा &amp;ldquo;सीज़र साइफर&amp;rdquo; का उपयोग किया गया था। यह एक मोनोअल्फाबेटिक प्रतिस्थापन (Monoalphabetic substitution) साइफर है जो वर्णमाला के अक्षरों को एक निश्चित संख्या (आमतौर पर 3 अक्षर) से स्थानांतरित (shift) करता है।&lt;/p>
&lt;p>गणितीय रूप से, यदि अक्षरों को $0$ से $25$ तक की संख्याओं के रूप में माना जाता है और शिफ्ट की संख्या $K$ है, तो प्लेनटेक्स्ट $P$ से सिफरटेक्स्ट $C$ में रूपांतरण को निम्नलिखित सर्वांगसमता (congruence) समीकरण द्वारा व्यक्त किया जाता है:&lt;/p>
$$C \equiv P + K \pmod{26}$$
&lt;p>डिक्रिप्शन में इसके विपरीत प्रक्रिया की जाती है:&lt;/p>
$$P \equiv C - K \pmod{26}$$
&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;/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="c1"># सीज़र साइफर का एक सरल Python कार्यान्वयन (Implementation)&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">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;encrypt&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">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&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">mode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;decrypt&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">shift&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">shift&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">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&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">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isalpha&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isupper&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;a&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="c1"># शिफ्ट गणना&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="nb">chr&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="o">-&lt;/span> &lt;span class="n">base&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">26&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">base&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">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">char&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>&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"># निष्पादन उदाहरण (Execution Example)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;HELLO WORLD&amp;#34;&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="n">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plaintext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;encrypt&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;सिफरटेक्स्ट: &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 class="c1"># KHOOR ZRUOG&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="फरकवस-एनलसस-आवतत-वशलषण-और-वगनयर-vigenère-सइफर">फ्रीक्वेंसी एनालिसिस (आवृत्ति विश्लेषण) और विग्नेयर (Vigenère) साइफर
&lt;/h2>&lt;p>मोनोअल्फाबेटिक प्रतिस्थापन साइफर को 9वीं शताब्दी के अरब विद्वान अल-किंडी द्वारा आविष्कार किए गए &amp;ldquo;आवृत्ति विश्लेषण (Frequency Analysis)&amp;rdquo; द्वारा आसानी से डिक्रिप्ट किया जाने लगा। यह भाषा की सांख्यिकीय विशेषताओं का उपयोग करता है, जैसे कि अंग्रेजी में &amp;ldquo;E&amp;rdquo; और &amp;ldquo;T&amp;rdquo; का बार-बार आना।&lt;/p>
&lt;p>इसका मुकाबला करने के लिए, 16वीं शताब्दी में &amp;ldquo;विग्नेयर साइफर (Vigenère cipher)&amp;rdquo; का आविष्कार किया गया था। यह एक पॉलिएल्फाबेटिक प्रतिस्थापन (Polyalphabetic substitution) साइफर है जो समय-समय पर कई शिफ्ट्स (कुंजियों) का उपयोग करता है, और इसे लगभग 300 वर्षों तक &amp;ldquo;अभेद्य साइफर (Le Chiffre Indéchiffrable)&amp;rdquo; कहा जाता था।&lt;/p>
&lt;p>गणितीय रूप से, इसे प्लेनटेक्स्ट के $i$-वें अक्षर $P_i$ और दोहराई जाने वाली कुंजी के $i$-वें अक्षर $K_i$ का उपयोग करके इस प्रकार एन्क्रिप्ट किया जाता है:&lt;/p>
$$C_i \equiv P_i + K_i \pmod{26}$$
&lt;p>19वीं शताब्दी में, इस साइफर को चार्ल्स बैबेज और फ्रेडरिक कासिस्की द्वारा भी तोड़ दिया गया था, जिन्होंने &amp;ldquo;कासिस्की परीक्षण (Kasiski examination)&amp;rdquo; की खोज की थी, जो सिफरटेक्स्ट में दोहराए जाने वाले पैटर्न से कुंजी की लंबाई निर्धारित करता है।&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "क्लासिकल क्रिप्टोग्राफी का वर्गीकरण"
A["क्लासिकल क्रिप्टोग्राफी"] --> B["स्थानांतरण साइफर"]
A --> C["प्रतिस्थापन साइफर"]
B --> D["साइटेल साइफर"]
C --> E["मोनोअल्फाबेटिक"]
C --> F["पॉलिएल्फाबेटिक"]
E --> G["सीज़र साइफर"]
F --> H["विग्नेयर साइफर"]
end&lt;/div>
&lt;hr>
&lt;h1 id="3-मकनकल-करपटगरफ-और-वशव-यदध-एनगम-enigma-और-इसक-डकरपशन">3. मैकेनिकल क्रिप्टोग्राफी और विश्व युद्ध: एनिग्मा (Enigma) और इसका डिक्रिप्शन
&lt;/h1>&lt;p>20वीं सदी की शुरुआत में, संचार के साधन पत्रों से टेलीग्राफ और रेडियो में बदल गए, जिससे एन्क्रिप्शन की गति और जटिलता की मांग बढ़ गई। यहीं पर रोटर्स (घुमावदार डिस्क) को जोड़ने वाली &amp;ldquo;मैकेनिकल क्रिप्टोग्राफी&amp;rdquo; सामने आई।&lt;/p>
&lt;h2 id="एनगम-enigma-क-खतर">एनिग्मा (Enigma) का खतरा
&lt;/h2>&lt;p>द्वितीय विश्व युद्ध के दौरान नाजी जर्मनी द्वारा इस्तेमाल की जाने वाली &amp;ldquo;एनिग्मा&amp;rdquo; क्रिप्टोग्राफी के इतिहास की सबसे प्रसिद्ध सिफर मशीन है। एनिग्मा में कई रोटर (आमतौर पर 3 से 4), अक्षरों की वायरिंग को बदलने के लिए एक प्लगबोर्ड (Steckerbrett), और एक रिफ्लेक्टर (रिवर्सिंग रोटर) शामिल थे।&lt;/p>
&lt;p>हर बार जब कीबोर्ड पर कोई अक्षर टाइप किया जाता था, तो रोटर घूम जाता था, इसलिए एक ही अक्षर को लगातार टाइप करने पर भी अलग-अलग सिफर अक्षर आउटपुट होते थे (पॉलिएल्फाबेटिक साइफर का चरम रूप)। इसका कुंजी स्थान (सेटिंग्स के संयोजन) लगभग $1.58 \times 10^{19}$ था, जिसे उस समय की तकनीक के साथ ब्रूट-फोर्स (brute-force) हमले से क्रैक करना असंभव माना जाता था।&lt;/p>
&lt;h2 id="एलन-टयरग-alan-turing-और-बमब-bombe">एलन ट्यूरिंग (Alan Turing) और &amp;ldquo;बॉम्बे (Bombe)&amp;rdquo;
&lt;/h2>&lt;p>पोलिश गणितज्ञ मैरियन रेजेव्स्की और अन्य लोगों की शुरुआती उपलब्धियों को आगे बढ़ाते हुए, ब्रिटेन के बैलेचली पार्क (Bletchley Park) की कोडब्रेकिंग टीम ने इस अभेद्य एनिग्मा को चुनौती दी।&lt;/p>
&lt;p>विशेष रूप से एलन ट्यूरिंग (Alan Turing) ने सिफरटेक्स्ट के एक हिस्से (जिसे क्रिब या Crib कहा जाता है) के अनुरूप प्लेनटेक्स्ट के अनुमान का उपयोग करते हुए, &amp;ldquo;बॉम्बे (Bombe)&amp;rdquo; नामक एक इलेक्ट्रोमैकेनिकल डिकोडिंग मशीन विकसित की। बॉम्बे ने उच्च गति पर तार्किक विरोधाभासों का पता लगाया, और एक के बाद एक असंभव रोटर सेटिंग्स को समाप्त करके, सफलतापूर्वक एनिग्मा को डिक्रिप्ट किया। कहा जाता है कि इस उपलब्धि ने मित्र राष्ट्रों (Allies) की जीत को कई साल पहले ला दिया था।&lt;/p>
&lt;hr>
&lt;h1 id="4-आधनक-करपटगरफ-क-शरआत-समटरक-क-करपटगरफ-des-और-aes">4. आधुनिक क्रिप्टोग्राफी की शुरुआत: सिमेट्रिक-की क्रिप्टोग्राफी (DES और AES)
&lt;/h1>&lt;p>युद्ध के बाद, कंप्यूटर के आगमन के साथ, क्रिप्टोग्राफी ने &amp;ldquo;अक्षरों&amp;rdquo; के हेरफेर से &amp;ldquo;बिट्स (0 और 1)&amp;rdquo; के हेरफेर में एक नाटकीय बदलाव (paradigm shift) का अनुभव किया।&lt;/p>
&lt;h2 id="कलउड-शनन-claude-shannon-और-सचन-सदधत-information-theory">क्लाउड शैनन (Claude Shannon) और सूचना सिद्धांत (Information Theory)
&lt;/h2>&lt;p>1949 में, क्लाउड शैनन ने &amp;ldquo;गोपनीय प्रणालियों का संचार सिद्धांत (Communication Theory of Secrecy Systems)&amp;rdquo; नामक एक पेपर प्रकाशित किया, जिसने आधुनिक क्रिप्टोग्राफी की गणितीय नींव रखी। उन्होंने सुरक्षित साइफर डिजाइन के सिद्धांतों के रूप में &amp;ldquo;भ्रम (Confusion)&amp;rdquo; और &amp;ldquo;प्रसार (Diffusion)&amp;rdquo; का प्रस्ताव रखा।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>भ्रम (Confusion)&lt;/strong>: कुंजी और सिफरटेक्स्ट के बीच के संबंध को यथासंभव जटिल बनाना। (प्रतिस्थापन / S-box के माध्यम से महसूस किया गया)&lt;/li>
&lt;li>&lt;strong>प्रसार (Diffusion)&lt;/strong>: यह सुनिश्चित करना कि प्लेनटेक्स्ट के 1 बिट में परिवर्तन सिफरटेक्स्ट के कई बिट्स को प्रभावित करता है। (स्थानांतरण / पुनर्व्यवस्था के माध्यम से महसूस किया गया)&lt;/li>
&lt;/ul>
&lt;h2 id="des-डट-एनकरपशन-सटडरड--data-encryption-standard">DES (डेटा एन्क्रिप्शन स्टैंडर्ड / Data Encryption Standard)
&lt;/h2>&lt;p>1977 में, अमेरिकी राष्ट्रीय मानक और प्रौद्योगिकी संस्थान (NIST, जिसे तब NBS कहा जाता था) ने IBM के डिज़ाइन पर आधारित &amp;ldquo;DES&amp;rdquo; को एक मानक साइफर के रूप में स्थापित किया।
DES एक वास्तुकला (architecture) का उपयोग करता है जिसे &amp;ldquo;फीस्टेल नेटवर्क (Feistel Network)&amp;rdquo; कहा जाता है, जिसमें 64-बिट ब्लॉक लंबाई और 56-बिट कुंजी लंबाई होती है। इसका एक कार्यान्वयन (implementation) लाभ यह था कि एन्क्रिप्शन और डिक्रिप्शन एल्गोरिदम की संरचना लगभग समान थी।&lt;/p>
&lt;p>हालाँकि, जैसे-जैसे कंप्यूटर की कम्प्यूटेशनल शक्ति में सुधार हुआ, यह स्पष्ट हो गया कि 56-बिट कुंजी लंबाई (लगभग $7.2 \times 10^{16}$ संयोजन) अपर्याप्त थी। 1998 में, इलेक्ट्रॉनिक फ्रंटियर फाउंडेशन (EFF) ने &amp;ldquo;डीप क्रैक (Deep Crack)&amp;rdquo; नामक एक समर्पित मशीन विकसित की, जिसने कुछ ही दिनों में DES को क्रैक कर दिया।&lt;/p>
&lt;h2 id="aes-एडवसड-एनकरपशन-सटडरड--advanced-encryption-standard">AES (एडवांस्ड एन्क्रिप्शन स्टैंडर्ड / Advanced Encryption Standard)
&lt;/h2>&lt;p>2001 में, DES को बदलने के लिए &amp;ldquo;AES&amp;rdquo; को एक नए मानक के रूप में स्थापित किया गया था। सार्वजनिक प्रतियोगिता के माध्यम से बेल्जियम के क्रिप्टोग्राफर्स द्वारा डिज़ाइन किए गए &amp;ldquo;रिजनडेल (Rijndael)&amp;rdquo; एल्गोरिदम को अपनाया गया था।&lt;/p>
&lt;p>AES फीस्टेल नेटवर्क के बजाय &amp;ldquo;SPN संरचना (Substitution-Permutation Network)&amp;rdquo; का उपयोग करता है, और गैल्वा क्षेत्र (परिमित क्षेत्र / finite field) $GF(2^8)$ पर गणितीय संचालन (mathematical operations) का उपयोग करता है। कुंजी की लंबाई 128, 192 या 256 बिट्स के रूप में चुनी जा सकती है, और यह आज भी दुनिया भर में मानक सिमेट्रिक-की क्रिप्टोग्राफी (symmetric-key cryptography) के रूप में व्यापक रूप से उपयोग की जाती है।&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "AES का 1 राउंड प्रोसेस (SPN संरचना)"
A["इनपुट स्थिति (128-बिट)"] --> B("SubBytes (बाइट प्रतिस्थापन / S-Box)")
B --> C("ShiftRows (पंक्ति शिफ्ट)")
C --> D("MixColumns (कॉलम मिक्स / GF(2^8) पर गुणा)")
D --> E("AddRoundKey (राउंड कुंजी के साथ XOR)")
E --> F["अगले राउंड की ओर"]
end&lt;/div>
&lt;hr>
&lt;h1 id="5-पबलक-क-public-key-करपटगरफ-क-करत-डफ-हलमन-diffie-hellman-स-rsa-तक">5. पब्लिक-की (Public-Key) क्रिप्टोग्राफी की क्रांति: डिफी-हेलमैन (Diffie-Hellman) से RSA तक
&lt;/h1>&lt;p>सिमेट्रिक-की (Symmetric-key) क्रिप्टोग्राफी में एक महत्वपूर्ण कमजोरी थी: &amp;ldquo;कुंजी वितरण समस्या (Key Distribution Problem)&amp;quot;। समस्या यह है कि एन्क्रिप्टेड संचार शुरू करने से पहले आप दूर के पक्ष के साथ &amp;ldquo;साझा कुंजी&amp;rdquo; को सुरक्षित रूप से कैसे साझा करते हैं। इस समस्या को 1970 के दशक में &amp;ldquo;पब्लिक-की क्रिप्टोग्राफी (Public-Key Cryptography)&amp;rdquo; के जन्म के साथ हल किया गया था।&lt;/p>
&lt;h2 id="डफ-हलमन-diffie-hellman-कज-वनमय-key-exchange">डिफी-हेलमैन (Diffie-Hellman) कुंजी विनिमय (Key Exchange)
&lt;/h2>&lt;p>1976 में, व्हिटफील्ड डिफी (Whitfield Diffie) और मार्टिन हेलमैन (Martin Hellman) ने &amp;ldquo;क्रिप्टोग्राफी में नई दिशाएं (New Directions in Cryptography)&amp;rdquo; नामक एक अभूतपूर्व शोध पत्र प्रकाशित किया। उन्होंने एक ऐसी विधि का प्रस्ताव दिया जो &amp;ldquo;असतत लघुगणक समस्या (Discrete Logarithm Problem)&amp;rdquo; की गणितीय कठिनाई का उपयोग करके, वायरटैप (wiretapped) संचार पथ पर भी सुरक्षित रूप से कुंजी साझा कर सकती है।&lt;/p>
&lt;ol>
&lt;li>एक बड़ी अभाज्य संख्या (prime number) $p$ और जनरेटर (generator) $g$ को सार्वजनिक करें।&lt;/li>
&lt;li>एलिस (Alice) एक गुप्त मान $a$ चुनती है, और बॉब को $A = g^a \pmod{p}$ भेजती है।&lt;/li>
&lt;li>बॉब (Bob) एक गुप्त मान $b$ चुनता है, और एलिस को $B = g^b \pmod{p}$ भेजता है।&lt;/li>
&lt;li>एलिस $K = B^a \pmod{p}$ की गणना करती है, और बॉब $K = A^b \pmod{p}$ की गणना करता है।&lt;/li>
&lt;li>घातांक के नियमों (laws of exponents) के अनुसार, $K = (g^b)^a = (g^a)^b = g^{ab} \pmod{p}$, जिससे वे दोनों सफलतापूर्वक एक ही कुंजी $K$ साझा कर लेते हैं।&lt;/li>
&lt;/ol>
&lt;h2 id="rsa-करपटगरफ">RSA क्रिप्टोग्राफी
&lt;/h2>&lt;p>अगले वर्ष, 1977 में, रॉन रिवेस्ट (Ron Rivest), आदि शमीर (Adi Shamir) और लियोनार्ड एडलमैन (Leonard Adleman) द्वारा &amp;ldquo;RSA क्रिप्टोग्राफी&amp;rdquo; का आविष्कार किया गया। यह इस गुण पर आधारित है कि &amp;ldquo;बहुत बड़ी भाज्य संख्याओं (composite numbers) का अभाज्य गुणनखंडन (prime factorization) करना बहुत कठिन है।&amp;rdquo;&lt;/p>
&lt;p>&lt;strong>RSA का गणितीय तंत्र:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>दो विशाल अभाज्य संख्याएँ $p$ और $q$ चुनें, और $n = p \times q$ की गणना करें।&lt;/li>
&lt;li>यूलर के टॉटिएंट फ़ंक्शन (Euler&amp;rsquo;s totient function) $\phi(n) = (p-1)(q-1)$ की गणना करें।&lt;/li>
&lt;li>एक ऐसा पूर्णांक $e$ (सार्वजनिक कुंजी / public key) चुनें जो $\phi(n)$ का सह-अभाज्य (coprime) हो।&lt;/li>
&lt;li>एक ऐसा पूर्णांक $d$ (निजी कुंजी / private key) की गणना करें जिससे $e \times d \equiv 1 \pmod{\phi(n)}$ हो।&lt;/li>
&lt;/ol>
&lt;p>एन्क्रिप्शन: प्लेनटेक्स्ट $M$ के लिए, $C \equiv M^e \pmod{n}$
डिक्रिप्शन: सिफरटेक्स्ट $C$ के लिए, $M \equiv C^d \pmod{n}$&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="c1"># RSA क्रिप्टोग्राफी की अवधारणा को दर्शाने वाला Python कोड (व्यावहारिक उपयोग के लिए नहीं)&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">ext_euclid&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="c1"># विस्तारित यूक्लिडियन एल्गोरिदम का उपयोग करके मॉड्यूलर व्युत्क्रम (modular inverse) की गणना&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">b&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="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&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">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&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 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">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="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 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">g&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">rsa_example&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="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">61&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&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>&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">17&lt;/span> &lt;span class="c1"># phi का सह-अभाज्य (coprime) मान&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">_&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&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">d&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">d&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="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;सार्वजनिक कुंजी (Public Key): (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">, 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">)&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;निजी कुंजी (Private Key): (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">, 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">)&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">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">65&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="n">decrypted&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>&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">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; सिफरटेक्स्ट: &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;gt; डिक्रिप्टेड: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted&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">rsa_example&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;h1 id="6-अणडकर-वकर-करपटगरफ-elliptic-curve-cryptography-ecc-क-उदय">6. अण्डाकार वक्र क्रिप्टोग्राफी (Elliptic Curve Cryptography: ECC) का उदय
&lt;/h1>&lt;p>हालांकि RSA क्रिप्टोग्राफी शक्तिशाली है, लेकिन जैसे-जैसे कंप्यूटर के प्रदर्शन में सुधार हुआ, सुरक्षा बनाए रखने के लिए कुंजी की लंबाई (वर्तमान में 2048 बिट या 3072 बिट) को बढ़ाना आवश्यक हो गया, जिससे कम्प्यूटेशनल लागत में वृद्धि की समस्या उत्पन्न हुई।&lt;/p>
&lt;p>इसलिए 1985 में, &amp;ldquo;अण्डाकार वक्र क्रिप्टोग्राफी (Elliptic Curve Cryptography: ECC)&amp;rdquo; का प्रस्ताव रखा गया था। यह परिमित क्षेत्र (finite field) पर अण्डाकार वक्र (आमतौर पर $y^2 = x^3 + ax + b$ के रूप में) पर बिंदुओं के जोड़ (point addition) का उपयोग करता है।&lt;/p>
&lt;p>अण्डाकार वक्र पर असतत लघुगणक समस्या (Elliptic Curve Discrete Logarithm Problem: ECDLP) को अभाज्य गुणनखंडन समस्या की तुलना में हल करना और भी कठिन माना जाता है, और &lt;strong>RSA के 3072 बिट्स के बराबर सुरक्षा ECC के साथ केवल 256 बिट्स की कुंजी लंबाई के साथ प्राप्त की जा सकती है&lt;/strong>। इसने सीमित कम्प्यूटेशनल संसाधनों वाले वातावरण में भी उच्च गति और सुरक्षित एन्क्रिप्टेड संचार (जैसे ECDSA और ECDH) को संभव बना दिया है, जैसे कि स्मार्टफोन और IoT डिवाइस।&lt;/p>
&lt;hr>
&lt;h1 id="7-कवटम-कपयटर-क-खतर-और-पसट-कवटम-करपटगरफ-pqc">7. क्वांटम कंप्यूटर का खतरा और पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC)
&lt;/h1>&lt;p>क्रिप्टोग्राफी अभेद्य (solid) प्रतीत होती थी, लेकिन 1994 में पीटर शोर (Peter Shor) द्वारा प्रकाशित &amp;ldquo;शोर का एल्गोरिदम (Shor&amp;rsquo;s Algorithm)&amp;rdquo; से एक बड़ा झटका लगा।&lt;/p>
&lt;p>क्वांटम कंप्यूटर गणना करने के लिए &amp;ldquo;सुपरपोजिशन (Superposition)&amp;rdquo; और &amp;ldquo;क्वांटम एंटैंगलमेंट (Quantum Entanglement)&amp;rdquo; जैसे क्वांटम यांत्रिकी (quantum mechanics) के गुणों का उपयोग करते हैं। गणितीय रूप से यह सिद्ध हो चुका है कि यदि शोर के एल्गोरिदम को पर्याप्त रूप से शक्तिशाली क्वांटम कंप्यूटर पर चलाया जाता है, तो अभाज्य गुणनखंडन (prime factorization) और असतत लघुगणक (discrete logarithm) समस्याओं को &amp;ldquo;बहुपद समय (polynomial time)&amp;rdquo; में हल किया जा सकता है। दूसरे शब्दों में, जिस दिन एक व्यावहारिक क्वांटम कंप्यूटर पूरा हो जाएगा (Q-Day), वर्तमान में उपयोग किए जाने वाले RSA और ECC जैसी सभी पब्लिक-की क्रिप्टोग्राफी तुरंत टूट जाएगी।&lt;/p>
&lt;h2 id="pqc-पसट-कवटम-करपटगरफ-क-आगमन">PQC (पोस्ट-क्वांटम क्रिप्टोग्राफी) का आगमन
&lt;/h2>&lt;p>इस अभूतपूर्व खतरे की तैयारी में, नई गणितीय समस्याओं पर आधारित &amp;ldquo;पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC)&amp;rdquo; पर शोध तेज गति से चल रहा है, जिसे क्वांटम कंप्यूटर के लिए भी डिक्रिप्ट करना मुश्किल है। NIST (यूएस नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी) कई वर्षों से PQC मानकीकरण प्रक्रिया को आगे बढ़ा रहा है, और मुख्य रूप से निम्नलिखित गणितीय दृष्टिकोणों को सबसे आशाजनक माना जाता है।&lt;/p>
&lt;h3 id="1-लटस-बसड-lattice-based-करपटगरफ">1. लैटीस-बेस्ड (Lattice-based) क्रिप्टोग्राफी
&lt;/h3>&lt;p>वर्तमान में यह सबसे आशाजनक दृष्टिकोण है, और इसे NIST के मानकीकरण एल्गोरिदम (ML-KEM / Kyber, ML-DSA / Dilithium) में भी अपनाया गया है। यह बहुआयामी अंतरिक्ष में &amp;ldquo;लैटीस (Lattice)&amp;rdquo; पर एक विशिष्ट बिंदु खोजने की समस्या (सबसे छोटा वेक्टर समस्या: SVP आदि) या LWE (लर्निंग विद एरर्स: Learning With Errors) समस्या की कठिनाई पर आधारित है।&lt;/p>
&lt;p>LWE समस्या की अवधारणा इस विशेषता का उपयोग करती है कि यदि आप जानबूझकर एक साथ रैखिक समीकरणों की प्रणाली (system of linear equations) में &amp;ldquo;छोटा शोर (त्रुटि)&amp;rdquo; जोड़ते हैं, तो इसके लिए समाधान खोजना बहुत कठिन हो जाता है।
समीकरण प्रणाली: $\mathbf{A}\mathbf{s} + \mathbf{e} \equiv \mathbf{b} \pmod{q}$
($\mathbf{A}$ और $\mathbf{b}$ सार्वजनिक हैं, $\mathbf{s}$ निजी कुंजी है, $\mathbf{e}$ एक छोटा शोर है)&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;/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="c1"># LWE समस्या का वैचारिक छद्म-कोड (Pseudocode) (सीखने के उद्देश्य से)&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">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&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="mi">256&lt;/span> &lt;span class="c1"># आयाम (Dimension)&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="mi">3329&lt;/span> &lt;span class="c1"># मोडुलो (Modulo)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">512&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"># निजी कुंजी s और छोटी त्रुटि e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&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">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&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="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&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="o">-&lt;/span>&lt;span class="mi">1&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">size&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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># सार्वजनिक मैट्रिक्स A और सार्वजनिक वेक्टर b&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">np&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">0&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">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&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="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dot&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">s&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># यहां तक कि क्वांटम कंप्यूटर का उपयोग करके भी, A और b से s को पुनर्प्राप्त करना अत्यंत कठिन माना जाता है&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-हश-बसड-hash-based-करपटगरफ">2. हैश-बेस्ड (Hash-based) क्रिप्टोग्राफी
&lt;/h3>&lt;p>यह एक डिजिटल हस्ताक्षर योजना है जो अपनी सुरक्षा को केवल हैश फ़ंक्शन के टकराव प्रतिरोध (collision resistance) पर आधारित करती है। चूँकि इसमें कोई गणितीय संरचना नहीं होती है, इसलिए यह क्वांटम हमलों के प्रति प्रतिरोधी है, लेकिन इसके हस्ताक्षर का आकार (signature size) बड़ा होता है (जैसे SPHINCS+)।&lt;/p>
&lt;h3 id="3-कड-बसड-code-based-करपटगरफ">3. कोड-बेस्ड (Code-based) क्रिप्टोग्राफी
&lt;/h3>&lt;p>यह त्रुटि-सुधार कोड (error-correcting codes) के सिद्धांत पर आधारित एन्क्रिप्शन योजना है। 1978 में प्रस्तावित McEliece क्रिप्टोग्राफी प्रसिद्ध है, और इसका लंबा इतिहास और एक स्थापित सुरक्षा प्रतिष्ठा है, लेकिन इसमें एक समस्या यह है कि सार्वजनिक कुंजी का आकार बहुत बड़ा (कभी-कभी कई मेगाबाइट तक) होता है।&lt;/p>
&lt;div class="mermaid">timeline
title "क्रिप्टोग्राफी और कंप्यूटर के विकास का इतिहास"
"प्राचीन - मध्य युग" : "सीज़र साइफर" : "विग्नेयर साइफर" : "आवृत्ति विश्लेषण का जन्म"
"1930 - 40 का दशक" : "एनिग्मा का संचालन और डिक्रिप्शन" : "ट्यूरिंग मशीन / बॉम्बे का विकास"
"1970 का दशक" : "DES मानकीकरण (1977)" : "डिफी-हेलमैन कुंजी विनिमय (1976)" : "RSA क्रिप्टोग्राफी का जन्म (1977)"
"1980 - 90 का दशक" : "अण्डाकार वक्र क्रिप्टोग्राफी (ECC) का प्रस्ताव" : "शोर के एल्गोरिदम का प्रकाशन (1994)"
"2000 का दशक" : "AES मानकीकरण (2001)"
"2010 का दशक - वर्तमान" : "क्वांटम कंप्यूटर अनुसंधान में तेजी" : "NIST द्वारा PQC मानकीकरण परियोजना की शुरुआत"
"निकट भविष्य (Q-Day)" : "बड़े पैमाने पर क्वांटम कंप्यूटर का एहसास?" : "PQC (ML-KEM/ML-DSA) में पूर्ण परिवर्तन"&lt;/div>
&lt;hr>
&lt;h1 id="8-नषकरष-ढल-और-भल-क-कभ-न-खतम-हन-वल-लडई">8. निष्कर्ष: ढाल और भाले की कभी न खत्म होने वाली लड़ाई
&lt;/h1>&lt;p>क्रिप्टोग्राफी का इतिहास नई एन्क्रिप्शन विधियों (ढाल) के आविष्कार और उन्हें तोड़ने के लिए नई डिक्रिप्शन तकनीकों (भाले) के बीच एक कभी न खत्म होने वाली लड़ाई का इतिहास है।&lt;/p>
&lt;p>सीज़र साइफर आवृत्ति विश्लेषण से हार गया, और अजेय मानी जाने वाली एनिग्मा ट्यूरिंग की प्रतिभाशाली बुद्धि और मशीनों की शक्ति से हार गई। और अब, आधुनिक इंटरनेट समाज की नींव रखने वाली RSA और ECC जैसी शक्तिशाली क्रिप्टोग्राफी को भी क्वांटम कंप्यूटर नामक नए &amp;ldquo;भाले&amp;rdquo; के खतरे का सामना करना पड़ रहा है।&lt;/p>
&lt;p>हालाँकि, मानवता पहले ही भविष्य की ओर देख रही है और &amp;ldquo;पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC)&amp;rdquo; के रूप में एक नई &amp;ldquo;ढाल&amp;rdquo; तैयार कर रही है। वर्तमान में, दुनिया भर के आईटी बुनियादी ढांचे में, मौजूदा पब्लिक-की क्रिप्टोग्राफी से PQC में संक्रमण (Crypto Agility सुरक्षित करना) की तैयारी एक तत्काल आवश्यकता बन गई है।&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><item><title>पूर्ण समरूप एन्क्रिप्शन (FHE) क्या है? अगली पीढ़ी की सुरक्षा के मूल तत्व की व्याख्या</title><link>http://kenji.blog/hi/p/fully-homomorphic-encryption-fhe-explained/</link><pubDate>Fri, 11 Sep 2026 11:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/fully-homomorphic-encryption-fhe-explained/</guid><description>&lt;img src="http://kenji.blog/p/fully-homomorphic-encryption-fhe-explained/img/eyecatch.jpg" alt="Featured image of post पूर्ण समरूप एन्क्रिप्शन (FHE) क्या है? अगली पीढ़ी की सुरक्षा के मूल तत्व की व्याख्या" />&lt;p>चूंकि क्लाउड कंप्यूटिंग और एआई तकनीक समाज की नींव के रूप में स्थापित हो रही है, &amp;ldquo;डेटा गोपनीयता (Data Privacy)&amp;rdquo; और &amp;ldquo;डेटा उपयोग (Data Utilization)&amp;rdquo; के बीच का ट्रेड-ऑफ सबसे महत्वपूर्ण चुनौतियों में से एक बन गया है। अत्यधिक गोपनीय डेटा, जैसे मेडिकल डेटा, वित्तीय जानकारी, और व्यक्तिगत बायोमेट्रिक जानकारी का क्लाउड पर एआई द्वारा विश्लेषण कराने की मांग बढ़ रही है, लेकिन सुरक्षा चिंताओं के कारण कई कंपनियां डेटा को बाहर भेजने में संकोच करती हैं।&lt;/p>
&lt;p>पारंपरिक एन्क्रिप्शन तकनीकें (जैसे AES और RSA) स्टोरेज में सहेजे गए डेटा (Data at Rest) और नेटवर्क पर प्रवाहित होने वाले डेटा (Data in Transit) की सुरक्षा करने में उत्कृष्ट हैं। हालाँकि, जब सर्वर डेटा पर खोज या मशीन लर्निंग जैसी &lt;strong>प्रक्रियाएँ (गणनाएँ) करता है (Data in Use), तो एन्क्रिप्शन को डिक्रिप्ट करके उसे वापस प्लेनटेक्स्ट में बदलना आवश्यक होता है&lt;/strong>। यदि इस डिक्रिप्शन के समय सर्वर हैक हो जाता है, या कोई दुर्भावनापूर्ण आंतरिक प्रशासक डेटा देख लेता है, तो यह सीधे सूचना रिसाव का कारण बन सकता है।&lt;/p>
&lt;p>इस &amp;ldquo;प्रोसेसिंग के दौरान डिक्रिप्शन&amp;rdquo; की मूलभूत कमजोरी को दूर करने वाली सपनों की तकनीक &lt;strong>पूर्ण समरूप एन्क्रिप्शन (Fully Homomorphic Encryption: FHE)&lt;/strong> है। FHE का उपयोग करके, डेटा को डिक्रिप्ट किए बिना एन्क्रिप्टेड अवस्था में ही गणना प्रक्रियाएं करना संभव है, और केवल परिणामी सिफरटेक्स्ट (ciphertext) को क्लाइंट को वापस किया जाता है।&lt;/p>
&lt;p>इस लेख में, हम FHE की अवधारणा से लेकर इसके इतिहास, क्रेग जेंट्री (Craig Gentry) की ऐतिहासिक सफलता, गणितीय आधार (जैसे Ring-LWE), सबसे बड़ी चुनौती &amp;ldquo;शोर (Noise)&amp;rdquo; और इसके समाधान (बूटस्ट्रैपिंग), और नवीनतम कार्यान्वयन पुस्तकालयों (implementation libraries) तक सब कुछ कवर करेंगे, जो अगली पीढ़ी की सुरक्षा के प्रमुख तत्व FHE की गहराई से व्याख्या करता है।&lt;/p>
&lt;hr>
&lt;h2 id="1-समरप-एनकरपशन-कय-ह-बनयद-अवधरण">1. समरूप एन्क्रिप्शन क्या है? बुनियादी अवधारणा
&lt;/h2>&lt;p>&amp;ldquo;समरूप (Homomorphic)&amp;rdquo; एक बीजगणितीय शब्द है, जो किसी संरचना वाले सेट के बीच एक मैपिंग को संदर्भित करता है जो ऑपरेशनों की संरचना को बरकरार रखता है। क्रिप्टोग्राफी में &amp;ldquo;समरूपता (Homomorphism)&amp;rdquo; का अर्थ यह गुण है कि &lt;strong>प्लेनटेक्स्ट स्पेस में ऑपरेशन्स सिफरटेक्स्ट स्पेस में ऑपरेशन्स के अनुरूप होते हैं&lt;/strong>।&lt;/p>
&lt;p>सरल गणितीय शब्दों में, मान लें कि प्लेनटेक्स्ट $m_1$ और $m_2$ के लिए एन्क्रिप्शन फ़ंक्शन $E(\cdot)$ है, और डिक्रिप्शन फ़ंक्शन $D(\cdot)$ है। प्लेनटेक्स्ट पर होने वाले ऑपरेशन (जैसे जोड़ या गुणा) को $\circ$ के रूप में, और सिफरटेक्स्ट पर होने वाले ऑपरेशन को $\diamond$ के रूप में दर्शाया गया है, तो निम्नलिखित संबंध लागू होता है:&lt;/p>
$$ D(E(m_1) \diamond E(m_2)) = m_1 \circ m_2 $$
&lt;p>दूसरे शब्दों में, यदि आप सिफरटेक्स्ट $E(m_1)$ और $E(m_2)$ पर कोई ऑपरेशन $\diamond$ लागू करते हैं और परिणाम को डिक्रिप्ट करते हैं, तो यह मूल प्लेनटेक्स्ट के बीच ऑपरेशन $\circ$ लागू करने के परिणाम से मेल खाएगा।&lt;/p>
&lt;h3 id="कलउड-कपयटग-म-डट-परवह-data-flow-in-cloud-computing">क्लाउड कंप्यूटिंग में डेटा प्रवाह (Data Flow in Cloud Computing)
&lt;/h3>&lt;p>FHE का उपयोग करने वाली क्लाउड प्रोसेसिंग का आर्किटेक्चर पारंपरिक वाले से बिल्कुल अलग है। नीचे दिया गया चित्र FHE का उपयोग करते हुए सुरक्षित डेटा प्रोसेसिंग प्रवाह को दर्शाता है।&lt;/p>
&lt;div class="mermaid">graph TD
A["क्लाइंट (निजी कुंजी रखता है)"] -->|1. प्लेनटेक्स्ट x को एन्क्रिप्ट करें: E(x)| B["क्लाउड सर्वर (केवल एन्क्रिप्टेड डेटा)"]
B -->|2. सिफरटेक्स्ट के रूप में फ़ंक्शन f लागू करें: E(f(x))| B
B -->|3. गणना परिणाम का सिफरटेक्स्ट E(y)| A
A -->|4. निजी कुंजी के साथ डिक्रिप्ट करें: y = f(x)| A
style A fill:#d4edda,stroke:#28a745
style B fill:#f8d7da,stroke:#dc3545&lt;/div>
&lt;p>सर्वर एन्क्रिप्टेड डेटा $E(x)$ प्राप्त करता है, लेकिन चूंकि उसके पास निजी कुंजी (private key) नहीं है, इसलिए वह कभी भी डेटा की सामग्री नहीं जान सकता। हालांकि, FHE के गुणों का उपयोग करके, यह सिफरटेक्स्ट पर एक फ़ंक्शन $f$ (उदाहरण के लिए, मशीन लर्निंग अनुमान मॉडल) लागू कर सकता है और $E(f(x))$ उत्पन्न कर सकता है। क्लाइंट इसे प्राप्त करता है और वांछित परिणाम $y = f(x)$ प्राप्त करने के लिए इसे अपनी निजी कुंजी के साथ डिक्रिप्ट करता है।&lt;/p>
&lt;hr>
&lt;h2 id="2-समरप-एनकरपशन-क-वकस-क-इतहस-phe-she-fhe">2. समरूप एन्क्रिप्शन के विकास का इतिहास: PHE, SHE, FHE
&lt;/h2>&lt;p>समरूप एन्क्रिप्शन एक ही बार में अपने वर्तमान &amp;ldquo;पूर्ण&amp;rdquo; रूप में विकसित नहीं हुआ था। इसे सक्षम किए जा सकने वाले ऑपरेशनों के प्रकार और संख्या के आधार पर मोटे तौर पर तीन चरणों में वर्गीकृत किया जाता है।&lt;/p>
&lt;h3 id="आशक-रप-स-समरप-एनकरपशन-partially-homomorphic-encryption---phe">आंशिक रूप से समरूप एन्क्रिप्शन (Partially Homomorphic Encryption - PHE)
&lt;/h3>&lt;p>PHE एक एन्क्रिप्शन पद्धति है जो बिना किसी सीमा के जोड़ या गुणा में से &lt;strong>केवल एक&lt;/strong> को करने की अनुमति देती है। वास्तव में, इस गुण वाले एन्क्रिप्शन लंबे समय से मौजूद हैं।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>RSA एन्क्रिप्शन (गुणा के लिए समरूपता)&lt;/strong>
RSA एन्क्रिप्शन में अनजाने में गुणात्मक समरूपता थी। मान लें कि प्लेनटेक्स्ट $m_1, m_2$ है, और सार्वजनिक कुंजी $(e, N)$ है:
$$ E(m_1) = m_1^e \pmod N $$
$$ E(m_2) = m_2^e \pmod N $$
यदि हम इन्हें गुणा करते हैं:
$$ E(m_1) \times E(m_2) = (m_1 \cdot m_2)^e \pmod N = E(m_1 \times m_2) $$
इस प्रकार, सिफरटेक्स्ट का गुणा प्लेनटेक्स्ट के गुणा के अनुरूप होता है।&lt;/li>
&lt;li>&lt;strong>Paillier एन्क्रिप्शन (जोड़ के लिए समरूपता)&lt;/strong>
1999 में तैयार किए गए पैलिएर (Paillier) एन्क्रिप्शन में योगात्मक समरूपता (additive homomorphism) होती है। इसे इलेक्ट्रॉनिक वोटिंग (जहां एन्क्रिप्टेड वोटों को जोड़ा जाता है, और केवल अंतिम परिणाम को डिक्रिप्ट किया जाता है) जैसी चीजों में व्यावहारिक रूप से उपयोग किया गया है।&lt;/li>
&lt;/ul>
&lt;h3 id="कछ-हद-तक-समरप-एनकरपशन-somewhat-homomorphic-encryption---she">कुछ हद तक समरूप एन्क्रिप्शन (Somewhat Homomorphic Encryption - SHE)
&lt;/h3>&lt;p>यह एक ऐसी विधि है जो जोड़ और गुणा &lt;strong>दोनों&lt;/strong> को निष्पादित कर सकती है, लेकिन किए जा सकने वाले &lt;strong>ऑपरेशनों की संख्या (सर्किट की गहराई) पर एक सीमा&lt;/strong> होती है। &amp;ldquo;शोर (noise)&amp;rdquo; के संचय के कारण (जिसकी चर्चा बाद में की गई है), यदि किसी निश्चित संख्या से अधिक गुणा किया जाता है, तो डिक्रिप्शन असंभव हो जाता है। 2005 का BGN (Boneh-Goh-Nissim) एन्क्रिप्शन इस श्रेणी में आता है, लेकिन व्यावहारिक और जटिल गणनाएं (जैसे डीप लर्निंग) करने में इसकी सीमाएं थीं।&lt;/p>
&lt;h3 id="परण-समरप-एनकरपशन-fully-homomorphic-encryption---fhe">पूर्ण समरूप एन्क्रिप्शन (Fully Homomorphic Encryption - FHE)
&lt;/h3>&lt;p>यह एक एन्क्रिप्शन विधि है जहां जोड़ और गुणा दोनों को &lt;strong>असीमित बार&lt;/strong> निष्पादित किया जा सकता है। सूचना सिद्धांत में ट्यूरिंग-पूर्णता के समान, यदि जोड़ (XOR के समतुल्य) और गुणा (AND के समतुल्य) को अनिश्चित काल तक जोड़ा जा सकता है, तो इसका अर्थ है कि सिद्धांत रूप में कोई भी गणना योग्य फ़ंक्शन या एल्गोरिदम एन्क्रिप्टेड अवस्था में निष्पादित किया जा सकता है।&lt;/p>
&lt;p>लंबे समय तक, FHE को &amp;ldquo;क्रिप्टोग्राफी का पवित्र कंठ (Holy Grail of Cryptography)&amp;rdquo; कहा जाता था, और यहां तक कहा जाता था कि इसे साकार करना असंभव हो सकता है। हालाँकि, 2009 में, स्टैनफोर्ड विश्वविद्यालय के एक तत्कालीन पीएचडी छात्र &lt;strong>क्रेग जेंट्री (Craig Gentry)&lt;/strong> ने आदर्श जालक (Ideal Lattices) का उपयोग करते हुए पहली FHE योजना प्रस्तावित की और दुनिया को चौंका दिया।&lt;/p>
&lt;hr>
&lt;h2 id="3-fhe-क-गणतय-आधर-lwe-समसय-और-ring-lwe">3. FHE का गणितीय आधार: LWE समस्या और Ring-LWE
&lt;/h2>&lt;p>कई मुख्यधारा की FHE योजनाएँ आज &lt;strong>LWE (Learning With Errors) समस्या&lt;/strong> पर आधारित हैं, जो &amp;ldquo;लैटिस-आधारित क्रिप्टोग्राफी (Lattice-based Cryptography)&amp;rdquo; में एक कठिन गणितीय समस्या है, जिसे पोस्ट-क्वांटम क्रिप्टोग्राफी के रूप में भी जाना जाता है।&lt;/p>
&lt;h3 id="lwe-समसय-क-सहज-समझ">LWE समस्या की सहज समझ
&lt;/h3>&lt;p>गॉसियन उन्मूलन (Gaussian elimination) जैसी विधियों का उपयोग करके रैखिक समीकरणों की प्रणालियों को हल करना आसान है।&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 \equiv 12 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 \equiv 8 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>हालाँकि, क्या होगा यदि हम इस समीकरण के परिणाम में थोड़ी सी &amp;ldquo;यादृच्छिक त्रुटि (शोर)&amp;rdquo; $e$ जोड़ दें?&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 + e_1 \equiv 13 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 + e_2 \equiv 7 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>केवल इस त्रुटि $e$ को जोड़ने से, गुप्त चर सदिश (secret variable vector) $\vec{s}$ को खोजने की समस्या एक NP-hard समस्या में बदल जाती है जिसे वर्तमान सुपर कंप्यूटर या क्वांटम कंप्यूटर का उपयोग करके भी डिक्रिप्ट करना मुश्किल है। यह LWE समस्या है।&lt;/p>
&lt;h3 id="ring-lwe-समसय-rlwe">Ring-LWE समस्या (RLWE)
&lt;/h3>&lt;p>चूंकि मानक LWE समस्या में मैट्रिक्स संचालन शामिल होता है, इसलिए इसमें ऐसी समस्याएं थीं कि कुंजी का आकार बहुत बड़ा (कभी-कभी गीगाबाइट में) था और कम्प्यूटेशनल दक्षता खराब थी। इसे हल करने के लिए, &lt;strong>Ring-LWE (RLWE) समस्या&lt;/strong>, जो बहुपद वलय (polynomial rings) पर संचालन का उपयोग करती है, पेश की गई थी।&lt;/p>
&lt;p>RLWE में, तत्व बहुपद वलय $R_q = \mathbb{Z}_q[x] / (x^N + 1)$ से संबंधित होते हैं (जहाँ $N$ 2 की घात है, और $q$ एक अभाज्य मापांक (prime modulus) है)।
मान लें कि गुप्त कुंजी एक बहुपद $s(x)$ है, $a(x)$ एक यादृच्छिक बहुपद है, और $e(x)$ एक छोटा शोर बहुपद है, तो सार्वजनिक कुंजी (public key) निम्न जोड़ी बन जाती है:&lt;/p>
$$ (a(x), b(x)) \quad \text{where} \quad b(x) = -a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>एन्क्रिप्शन के दौरान, इस बहुपद के गुणों का उपयोग प्लेनटेक्स्ट $m(x)$ को एनकोड करने और सिफरटेक्स्ट उत्पन्न करने के लिए किया जाता है।&lt;/p>
&lt;hr>
&lt;h2 id="4-सबस-बड-बध-शर-noise-और-जटर-क-बटसटरपग">4. सबसे बड़ी बाधा &amp;ldquo;शोर (Noise)&amp;rdquo; और जेंट्री की बूटस्ट्रैपिंग
&lt;/h2>&lt;p>FHE को समझने में सबसे महत्वपूर्ण अवधारणा &lt;strong>&amp;ldquo;शोर प्रबंधन (Noise Management)&amp;rdquo;&lt;/strong> है।&lt;/p>
&lt;p>LWE/RLWE-आधारित एन्क्रिप्शन में, सुरक्षा सुनिश्चित करने के लिए जानबूझकर एक छोटा &amp;ldquo;शोर (त्रुटि)&amp;rdquo; शामिल किया जाता है।
मोटे तौर पर कहें সমগ্র, प्लेनटेक्स्ट $m$ के सिफरटेक्स्ट $c$ को डिक्रिप्ट करने की प्रक्रिया को निम्नलिखित सूत्र द्वारा व्यक्त किया जा सकता है:&lt;/p>
$$ D(c) = (c \cdot s) \pmod q = m + \text{noise} $$
&lt;p>डिक्रिप्शन के दौरान, सही प्लेनटेक्स्ट $m$ प्राप्त करने के लिए इस &lt;code>noise&lt;/code> को राउंडिंग जैसी प्रक्रियाओं द्वारा हटा दिया जाता है। हालाँकि, जब सिफरटेक्स्ट के बीच समरूप संचालन (विशेष रूप से गुणा) किया जाता है, तो यह शोर नाटकीय रूप से बढ़ जाता है।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>समरूप जोड़ (Homomorphic Addition)&lt;/strong>: शोर संयोजी रूप से बढ़ता है ($e_1 + e_2$)। यह अपेक्षाकृत क्रमिक वृद्धि है।&lt;/li>
&lt;li>&lt;strong>समरूप जोड़ द्वारा समरूपता की गणितीय अभिव्यक्ति&lt;/strong>:
$$ E(m_1) \oplus E(m_2) = E(m_1 + m_2) $$&lt;/li>
&lt;li>&lt;strong>समरूप गुणा (Homomorphic Multiplication)&lt;/strong>: शोर गुणात्मक रूप से विस्फोटित होता है (क्योंकि इसमें $e_1 \times e_2$ आदि शामिल हैं)। केवल कुछ गुणा के बाद, शोर $q/2$ की सीमा से अधिक हो जाता है, जिससे उचित राउंडिंग प्रक्रिया विफल हो जाती है और डिक्रिप्शन असंभव हो जाता है।&lt;/li>
&lt;li>&lt;strong>समरूप गुणा द्वारा समरूपता की गणितीय अभिव्यक्ति&lt;/strong>:
$$ E(m_1) \otimes E(m_2) = E(m_1 \times m_2) $$&lt;/li>
&lt;/ul>
&lt;p>यही कारण है कि FHE को लंबे समय तक महसूस नहीं किया जा सका, और यह SHE (सीमित संख्या में संचालन के साथ) तक ही सीमित रहा।&lt;/p>
&lt;h3 id="बटसटरपग-bootstrapping-क-जद">बूटस्ट्रैपिंग (Bootstrapping) का जादू
&lt;/h3>&lt;p>क्रेग जेंट्री का सबसे प्रतिभाशाली योगदान &lt;strong>&amp;ldquo;बूटस्ट्रैपिंग&amp;rdquo;&lt;/strong> नामक शोर कम करने वाली तकनीक का आविष्कार था। यह क्रिप्टोग्राफी में एक प्रतिमान बदलाव (paradigm shift) था।&lt;/p>
&lt;p>सहज रूप से, यह एक ऐसा ऑपरेशन है जो &amp;ldquo;सिफरटेक्स्ट के शोर से भर जाने और टूटने से पहले, इसे एन्क्रिप्टेड अवस्था में ही &amp;lsquo;डिक्रिप्ट&amp;rsquo; करके साफ करता है, और इसे एक नए सिफरटेक्स्ट में डालता है।&amp;rdquo;&lt;/p>
&lt;ol>
&lt;li>मान लें कि हमारे पास एक उच्च-शोर वाला सिफरटेक्स्ट $C_{noisy}$ है।&lt;/li>
&lt;li>क्लाइंट पहले से ही सर्वर को निजी कुंजी $sk$ का &amp;ldquo;सार्वजनिक कुंजी द्वारा एन्क्रिप्टेड संस्करण&amp;rdquo; $E_{pk}(sk)$ (जिसे बूटस्ट्रैपिंग कुंजी कहा जाता है) प्रदान करता है।&lt;/li>
&lt;li>सर्वर $C_{noisy}$ पर समरूप रूप से &lt;strong>डिक्रिप्शन सर्किट (Decryption Circuit)&lt;/strong> को निष्पादित करता है।&lt;/li>
&lt;li>विशेष रूप से, यह $E_{pk}(sk)$ का उपयोग करके $E_{pk}(C_{noisy})$ पर &amp;ldquo;एन्क्रिप्टेड स्पेस के भीतर डिक्रिप्शन&amp;rdquo; करता है।&lt;/li>
&lt;li>चूंकि यह डिक्रिप्शन सर्किट स्वयं एक समरूप संचालन है, यह नया शोर पैदा करता है, लेकिन आउटपुट के रूप में उत्पन्न नए सिफरटेक्स्ट $C_{fresh}$ का शोर एक निश्चित &amp;ldquo;निश्चित स्तर (fixed level)&amp;rdquo; पर रीसेट हो जाता है।&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["उच्च-शोर सिफरटेक्स्ट C_noisy"] --> B["समरूप डिक्रिप्शन सर्किट (Eval_Dec)"]
C["एन्क्रिप्टेड निजी कुंजी E(sk)"] --> B
B --> D["निम्न-शोर सिफरटेक्स्ट C_fresh"]
style B fill:#ffeeba,stroke:#ffc107&lt;/div>
&lt;p>गणना के दौरान समय-समय पर इस बूटस्ट्रैपिंग को निष्पादित करके, सिद्धांत रूप में अनंत गहराई के सर्किट की गणना करना संभव हो गया (FHE की उपलब्धि)। हालाँकि, जेंट्री की शुरुआती पद्धति निराशाजनक रूप से महंगी थी, जिसमें बूटस्ट्रैपिंग प्रक्रिया में हर बार कई मिनटों से लेकर कई घंटों तक का समय लगता था।&lt;/p>
&lt;hr>
&lt;h2 id="5-fhe-क-पढय-और-परमख-यजनओ-क-वकस">5. FHE की पीढ़ियाँ और प्रमुख योजनाओं का विकास
&lt;/h2>&lt;p>FHE के व्यावहारिक अनुप्रयोग के लिए, दुनिया भर के क्रिप्टोग्राफर इसके एल्गोरिदम को बेहतर बनाने के लिए प्रतिस्पर्धा कर रहे हैं। वर्तमान में, FHE को मुख्य रूप से 4 पीढ़ियों/श्रेणियों में वर्गीकृत किया गया है।&lt;/p>
&lt;h3 id="दसर-पढ-परणक-पर-सटक-सचलन-bgv-bfv">दूसरी पीढ़ी: पूर्णांकों पर सटीक संचालन (BGV, BFV)
&lt;/h3>&lt;p>&lt;strong>BGV (Brakerski-Gentry-Vaikuntanathan)&lt;/strong> और &lt;strong>BFV (Brakerski/Fan-Vercauteren)&lt;/strong> योजनाएँ 2011 से 2012 के बीच उभरीं। ये RLWE पर आधारित हैं और पूर्णांकों (सटीक गणना) के मॉड्यूलर अंकगणित के लिए उपयुक्त हैं।
वे SIMD (Single Instruction, Multiple Data) जैसी बैचिंग तकनीक का समर्थन करते हैं, जो एक ही विशाल बहुपद सिफरटेक्स्ट में हजारों डेटा स्लॉट पैक करने और एक ही समय में समानांतर गणना करने की अनुमति देता है।&lt;/p>
&lt;h3 id="तसर-पढ-बटसटरपग-क-तवरण-gsw-fhew-tfhe">तीसरी पीढ़ी: बूटस्ट्रैपिंग का त्वरण (GSW, FHEW, TFHE)
&lt;/h3>&lt;p>2013 की &lt;strong>GSW (Gentry-Sahai-Waters)&lt;/strong> योजना ने FHE संरचना को बहुत सरल बना दिया। इससे विकसित होकर वर्तमान मुख्यधारा की योजनाओं में से एक &lt;strong>TFHE (Fast Fully Homomorphic Encryption over the Torus)&lt;/strong> बनी।
TFHE की विशेषता इसकी बहुत तेज़ बूटस्ट्रैपिंग (मिलीसेकंड में) है। यह गेट स्तर (तार्किक सर्किट जैसे AND, XOR) पर संचालन में बहुत प्रभावी है, और सिफरटेक्स्ट का आकार भी अपेक्षाकृत छोटा है, जिससे यह किसी भी तार्किक सर्किट का तेज़ी से मूल्यांकन करने के लिए उपयुक्त हो जाता है।&lt;/p>
&lt;h3 id="चथ-पढ-अनमनत-गणन-और-मशन-लरनग-पर-धयन-कदरत-ckks">चौथी पीढ़ी: अनुमानित गणना और मशीन लर्निंग पर ध्यान केंद्रित (CKKS)
&lt;/h3>&lt;p>2017 में चेओन एट अल. द्वारा प्रस्तावित &lt;strong>CKKS (Cheon-Kim-Kim-Song)&lt;/strong> योजना को वर्तमान AI और मशीन लर्निंग गोपनीयता सुरक्षा में निश्चित तकनीक माना जा सकता है।
जबकि पिछली FHE योजनाओं ने &amp;ldquo;सटीक पूर्णांक गणना&amp;rdquo; पर ध्यान केंद्रित किया, CKKS एन्क्रिप्टेड अवस्था में &lt;strong>&amp;ldquo;फ़्लोटिंग-पॉइंट संख्याओं की अनुमानित गणना&amp;rdquo;&lt;/strong> का समर्थन करता है। यह वास्तविक संख्या गणनाओं में भारी प्रदर्शन प्रदान करता है जहां छोटी त्रुटियां स्वीकार्य हैं, जैसे तंत्रिका नेटवर्क (neural networks) का प्रशिक्षण और अनुमान।&lt;/p>
&lt;p>नीचे दी गई तालिका उद्देश्य के अनुसार योजनाओं को चुनने का सारांश देती है:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">योजना का नाम&lt;/th>
&lt;th style="text-align:left">डेटा प्रकार&lt;/th>
&lt;th style="text-align:left">अनुशंसित उपयोग के मामले&lt;/th>
&lt;th style="text-align:left">विशेषताएँ&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>BFV / BGV&lt;/strong>&lt;/td>
&lt;td style="text-align:left">पूर्णांक (Integer)&lt;/td>
&lt;td style="text-align:left">सटीक सांख्यिकीय गणना, वित्तीय डेटा एकत्रीकरण, DB खोज&lt;/td>
&lt;td style="text-align:left">SIMD बैचिंग के माध्यम से उच्च थ्रूपुट&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>CKKS&lt;/strong>&lt;/td>
&lt;td style="text-align:left">वास्तविक संख्या (Real/Complex)&lt;/td>
&lt;td style="text-align:left">मशीन लर्निंग (DNN, लॉजिस्टिक रिग्रेशन), सिग्नल प्रोसेसिंग&lt;/td>
&lt;td style="text-align:left">अनुमानित गणना के माध्यम से त्वरण, रीस्केलिंग&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>TFHE&lt;/strong>&lt;/td>
&lt;td style="text-align:left">बूलियन (Boolean)&lt;/td>
&lt;td style="text-align:left">मनमाना तार्किक सर्किट, स्ट्रिंग खोज, गैर-रेखीय फ़ंक्शन मूल्यांकन&lt;/td>
&lt;td style="text-align:left">अल्ट्रा-फास्ट बूटस्ट्रैपिंग (मिलीसेकंड स्तर)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="6-वयवहर-म-fhe-लइबरर-और-वचरक-कड">6. व्यवहार में: FHE लाइब्रेरी और वैचारिक कोड
&lt;/h2>&lt;p>आजकल, कई ओपन-सोर्स लाइब्रेरी उपलब्ध हैं जो आपको क्रिप्टोग्राफी के गहरे ज्ञान के बिना FHE का उपयोग करने की अनुमति देती हैं।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Microsoft SEAL (Simple Encrypted Arithmetic Library)&lt;/strong>: BFV, BGV और CKKS का समर्थन करने वाली एक C++ लाइब्रेरी। उद्योग के मानकों में से एक। इसका पायथन बाइंडिंग, &lt;strong>TenSEAL&lt;/strong>, AI इंजीनियरों के बीच बहुत लोकप्रिय है।&lt;/li>
&lt;li>&lt;strong>Zama (Concrete)&lt;/strong>: TFHE पर आधारित एक फ्रेमवर्क। इसे रस्ट/पायथन (Rust/Python) में लिखा जा सकता है और यह मौजूदा PyTorch मॉडल को संकलित (compile) करने और उन्हें FHE (Concrete ML) पर चलाने की सुविधा प्रदान करता है।&lt;/li>
&lt;li>&lt;strong>OpenFHE&lt;/strong>: PALISADE का उत्तराधिकारी, एक व्यापक C++ लाइब्रेरी जो सभी प्रमुख योजनाओं का समर्थन करती है।&lt;/li>
&lt;/ul>
&lt;h3 id="पयथन-tenseal-क-उपयग-करत-हए-fhe-परगरमग-क-उदहरण">पायथन (TenSEAL) का उपयोग करते हुए FHE प्रोग्रामिंग का उदाहरण
&lt;/h3>&lt;p>यहां एक वैचारिक पायथन कोड का उदाहरण दिया गया है जो CKKS योजना का उपयोग करके वास्तविक संख्या वैक्टरों को एन्क्रिप्टेड अवस्था में जोड़ने और गुणा करने को दर्शाता है।&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;/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">tenseal&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">ts&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="c1"># CKKS योजना का उपयोग करें, और बहुपद की डिग्री को 8192 पर सेट करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SCHEME_TYPE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CKKS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">poly_modulus_degree&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">coeff_mod_bit_sizes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&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="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_galois_keys&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_scale&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">40&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"># 2. क्लाइंट पक्ष: डेटा एन्क्रिप्शन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">1.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">4.0&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">enc_v1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector2&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. सर्वर पक्ष: एन्क्रिप्टेड अवस्था में गणना (Data in Use की सुरक्षा)&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="n">enc_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">enc_v2&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. क्लाइंट पक्ष: परिणाम डिक्रिप्शन&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="n">res_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_add&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_mul&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&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;डिक्रिप्टेड जोड़ परिणाम: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_add&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="c1"># आउटपुट उदाहरण: [3.5000001, 5.5000001, 7.5000002] (अनुमानित गणना के कारण छोटी त्रुटियां शामिल हैं)&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;डिक्रिप्टेड गुणा परिणाम: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_mul&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="c1"># आउटपुट उदाहरण: [3.0000002, 7.5000005, 14.0000003]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>जैसा कि आप उपरोक्त कोड से देख सकते हैं, आप &lt;code>enc_v1 + enc_v2&lt;/code> जैसे नियमित पायथन ऑपरेटरों को ओवरलोड कर सकते हैं, जिससे आप सहज रूप से सिफरटेक्स्ट के बीच गणना लिख सकते हैं। सर्वर पक्ष पर, वेक्टर गणना वेक्टर की सामग्री को जाने बिना पूरी हो जाती है।&lt;/p>
&lt;hr>
&lt;h2 id="7-fhe-क-चनतय-परदरशन-और-हरडवयर-तवरण-hardware-acceleration">7. FHE की चुनौतियाँ: प्रदर्शन और हार्डवेयर त्वरण (Hardware Acceleration)
&lt;/h2>&lt;p>यद्यपि FHE सैद्धांतिक रूप से पूर्ण सुरक्षा प्रदान करता है, व्यावहारिक अनुप्रयोग में सबसे बड़ी चुनौती &lt;strong>&amp;ldquo;प्रदर्शन ओवरहेड (Performance Overhead)&amp;rdquo;&lt;/strong> है।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>कम्प्यूटेशनल ओवरहेड&lt;/strong>: प्लेनटेक्स्ट में गणना की तुलना में, सीपीयू पर सिफरटेक्स्ट में गणना हजारों से दसियों हजार गुना धीमी होती है। बहुपद गुणा और बूटस्ट्रैपिंग के लिए भारी मात्रा में FFT (फास्ट फूरियर ट्रांसफॉर्म) और NTT (नंबर थ्योरेटिक ट्रांसफॉर्म) गणनाओं की आवश्यकता होती है।&lt;/li>
&lt;li>&lt;strong>डेटा आकार का विस्तार (Ciphertext Expansion)&lt;/strong>: कुछ बाइट्स का प्लेनटेक्स्ट एन्क्रिप्ट होने पर कई मेगाबाइट का हो सकता है। यह मेमोरी बैंडविड्थ और नेटवर्क बैंडविड्थ पर बहुत अधिक दबाव डालता है।&lt;/li>
&lt;/ol>
&lt;h3 id="हरडवयर-आधरत-समधन-क-दषटकण">हार्डवेयर-आधारित समाधान का दृष्टिकोण
&lt;/h3>&lt;p>इस ओवरहेड को दूर करने के लिए, दुनिया भर में FHE-विशिष्ट हार्डवेयर त्वरक (ASIC, FPGA, GPU समर्थन) विकसित किए जा रहे हैं।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GPU त्वरण (GPU Acceleration)&lt;/strong>: NVIDIA जैसे शक्तिशाली GPU का उपयोग करके NTT गणनाओं और बूटस्ट्रैपिंग को समानांतर करने के प्रयास चल रहे हैं, जिसमें सॉफ्टवेयर कार्यान्वयन की तुलना में दसियों गुना गति में वृद्धि की सूचना है (उदाहरण: 100x.ai, Zama का TFHE-rs CUDA बैकएंड)।&lt;/li>
&lt;li>&lt;strong>DARPA DPRIVE प्रोजेक्ट&lt;/strong>: US डिफेंस एडवांस्ड रिसर्च प्रोजेक्ट्स एजेंसी (DARPA) &amp;ldquo;DPRIVE (Data Protection in Virtual Environments)&amp;rdquo; नामक एक समर्पित हार्डवेयर विकास परियोजना चला रही है, जिसका उद्देश्य FHE की गणना गति को प्लेनटेक्स्ट प्रोसेसिंग गति (10 गुना के ओवरहेड के भीतर) के बराबर स्तर तक बढ़ाना है, जिसमें इंटेल (Intel), माइक्रोसॉफ्ट (Microsoft), और इंटेलेक्चुअल वेंचर्स (Intellectual Ventures) भाग ले रहे हैं।&lt;/li>
&lt;li>&lt;strong>FPU (FHE Processing Unit) का आगमन&lt;/strong>: कॉर्नमी (Cornami) और ऑप्टालिसिस (Optalysys) जैसे स्टार्टअप ऑप्टिकल कंप्यूटिंग और विशेष सिलिकॉन आर्किटेक्चर का उपयोग करके समर्पित FHE चिप्स विकसित कर रहे हैं।&lt;/li>
&lt;/ul>
&lt;p>निकट भविष्य में, ऐसा समय आ सकता है जब AI में NPU (Neural Processing Unit) की तरह सर्वर और क्लाउड इन्फ्रास्ट्रक्चर में &amp;ldquo;FPU&amp;rdquo; मानक उपकरण के रूप में स्थापित हो जाएंगे।&lt;/p>
&lt;hr>
&lt;h2 id="8-अपकषत-उपयग-क-ममल-expected-use-cases">8. अपेक्षित उपयोग के मामले (Expected Use Cases)
&lt;/h2>&lt;p>अब जब FHE व्यावहारिक गति तक पहुँच रहा है, तो निम्नलिखित क्षेत्रों में विनाशकारी नवाचारों (disruptive innovations) की उम्मीद है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>चिकित्सा और जीनोमिक विश्लेषण में गोपनीयता संरक्षण&lt;/strong>:
विभिन्न अस्पतालों से रोगियों के मेडिकल रिकॉर्ड और डीएनए डेटा को FHE का उपयोग करके एन्क्रिप्टेड अवस्था में क्लाउड AI द्वारा प्रशिक्षित किया जा सकता है, जो गोपनीयता कानूनों (जैसे HIPAA और GDPR) का उल्लंघन किए बिना अत्यधिक सटीक कैंसर निदान मॉडल और नई दवा के विकास को सक्षम करता है।&lt;/li>
&lt;li>&lt;strong>वित्तीय संस्थानों में धोखाधड़ी का पता लगाना और एंटी-मनी लॉन्ड्रिंग (AML)&lt;/strong>:
प्रतिस्पर्धी बैंक ग्राहकों के खाते की जानकारी और लेन-देन के इतिहास को प्रकट किए बिना, एन्क्रिप्टेड अवस्था में एक-दूसरे के डेटा को क्रॉस-चेक कर सकते हैं, जिससे विशाल धन शोधन नेटवर्क का पता लगाने के लिए क्रॉस-बैंक विश्लेषण संभव हो जाता है।&lt;/li>
&lt;li>&lt;strong>सुरक्षित AI अनुमान API (MaaS: Model as a Service)&lt;/strong>:
उपयोगकर्ता अपनी आवाज़, चेहरे की छवियों और संकेतों (prompts) को एन्क्रिप्ट कर सकते हैं और उन्हें AI सेवाओं (जैसे कि ChatGPT जैसे LLM) में भेज सकते हैं। AI प्रदाता उपयोगकर्ता के इनपुट को जाने बिना उत्तर उत्पन्न करते हैं और इसे सिफरटेक्स्ट के रूप में वापस करते हैं। यह &amp;ldquo;AI द्वारा व्यक्तिगत जानकारी सीखने या झाँकने&amp;rdquo; की चिंताओं को पूरी तरह से दूर करता है।&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="9-नषकरष-करपटगरफ-क-भवषय-अदशय-गणन-invisible-computing-क-ओर">9. निष्कर्ष: क्रिप्टोग्राफी का भविष्य &amp;ldquo;अदृश्य गणना (Invisible Computing)&amp;rdquo; की ओर
&lt;/h2>&lt;p>जिस तरह 1970 के दशक में सार्वजनिक कुंजी एन्क्रिप्शन (RSA) के आविष्कार ने इंटरनेट पर सुरक्षित संचार (जैसे HTTPS) को संभव बनाया, उसी तरह क्रेग जेंट्री द्वारा FHE का आविष्कार क्रिप्टोग्राफी के इतिहास में सबसे महत्वपूर्ण मील के पत्थरों में से एक है।&lt;/p>
&lt;p>वर्तमान में, पूर्ण समरूप एन्क्रिप्शन (FHE) प्रयोगशाला के सिद्धांत से बाहर आ गया है और ऐसे चरण में प्रवेश कर गया है जहां Microsoft, IBM, Intel, Google और कई स्टार्टअप इसे व्यावहारिक बनाने के लिए प्रतिस्पर्धा कर रहे हैं। हालांकि कम्प्यूटेशनल लागत और डेटा आकार की चुनौतियां अभी भी मौजूद हैं, एल्गोरिदम के शोधन और हार्डवेयर त्वरक के विकास के कारण, मूर के नियम (Moore&amp;rsquo;s Law) से अधिक गति से प्रदर्शन में सुधार जारी है।&lt;/p>
&lt;p>कुछ ही वर्षों में, &amp;ldquo;एन्क्रिप्टेड रहने के दौरान डेटा की गणना करना&amp;rdquo; कोई विशेष बात नहीं होगी, बल्कि यह क्लाउड सेवाओं में एक मानक डेटा सुरक्षा सर्वोत्तम अभ्यास बन जाएगा। FHE अगली पीढ़ी की सुरक्षा का प्रमुख तत्व है, जो डेटा-संचालित समाज में &lt;strong>परम गोपनीयता और डेटा उपयोग के बीच संतुलन&lt;/strong> को साकार करता है।&lt;/p></description></item><item><title>एलिप्टिक कर्व क्रिप्टोग्राफी (ECC) का गणितीय आधार और C++ में इसका कार्यान्वयन</title><link>http://kenji.blog/hi/p/elliptic-curve-cryptography-math-cpp/</link><pubDate>Fri, 11 Sep 2026 10:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/elliptic-curve-cryptography-math-cpp/</guid><description>&lt;img src="http://kenji.blog/p/elliptic-curve-cryptography-math-cpp/img/eyecatch.jpg" alt="Featured image of post एलिप्टिक कर्व क्रिप्टोग्राफी (ECC) का गणितीय आधार और C++ में इसका कार्यान्वयन" />&lt;h1 id="एलपटक-करव-करपटगरफ-ecc-क-गणतय-आधर-और-c-म-इसक-करयनवयन">एलिप्टिक कर्व क्रिप्टोग्राफी (ECC) का गणितीय आधार और C++ में इसका कार्यान्वयन
&lt;/h1>&lt;p>आधुनिक क्रिप्टोग्राफी में, &lt;strong>एलिप्टिक कर्व क्रिप्टोग्राफी (Elliptic Curve Cryptography: ECC)&lt;/strong> अत्यंत महत्वपूर्ण भूमिका निभाती है। हमारे दैनिक इंटरनेट संचार (HTTPS/TLS) से लेकर, स्मार्टफोन के सुरक्षित एन्क्लेव, SSH के माध्यम से सर्वर प्रमाणीकरण, FIDO जैसे पासवर्ड रहित प्रमाणीकरण, और यहाँ तक कि बिटकॉइन और एथेरियम जैसी क्रिप्टो संपत्तियों तक, यह कहना अतिशयोक्ति नहीं होगी कि आधुनिक डिजिटल समाज का विश्वास आधार ECC द्वारा समर्थित है।&lt;/p>
&lt;p>इस लेख में, हम विस्तार से समझाएंगे कि एलिप्टिक कर्व क्रिप्टोग्राफी कैसे काम करती है, इसके पीछे के सुंदर लेकिन जटिल गणितीय सिद्धांत (परिमित क्षेत्र पर बीजगणितीय ज्यामिति) से शुरू करते हुए, वास्तविक C++ का उपयोग करके कार्यान्वयन विधि, और यहां तक कि साइड-चैनल हमलों (टाइमिंग हमलों) को रोकने के लिए सुरक्षित कोडिंग तकनीक तक।&lt;/p>
&lt;hr>
&lt;h2 id="1-एलपटक-करव-करपटगरफ-कय-rsa-क-सथ-तलन">1. एलिप्टिक कर्व क्रिप्टोग्राफी क्यों? (RSA के साथ तुलना)
&lt;/h2>&lt;p>पब्लिक-की क्रिप्टोग्राफी का पर्याय लंबे समय से &lt;strong>RSA एन्क्रिप्शन&lt;/strong> रहा है। RSA एन्क्रिप्शन अपनी सुरक्षा के आधार के रूप में &amp;ldquo;बड़े समग्र संख्याओं के अभाज्य गुणनखंडन की कठिनाई&amp;rdquo; पर निर्भर करता है। हालांकि, कंप्यूटर की गणना क्षमता में सुधार के साथ, सुरक्षा बनाए रखने के लिए RSA की कुंजी की लंबाई (मोडुलस के बिट्स की संख्या) को लगातार बढ़ाने की आवश्यकता उत्पन्न हुई है। वर्तमान में, कम से कम 2048 बिट्स, और अधिक सुरक्षित होने के लिए 3072 बिट्स या 4096 बिट्स की कुंजी की लंबाई की सिफारिश की जाती है।&lt;/p>
&lt;p>इसके विपरीत, एलिप्टिक कर्व क्रिप्टोग्राफी (ECC) अपनी सुरक्षा के लिए &lt;strong>&amp;ldquo;एलिप्टिक कर्व पर असतत लघुगणक समस्या (Discrete Logarithm Problem on Elliptic Curves - ECDLP)&amp;rdquo;&lt;/strong> नामक एक अलग गणितीय कठिनाई पर निर्भर करता है। ECDLP को हल करने के लिए आज तक कोई कुशल एल्गोरिदम (जैसे सब-एक्सपोनेंशियल टाइम एल्गोरिदम) नहीं खोजा जा सका है, और यहां तक कि ज्ञात सबसे कुशल हमले के तरीके भी घातांकीय (exponential) समय लेते हैं।&lt;/p>
&lt;p>इस गुण के कारण, ECC का यह निर्णायक लाभ है कि यह &lt;strong>बहुत छोटी कुंजी की लंबाई के साथ RSA के समान सुरक्षा शक्ति प्राप्त कर सकता है&lt;/strong>।&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:center">सुरक्षा शक्ति (बिट्स)&lt;/th>
&lt;th style="text-align:center">RSA एन्क्रिप्शन कुंजी की लंबाई (बिट्स)&lt;/th>
&lt;th style="text-align:center">एलिप्टिक कर्व क्रिप्टोग्राफी कुंजी की लंबाई (बिट्स)&lt;/th>
&lt;th style="text-align:center">कुंजी की लंबाई का अनुपात&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:center">80&lt;/td>
&lt;td style="text-align:center">1024&lt;/td>
&lt;td style="text-align:center">160&lt;/td>
&lt;td style="text-align:center">1:6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">112&lt;/td>
&lt;td style="text-align:center">2048&lt;/td>
&lt;td style="text-align:center">224&lt;/td>
&lt;td style="text-align:center">1:9&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">128&lt;/td>
&lt;td style="text-align:center">3072&lt;/td>
&lt;td style="text-align:center">256&lt;/td>
&lt;td style="text-align:center">1:12&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">192&lt;/td>
&lt;td style="text-align:center">7680&lt;/td>
&lt;td style="text-align:center">384&lt;/td>
&lt;td style="text-align:center">1:20&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">256&lt;/td>
&lt;td style="text-align:center">15360&lt;/td>
&lt;td style="text-align:center">512&lt;/td>
&lt;td style="text-align:center">1:30&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>जैसा कि ऊपर दी गई तालिका दिखाती है, 128-बिट सुरक्षा शक्ति (वर्तमान मानक शक्ति) प्राप्त करने के लिए, RSA को 3072-बिट कुंजी की आवश्यकता होती है, लेकिन ECC के साथ केवल 256 बिट्स की आवश्यकता होती है। इससे गणना को कम करना, मेमोरी के उपयोग को कम करना और नेटवर्क बैंडविड्थ को सहेजना संभव हो जाता है, जिससे यह विशेष रूप से सीमित संसाधनों वाले IoT उपकरणों और स्मार्ट कार्ड वातावरण में अत्यधिक फायदेमंद हो जाता है।&lt;/p>
&lt;hr>
&lt;h2 id="2-गणतय-तयर-समह-सदधत-group-theory-और-परमत-कषतर-finite-fields-क-दनय">2. गणितीय तैयारी: समूह सिद्धांत (Group Theory) और परिमित क्षेत्र (Finite Fields) की दुनिया
&lt;/h2>&lt;p>एलिप्टिक कर्व क्रिप्टोग्राफी को वास्तव में समझने के लिए, सार बीजगणित (समूह सिद्धांत और क्षेत्र सिद्धांत) की बुनियादी अवधारणाओं को समझना आवश्यक है। यहाँ हम ECC के निर्माण के लिए आवश्यक पूर्वज्ञान का संक्षेप में सारांश दे रहे हैं।&lt;/p>
&lt;h3 id="21-समह-group-और-एबलयन-समह-abelian-group">2.1. समूह (Group) और एबेलियन समूह (Abelian Group)
&lt;/h3>&lt;p>&lt;strong>समूह (Group)&lt;/strong> एक सेट $G$ और उस सेट पर एक बाइनरी ऑपरेशन (यहाँ हम जोड़ $+$ मानेंगे) का संयोजन $(G, +)$ है, जो निम्नलिखित 4 स्वयंसिद्धों (axioms) को पूरा करता है।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>संवृतता (Closure)&lt;/strong>: किन्हीं $a, b \in G$ के लिए, $a + b \in G$ होता है।&lt;/li>
&lt;li>&lt;strong>साहचर्य (Associativity)&lt;/strong>: किन्हीं $a, b, c \in G$ के लिए, $(a + b) + c = a + (b + c)$ लागू होता है।&lt;/li>
&lt;li>&lt;strong>तत्समक अवयव का अस्तित्व (Identity element)&lt;/strong>: किसी भी $a \in G$ के लिए, एक ऐसा अवयव $e \in G$ मौजूद होता है कि $a + e = e + a = a$। एक योगात्मक समूह (additive group) के मामले में, इस तत्समक अवयव को आमतौर पर $0$ या $\mathcal{O}$ के रूप में दर्शाया जाता है।&lt;/li>
&lt;li>&lt;strong>प्रतिलोम अवयव का अस्तित्व (Inverse element)&lt;/strong>: किसी भी $a \in G$ के लिए, एक ऐसा अवयव $b \in G$ मौजूद होता है कि $a + b = b + a = e$। इस $b$ को $-a$ के रूप में दर्शाया जाता है।&lt;/li>
&lt;/ol>
&lt;p>इसके अलावा, एक समूह जिसमें संक्रियाओं के क्रम को बदलने से परिणाम नहीं बदलता है, अर्थात जो निम्नलिखित शर्त को पूरा करता है, उसे &lt;strong>एबेलियन समूह (Abelian group या क्रमविनिमेय समूह)&lt;/strong> कहा जाता है।&lt;/p>
&lt;ol start="5">
&lt;li>&lt;strong>क्रमविनिमेयता (Commutativity)&lt;/strong>: किन्हीं $a, b \in G$ के लिए, $a + b = b + a$ लागू होता है।&lt;/li>
&lt;/ol>
&lt;p>एलिप्टिक कर्व पर बिंदुओं का सेट, एक विशिष्ट जोड़ नियम को परिभाषित करके, इस &lt;strong>एबेलियन समूह&lt;/strong> का निर्माण करता है।&lt;/p>
&lt;h3 id="22-परमत-कषतर-finite-field">2.2. परिमित क्षेत्र (Finite Field)
&lt;/h3>&lt;p>क्रिप्टोग्राफी में, हम वास्तविक या सम्मिश्र संख्याओं जैसे निरंतर और असीम अवयवों वाले क्षेत्रों के बजाय &lt;strong>परिमित क्षेत्र (Finite Field)&lt;/strong> या गैलवा क्षेत्र (Galois Field) का उपयोग करते हैं, जिनमें अवयवों की संख्या परिमित होती है।&lt;/p>
&lt;p>सबसे बुनियादी परिमित क्षेत्र अभाज्य संख्या $p$ का उपयोग करने वाला &lt;strong>अभाज्य क्षेत्र (Prime Field) $\mathbb{F}_p$&lt;/strong> है। यह पूर्णांकों के सेट $\{0, 1, 2, \dots, p-1\}$ पर मॉड्यूलो $p$ (अर्थात $p$ से विभाजित करने पर शेषफल) के अंतर्गत चार बुनियादी अंकगणितीय संक्रियाओं (जोड़, घटाव, गुणा, भाग) को परिभाषित करता है।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>जोड़&lt;/strong>: $(a + b) \pmod p$&lt;/li>
&lt;li>&lt;strong>घटाव&lt;/strong>: $(a - b) \pmod p$&lt;/li>
&lt;li>&lt;strong>गुणा&lt;/strong>: $(a \times b) \pmod p$&lt;/li>
&lt;li>&lt;strong>भाग&lt;/strong>: $a \times b^{-1} \pmod p$ (जहाँ $b^{-1}$ मॉड्यूलो $p$ के तहत $b$ का गुणनात्मक प्रतिलोम है)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>गुणनात्मक प्रतिलोम (Modular Multiplicative Inverse)&lt;/strong> की गणना क्रिप्टोग्राफ़िक कार्यान्वयन में बहुत महत्वपूर्ण है। $b \times b^{-1} \equiv 1 \pmod p$ को संतुष्ट करने वाले $b^{-1}$ को खोजने के लिए मुख्य रूप से निम्नलिखित दो एल्गोरिदम का उपयोग किया जाता है।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>विस्तारित यूक्लिडियन एल्गोरिदम (Extended Euclidean Algorithm)&lt;/strong>: यह तेज़ है, लेकिन कार्यान्वयन के आधार पर, प्रसंस्करण समय इनपुट मान पर निर्भर कर सकता है, जिससे टाइमिंग हमलों का जोखिम होता है।&lt;/li>
&lt;li>&lt;strong>फ़र्मेट का छोटा प्रमेय (Fermat&amp;rsquo;s Little Theorem)&lt;/strong>: जब $p$ एक अभाज्य संख्या है और $b \neq 0$ है, तो $b^{p-1} \equiv 1 \pmod p$ लागू होता है। दोनों पक्षों को $b$ से विभाजित करने पर, हमें $b^{p-2} \equiv b^{-1} \pmod p$ मिलता है। दूसरे शब्दों में, $b$ की घात $p-2$ की गणना करके प्रतिलोम पाया जा सकता है। चूंकि घातांकीकरण (exponentiation) को निरंतर समय (constant time) में लागू करना आसान होता है, इसलिए क्रिप्टोग्राफ़िक कार्यान्वयन में इसे प्राथमिकता दी जाती है।&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="3-एलपटक-करव-क-समकरण-और-जयमत">3. एलिप्टिक कर्व के समीकरण और ज्यामिति
&lt;/h2>&lt;h3 id="31-वयरसटरस-क-समनय-रप-weierstrass-normal-form">3.1. वियरस्ट्रास का सामान्य रूप (Weierstrass Normal Form)
&lt;/h3>&lt;p>&lt;strong>एलिप्टिक कर्व (Elliptic Curve)&lt;/strong> आम तौर पर एक समतलीय वक्र (plane curve) होता है जिसे निम्नलिखित &lt;strong>वियरस्ट्रास के सामान्य रूप (Weierstrass normal form)&lt;/strong> नामक समीकरण द्वारा परिभाषित किया जाता है।&lt;/p>
$$ y^2 = x^3 + ax + b $$
&lt;p>यहाँ, $a$ और $b$ स्थिरांक हैं, और इस शर्त के रूप में कि वक्र में कोई एकवचन बिंदु (singular points जैसे स्व-प्रतिच्छेदन या कस्प) न हो (अर्थात यह एक चिकना वक्र हो), यह आवश्यक है कि निम्नलिखित &lt;strong>विविक्तकर (Discriminant) $\Delta$&lt;/strong> शून्य न हो।&lt;/p>
$$ \Delta = -16(4a^3 + 27b^2) \neq 0 $$
&lt;p>चूंकि एकवचन बिंदुओं वाले वक्र क्रिप्टोग्राफ़िक सुरक्षा से समझौता करते हैं, इसलिए गुणांक $a, b$ को हमेशा इस शर्त को पूरा करने के लिए चुना जाता है।&lt;/p>
&lt;h3 id="32-अनत-पर-बद-point-at-infinity">3.2. अनंत पर बिंदु (Point at Infinity)
&lt;/h3>&lt;p>एलिप्टिक कर्व को गणितीय रूप से पूर्ण समूह बनाने के लिए, हम समतल के बिंदुओं के अलावा &lt;strong>&amp;ldquo;अनंत पर बिंदु (Point at Infinity)&amp;rdquo;&lt;/strong> नामक एक आभासी बिंदु पेश करते हैं। इसे $\mathcal{O}$ (ओ) के रूप में दर्शाया जाता है।&lt;/p>
&lt;p>अनंत पर बिंदु $\mathcal{O}$ को उस बिंदु के रूप में परिभाषित किया गया है जहाँ सभी ऊर्ध्वाधर रेखाएँ अनंत में प्रतिच्छेद करती हैं। समूह सिद्धांत में, यह अनंत पर बिंदु $\mathcal{O}$ &lt;strong>जोड़ के तहत तत्समक अवयव&lt;/strong> (शून्य) के रूप में कार्य करता है।&lt;/p>
&lt;p>अर्थात, वक्र पर किसी भी बिंदु $P$ के लिए, निम्नलिखित लागू होता है।
&lt;/p>
$$ P + \mathcal{O} = \mathcal{O} + P = P $$
&lt;p>इसके अलावा, बिंदु $P = (x, y)$ का प्रतिलोम $-P$, x-अक्ष के सममित बिंदु $(x, -y)$ के रूप में परिभाषित किया गया है। इसलिए:
&lt;/p>
$$ P + (-P) = \mathcal{O} $$
&lt;p>
होता है।&lt;/p>
&lt;hr>
&lt;h2 id="4-एलपटक-करव-पर-समह-सचलन-बद-जड-और-दहरकरण">4. एलिप्टिक कर्व पर समूह संचालन (बिंदु जोड़ और दोहरीकरण)
&lt;/h2>&lt;p>एलिप्टिक कर्व क्रिप्टोग्राफी का मूल वक्र पर बिंदुओं के बीच &lt;strong>&amp;ldquo;जोड़ (Addition)&amp;rdquo;&lt;/strong> का संचालन है। यह सामान्य पूर्णांकों के जोड़ से अलग है और ज्यामितीय संचालन के आधार पर परिभाषित किया गया है।&lt;/p>
&lt;h3 id="41-जयमतय-जड-tangent-and-chord-method">4.1. ज्यामितीय जोड़ (Tangent and Chord Method)
&lt;/h3>&lt;p>वक्र पर दो अलग-अलग बिंदुओं $P$ और $Q$ को जोड़कर एक नया बिंदु $R$ ($R = P + Q$) खोजने की प्रक्रिया इस प्रकार है।&lt;/p>
&lt;ol>
&lt;li>बिंदु $P$ और बिंदु $Q$ से गुजरने वाली एक रेखा (जीवा/chord) खींचें।&lt;/li>
&lt;li>यह रेखा हमेशा एलिप्टिक कर्व को एक और बिंदु पर प्रतिच्छेद करेगी (आइए इसे $-R$ कहें)। (*बीजगणितीय ज्यामिति के एक प्रमेय के अनुसार)&lt;/li>
&lt;li>प्रतिच्छेदन बिंदु $-R$ को x-अक्ष पर प्रतिबिंबित करने (y-निर्देशांक के चिह्न को उलटने) से प्राप्त बिंदु, वांछित बिंदु $R$ है।&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph TD
Step1["P(x1, y1) और Q(x2, y2) को जोड़ने वाली एक रेखा खींचें"] --> Step2["वक्र के साथ तीसरे प्रतिच्छेदन बिंदु -R को खोजें"]
Step2 --> Step3["-R को x-अक्ष पर प्रतिबिंबित करें और R(x3, y3) प्राप्त करें"]
Step3 -.-> Result["यह R = P + Q है"]&lt;/div>
&lt;h3 id="42-बद-क-दहरकरण-point-doubling">4.2. बिंदु का दोहरीकरण (Point Doubling)
&lt;/h3>&lt;p>जब एक ही बिंदु $P$ को बिंदु $P$ में जोड़ा जाता है ($P + P = 2P$), तो दो बिंदुओं से गुजरने वाली रेखा खींचना संभव नहीं है। इस मामले में, हम &lt;strong>बिंदु $P$ पर वक्र की स्पर्शरेखा (Tangent)&lt;/strong> खींचते हैं।&lt;/p>
&lt;ol>
&lt;li>बिंदु $P$ पर वक्र की स्पर्शरेखा खींचें।&lt;/li>
&lt;li>यह स्पर्शरेखा वक्र को एक अन्य बिंदु $-R$ पर प्रतिच्छेद करती है।&lt;/li>
&lt;li>प्रतिच्छेदन बिंदु को x-अक्ष पर प्रतिबिंबित करने से प्राप्त बिंदु वांछित बिंदु $R = 2P$ है।&lt;/li>
&lt;/ol>
&lt;h3 id="43-बजगणतय-गणन-सतर">4.3. बीजगणितीय गणना सूत्र
&lt;/h3>&lt;p>ज्यामितीय संक्रियाओं को बीजगणितीय सूत्रों में बदला जाता है ताकि कंप्यूटर द्वारा उनकी गणना की जा सके।
सभी गणनाएँ &lt;strong>परिमित क्षेत्र $\mathbb{F}_p$ (मॉड्यूलो $p$) पर&lt;/strong> की जाती हैं।&lt;/p>
&lt;p>मान लें कि बिंदु $P = (x_1, y_1)$ और बिंदु $Q = (x_2, y_2)$ हैं।
यह भी मान लें कि गणना के परिणाम का बिंदु $R = P + Q = (x_3, y_3)$ है।&lt;/p>
&lt;p>मान लें कि रेखा का ढलान $\lambda$ (लैम्ब्डा) है।&lt;/p>
&lt;p>&lt;strong>【स्थिति 1: $P \neq Q$ होने पर (बिंदु जोड़)】&lt;/strong>
ढलान $\lambda$ दो बिंदुओं के बीच परिवर्तन की दर है।
&lt;/p>
$$ \lambda \equiv \frac{y_2 - y_1}{x_2 - x_1} \pmod p $$
$$ \lambda \equiv (y_2 - y_1) \cdot (x_2 - x_1)^{-1} \pmod p $$
&lt;p>इस $\lambda$ का उपयोग करके, $x_3, y_3$ निम्न प्रकार से ज्ञात किए जा सकते हैं।
&lt;/p>
$$ x_3 \equiv \lambda^2 - x_1 - x_2 \pmod p $$
$$ y_3 \equiv \lambda(x_1 - x_3) - y_1 \pmod p $$
&lt;p>&lt;strong>【स्थिति 2: $P = Q$ होने पर (बिंदु का दोहरीकरण)】&lt;/strong>
ढलान $\lambda$ स्पर्शरेखा का ढलान है जिसे अवकलन (differentiation) द्वारा पाया जाता है। (हम $y^2 = x^3 + ax + b$ का अंतर्निहित अवकलन करते हैं)
&lt;/p>
$$ 2y \cdot y' = 3x^2 + a \implies y' = \frac{3x^2 + a}{2y} $$
&lt;p>
इसलिए,
&lt;/p>
$$ \lambda \equiv (3x_1^2 + a) \cdot (2y_1)^{-1} \pmod p $$
&lt;p>$x_3, y_3$ के समीकरण जोड़ के समान रूप में हैं, लेकिन चूँकि $x_2 = x_1$ है, इसलिए वे निम्न प्रकार हो जाते हैं।
&lt;/p>
$$ x_3 \equiv \lambda^2 - 2x_1 \pmod p $$
$$ y_3 \equiv \lambda(x_1 - x_3) - y_1 \pmod p $$
&lt;blockquote>
&lt;p>[!IMPORTANT]
इन सूत्रों में $(x_2 - x_1)^{-1}$ और $(2y_1)^{-1}$ जैसे &lt;strong>विभाजन (मॉड्यूलर प्रतिलोम की गणना)&lt;/strong> शामिल हैं। मॉड्यूलर प्रतिलोम की गणना की कम्प्यूटेशनल लागत बहुत अधिक होती है, इसलिए वास्तविक कार्यान्वयन में, &lt;strong>&amp;ldquo;जैकोबियन कोऑर्डिनेट्स (Jacobian Coordinates)&amp;rdquo;&lt;/strong> जैसी प्रक्षेपीय समन्वय प्रणालियों (projective coordinate systems) का आमतौर पर उपयोग किया जाता है जो विभाजन को विलंबित करते हैं।&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="5-अदश-गणन-scalar-multiplication-और-एलपटक-करव-असतत-लघगणक-समसय-ecdlp">5. अदिश गुणन (Scalar Multiplication) और एलिप्टिक कर्व असतत लघुगणक समस्या (ECDLP)
&lt;/h2>&lt;p>एलिप्टिक कर्व क्रिप्टोग्राफी में, वह संक्रिया जिसमें सबसे अधिक गणना की आवश्यकता होती है और जो सुरक्षा का मूल है, वह &lt;strong>अदिश गुणन (Scalar Multiplication)&lt;/strong> है।&lt;/p>
&lt;h3 id="51-अदश-गणन-कय-ह">5.1. अदिश गुणन क्या है?
&lt;/h3>&lt;p>किसी बिंदु $P$ को $k$ बार जोड़ने की क्रिया को अदिश गुणन कहा जाता है, और इसे $kP$ के रूप में दर्शाया जाता है।
&lt;/p>
$$ kP = \underbrace{P + P + \dots + P}_{k\text{ बार}} $$
&lt;p>यहाँ, $k$ एक बहुत बड़ा पूर्णांक है (उदाहरण के लिए, 256-बिट पूर्णांक)।&lt;/p>
&lt;h3 id="52-एलपटक-करव-असतत-लघगणक-समसय-ecdlp">5.2. एलिप्टिक कर्व असतत लघुगणक समस्या (ECDLP)
&lt;/h3>&lt;p>एलिप्टिक कर्व क्रिप्टोग्राफी की सुरक्षा निम्नलिखित समस्या की कठिनाई पर निर्भर करती है।&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>एलिप्टिक कर्व असतत लघुगणक समस्या (Elliptic Curve Discrete Logarithm Problem: ECDLP)&lt;/strong>
एक ज्ञात बिंदु $P$ (आधार बिंदु) और एक गणना किए गए परिणामी बिंदु $Q$ को देखते हुए, अदिश (scalar) $k$ खोजें जो $Q = kP$ को संतुष्ट करता हो।&lt;/p>
&lt;/blockquote>
&lt;p>$k$ और $P$ से $Q$ की गणना करना (आगे की दिशा) बाद में वर्णित एल्गोरिदम का उपयोग करके आसान (बहुपद समय) है, लेकिन $P$ और $Q$ से $k$ की उल्टी गणना (विपरीत दिशा) करना लगभग असंभव है (यह एक वन-वे फ़ंक्शन है), सिवाय ब्रूट-फोर्स खोज के इसके लिए कोई कुशल समाधान नहीं है।
क्रिप्टोग्राफ़िक प्रोटोकॉल में, &lt;strong>$k$ &amp;ldquo;निजी कुंजी (Private Key)&amp;rdquo; से मेल खाता है, और $Q$ &amp;ldquo;सार्वजनिक कुंजी (Public Key)&amp;rdquo;&lt;/strong> से मेल खाता है।&lt;/p>
&lt;h3 id="53-डबल-एड-ऐड-double-and-add-एलगरदम">5.3. डबल-एंड-ऐड (Double-and-Add) एल्गोरिदम
&lt;/h3>&lt;p>यदि $k$ एक विशाल संख्या है (उदा: $2^{256}$), तो $P$ को सीधे $k$ बार जोड़ना ब्रह्मांड के जीवनकाल में भी पूरा नहीं होगा। इसलिए, अदिश गुणन को तेज़ी से करने के लिए &lt;strong>डबल-एंड-ऐड विधि (Double-and-Add method या बाइनरी विधि)&lt;/strong> का उपयोग किया जाता है।&lt;/p>
&lt;p>यह पूर्णांकों के घातांकीकरण को तेज़ी से गणना करने के लिए &amp;ldquo;स्क्वेयर-एंड-मल्टीप्लाई (square-and-multiply)&amp;rdquo; विधि का एलिप्टिक कर्व संस्करण है। यह अदिश $k$ को बाइनरी में दर्शाता है और सबसे महत्वपूर्ण बिट (MSB) से शुरू करके क्रमिक रूप से संसाधित करता है।&lt;/p>
&lt;ol>
&lt;li>परिणाम को संग्रहीत करने के लिए बिंदु $R$ को $\mathcal{O}$ से प्रारंभ करें।&lt;/li>
&lt;li>$k$ के सबसे महत्वपूर्ण बिट (MSB) से सबसे कम महत्वपूर्ण बिट (LSB) तक निम्न को दोहराएं:
&lt;ul>
&lt;li>$R$ को दोगुना करें (Point Doubling: $R = 2R$)&lt;/li>
&lt;li>यदि वर्तमान बिट &lt;code>1&lt;/code> है, तो $R$ में $P$ जोड़ें (Point Addition: $R = R + P$)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>इस एल्गोरिदम के माध्यम से, कम्प्यूटेशनल जटिलता $O(k)$ से $O(\log_2 k)$ तक नाटकीय रूप से कम हो जाती है, जिससे यथार्थवादी समय (मिलीसेकंड में) में गणना संभव हो जाती है।&lt;/p>
&lt;hr>
&lt;h2 id="6-एलपटक-करव-डफ-हलमन-ecdh-कज-वनमय-key-exchange">6. एलिप्टिक कर्व डिफी-हेलमैन (ECDH) कुंजी विनिमय (Key Exchange)
&lt;/h2>&lt;p>यहाँ हम &lt;strong>ECDH (Elliptic Curve Diffie-Hellman) कुंजी विनिमय प्रोटोकॉल&lt;/strong> के तंत्र की व्याख्या करेंगे, जो ECC का सबसे विशिष्ट अनुप्रयोग है। ECDH ऐलिस और बॉब को एक असुरक्षित संचार चैनल पर सुरक्षित रूप से एक सामान्य गुप्त कुंजी (सत्र कुंजी/session key) उत्पन्न करने और साझा करने की अनुमति देता है (यह TLS हैंडशेक का मूल है)।&lt;/p>
&lt;p>&lt;strong>【पूर्वापेक्षित पैरामीटर (डोमेन पैरामीटर)】&lt;/strong>
दोनों पक्ष पहले से उपयोग किए जाने वाले एलिप्टिक कर्व $E$, अभाज्य संख्या $p$, और आधार बिंदु $G$ को साझा करते हैं। (उदाहरण के लिए NIST P-256 या secp256k1 आदि)&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Alice as "Alice (ऐलिस)"
participant Bob as "Bob (बॉब)"
Note over Alice,Bob: "सार्वजनिक पैरामीटर: वक्र E, आधार बिंदु G, अभाज्य संख्या p"
Alice->>Alice: "निजी कुंजी d_A (एक यादृच्छिक पूर्णांक) उत्पन्न करें"
Alice->>Alice: "सार्वजनिक कुंजी Q_A = d_A * G की गणना करें"
Bob->>Bob: "निजी कुंजी d_B (एक यादृच्छिक पूर्णांक) उत्पन्न करें"
Bob->>Bob: "सार्वजनिक कुंजी Q_B = d_B * G की गणना करें"
Alice->>Bob: "सार्वजनिक कुंजी Q_A भेजें (प्लेनटेक्स्ट में)"
Bob->>Alice: "सार्वजनिक कुंजी Q_B भेजें (प्लेनटेक्स्ट में)"
Alice->>Alice: "साझा रहस्य S = d_A * Q_B की गणना करें"
Bob->>Bob: "साझा रहस्य S = d_B * Q_A की गणना करें"
Note over Alice,Bob: "S = d_A * (d_B * G) = d_B * (d_A * G) = (d_A * d_B) * G"
Note over Alice,Bob: "दोनों पक्षों द्वारा गणना किया गया परिणाम S पूरी तरह से मेल खाता है!"&lt;/div>
&lt;p>एक छिपकर बातें सुनने वाला (ईव) संचार चैनल पर प्रवाहित होने वाले $G$, $Q_A$, $Q_B$ को रोक सकता है, लेकिन ECDLP की कठिनाई के कारण, वह $Q_A = d_A \cdot G$ से ऐलिस की निजी कुंजी $d_A$ का पता नहीं लगा सकता है। इसके अलावा, $Q_A$ और $Q_B$ को गुणा करने से साझा कुंजी $S$ नहीं मिलती है, इसलिए छिपकर बातें सुनने वाला $S$ की गणना नहीं कर सकता।&lt;/p>
&lt;hr>
&lt;h2 id="7-करयनवयन-क-कमय-सइड-चनल-हमल-और-उपय">7. कार्यान्वयन की कमियां: साइड-चैनल हमले और उपाय
&lt;/h2>&lt;p>भले ही एक क्रिप्टोग्राफ़िक एल्गोरिदम सैद्धांतिक रूप से परिपूर्ण हो, लेकिन इसे एक प्रोग्राम के रूप में लागू करने की प्रक्रिया में कमियां उत्पन्न हो सकती हैं। इसे &lt;strong>&amp;ldquo;साइड-चैनल अटैक (Side-Channel Attack)&amp;rdquo;&lt;/strong> कहा जाता है।&lt;/p>
&lt;h3 id="71-टइमग-अटक-timing-attack">7.1. टाइमिंग अटैक (Timing Attack)
&lt;/h3>&lt;p>आइए पहले बताए गए डबल-एंड-ऐड (Double-and-Add) एल्गोरिदम को फिर से देखें।&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;/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="c1">// असुरक्षित डबल-एंड-ऐड का छद्म कोड (pseudocode)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">Point&lt;/span> &lt;span class="n">R&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Infinity&lt;/span>&lt;span class="p">;&lt;/span>
&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">255&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&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="n">i&lt;/span>&lt;span class="o">--&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">R&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">PointDoubling&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">R&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">bit&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">i&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="n">R&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">PointAddition&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">R&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">P&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// केवल तभी निष्पादित होता है जब बिट 1 हो!
&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="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस कार्यान्वयन में एक घातक खामी है। जब बिट &lt;code>1&lt;/code> होता है, तो पॉइंट एडिशन निष्पादित होता है, इसलिए गणना का समय &lt;strong>थोड़ा लंबा हो जाता है&lt;/strong> तुलना में जब बिट &lt;code>0&lt;/code> होता है। इसके अतिरिक्त, प्रोसेसर की शाखा भविष्यवाणी (branch prediction) और कैश मेमोरी व्यवहार भी बदल जाते हैं।
हमलावर इस गणना समय (या बिजली की खपत) में मिनट के अंतर को हजारों बार सांख्यिकीय रूप से देखकर &lt;strong>निजी कुंजी $k$ के बिट अनुक्रम को बिट दर बिट पूरी तरह से पुनर्प्राप्त&lt;/strong> कर सकता है। यही टाइमिंग अटैक है।&lt;/p>
&lt;h3 id="72-नरतर-समय-constant-time-करयनवयन-मटगमर-लडर-montgomery-ladder">7.2. निरंतर-समय (Constant-Time) कार्यान्वयन: मोंटगोमेरी लैडर (Montgomery Ladder)
&lt;/h3>&lt;p>टाइमिंग हमलों को रोकने के लिए, ऐसे एल्गोरिदम को अपनाना आवश्यक है जहाँ &lt;strong>निष्पादित निर्देशों का अनुक्रम और गणना का समय हमेशा स्थिर (Constant-Time) होता है, चाहे निजी कुंजी का बिट मान कुछ भी हो&lt;/strong>।&lt;/p>
&lt;p>इसका एक प्रमुख उदाहरण &lt;strong>मोंटगोमेरी लैडर (Montgomery Ladder)&lt;/strong> है।&lt;/p>
&lt;div class="mermaid">graph TD
Start["आरंभीकरण: R0 = O, R1 = P"] --> LoopStart["प्रत्येक बिट i के लिए (MSB से)"]
LoopStart --> Cond{"k_i का मान क्या है?"}
Cond -->|0| Branch0["R1 = R0 + R1&lt;br>R0 = 2 * R0"]
Cond -->|1| Branch1["R0 = R0 + R1&lt;br>R1 = 2 * R1"]
Branch0 --> LoopEnd["अगले बिट पर जाएं"]
Branch1 --> LoopEnd
LoopEnd --> LoopStart
LoopStart -.->|"सभी बिट्स पूरे हुए"| End["अंत: R0 परिणाम (kP) है"]&lt;/div>
&lt;p>मोंटगोमेरी लैडर की सुंदरता इस बात में है कि चाहे बिट &lt;code>0&lt;/code> हो या &lt;code>1&lt;/code>, &lt;strong>&amp;ldquo;हमेशा एक पॉइंट एडिशन और एक पॉइंट डबलिंग&amp;rdquo;&lt;/strong> निष्पादित की जाती है। यह गणना समय की डेटा निर्भरता को पूरी तरह से समाप्त कर देता है।&lt;/p>
&lt;p>हालाँकि, यदि कोई शाखा (branch) (&lt;code>if (k_i == 0)&lt;/code>) स्वयं मौजूद है, तो यह जोखिम रहता है कि निष्पादन समय कंपाइलर अनुकूलन और CPU की शाखा भविष्यवाणी के कारण भिन्न हो सकता है। इसलिए, वास्तविक निरंतर-समय के कार्यान्वयन में, सशर्त शाखाओं (&lt;code>if&lt;/code> कथन) को समाप्त कर दिया जाता है और &lt;strong>बिटवाइज़ संचालन (bitwise operations) का उपयोग करके एक सशर्त स्वैप (Conditional Swap)&lt;/strong> का उपयोग किया जाता है।&lt;/p>
&lt;hr>
&lt;h2 id="8-c-क-उपयग-करक-एलपटक-करव-करपटगरफ-क-करयनवयन">8. C++ का उपयोग करके एलिप्टिक कर्व क्रिप्टोग्राफी का कार्यान्वयन
&lt;/h2>&lt;p>यहाँ से, हम सिद्धांत को C++ कोड में बदलेंगे। व्यावहारिक क्रिप्टोग्राफ़िक लाइब्रेरी (जैसे OpenSSL या libsodium) उन्नत असेंबली अनुकूलन और जैकोबियन निर्देशांक का उपयोग करती हैं, लेकिन यहाँ, गणितीय समझ को गहरा करने के लिए, हम &lt;strong>एफाइन निर्देशांक (Affine Coordinates) का उपयोग करके आसानी से समझे जाने वाले निरंतर-समय कार्यान्वयन&lt;/strong> की रूपरेखा दिखाएंगे।&lt;/p>
&lt;p>हम यह मानेंगे कि बड़े पूर्णांक संचालन के लिए &lt;code>boost::multiprecision::cpp_int&lt;/code> का उपयोग किया जाता है।&lt;/p>
&lt;h3 id="81-मडयलर-अकगणत-और-परतलम">8.1. मॉड्यूलर अंकगणित और प्रतिलोम
&lt;/h3>&lt;p>सबसे पहले, हम परिमित क्षेत्र पर संचालन के लिए सहायक कार्यों को परिभाषित करते हैं। हम फ़र्मेट के छोटे प्रमेय (Fermat&amp;rsquo;s Little Theorem) का उपयोग करके प्रतिलोम गणना को लागू करेंगे।&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;/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;vector&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;stdexcept&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;boost/multiprecision/cpp_int.hpp&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">boost&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">multiprecision&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">// उदाहरण के रूप में secp256k1 की अभाज्य संख्या p और पैरामीटर
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="nf">p&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F&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">const&lt;/span> &lt;span class="n">cpp_int&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">const&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">7&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="c1">&lt;/span>&lt;span class="n">cpp_int&lt;/span> &lt;span class="nf">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cpp_int&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cpp_int&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="n">cpp_int&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">x&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">return&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nl">m&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="n">r&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">// मॉड्यूलर घातांकीकरण (x^y mod m)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">cpp_int&lt;/span> &lt;span class="nf">powerMod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cpp_int&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">exp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cpp_int&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="n">cpp_int&lt;/span> &lt;span class="n">res&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">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">base&lt;/span>&lt;span class="p">,&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">exp&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="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">exp&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="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">res&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">,&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="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">base&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">,&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="n">exp&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">res&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="n">cpp_int&lt;/span> &lt;span class="nf">modInverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cpp_int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cpp_int&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="c1">// यह मानकर कि m एक अभाज्य संख्या है: n^(m-2) ≡ n^(-1) mod m
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">powerMod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">m&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&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="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="82-बद-परतनधतव-और-समह-सचलन-जड--दहरकरण">8.2. बिंदु प्रतिनिधित्व और समूह संचालन (जोड़ / दोहरीकरण)
&lt;/h3>&lt;p>हम अनंत पर बिंदु को प्रबंधित करने के लिए एक ध्वज (flag) के साथ एक &lt;code>Point&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;/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="k">struct&lt;/span> &lt;span class="nc">Point&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cpp_int&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 class="kt">bool&lt;/span> &lt;span class="n">isInfinity&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="c1">&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">isInfinity&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">true&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>&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="n">Point&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">cpp_int&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">x&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="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">isInfinity&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">false&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="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">// एलिप्टिक कर्व पर बिंदु जोड़ (R = P + Q)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">Point&lt;/span> &lt;span class="nf">pointAdd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">P&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">Q&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="p">.&lt;/span>&lt;span class="n">isInfinity&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&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="k">if&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">isInfinity&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">P&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">if&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">x&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">Q&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="n">mod&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">y&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">Q&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">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&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="k">return&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// P + (-P) = अनंत पर बिंदु
&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="n">cpp_int&lt;/span> &lt;span class="n">lambda&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="p">.&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">Q&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="n">P&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">Q&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">y&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">// Point Doubling (P = Q होने पर)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// lambda = (3x^2 + a) / 2y
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">P&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">P&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">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">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">cpp_int&lt;/span> &lt;span class="n">den&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">modInverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">P&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">p&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">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">lambda&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">den&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&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="c1">// Point Addition (P != Q होने पर)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// lambda = (y2 - y1) / (x2 - x1)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&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">y&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">P&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">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">cpp_int&lt;/span> &lt;span class="n">den&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">modInverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">mod&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">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">P&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">p&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">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">lambda&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">den&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&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="n">cpp_int&lt;/span> &lt;span class="n">x3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">lambda&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">lambda&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">P&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">Q&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">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">cpp_int&lt;/span> &lt;span class="n">y3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">lambda&lt;/span> &lt;span class="o">*&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">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">x3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">P&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">p&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">Point&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y3&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="83-नरतर-समय-constant-time-सशरत-सवप-conditional-swap-क-करयनवयन">8.3. निरंतर-समय (Constant-Time) सशर्त स्वैप (Conditional Swap) का कार्यान्वयन
&lt;/h3>&lt;p>निजी कुंजी के बिट मान के आधार पर चर (variables) की सामग्री की अदला-बदली करते समय, हम &lt;code>if&lt;/code> कथन का उपयोग किए बिना केवल बिटवाइज़ संचालन (मास्क) का उपयोग करके स्वैप करते हैं। यह सुनिश्चित करता है कि निष्पादन पथ (execution path) पूरी तरह से स्थिर रहे।&lt;/p>
&lt;blockquote>
&lt;p>[!TIP]
वास्तविक कार्यान्वयन में, &lt;code>cpp_int&lt;/code> जैसे गतिशील रूप से आवंटित बहु-सटीक (multi-precision) पूर्णांक वर्ग निरंतर-समय प्रसंस्करण के लिए उपयुक्त नहीं हैं। ऐसा इसलिए है क्योंकि मेमोरी आवंटन और सरणी आकार में भिन्नता के कारण टाइमिंग जानकारी लीक होती है। व्यावहारिक पुस्तकालयों में, उन्हें एक निश्चित लंबाई (उदाहरण के लिए, uint64_t का 4-तत्व सरणी) के साथ दर्शाया जाता है, और बिट-स्तरीय मास्किंग लागू की जाती है। निम्नलिखित एक वैचारिक उदाहरण है।&lt;/p>
&lt;/blockquote>
&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;/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="c1">// वैचारिक निरंतर-समय स्वैप (निश्चित लंबाई के पूर्णांक मानकर)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// यदि bit 1 है, तो P1 और P2 को स्वैप करें; यदि 0 है, तो स्वैप न करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="nf">cswap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Point&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">P1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">P2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">uint8_t&lt;/span> &lt;span class="n">bit&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">// bit 0 या 1 है। यदि bit=1 है तो मास्क सभी 1 (0xFF..) है, और यदि 0 है तो सभी 0 है।
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// (स्पष्टीकरण के लिए, मान लें कि एक निश्चित लंबाई वाले BigInt वर्ग का प्रत्येक शब्द w है)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="cm">/*
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> uint64_t mask = 0 - (uint64_t)bit;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> for (int i = 0; i &amp;lt; NUM_WORDS; i++) {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> uint64_t dummy = mask &amp;amp; (P1.x.words[i] ^ P2.x.words[i]);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> P1.x.words[i] ^= dummy;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> P2.x.words[i] ^= dummy;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> // y-निर्देशांक और isInfinity ध्वज को भी इसी तरह संसाधित करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm"> */&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">// * boost::multiprecision के साथ पूर्ण निरंतर-समय स्वैप मुश्किल है,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// इसलिए यहाँ तर्क को समझने के लिए हम केवल शाखाओं (branches) द्वारा इसका अनुकरण करते हैं।
&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">bit&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">P1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">P2&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;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="84-मटगमर-लडर-montgomery-ladder-क-उपयग-करक-अदश-गणन">8.4. मोंटगोमेरी लैडर (Montgomery Ladder) का उपयोग करके अदिश गुणन
&lt;/h3>&lt;p>सुरक्षित अदिश गुणन को लागू करने के लिए हम पहले बताए गए &lt;code>pointAdd&lt;/code> और &lt;code>cswap&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;/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="c1">// अदिश गुणन k * P (मोंटगोमेरी लैडर विधि)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">Point&lt;/span> &lt;span class="nf">scalarMultiply&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">Point&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">P&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">k&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">Point&lt;/span> &lt;span class="n">R0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Point&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="n">Point&lt;/span> &lt;span class="n">R1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">P&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">// k की बिट लंबाई प्राप्त करें (secp256k1 के लिए 256 बिट्स)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">numBits&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">256&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="n">numBits&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">i&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="n">i&lt;/span>&lt;span class="o">--&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">// i-वें बिट का मान प्राप्त करें (0 या 1)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">uint8_t&lt;/span> &lt;span class="n">bit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">static_cast&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint8_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bit_test&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">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="mi">1&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// यदि bit == 1, तो R0 और R1 को स्वैप करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cswap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bit&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="c1">&lt;/span> &lt;span class="n">R1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pointAdd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">R1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">R0&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pointAdd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">R0&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">// यदि bit == 1 था, तो स्थिति को पुनर्स्थापित करने के लिए फिर से स्वैप करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cswap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">R0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">R1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bit&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="k">return&lt;/span> &lt;span class="n">R0&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;p>इस कार्यान्वयन तर्क के साथ, चाहे अदिश $k$ का प्रत्येक बिट &lt;code>0&lt;/code> हो या &lt;code>1&lt;/code>, प्रत्येक लूप पुनरावृत्ति (iteration) के भीतर निष्पादित संक्रियाएँ (&lt;code>cswap&lt;/code> $\to$ &lt;code>pointAdd&lt;/code> $\to$ &lt;code>pointAdd&lt;/code> $\to$ &lt;code>cswap&lt;/code>) बिल्कुल एक ही प्रवाह का पालन करती हैं, जो समय या कैश एक्सेस पैटर्न में अंतर के माध्यम से गुप्त जानकारी के रिसाव को दृढ़ता से रोकता है।&lt;/p>
&lt;hr>
&lt;h2 id="9-नषकरष">9. निष्कर्ष
&lt;/h2>&lt;p>एलिप्टिक कर्व क्रिप्टोग्राफी (ECC), पहली नज़र में अजीब लग सकती है कि &amp;ldquo;क्यों रेखाएँ खींचने और प्रतिच्छेदनों को प्रतिबिंबित करने जैसी ज्यामितीय संक्रियाएँ एन्क्रिप्शन बन जाती हैं?&amp;quot;। हालाँकि, यह गणित और क्रिप्टोग्राफी के एक चमत्कारी संलयन का परिणाम है जो इसे परिमित क्षेत्र के असतत (discrete) दुनिया में मैप करके एक शानदार वन-वे फ़ंक्शन (असतत लघुगणक समस्या) बनाने की अनुमति देता है।&lt;/p>
&lt;p>इस लेख में हमने निम्नलिखित महत्वपूर्ण बिंदुओं की व्याख्या की है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>RSA पर लाभ&lt;/strong>: बहुत छोटी कुंजी की लंबाई के साथ मजबूत सुरक्षा प्रदान करता है, जो इसे आधुनिक मोबाइल और IoT युग के लिए आदर्श बनाता है।&lt;/li>
&lt;li>&lt;strong>समूह सिद्धांत और परिमित क्षेत्रों की मूल बातें&lt;/strong>: गणितीय संरचना जो ECC की नींव बनाती है।&lt;/li>
&lt;li>&lt;strong>जोड़ और दोहरीकरण सूत्र&lt;/strong>: वियरस्ट्रास समीकरण का उपयोग करके बीजगणितीय समूह संचालन को लागू करने के तरीके।&lt;/li>
&lt;li>&lt;strong>साइड-चैनल हमलों का खतरा&lt;/strong>: कैसे निजी कुंजी के बिट्स पर निर्भर सशर्त शाखाएं (conditional branches) घातक कमियां पैदा करती हैं।&lt;/li>
&lt;li>&lt;strong>निरंतर-समय (Constant-Time) कार्यान्वयन&lt;/strong>: मोंटगोमेरी लैडर और सशर्त स्वैप (Conditional Swap) का उपयोग करके हार्डवेयर-स्तरीय व्यवहार को सुसंगत बनाने और हमलों को रोकने के लिए C++ कोडिंग तकनीक।&lt;/li>
&lt;/ol>
&lt;p>उत्पादन वातावरण (production environment) में काम करने वाली अपनी खुद की क्रिप्टोग्राफ़िक लाइब्रेरी बनाने को सुरक्षा जोखिमों के कारण अत्यधिक हतोत्साहित किया जाता है (&amp;ldquo;अपना खुद का क्रिप्टो न बनाएं&amp;rdquo;)। हालाँकि, हुड के नीचे काम करने वाले एल्गोरिदम और गणितीय पृष्ठभूमि की गहरी समझ होना, अधिक सुरक्षित और उच्च-प्रदर्शन प्रणाली को डिजाइन और संचालित करने वाले इंजीनियरों के लिए एक अमूल्य और शक्तिशाली हथियार होगा।&lt;/p>
&lt;p>अगले लेख में, हम इस एलिप्टिक कर्व का उपयोग करने वाले डिजिटल हस्ताक्षर एल्गोरिदम &lt;strong>ECDSA (Elliptic Curve Digital Signature Algorithm)&lt;/strong> के तंत्र, और बिटकॉइन में प्रयुक्त &lt;strong>स्क्नोर (Schnorr) हस्ताक्षर&lt;/strong> के बारे में और गहराई से जानेंगे।&lt;/p></description></item><item><title>क्या GNFS (जनरल नंबर फील्ड सीव) से परे कोई एल्गोरिदम मौजूद है?</title><link>http://kenji.blog/hi/p/beyond-gnfs-integer-factorization-algorithms/</link><pubDate>Fri, 11 Sep 2026 09:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/beyond-gnfs-integer-factorization-algorithms/</guid><description>&lt;img src="http://kenji.blog/p/beyond-gnfs-integer-factorization-algorithms/img/eyecatch.jpg" alt="Featured image of post क्या GNFS (जनरल नंबर फील्ड सीव) से परे कोई एल्गोरिदम मौजूद है?" />&lt;h2 id="1-परचय-परणक-गणनखडन-और-आधनक-करपटगरफ-क-आधर">1. परिचय: पूर्णांक गुणनखंडन और आधुनिक क्रिप्टोग्राफी का आधार
&lt;/h2>&lt;p>आधुनिक समाज में इंटरनेट संचार की सुरक्षा काफी हद तक सार्वजनिक-कुंजी क्रिप्टोग्राफी, RSA के सुरक्षित होने पर निर्भर करती है। और RSA क्रिप्टोग्राफी की सुरक्षा &amp;ldquo;विशाल भाज्य संख्याओं के गुणनखंडन की कठिनाई&amp;rdquo; की गणितीय धारणा पर आधारित है। यदि एक अत्यंत कुशल गुणनखंडन एल्गोरिदम खोजा जाता है, तो दुनिया भर का संचार बुनियादी ढांचा मूल रूप से ढह जाएगा।&lt;/p>
&lt;p>वर्तमान में, क्लासिकल कंप्यूटर का उपयोग करके बड़े पूर्णांकों के गुणनखंडन के लिए सबसे तेज़ और सबसे शक्तिशाली एल्गोरिदम &lt;strong>जनरल नंबर फील्ड सीव (GNFS: General Number Field Sieve)&lt;/strong> है। GNFS का जन्म 1980 के दशक के अंत में प्रस्तावित स्पेशल नंबर फील्ड सीव (SNFS) के विस्तार के रूप में हुआ था, और आज तक इसने RSA-768 और RSA-250 जैसी विशाल भाज्य संख्याओं के गुणनखंडन के रिकॉर्ड बनाए हैं।&lt;/p>
&lt;p>हालाँकि, क्रिप्टोग्राफ़र और गणितज्ञ हमेशा निम्नलिखित प्रश्न पूछते हैं: &amp;ldquo;क्या GNFS से परे कोई क्लासिकल एल्गोरिदम मौजूद है?&amp;rdquo;, &amp;ldquo;क्लासिकल कंप्यूटर की सीमाएँ कहाँ हैं?&amp;rdquo;, और &amp;ldquo;क्वांटम कंप्यूटर इस स्थिति को कैसे तोड़ेंगे?&amp;rdquo;&lt;/p>
&lt;p>इस लेख में, हम GNFS के पीछे की गहरी गणितीय संरचना का पूरी तरह से विश्लेषण करेंगे और बहुपद चयन (polynomial selection), सीविंग प्रक्रिया (sieving processing), और ब्लॉक वीडमैन (Block Wiedemann) विधि का उपयोग करके रैखिक बीजगणित (linear algebra) चरणों जैसे विस्तृत तकनीकी विश्लेषण करेंगे। इसके अलावा, हम कॉपरस्मिथ (Coppersmith) के सुधारों के माध्यम से GNFS की विस्तार विधियों पर विचार करेंगे, और गणितीय दृष्टिकोण से क्लासिकल सब-एक्सपोनेंशियल टाइम (Sub-exponential time) एल्गोरिदम और क्वांटम पॉलीनोमियल टाइम (Polynomial time) एल्गोरिदम के बीच महत्वपूर्ण अंतर की तुलना और व्याख्या करेंगे।&lt;/p>
&lt;hr>
&lt;h2 id="2-एसमपटटक-कमपलकसट-और-l-नटशन-l-notation">2. एसिम्प्टोटिक कॉम्प्लेक्सिटी और L-नोटेशन (L-notation)
&lt;/h2>&lt;p>गुणनखंडन एल्गोरिदम की जटिलता का मूल्यांकन करते समय, मानक पॉलीनोमियल टाइम नोटेशन ($O(n^k)$ आदि) के बजाय इनपुट $n$ के अंकों की संख्या के सापेक्ष सब-एक्सपोनेंशियल समय को व्यक्त करने के लिए &lt;strong>L-नोटेशन (L-notation)&lt;/strong> का उपयोग किया जाता है। L-नोटेशन को इस प्रकार परिभाषित किया गया है:&lt;/p>
$$
L_n[\alpha, c] = \exp \left( (c + o(1)) (\ln n)^\alpha (\ln \ln n)^{1-\alpha} \right)
$$
&lt;p>जहाँ, $n$ वह पूर्णांक है जिसका गुणनखंड किया जाना है, और $\ln n$ प्राकृतिक लघुगणक (natural logarithm) है जो $n$ की बिट लंबाई के आनुपातिक है।&lt;/p>
&lt;ul>
&lt;li>$\alpha = 0$ के मामले में: $L_n[0, c] = \exp(c \ln \ln n) = (\ln n)^c$ होता है, जो बिट लंबाई के सापेक्ष &lt;strong>पॉलीनोमियल टाइम (Polynomial time)&lt;/strong> को दर्शाता है।&lt;/li>
&lt;li>$\alpha = 1$ के मामले में: $L_n[1, c] = \exp(c \ln n) = n^c$ होता है, जो बिट लंबाई के सापेक्ष &lt;strong>एक्सपोनेंशियल टाइम (Exponential time)&lt;/strong> को दर्शाता है।&lt;/li>
&lt;li>$0 &lt; \alpha &lt; 1$ के मामले में: यह पॉलीनोमियल टाइम और एक्सपोनेंशियल टाइम के बीच स्थित &lt;strong>सब-एक्सपोनेंशियल टाइम (Sub-exponential time)&lt;/strong> है।&lt;/li>
&lt;/ul>
&lt;p>अतीत में गुणनखंडन एल्गोरिदम का विकास धीरे-धीरे इस $\alpha$ के मान को कम करने का इतिहास रहा है।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>कंटीन्यूड फ्रैक्शन मेथड (CFRAC) और मल्टीपल पॉलीनोमियल क्वाड्रेटिक सीव (MPQS)&lt;/strong>: ये $\alpha = 1/2$ वर्ग से संबंधित हैं, और जटिलता लगभग $L_n[1/2, 1]$ है।&lt;/li>
&lt;li>&lt;strong>जनरल नंबर फील्ड सीव (GNFS)&lt;/strong>: इसने $\alpha = 1/3$ हासिल किया, और वर्तमान में ज्ञात क्लासिकल एल्गोरिदम में सबसे तेज़ $L_n[1/3, (64/9)^{1/3}]$ की जटिलता का दावा करता है।&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="3-gnfs-जनरल-नबर-फलड-सव-क-सपरण-एलगरदम-और-गणतय-सरचन">3. GNFS (जनरल नंबर फील्ड सीव) का संपूर्ण एल्गोरिदम और गणितीय संरचना
&lt;/h2>&lt;p>GNFS का गणितीय आधार बहुत ही जटिल और उन्नत है। मूल विचार फर्मेट के लिटिल थ्योरम (Fermat&amp;rsquo;s Little Theorem) और क्वाड्रेटिक सीव (QS) का विस्तार है, और सर्वांगसमता (congruence) $X^2 \equiv Y^2 \pmod n$ को संतुष्ट करने वाले और $X \not\equiv \pm Y \pmod n$ होने वाले गैर-तुच्छ (non-trivial) जोड़े $(X, Y)$ को खोजकर $n$ का गुणनखंड $\gcd(X-Y, n)$ प्राप्त करना है।&lt;/p>
&lt;p>हालाँकि, GNFS का सार यह है कि यह केवल परिमेय संख्या क्षेत्र (rational number field) $\mathbb{Q}$ में ऐसा नहीं करता है, बल्कि एक साथ परिमेय संख्या क्षेत्र और बीजगणितीय संख्या क्षेत्र (Algebraic Number Field) नामक विस्तार क्षेत्र $\mathbb{Q}(\alpha)$ दोनों में &amp;ldquo;स्मूद नंबर्स (Smooth numbers)&amp;rdquo; की खोज करता है, और होमोमोर्फिज्म (homomorphism) के माध्यम से सर्वांगसम संबंध बनाता है।&lt;/p>
&lt;p>GNFS की प्रक्रिया मोटे तौर पर 5 चरणों में विभाजित है।&lt;/p>
&lt;div class="mermaid">graph TD
A["गुणनखंडन समस्या (इनपुट n)"] --> B["1. बहुपद चयन (Polynomial Selection)"]
B --> C["2. सीविंग प्रक्रिया (Sieving Phase)"]
C --> D["3. फ़िल्टरिंग (Filtering Phase)"]
D --> E["4. रैखिक बीजगणित (Linear Algebra Phase)"]
E --> F["5. वर्गमूल (Square Root Phase)"]
F --> G["अभाज्य गुणनखंड p, q का आउटपुट"]&lt;/div>
&lt;h3 id="31-चरण-1-बहपद-चयन-polynomial-selection">3.1 चरण 1: बहुपद चयन (Polynomial Selection)
&lt;/h3>&lt;p>GNFS की सफलता बहुत हद तक उपयुक्त बहुपदों के चयन पर निर्भर करती है। लक्ष्य दो इरेड्यूसिबल बहुपदों (irreducible polynomials) $f_1(x)$ (परिमेय पक्ष) और $f_2(x)$ (बीजगणितीय पक्ष) को खोजना है जिनका एक उभयनिष्ठ मूल $m$ हो। अर्थात,
$f_1(m) \equiv f_2(m) \equiv 0 \pmod n$
को संतुष्ट करता हो।&lt;/p>
&lt;p>आमतौर पर, परिमेय पक्ष के बहुपद के लिए 1-डिग्री व्यंजक $f_1(x) = x - m$ चुना जाता है, और बीजगणितीय पक्ष के बहुपद $f_2(x)$ के लिए डिग्री $d$ (आमतौर কাহিনী 5 या 6) का एक मोनिक बहुपद चुना जाता है। सबसे क्लासिकल दृष्टिकोण &lt;strong>Base-$m$ विधि&lt;/strong> है।
$n$ की घात $1/(d+1)$ के करीब एक पूर्णांक $m = \lfloor n^{1/(d+1)} \rfloor$ चुना जाता है, और $n$ का बेस-$m$ विस्तार किया जाता है।
$n = c_d m^d + c_{d-1} m^{d-1} + \dots + c_1 m + c_0$
इससे, हमें बहुपद $f_2(x) = c_d x^d + c_{d-1} x^{d-1} + \dots + c_0$ प्राप्त होता है। स्पष्ट रूप से $f_2(m) = n \equiv 0 \pmod n$ होता है।&lt;/p>
&lt;p>हालाँकि, आधुनिक कार्यान्वयन में &lt;strong>Kleinjung का एल्गोरिदम&lt;/strong> उपयोग किया जाता है। यह बहुपदों के गुणांकों (coefficients) को अत्यधिक बड़ा होने से रोकता है (Skewness का अनुकूलन), बीजगणितीय गुणों (Murphy&amp;rsquo;s $E$ value और $\alpha$-value) को अनुकूलित करता है, और ऐसे बहुपदों की खोज करता है जो सीविंग प्रक्रिया में आसानी से स्मूद नंबर उत्पन्न करते हैं। अकेले इस चरण में बहुत सारे कम्प्यूटेशनल संसाधन लगाए जाते हैं।&lt;/p>
&lt;h3 id="32-चरण-2-सवग-परकरय-sieving-phase">3.2 चरण 2: सीविंग प्रक्रिया (Sieving Phase)
&lt;/h3>&lt;p>बहुपद निर्धारित होने के बाद, यह एल्गोरिदम के सबसे अधिक कम्प्यूटेशनल रूप से भारी &amp;ldquo;सीव (Sieving)&amp;rdquo; चरण में प्रवेश करता है। यहाँ, युग्म $(a, b)$ खोजा जाता है। यह युग्म को-प्राइम (coprime) होना चाहिए, और निम्नलिखित दो मानों का एक साथ &amp;ldquo;स्मूद (Smooth)&amp;rdquo; होना आवश्यक है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>परिमेय पक्ष का मानदंड (Norm on rational side)&lt;/strong>: $F_1(a, b) = b \cdot f_1(a/b) = a - bm$&lt;/li>
&lt;li>&lt;strong>बीजगणितीय पक्ष का मानदंड (Norm on algebraic side)&lt;/strong>: $F_2(a, b) = b^d \cdot f_2(a/b)$&lt;/li>
&lt;/ol>
&lt;p>&amp;ldquo;स्मूद&amp;rdquo; होने का अर्थ है कि इसे केवल एक निर्दिष्ट ऊपरी सीमा (Sieve bound) या उससे छोटे अभाज्य संख्याओं द्वारा ही गुणनखंडित किया जा सकता है। परिमेय पक्ष के लिए एक फैक्टर बेस (Factor base) और बीजगणितीय पक्ष के लिए एक फैक्टर बेस तैयार किया जाता है, और इरेटोस्थनीज की छलनी (Sieve of Eratosthenes) की तरह एक विशाल खोज स्थान पर कुशलता से स्मूद नंबर खोजे जाते हैं।
वर्तमान में, &lt;strong>लैटिस सीविंग (Lattice Sieving)&lt;/strong> नामक तकनीक मुख्यधारा है, जहाँ एक विशिष्ट अभाज्य संख्या $q$ को तय किया जाता है, और केवल उस सब-लैटिस (sub-lattice) पर $(a, b)$ युग्मों को सीव किया जाता है जहाँ परिमेय और बीजगणितीय दोनों पक्ष $q$ के गुणज हों, जिससे अत्यधिक उच्च दक्षता प्राप्त होती है।&lt;/p>
&lt;h3 id="33-चरण-3-फलटरग-filtering-phase">3.3 चरण 3: फ़िल्टरिंग (Filtering Phase)
&lt;/h3>&lt;p>सीविंग प्रक्रिया में पाए गए स्मूद संबंधों (रिलेशन) की संख्या करोड़ों या अरबों में होती है। हालाँकि, इनमें बहुत सारी बेकार जानकारी भी शामिल होती है।
फ़िल्टरिंग का उद्देश्य एक विशाल विरल मैट्रिक्स (Sparse Matrix) का निर्माण करना है और साथ ही इसके आयाम (dimension) को जितना संभव हो उतना छोटा करना है।&lt;/p>
&lt;p>विशेष रूप से, निम्नलिखित ऑपरेशन किए जाते हैं:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Singleton removal&lt;/strong>: उन रिलेशन को हटा दें जिनमें केवल एक बार आने वाला अभाज्य गुणनखंड शामिल हो।&lt;/li>
&lt;li>&lt;strong>Clique removal / Merging&lt;/strong>: दो या अधिक बार आने वाले अभाज्य गुणनखंडों वाले रिलेशन को एक साथ गुणा करें, चरों (variables) को समाप्त करें, और उन्हें एक उच्च घनत्व वाले लेकिन छोटे आयाम के समीकरण प्रणाली में कम करें।&lt;/li>
&lt;/ul>
&lt;p>इसके परिणामस्वरूप, अरबों पंक्तियों का मैट्रिक्स कुछ करोड़ पंक्तियों के एक विशाल विरल मैट्रिक्स $\mathbf{A}$ (जिसके तत्व फील्ड $\mathbb{F}_2$ पर 0 और 1 हैं) में संकुचित हो जाता है।&lt;/p>
&lt;h3 id="34-चरण-4-रखक-बजगणत-linear-algebra-phase">3.4 चरण 4: रैखिक बीजगणित (Linear Algebra Phase)
&lt;/h3>&lt;p>यहाँ, हम समीकरण $\mathbf{A} \mathbf{x} \equiv \mathbf{0} \pmod 2$ का एक गैर-तुच्छ (non-trivial) समाधान वेक्टर $\mathbf{x}$ खोजते हैं। दूसरे शब्दों में, यह विशाल विरल मैट्रिक्स के लेफ्ट नलस्पेस (Left Nullspace) को खोजने की समस्या है।&lt;/p>
&lt;p>चूँकि मैट्रिक्स का आकार अत्यंत बड़ा है, सामान्य गाऊसीयन एलिमिनेशन (Gaussian elimination) ($O(N^3)$) के साथ इसकी गणना करना असंभव है। इसलिए, क्रिलोव सबस्पेस विधि (Krylov subspace method) का एक प्रकार, पुनरावृत्तीय विधि (iterative method) का उपयोग किया जाता है। ऐतिहासिक रूप से, &lt;strong>ब्लॉक लैंक्ज़ोस विधि (Block Lanczos)&lt;/strong> का उपयोग किया गया है, लेकिन वर्तमान वितरित कंप्यूटिंग (distributed computing) वातावरण में, &lt;strong>ब्लॉक वीडमैन विधि (Block Wiedemann Algorithm)&lt;/strong> मुख्यधारा है, जो संचार ओवरहेड को नाटकीय रूप से कम कर सकती है।&lt;/p>
&lt;p>ब्लॉक वीडमैन विधि मैट्रिक्स $\mathbf{A}$ और वेक्टर अनुक्रम से न्यूनतम बहुपद की गणना करती है, और नलस्पेस के आधार (basis) के निर्माण के लिए बर्लेकैम्प-मैसी (Berlekamp-Massey) एल्गोरिदम का उपयोग करती है। इस चरण को समानांतर (parallelize) करना बहुत मुश्किल है, और यह GNFS की सबसे बड़ी अड़चनों (bottlenecks) में से एक है, जिसके लिए सुपर कंप्यूटर या बड़े क्लस्टर के कसकर युग्मित (tightly coupled) संचार नेटवर्क की आवश्यकता होती है।&lt;/p>
&lt;h3 id="35-चरण-5-वरगमल-square-root-phase">3.5 चरण 5: वर्गमूल (Square Root Phase)
&lt;/h3>&lt;p>रैखिक बीजगणित के समाधान से, परिमेय पक्ष और बीजगणितीय पक्ष दोनों पर &amp;ldquo;पूर्ण वर्ग (perfect square)&amp;rdquo; बनने वाले गुणनफल (products) का निर्माण किया जाता है।
परिमेय पक्ष पर, $\prod (a-bm)$ एक पूर्णांक $X$ का वर्ग $X^2$ बन जाता है, और बीजगणितीय पक्ष पर, संबंधित आदर्शों (ideals) का गुणनफल बीजगणितीय क्षेत्र (algebraic field) पर पूर्ण वर्ग $\gamma^2$ बन जाता है।
बीजगणितीय क्षेत्र पर इस $\gamma$ की गणना करके और परिमेय पूर्णांक वलय (rational integer ring) में होमोमोर्फिज्म $\phi: \alpha \mapsto m \pmod n$ को लागू करके, सर्वांगसमता:
$X^2 \equiv \phi(\gamma)^2 \equiv Y^2 \pmod n$
प्राप्त होती है।&lt;/p>
&lt;p>बीजगणितीय क्षेत्र पर वर्गमूल की गणना करने के लिए &lt;strong>मोंटगोमरी की विधि (Montgomery&amp;rsquo;s Method)&lt;/strong> जैसे जटिल एल्गोरिदम का उपयोग किया जाता है, जिसके लिए बीजगणितीय संख्या सिद्धांत (algebraic number theory) के गहन ज्ञान की आवश्यकता होती है। अंत में, $\gcd(X-Y, n)$ की गणना की जाती है, और यदि एक गैर-तुच्छ गुणनखंड प्राप्त होता है, तो गुणनखंडन पूरा हो जाता है।&lt;/p>
&lt;hr>
&lt;h2 id="4-कय-gnfs-स-पर-कई-कलसकल-एलगरदम-मजद-ह">4. क्या GNFS से परे कोई क्लासिकल एल्गोरिदम मौजूद है?
&lt;/h2>&lt;p>अब तक, सामान्य पूर्णांकों के गुणनखंडन के लिए कोई ऐसा क्लासिकल एल्गोरिदम नहीं खोजा गया है जिसकी एसिम्प्टोटिक कॉम्प्लेक्सिटी $L_n[1/3, c]$ से कम हो। हालाँकि, सैद्धांतिक और व्यावहारिक सीमाओं को तोड़ने के लिए कई प्रयास और व्युत्पन्न (derivative) एल्गोरिदम मौजूद हैं।&lt;/p>
&lt;h3 id="41-मलटपल-नबर-फलड-सव-mnfs-multiple-number-field-sieve">4.1 मल्टीपल नंबर फील्ड सीव (MNFS: Multiple Number Field Sieve)
&lt;/h3>&lt;p>GNFS का विस्तार करने वाले एक दृष्टिकोण के रूप में, D. Coppersmith द्वारा &lt;strong>मल्टीपल नंबर फील्ड सीव (MNFS)&lt;/strong> है। जबकि GNFS दो बहुपदों (परिमेय पक्ष और बीजगणितीय पक्ष) का उपयोग करता है, MNFS एक परिमेय पक्ष बहुपद के विरुद्ध एक साथ कई अलग-अलग बीजगणितीय पक्ष बहुपदों का उपयोग करता है।&lt;/p>
$$ f_1(x), f_{2,1}(x), f_{2,2}(x), \dots, f_{2,V}(x) $$
&lt;p>कई बीजगणितीय क्षेत्रों का उपयोग करके, प्रत्येक सीविंग चरण में &amp;ldquo;किसी भी बीजगणितीय क्षेत्र में स्मूद होने&amp;rdquo; की संभावना को नाटकीय रूप से बढ़ाया जा सकता है। Coppersmith ने इस दृष्टिकोण के साथ जटिलता $L_n[1/3, c]$ के स्थिरांक (constant) $c$ को थोड़ा कम करने में सफलता प्राप्त की।
विशेष रूप से, जबकि GNFS के लिए स्थिरांक $c = (64/9)^{1/3} \approx 1.923$ है, यह सैद्धांतिक रूप से दिखाया गया है कि MNFS को अनुकूलित करके जटिलता को $c \approx 1.902$ तक कम किया जा सकता है।
हालाँकि, व्यवहार में, कई क्षेत्रों के प्रबंधन के कारण ओवरहेड बड़ा है, और व्यावहारिक पैमाने पर RSA मॉड्यूलस के लिए कोई निर्णायक सफलता नहीं मिली है।&lt;/p>
&lt;h3 id="42-कय-l_n14-वरग-क-एलगरदम-सभव-ह">4.2 क्या $L_n[1/4]$ वर्ग का एल्गोरिदम संभव है?
&lt;/h3>&lt;p>गणितज्ञों के बीच गुणनखंडन के क्लासिकल एल्गोरिदम की सीमा के बारे में लंबे समय से बहस का विषय रहा है: &amp;ldquo;क्या घातांक $\alpha = 1/4$ वाला कोई एल्गोरिदम मौजूद है?&amp;rdquo;
वर्तमान GNFS और इसके डेरिवेटिव्स सीविंग के माध्यम से &amp;ldquo;स्मूदनेस की खोज&amp;rdquo; के ढांचे से मजबूती से बंधे हैं, और व्यापक रूप से यह माना जाता है कि इस प्रतिमान (paradigm) के भीतर $\alpha = 1/3$ ही सीमा है। डिकमैन फ़ंक्शन (Dickman function) का उपयोग करके स्मूद पूर्णांकों की वितरण संभावना के विश्लेषण से भी यह माना जाता है कि वर्तमान बीजगणितीय क्षेत्र निर्माण विधियों और सीविंग के संयोजन को चाहे जितना भी अनुकूलित किया जाए, $O(L_n[1/3])$ की बाधा को पार नहीं किया जा सकता है।&lt;/p>
&lt;p>यदि $L_n[1/4]$, या कोई क्लासिकल पॉलीनोमियल टाइम एल्गोरिदम मौजूद है, तो इसे GNFS जैसे &amp;ldquo;स्मूदनेस-आधारित&amp;rdquo; दृष्टिकोण से पूरी तरह से अलग होना चाहिए, और ऐसी नई गणितीय संरचनाओं पर निर्भर होना चाहिए जिनकी मानवता वर्तमान में कल्पना नहीं कर सकती (उदाहरण के लिए, अण्डाकार वक्र क्रिप्टोग्राफी (Elliptic Curve Cryptography) के लिए Schoof के एल्गोरिदम की तरह अधिक उन्नत बीजगणितीय ज्यामितीय दृष्टिकोण)। हालाँकि, वर्तमान में ऐसे कोई संकेत नहीं हैं।&lt;/p>
&lt;hr>
&lt;h2 id="5-कवटम-कपयटर-क-सथ-सफलत-शर-क-एलगरदम-shors-algorithm">5. क्वांटम कंप्यूटर के साथ सफलता: शोर का एल्गोरिदम (Shor&amp;rsquo;s Algorithm)
&lt;/h2>&lt;p>जबकि क्लासिकल कंप्यूटर $L_n[1/3]$ की बाधा का सामना कर रहे हैं, कंप्यूटिंग मॉडल को मूल रूप से बदलकर इस बाधा को तोड़ने वाला एल्गोरिदम 1994 में पीटर शोर (Peter Shor) द्वारा प्रकाशित &lt;strong>शोर का एल्गोरिदम (Shor&amp;rsquo;s Algorithm)&lt;/strong> था।&lt;/p>
&lt;h3 id="51-कवटम-पलनमयल-टइम-क-परभव">5.1 क्वांटम पॉलीनोमियल टाइम का प्रभाव
&lt;/h3>&lt;p>शोर का एल्गोरिदम गुणनखंडन समस्या को &amp;ldquo;ऑर्डर फाइंडिंग प्रॉब्लम (Order Finding Problem)&amp;rdquo; में बदल देता है। यह किसी पूर्णांक $a$ के लिए फ़ंक्शन $f(x) = a^x \pmod n$ की अवधि (period) $r$ खोजने की समस्या है।
क्लासिकल कंप्यूटर पर इस अवधि को खोजने में घातीय (exponential) समय लगता है, लेकिन क्वांटम कंप्यूटर पर &lt;strong>क्वांटम फेज़ एस्टिमेशन (QPE: Quantum Phase Estimation)&lt;/strong> और &lt;strong>क्वांटम फूरियर ट्रांसफॉर्म (QFT: Quantum Fourier Transform)&lt;/strong> का उपयोग करके, सभी अवस्थाओं के सुपरपोज़िशन (Superposition) का समानांतर मूल्यांकन किया जा सकता है और उच्च संभावना के साथ अवधि $r$ को निकाला जा सकता है।&lt;/p>
&lt;p>कम्प्यूटेशनल जटिलता के दृष्टिकोण से, शोर के एल्गोरिदम का निष्पादन समय &lt;strong>क्वांटम पॉलीनोमियल टाइम&lt;/strong> है, विशेष रूप से यह इस प्रकार है:
&lt;/p>
$$ O((\log n)^3) $$
&lt;p>
हाल के वर्षों में अनुकूलित सर्किट कार्यान्वयन पर विचार ঘনত্ব करते हुए, इसे $O((\log n)^2 \log \log n)$ तक कम किया जा सकता है।&lt;/p>
&lt;div class="mermaid">graph LR
A["क्लासिकल एल्गोरिदम (GNFS)"] -->|सीमा| B["सब-एक्सपोनेंशियल टाइम L_n[1/3]"]
C["क्वांटम एल्गोरिदम (Shor)"] -->|सफलता| D["पॉलीनोमियल टाइम O((log n)^3)"]
B --> E["RSA क्रिप्टोग्राफी का निरंतर उपयोग (कुंजी की लंबाई बढ़ाना)"]
D --> F["RSA क्रिप्टोग्राफी का पूर्ण पतन"]&lt;/div>
&lt;h3 id="52-कलसकल-सब-एकसपनशयल-टइम-बनम-कवटम-पलनमयल-टइम">5.2 क्लासिकल सब-एक्सपोनेंशियल टाइम बनाम क्वांटम पॉलीनोमियल टाइम
&lt;/h3>&lt;p>इन दो जटिलता वर्गों के बीच का अंतर वास्तविक दुनिया की क्रिप्टोग्राफ़िक सुरक्षा में निर्णायक अर्थ रखता है।&lt;/p>
&lt;p>उदाहरण के लिए, RSA-2048 (2048-बिट भाज्य संख्या) के गुणनखंडन के मामले पर विचार करें।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GNFS (क्लासिकल)&lt;/strong>: $n \approx 2^{2048}$ को $L_n[1/3, 1.923]$ में प्रतिस्थापित करने पर, लगभग $2^{112}$ ऑपरेशनों की आवश्यकता होगी। यह एक खगोलीय गणना राशि है जिसे ब्रह्मांड के जीवनकाल से अधिक समय लगेगा, भले ही वर्तमान में पृथ्वी पर सभी कम्प्यूटेशनल संसाधनों को जोड़ दिया जाए।&lt;/li>
&lt;li>&lt;strong>Shor&amp;rsquo;s Algorithm (क्वांटम)&lt;/strong>: $O((\log n)^3)$ एल्गोरिदम के साथ, केवल लगभग $2048^3 \approx 8.5 \times 10^9$ लॉजिक गेट ऑपरेशनों की आवश्यकता होगी। इसका मतलब यह है कि यदि उचित हार्डवेयर (लाखों भौतिक क्विबिट और त्रुटि सुधार क्षमताओं के साथ एक यूनिवर्सल क्वांटम कंप्यूटर) मौजूद है, तो गणना केवल कुछ घंटों से लेकर कुछ दिनों में पूरी की जा सकती है।&lt;/li>
&lt;/ul>
&lt;p>&amp;ldquo;घातांक $\alpha=1/3$&amp;rdquo; सब-एक्सपोनेंशियल से &amp;ldquo;पॉलीनोमियल टाइम&amp;rdquo; में प्रतिमान बदलाव (paradigm shift) पारंपरिक क्रिप्टोग्राफी की उस रणनीति को शक्तिहीन कर देता है जो कुंजी की लंबाई बढ़ाकर सुरक्षा सुनिश्चित करती है।&lt;/p>
&lt;hr>
&lt;h2 id="6-नषकरष-अगल-पढ-क-लए-दषटकण">6. निष्कर्ष: अगली पीढ़ी के लिए दृष्टिकोण
&lt;/h2>&lt;p>&amp;ldquo;क्या GNFS से परे कोई क्लासिकल एल्गोरिदम मौजूद है?&amp;rdquo; प्रश्न के लिए वैज्ञानिक समुदाय की वर्तमान आम सहमति इस प्रकार है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>व्यावहारिक सुधार जारी रहेंगे, लेकिन एसिम्प्टोटिक छलांग नहीं लगेगी&lt;/strong>: MNFS, बहुपद चयन का अनुकूलन, ब्लॉक वीडमैन विधि का समानांतरकरण आदि जैसे GNFS के स्थिरांक पद $c$ को सुधारने के प्रयास जारी हैं। हालाँकि, इसकी बहुत कम संभावना है कि $\alpha = 1/3$ से कम वाला कोई क्लासिकल एल्गोरिदम खोजा जाएगा।&lt;/li>
&lt;li>&lt;strong>क्लासिकल कंप्यूटरों पर RSA की सुरक्षा मजबूत बनी हुई है&lt;/strong>: GNFS की कम्प्यूटेशनल जटिलता अभी भी बहुत बड़ी है, और RSA-2048 और RSA-4096 क्लासिकल कंप्यूटरों के हमलों के खिलाफ आने वाले कई दशकों तक सुरक्षित रहेंगे।&lt;/li>
&lt;li>&lt;strong>असली खतरा क्वांटम एल्गोरिदम है&lt;/strong>: क्वांटम यांत्रिकी के सिद्धांतों पर आधारित शोर का एल्गोरिदम कम्प्यूटेशनल जटिलता की बाधा को तोड़ता है। इसके कारण, दुनिया को पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC: Post-Quantum Cryptography) में स्थानांतरित होने के लिए मजबूर होना पड़ रहा है। क्वांटम कंप्यूटरों (जो पॉलीनोमियल टाइम में हल नहीं किए जा सकते) के लिए भी कठिन मानी जाने वाली नई गणितीय समस्याओं, जैसे लैटिस-आधारित क्रिप्टोग्राफी और हैश-आधारित क्रिप्टोग्राफी में संक्रमण, वर्तमान क्रिप्टोग्राफी में सबसे आगे है।&lt;/li>
&lt;/ol>
&lt;p>जनरल नंबर फील्ड सीव (GNFS) &amp;ldquo;सर्वोच्च उपलब्धियों&amp;rdquo; में से एक है जिसे मानवता क्लासिकल गणित और एल्गोरिदम डिजाइन की सीमा तक पहुंचकर हासिल कर पाई है। GNFS की गहरी गणितीय संरचना को समझना न केवल क्रिप्टैनालिसिस (cryptanalysis) का इतिहास सीखना है, बल्कि यह कम्प्यूटेशनल कॉम्प्लेक्सिटी थ्योरी और बीजीय संख्या सिद्धांत (algebraic number theory) की सुंदरता का अनुभव करने के लिए एक बौद्धिक खोज की यात्रा भी है। उस दिन तक जब क्वांटम कंप्यूटर व्यावहारिक हो जाएंगे, GNFS संभवतः सबसे शक्तिशाली गुणनखंडन एल्गोरिदम के रूप में अपना सिंहासन बनाए रखेगा।&lt;/p></description></item><item><title>【चित्रित PQC】 क्वांटम-प्रतिरोधी क्रिप्टोग्राफी के प्रमुख एल्गोरिदम की तुलना</title><link>http://kenji.blog/hi/p/post-quantum-cryptography-algorithms-comparison/</link><pubDate>Fri, 11 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/post-quantum-cryptography-algorithms-comparison/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography-algorithms-comparison/img/eyecatch.jpg" alt="Featured image of post 【चित्रित PQC】 क्वांटम-प्रतिरोधी क्रिप्टोग्राफी के प्रमुख एल्गोरिदम की तुलना" />&lt;h2 id="1-परचय-कवटम-कपयटर-दवर-लय-गय-करपटगरफ-सकट">1. परिचय: क्वांटम कंप्यूटर द्वारा लाया गया &amp;lsquo;क्रिप्टोग्राफी संकट&amp;rsquo;
&lt;/h2>&lt;p>आधुनिक इंटरनेट समाज में, संचार की गोपनीयता और डेटा की अखंडता की रक्षा के लिए पब्लिक-की क्रिप्टोग्राफी तकनीक बुनियादी ढांचे के रूप में अपरिहार्य है। वर्तमान में व्यापक रूप से उपयोग की जाने वाली RSA क्रिप्टोग्राफी और एलिप्टिक कर्व क्रिप्टोग्राफी (ECC), क्रमशः &amp;lsquo;विशाल समग्र संख्याओं के अभाज्य गुणनखंड (prime factorization) की कठिनाई&amp;rsquo; और &amp;lsquo;एलिप्टिक कर्व पर असतत लघुगणक समस्या (discrete logarithm problem) की कठिनाई&amp;rsquo; जैसी गणितीय बाधाओं पर निर्भर करके सुरक्षा सुनिश्चित करती हैं। शास्त्रीय कंप्यूटरों (सुपर कंप्यूटर सहित वर्तमान में हम जिन कंप्यूटरों का उपयोग कर रहे हैं) के साथ, यह सिद्ध हो चुका है कि इन गणितीय समस्याओं को हल करने में ब्रह्मांड की आयु से भी अधिक समय लगेगा, और यही उनकी सुरक्षा का आधार रहा है।&lt;/p>
&lt;p>हालाँकि, यह मजबूत आधार &lt;strong>क्वांटम कंप्यूटर&lt;/strong> के सिद्धांत और व्यावसायीकरण की प्रगति से पूरी तरह से पलटने वाला है। 1994 में क्रिप्टोग्राफर पीटर शोर (Peter Shor) द्वारा प्रकाशित &amp;lsquo;&lt;strong>शोर का एल्गोरिदम (Shor's Algorithm)&lt;/strong>&amp;rsquo; सैद्धांतिक रूप से साबित करता है कि यदि इसे पर्याप्त प्रदर्शन वाले फॉल्ट-टॉलरेंट जनरल-परपज क्वांटम कंप्यूटर (CRQC: Cryptographically Relevant Quantum Computer) पर निष्पादित किया जाए, तो अभाज्य गुणनखंड समस्या और असतत लघुगणक समस्या को &amp;lsquo;बहुपद समय (polynomial time)&amp;rsquo; में डिक्रिप्ट किया जा सकता है। इसका मतलब है कि वर्तमान में उपयोग की जाने वाली सभी पब्लिक-की क्रिप्टोग्राफी बेकार हो जाएंगी।&lt;/p>
&lt;div class="mermaid">graph TD
A["बड़े पैमाने का क्वांटम कंप्यूटर (CRQC)"] -->|निष्पादन| B["शोर का एल्गोरिदम (Shor's Algorithm)"]
B -->|बहुपद समय में डिक्रिप्शन| C["अभाज्य गुणनखंड समस्या (RSA)"]
B -->|बहुपद समय में डिक्रिप्शन| D["असतत लघुगणक समस्या (ECC / ECDSA)"]
C --> E["क्रिप्टोग्राफ़िक संचार की छिपकर बातें सुनना, डेटा से छेड़छाड़, स्पूफिंग"]
D --> E
F["Store Now, Decrypt Later (SNDL)"] --> E&lt;/div>
&lt;p>यह सोचना कि &amp;lsquo;कोई समस्या नहीं है क्योंकि पूर्ण विकसित क्वांटम कंप्यूटर के पूरा होने में अभी दशकों बाकी हैं&amp;rsquo; बहुत खतरनाक है। क्योंकि, &lt;strong>Store Now, Decrypt Later (SNDL: अभी स्टोर करें, बाद में डिक्रिप्ट करें)&lt;/strong> नामक हमले का तरीका पहले ही एक वास्तविक खतरा बन चुका है। यह एक ऐसा हमला है जहाँ दुर्भावनापूर्ण राष्ट्र या हैकर संगठन वर्तमान एन्क्रिप्टेड संचार डेटा (जैसे TLS ट्रैफ़िक) को बड़ी मात्रा में स्टोरेज में सहेज कर रखते हैं, और भविष्य में जैसे ही शक्तिशाली क्वांटम कंप्यूटर उपलब्ध होंगे, वे उन सभी को डिक्रिप्ट कर देंगे। राष्ट्रीय रहस्य, बुनियादी ढांचे की जानकारी, और चिकित्सा डेटा जिन्हें लंबे समय तक संरक्षित किया जाना चाहिए, पहले से ही इस खतरे के संपर्क में हैं।&lt;/p>
&lt;p>इसके अलावा, सममित-कुंजी क्रिप्टोग्राफी (Symmetric-key cryptography जैसे AES) और हैश फ़ंक्शंस (जैसे SHA-256) के खिलाफ 1996 में खोजा गया &lt;strong>ग्रोवर का एल्गोरिदम (Grover&amp;rsquo;s Algorithm)&lt;/strong> मौजूद है। यह ब्रूट-फोर्स हमले (brute-force attack) की कम्प्यूटेशनल जटिलता को वर्गमूल (square root) तक कम कर देता है। दूसरे शब्दों में, AES-128 का सुरक्षा स्तर प्रभावी रूप से 2^64 तक आधा हो जाता है, इसलिए क्वांटम युग में AES-256 या SHA-384 जैसी लंबी कुंजियों या हैश लंबाई का उपयोग करने की सिफारिश की जाती है।&lt;/p>
&lt;p>इस अभूतपूर्व क्रिप्टोग्राफ़िक संकट का मुकाबला करने के लिए, &lt;strong>पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC)&lt;/strong> का जन्म हुआ, जो नई गणितीय समस्याओं पर आधारित है जिन्हें क्वांटम कंप्यूटर का उपयोग करके भी हल करना मुश्किल है। इस लेख में, हम यू.एस. नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी (NIST) के नेतृत्व में PQC मानकीकरण प्रक्रिया के परिणामों के आधार पर प्रमुख PQC एल्गोरिदम के गणितीय पृष्ठभूमि, तंत्र और वास्तुकला की तुलना के बारे में विस्तार से बताएंगे।&lt;/p>
&lt;hr>
&lt;h2 id="2-nist-pqc-मनककरण-परयजन-क-पर-अवलकन-और-इतहस">2. NIST PQC मानकीकरण परियोजना का पूरा अवलोकन और इतिहास
&lt;/h2>&lt;p>क्रिप्टोग्राफ़िक तकनीक के संक्रमण में, प्रोटोकॉल के पुन: डिज़ाइन, सिस्टम अपडेट और हार्डवेयर प्रतिस्थापन आदि सहित कई वर्षों से लेकर दशकों तक का समय लगता है। इसलिए, दुनिया भर के क्रिप्टोग्राफ़रों ने बहुत पहले से PQC पर शोध करना शुरू कर दिया था। संयुक्त राज्य अमेरिका का NIST (नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी) इसमें केंद्रीय भूमिका निभा रहा है। NIST ने 2016 में PQC मानकीकरण प्रक्रिया के लिए आवेदन आमंत्रित किए और दुनिया भर के क्रिप्टोग्राफ़िक समुदाय से पूरी तरह से नए क्रिप्टोग्राफ़िक एल्गोरिदम के प्रस्ताव स्वीकार किए।&lt;/p>
&lt;p>मानकीकरण के लक्ष्य निम्नलिखित 2 मुख्य श्रेणियां थीं:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>पब्लिक-की क्रिप्टोग्राफी / की एनकैप्सुलेशन मैकेनिज्म (KEM: Key Encapsulation Mechanism)&lt;/strong>: TLS कनेक्शन आदि में संचार पथ को एन्क्रिप्ट करने के लिए सुरक्षित रूप से एक साझा कुंजी (common key) साझा (वितरित) करने का तंत्र।&lt;/li>
&lt;li>&lt;strong>डिजिटल हस्ताक्षर (Digital Signatures)&lt;/strong>: सॉफ़्टवेयर अपडेट और डिजिटल प्रमाणपत्रों में यह साबित करने का तंत्र कि डेटा के साथ कोई छेड़छाड़ नहीं की गई है और प्रेषक की पहचान सही है (प्रामाणिकता)।&lt;/li>
&lt;/ol>
&lt;p>लगभग 6 वर्षों के गहन मूल्यांकन, विश्लेषण और डिक्रिप्शन प्रतियोगिता (राउंड 1 से राउंड 3) के बाद, कुछ एल्गोरिदम के लिए राउंड 4 का अतिरिक्त मूल्यांकन किया गया। परिणामस्वरूप, 2024 में निम्नलिखित एल्गोरिदम औपचारिक संघीय सूचना प्रसंस्करण मानक (FIPS) के रूप में जारी किए गए और भविष्य के वैश्विक मानकों के रूप में स्थापित किए गए।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>FIPS 203 (ML-KEM)&lt;/strong>: CRYSTALS-Kyber पर आधारित KEM&lt;/li>
&lt;li>&lt;strong>FIPS 204 (ML-DSA)&lt;/strong>: CRYSTALS-Dilithium पर आधारित डिजिटल हस्ताक्षर&lt;/li>
&lt;li>&lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>: SPHINCS+ पर आधारित स्टेटलेस हैश-आधारित हस्ताक्षर&lt;/li>
&lt;li>&lt;strong>(भविष्य की योजना) FN-DSA&lt;/strong>: FALCON पर आधारित डिजिटल हस्ताक्षर&lt;/li>
&lt;/ul>
&lt;p>ये चयनित एल्गोरिदम विभिन्न गणितीय &amp;lsquo;कठिनाई समस्याओं&amp;rsquo; पर निर्भर करते हैं, ताकि यदि भविष्य में किसी एक एल्गोरिदम में कोई गंभीर भेद्यता पाई जाती है, तो संपूर्ण सिस्टम ध्वस्त न हो और विविधता (Crypto Agility) सुनिश्चित की जा सके। मानकीकरण प्रक्रिया में, लैटिस-आधारित क्रिप्टोग्राफी (Lattice-based cryptography) ने मुख्य रूप से प्रदर्शन के मामले में प्रमुख भूमिका निभाई, लेकिन हैश-आधारित क्रिप्टोग्राफी और कोड-आधारित क्रिप्टोग्राफी को शक्तिशाली बैकअप के रूप में अपनाया गया है।&lt;/p>
&lt;hr>
&lt;h2 id="3-pqc-क-परमख-गणतय-दषटकण-क-वरगकरण">3. PQC के प्रमुख गणितीय दृष्टिकोणों का वर्गीकरण
&lt;/h2>&lt;p>PQC एल्गोरिदम को मुख्य रूप से 5 श्रेणियों में विभाजित किया गया है, जो उनकी सुरक्षा के आधार पर गणितीय समस्याओं पर निर्भर करते हैं। इस लेख में, हम विशेष रूप से शीर्ष 3 के बारे में विस्तार से जानेंगे।&lt;/p>
&lt;ol>
&lt;li>&lt;strong>लैटिस-आधारित क्रिप्टोग्राफी (Lattice-based Cryptography)&lt;/strong>:
यह बहुआयामी लैटिस स्पेस में शॉर्टेस्ट वेक्टर प्रॉब्लम (SVP) और क्लोजेस्ट वेक्टर प्रॉब्लम (CVP), और उनसे प्राप्त LWE समस्या पर आधारित है। यह NIST मानकीकरण का केंद्र है, और इसमें Kyber, Dilithium और FALCON शामिल हैं। यह प्रसंस्करण गति, पब्लिक कुंजी आकार और सिफरटेक्स्ट (ciphertext) आकार का सबसे अच्छा संतुलन प्रदान करता है, और सामान्य उद्देश्य के उपयोग के लिए उपयुक्त है।&lt;/li>
&lt;li>&lt;strong>हैश-आधारित क्रिप्टोग्राफी (Hash-based Cryptography)&lt;/strong>:
यह अपनी सुरक्षा को पूरी तरह से क्रिप्टोग्राफ़िक हैश फ़ंक्शंस (जैसे SHA-2 और SHAKE) के &amp;lsquo;कोलिजन रेजिस्टेंस (Collision Resistance)&amp;rsquo; और &amp;lsquo;वन-वेनेस (One-wayness)&amp;rsquo; पर आधारित करता है। यह केवल डिजिटल हस्ताक्षर (जैसे SPHINCS+) पर लागू होता है, लेकिन इसकी सुरक्षा का प्रमाण सबसे मजबूत है और यह अज्ञात गणितीय हमलों के प्रति अत्यधिक प्रतिरोधी है।&lt;/li>
&lt;li>&lt;strong>कोड-आधारित क्रिप्टोग्राफी (Code-based Cryptography)&lt;/strong>:
त्रुटि-सुधार कोड के सिद्धांत पर आधारित, यह सिंड्रोम डिकोडिंग समस्या (Syndrome Decoding Problem) की कठिनाई पर निर्भर करता है। 1970 के दशक में प्रस्तावित Classic McEliece इसका प्रतिनिधि है, जिसका इतिहास बहुत लंबा है और सुरक्षा का ट्रैक रिकॉर्ड सिद्ध है, लेकिन दूसरी ओर, पब्लिक-की का आकार बहुत बड़ा (मेगाबाइट में) होता है।&lt;/li>
&lt;li>&lt;strong>मल्टीवेरिएट पॉलीनोमियल क्रिप्टोग्राफी (Multivariate Polynomial Cryptography)&lt;/strong>:
परिमित क्षेत्र (finite field) पर मल्टीवेरिएट क्वाड्रैटिक समीकरणों की प्रणाली को हल करने की कठिनाई (MQ समस्या) पर आधारित है। इसे मुख्य रूप से डिजिटल हस्ताक्षर (जैसे Rainbow) के रूप में प्रस्तावित किया गया था, लेकिन NIST के अंतिम दौर के दौरान एक शक्तिशाली हमले की विधि खोजी गई जिसने इसे एक साधारण पीसी पर कुछ दिनों में क्रैक कर दिया, जिसके कारण कई एल्गोरिदम मानकीकरण से बाहर हो गए।&lt;/li>
&lt;li>&lt;strong>आइसोजेनी-आधारित क्रिप्टोग्राफी (Isogeny-based Cryptography)&lt;/strong>:
एलिप्टिक कर्व्स के आइसोजेनी ग्राफ पर पथ-खोज समस्या (Path-finding problem) पर आधारित है। कुंजी का आकार बहुत छोटा है, और इसे ECC का सही उत्तराधिकारी माना जा रहा था, लेकिन अंतिम उम्मीदवार &amp;lsquo;SIKE&amp;rsquo; को 2022 में क्लासिकल गणित (Castryck-Decru हमले आदि) का उपयोग करके एक साधारण पीसी पर कुछ ही घंटों में पूरी तरह से डिक्रिप्ट कर दिया गया, जो PQC डिजाइन की कठिनाई और खतरे का प्रतीक एक नाटकीय अंत था।&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="4-लटस-करपटगरफ-क-गहरई-lwe-समसय-और-module-lwe-क-गणतय-नव">4. लैटिस क्रिप्टोग्राफी की गहराई: LWE समस्या और Module-LWE की गणितीय नींव
&lt;/h2>&lt;p>वर्तमान में सबसे आशाजनक माना जाने वाला और मानकीकरण का केंद्र &lt;strong>लैटिस क्रिप्टोग्राफी (Lattice-based cryptography)&lt;/strong> है। इसकी सुरक्षा का आधार &lt;strong>LWE समस्या (Learning with Errors)&lt;/strong> है। इसे 2005 में ओडेड रेगेव (Oded Regev) द्वारा प्रस्तावित किया गया था, और इस ऐतिहासिक उपलब्धि के लिए उन्हें गोडेल पुरस्कार (Gödel Prize) से सम्मानित किया गया। LWE समस्या को समझे बिना आधुनिक PQC के बारे में बात करना असंभव है।&lt;/p>
&lt;h3 id="41-lwe-समसय-learning-with-errors-कय-ह">4.1. LWE समस्या (Learning with Errors) क्या है?
&lt;/h3>&lt;p>सबसे पहले, आइए एक सरल रैखिक समीकरण प्रणाली (linear equation system) पर विचार करें। मान लीजिए कि किसी मॉड्यूलस $q$ (मॉड्यूलो $q$) के तहत एक ज्ञात यादृच्छिक (random) मैट्रिक्स $A$ है, एक अज्ञात गुप्त वेक्टर $\vec{s}$ है, और उनका गुणनफल $\vec{b}$ दिया गया है।&lt;/p>
$$ \vec{b} = A\vec{s} \pmod q $$
&lt;p>इस समय, सार्वजनिक जानकारी $A$ और $\vec{b}$ से अज्ञात $\vec{s}$ को खोजना आसान है। यदि हम &amp;lsquo;गौसियन एलिमिनेशन (Gaussian elimination)&amp;rsquo; जैसे शास्त्रीय एल्गोरिदम का उपयोग करते हैं, तो हम आसानी से बहुपद समय में $\vec{s}$ की गणना कर सकते हैं।&lt;/p>
&lt;p>हालाँकि, यदि हम इस समीकरण में &amp;lsquo;छोटी जानबूझकर की गई त्रुटि (शोर/noise)&amp;rsquo; जोड़ते हैं, तो समस्या की कठिनाई नाटकीय रूप से बढ़ जाती है। यही &lt;strong>LWE समस्या&lt;/strong> है।&lt;/p>
&lt;p>एक अज्ञात गुप्त वेक्टर $\vec{s} \in \mathbb{Z}_q^n$ और एक बेतरतीब ढंग से चुना गया मैट्रिक्स $A \in \mathbb{Z}_q^{m \times n}$ तैयार करें। इसके अलावा, एक त्रुटि वेक्टर $\vec{e} \in \mathbb{Z}_q^m$ तैयार करें जिसे सामान्य वितरण (normal distribution) या द्विपद वितरण (binomial distribution) के अनुसार चुना गया हो और जिसके &amp;lsquo;तत्वों का मान पर्याप्त रूप से छोटा&amp;rsquo; हो, और $\vec{b}$ की गणना निम्नानुसार करें:&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod q $$
&lt;p>&lt;strong>Search LWE समस्या&lt;/strong> वह समस्या है जिसमें &amp;lsquo;सार्वजनिक जानकारी $(A, \vec{b})$ से गुप्त जानकारी $\vec{s}$ को खोजना&amp;rsquo; होता है। इस त्रुटि $\vec{e}$ की उपस्थिति के कारण, यदि हम गौसियन एलिमिनेशन जैसे बीजगणितीय समाधान (algebraic solution) करने का प्रयास करते हैं, तो समीकरणों को जोड़ने और घटाने की प्रक्रिया में त्रुटि $\vec{e}$ बहुत अधिक बढ़ जाती है, और अंततः यह यादृच्छिक मूल्यों से अप्रभेद्य हो जाती है और विफल हो जाती है।&lt;/p>
&lt;p>LWE समस्या की महानता इस तथ्य में निहित है कि एक मजबूत सैद्धांतिक प्रमाण (reduction) मौजूद है कि जब तक कोई ऐसा क्वांटम एल्गोरिदम नहीं है जो लैटिस पर &amp;lsquo;वर्स्ट-केस हार्डनेस (Worst-case hardness)&amp;rsquo; समस्याओं जैसे कि GapSVP (Decision Shortest Vector Problem) या SIVP (Shortest Independent Vector Problem) को हल कर सके, LWE समस्या को भी औसत मामले (Average-case) में हल नहीं किया जा सकता है। दूसरे शब्दों में, भले ही क्रिप्टोग्राफ़िक कुंजी बेतरतीब ढंग से उत्पन्न हो, यह गारंटी दी जाती है कि इसमें सैद्धांतिक ऊपरी सीमा द्वारा समर्थित मजबूत सुरक्षा है।&lt;/p>
&lt;h3 id="42-ring-lwe-और-module-lwe-दवर-नटकय-दकषत-सधर">4.2. Ring-LWE और Module-LWE द्वारा नाटकीय दक्षता सुधार
&lt;/h3>&lt;p>सामान्य LWE समस्या (Standard LWE) में सुरक्षा का बहुत स्पष्ट आधार होता है, लेकिन मैट्रिक्स $A$ का आकार बहुत बड़ा हो जाता है, और कुंजी का आकार मेगाबाइट-श्रेणी का हो जाता है, जो व्यावहारिक नहीं है। इसलिए, पॉलीनोमियल रिंग्स (Polynomial Rings) का उपयोग करके एक बीजगणितीय संरचना बनाने का दृष्टिकोण प्रस्तावित किया गया था।&lt;/p>
&lt;p>&lt;strong>Ring-LWE समस्या&lt;/strong> में, साधारण वैक्टर या मैट्रिक्स के बजाय, हम एक निश्चित बहुपद वलय (polynomial ring) $R_q$ के तत्वों (बहुपद) का उपयोग करते हैं। NIST मानक आमतौर पर निम्नलिखित जैसे साइक्लोटोमिक बहुपद वलय (cyclotomic polynomial ring) का उपयोग करता है:&lt;/p>
$$ R_q = \mathbb{Z}_q[X]/(X^n + 1) $$
&lt;p>यहाँ, $n$ 2 की घात (power of 2) (जैसे: 256) है, और $q$ एक उपयुक्त अभाज्य संख्या (prime number) है। इस रिंग पर, हम $b = a \cdot s + e \pmod q$ की गणना करने के लिए तत्वों $a, s, e \in R_q$ का उपयोग करते हैं। चूंकि एक बहुपद $a$ में $n$ गुणांक (coefficients) होते हैं, डेटा को काफी संपीड़ित (compressed) किया जा सकता है। इसके अलावा, &lt;strong>NTT (Number Theoretic Transform)&lt;/strong> का उपयोग करके, जो कि फास्ट फूरियर ट्रांसफॉर्म (FFT) का एक परिमित क्षेत्र (finite field) संस्करण है, बहुपदों का गुणन $O(n \log n)$ की कम्प्यूटेशनल जटिलता के साथ बहुत तेज गति से संभव हो जाता है।&lt;/p>
&lt;p>हालाँकि, Ring-LWE के साथ यह चिंता थी कि &amp;lsquo;रिंग की विशेष बीजगणितीय संरचना के कारण अज्ञात कमजोरियाँ मौजूद हो सकती हैं&amp;rsquo;। इसके अलावा, जब सुरक्षा स्तर (जैसे AES-128, 192, 256 समतुल्य) बदलते हैं, तो बहुपद की डिग्री $n$ को ही बदलना पड़ता था, और इसके साथ NTT एल्गोरिदम आदि जैसे संपूर्ण कार्यान्वयन को फिर से लिखना पड़ता था, जो एक इंजीनियरिंग चुनौती थी।&lt;/p>
&lt;p>इसलिए, मानकीकृत एल्गोरिदम Kyber और Dilithium ने &lt;strong>Module-LWE (M-LWE) समस्या&lt;/strong> को अपनाया। Module-LWE संरचनाहीन Standard LWE और अत्यधिक संरचित Ring-LWE के बीच एक समझौता है, और बहुपद वलय $R_q$ के तत्वों से बने $k \times k$ मैट्रिक्स (मॉड्यूल) का उपयोग करता है।&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod{R_q} \quad (A \in R_q^{k \times k}, \vec{s}, \vec{e} \in R_q^k) $$
&lt;p>Module-LWE का सबसे बड़ा लाभ यह है कि बहुपद की डिग्री $n$ (NIST मानक में $n=256$) को स्थिर रखते हुए, मैट्रिक्स के आयाम (dimension) $k$ को बदलकर सुरक्षा स्तर को आसानी से बढ़ाया या घटाया जा सकता है।
उदाहरण के लिए, Kyber के मामले में, आयाम $k$ को निम्नानुसार समायोजित किया गया है:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Kyber512 (Level 1)&lt;/strong>: $k = 2$ (AES-128 समतुल्य)&lt;/li>
&lt;li>&lt;strong>Kyber768 (Level 3)&lt;/strong>: $k = 3$ (AES-192 समतुल्य)&lt;/li>
&lt;li>&lt;strong>Kyber1024 (Level 5)&lt;/strong>: $k = 4$ (AES-256 समतुल्य)&lt;/li>
&lt;/ul>
&lt;p>इससे सभी सुरक्षा स्तरों पर बुनियादी NTT कोड और बहुपद गणना हार्डवेयर सर्किट का 100% पुन: उपयोग करना संभव हो गया, जिससे कार्यान्वयन की सुरक्षा और दक्षता में नाटकीय रूप से सुधार हुआ।&lt;/p>
&lt;hr>
&lt;h2 id="5-crystals-kyber-ml-kem-अगल-पढ-क-क-एनकपसलशन-मकनजम-key-encapsulation-mechanism">5. CRYSTALS-Kyber (ML-KEM): अगली पीढ़ी का की एनकैप्सुलेशन मैकेनिज्म (Key Encapsulation Mechanism)
&lt;/h2>&lt;p>&lt;strong>FIPS 203 (ML-KEM)&lt;/strong> के रूप में औपचारिक रूप से मानकीकृत CRYSTALS-Kyber, उपर्युक्त Module-LWE समस्या पर आधारित एक की एनकैप्सुलेशन मैकेनिज्म (KEM) है। यह भविष्य में TLS 1.3 और SSH आदि में सत्र कुंजियों (session keys) को सुरक्षित रूप से साझा करने के लिए वास्तविक वैश्विक मानक बन जाएगा।&lt;/p>
&lt;h3 id="51-kem-key-encapsulation-mechanism-वसतकल-architecture">5.1. KEM (Key Encapsulation Mechanism) वास्तुकला (Architecture)
&lt;/h3>&lt;p>PQC युग में, RSA की तरह &amp;lsquo;क्लाइंट एक साझा कुंजी बनाता है और इसे सर्वर की सार्वजनिक कुंजी के साथ एन्क्रिप्ट करके भेजता है&amp;rsquo; के सीधे दृष्टिकोण के बजाय, KEM का एनकैप्सुलेशन ढांचा मानक होगा।&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Client as "क्लाइंट (Alice)"
participant Server as "सर्वर (Bob)"
Note over Client: "ML-KEM KeyGen()"
Client->>Client: "गुप्त कुंजी (sk) और सार्वजनिक कुंजी (pk) उत्पन्न करें"
Client->>Server: "सार्वजनिक कुंजी (pk) भेजें"
Note over Server: "ML-KEM Encaps()"
Server->>Server: "एक यादृच्छिक साझा कुंजी (K) उत्पन्न करें"
Server->>Server: "K को pk के साथ एनकैप्सुलेट करें और सिफरटेक्स्ट (c) बनाएं"
Server->>Client: "सिफरटेक्स्ट (c) भेजें"
Note over Client: "ML-KEM Decaps()"
Client->>Client: "गुप्त कुंजी (sk) का उपयोग करके सिफरटेक्स्ट (c) को डिक्रिप्ट करें"
Client->>Client: "एनकैप्सुलेशन हटाएं और साझा कुंजी (K) निकालें"
Note over Client, Server: "साझा की गई साझा कुंजी (K) का उपयोग करके AES आदि के साथ एन्क्रिप्टेड संचार शुरू करें"&lt;/div>
&lt;h3 id="52-kyber-क-आतरक-एलगरदम-क-ततर-और-फजसक-ओकमट-fujisaki-okamoto-टरसफरम">5.2. Kyber के आंतरिक एल्गोरिदम का तंत्र और फुजिसाकी-ओकामोटो (Fujisaki-Okamoto) ट्रांसफॉर्म
&lt;/h3>&lt;p>Kyber का डिज़ाइन बहुत ही परिष्कृत है। सबसे पहले, यह एक पब्लिक-की क्रिप्टोग्राफी सिस्टम (Kyber.CPAPKE) बनाता है जो केवल CPA (Chosen Plaintext Attack) के खिलाफ सुरक्षित है, और फिर उस पर &lt;strong>फुजिसाकी-ओकामोटो ट्रांसफॉर्म (Fujisaki-Okamoto Transform)&lt;/strong> नामक क्रिप्टोग्राफ़िक रूप से बहुत शक्तिशाली तकनीक को लागू करके, इसे एक पूर्ण KEM में अपग्रेड करने के लिए डिज़ाइन किया गया है जो CCA (Adaptive Chosen Ciphertext Attack) के खिलाफ भी सुरक्षित है।&lt;/p>
&lt;p>CPAPKE के मूल एन्क्रिप्शन और डिक्रिप्शन तंत्र इस प्रकार हैं:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>कुंजी निर्माण (Key Generation)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>एक यादृच्छिक बीज (random seed) मान से, NTT डोमेन पर मैट्रिक्स $A \in R_q^{k \times k}$ उत्पन्न करें। मॉड्यूलस $q$ का उपयोग $3329$ किया जाता है।&lt;/li>
&lt;li>सेंटर्ड बाइनोमियल डिस्ट्रीब्यूशन (CBD) से, छोटे गुणांक वाले गुप्त वेक्टर $\vec{s}$ और त्रुटि वेक्टर $\vec{e}$ का नमूना लें।&lt;/li>
&lt;li>$\vec{t} = A\vec{s} + \vec{e}$ की गणना करें। सार्वजनिक कुंजी $(A, \vec{t})$ है, गुप्त कुंजी $\vec{s}$ है। (व्यवहार में $A$ को एक बीज मान के रूप में प्रकाशित किया जाता है ताकि बैंडविड्थ बचाई जा सके)।&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>एन्क्रिप्शन (Encryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>32-बाइट संदेश ($m$) (साझा कुंजी की सामग्री) जिसे आप साझा करना चाहते हैं, उसे एक बहुपद में एनकोड करें।&lt;/li>
&lt;li>एक नया यादृच्छिक वेक्टर $\vec{r}$ और छोटी त्रुटियां $\vec{e_1}, e_2$ उत्पन्न करें।&lt;/li>
&lt;li>$\vec{u} = A^T\vec{r} + \vec{e_1}$&lt;/li>
&lt;li>$v = \vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m$&lt;/li>
&lt;li>सिफरटेक्स्ट $(\vec{u}, v)$ बन जाता है।&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>डिक्रिप्शन (Decryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>प्राप्तकर्ता $v - \vec{s}^T\vec{u}$ की गणना करता है।&lt;/li>
&lt;li>इस समीकरण का विस्तार करने पर यह निम्न प्रकार से बन जाता है:
$v - \vec{s}^T\vec{u} = (\vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m) - \vec{s}^T(A^T\vec{r} + \vec{e_1})$&lt;/li>
&lt;li>यहाँ $\vec{t} = A\vec{s} + \vec{e}$ को प्रतिस्थापित करने पर, मुख्य पद $\vec{s}^TA^T\vec{r}$ रद्द हो जाता है।&lt;/li>
&lt;li>जो बचता है वह है $\lfloor q/2 \rceil \cdot m + (\vec{e}^T\vec{r} + e_2 - \vec{s}^T\vec{e_1})$।&lt;/li>
&lt;li>चूँकि कोष्ठक में दिए गए पद &amp;lsquo;छोटी त्रुटियों के उत्पाद और योग&amp;rsquo; हैं, इसलिए वे समग्र रूप से पर्याप्त छोटे मान (शोर) तक सीमित रहते हैं। इसलिए, प्रत्येक गुणांक $0$ के करीब है या $q/2$ के करीब है, इसकी थ्रेशोल्ड निर्णय (threshold judgment) करके, मूल संदेश $m$ के बिट्स (0 या 1) को बिना किसी त्रुटि के पूरी तरह से बहाल किया जा सकता है।&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>Kyber की सबसे बड़ी ताकत इसकी असाधारण &lt;strong>प्रसंस्करण गति&lt;/strong> और &lt;strong>मध्यम कुंजी का आकार&lt;/strong> है। Kyber768 के मामले में, सार्वजनिक कुंजी का आकार 1,184 बाइट्स है, और सिफरटेक्स्ट आकार 1,088 बाइट्स है, जो RSA-3072 (लगभग 384 बाइट्स के कुंजी आकार) की तुलना में बड़ा है, लेकिन यह आधुनिक इंटरनेट संचार के MTU (Maximum Transmission Unit) के भीतर पैकेट विखंडन (packet fragmentation) के बिना फिट हो सकता है, और इसका नेटवर्क लेटेंसी पर लगभग कोई प्रतिकूल प्रभाव नहीं पड़ता है।&lt;/p>
&lt;hr>
&lt;h2 id="6-crystals-dilithium-ml-dsa-लटस-आधरत-समनय-उददशय-डजटल-हसतकषर">6. CRYSTALS-Dilithium (ML-DSA): लैटिस-आधारित सामान्य-उद्देश्य डिजिटल हस्ताक्षर
&lt;/h2>&lt;p>डिजिटल हस्ताक्षरों के मानकीकरण में, समान लैटिस क्रिप्टोग्राफी दृष्टिकोण के भीतर भी विभिन्न डिजाइन दर्शन वाले एल्गोरिदम ने प्रतिस्पर्धा की। उनमें से, &lt;strong>CRYSTALS-Dilithium&lt;/strong> को एक सामान्य-उद्देश्य डिजिटल हस्ताक्षर के रूप में &lt;strong>FIPS 204 (ML-DSA)&lt;/strong> के लिए चुना गया था।&lt;/p>
&lt;h3 id="61-fiat-shamir-with-aborts-परडइम">6.1. Fiat-Shamir with Aborts पैराडाइम
&lt;/h3>&lt;p>Kyber की तरह ही, Dilithium भी Module-LWE (और Module-SIS समस्या) पर आधारित एक डिजिटल हस्ताक्षर योजना है। डिज़ाइन का आधार एक अत्यंत महत्वपूर्ण पैराडाइम का उपयोग करता है जिसे &amp;lsquo;&lt;strong>Fiat-Shamir with Aborts (रद्द करने के साथ फिएट-शमीर ट्रांसफॉर्म)&lt;/strong>&amp;rsquo; कहा जाता है।&lt;/p>
&lt;p>फिएट-शमीर ट्रांसफॉर्म अपने आप में एक इंटरेक्टिव ज़ीरो-नॉलेज प्रूफ़ (interactive zero-knowledge proof) प्रोटोकॉल को गैर-इंटरेक्टिव डिजिटल हस्ताक्षर में बदलने की एक मानक विधि है। प्रूवर (हस्ताक्षरकर्ता) एक कमिटमेंट $y$ उत्पन्न करता है, $w = Ay$ की गणना करता है और इसे एक हैश फ़ंक्शन के माध्यम से गुजार कर एक यादृच्छिक चुनौती (random challenge) $c$ प्राप्त करता है, और प्रतिक्रिया $z = y + cs$ की गणना करता है।&lt;/p>
&lt;p>हालाँकि, यदि इसे लैटिस क्रिप्टोग्राफी में सरलता से लागू किया जाता है, तो प्रतिक्रिया $z$ का वितरण गुप्त कुंजी $s$ के मान के आधार पर विकृत हो जाता है, और एक घातक समस्या (साइड-चैनल जैसी गणितीय जानकारी लीक होना) थी कि कई हस्ताक्षरों को देखने वाला हमलावर धीरे-धीरे गुप्त कुंजी $s$ की जानकारी लीक होते हुए प्राप्त कर लेगा।&lt;/p>
&lt;p>Dilithium की डिज़ाइन टीम (Lyubashevsky और अन्य) ने एक तकनीक पेश की जिसे &amp;lsquo;&lt;strong>रिजेक्शन सैंपलिंग (Rejection Sampling)&lt;/strong>&amp;rsquo; कहा जाता है, जिसमें यदि हस्ताक्षर की गणना के परिणाम $z$ के गुणांक पूर्व-निर्धारित सुरक्षित थ्रेशोल्ड सीमा के भीतर नहीं आते हैं, तो संपूर्ण हस्ताक्षर प्रक्रिया को छोड़ दिया जाता है (Abort) और एक नए यादृच्छिक संख्या $y$ का उपयोग करके खरोंच से गणना फिर से की जाती है।&lt;/p>
&lt;p>नतीजतन, अंतिम रूप से आउटपुट होने वाला हस्ताक्षर $z$ गुप्त कुंजी पर बिल्कुल निर्भर नहीं करता है और यह पूरी तरह से एक समान वितरण (uniform distribution) बन जाता है, जो गणितीय रूप से सूचना रिसाव को पूरी तरह से रोकने में सफल रहा।&lt;/p>
&lt;h3 id="62-dilithium-क-लभ-और-करयनवयन-म-आसन">6.2. Dilithium के लाभ और कार्यान्वयन में आसानी
&lt;/h3>&lt;p>Dilithium के डिजाइन का एक बड़ा फायदा यह है कि यह हस्ताक्षर निर्माण प्रक्रिया में जटिल &amp;lsquo;गाऊसी वितरण (Gaussian distribution) से सैंपलिंग&amp;rsquo; या &amp;lsquo;फ्लोटिंग-पॉइंट गणना&amp;rsquo; का &lt;strong>बिल्कुल उपयोग नहीं करता है&lt;/strong>। इसे केवल एक समान वितरण (uniform distribution) से सैंपलिंग, सरल पूर्णांक मॉड्यूलो अंकगणित, NTT और हैश फ़ंक्शंस (SHAKE) के साथ लागू किया जा सकता है, जिससे एम्बेडेड माइक्रोकंट्रोलर्स से लेकर क्लाउड सर्वर तक विभिन्न प्रकार के वातावरण में इसे सुरक्षित रूप से और निरंतर समय (constant-time) में लागू करना आसान हो जाता है। इसके कारण, यह टाइमिंग हमलों (timing attacks) जैसे भौतिक साइड-चैनल हमलों (side-channel attacks) के खिलाफ भी मजबूत प्रतिरोध रखता है।&lt;/p>
&lt;hr>
&lt;h2 id="7-falcon-fn-dsa-अतयधक-कमपकट-लटस-हसतकषर">7. FALCON (FN-DSA): अत्यधिक कॉम्पैक्ट लैटिस हस्ताक्षर
&lt;/h2>&lt;p>NIST ने Dilithium से भिन्न विशेषताओं वाले एक अन्य लैटिस-आधारित हस्ताक्षर के रूप में &lt;strong>FALCON (Fast-Fourier Lattice-based Compact Signatures over NTRU)&lt;/strong> को मानकीकरण उम्मीदवार के रूप में चुना (वर्तमान में FN-DSA के रूप में मसौदा तैयार किया जा रहा है)।&lt;/p>
&lt;h3 id="71-ntru-लटस-और-गऊस-सपलग-gaussian-sampling">7.1. NTRU लैटिस और गाऊसी सैंपलिंग (Gaussian Sampling)
&lt;/h3>&lt;p>FALCON की सबसे बड़ी विशेषता यह है कि यह LWE समस्या के बजाय &lt;strong>NTRU (N-th degree Truncated polynomial Ring Units) लैटिस&lt;/strong> का उपयोग करता है, जिसका इतिहास 1996 से काफी पुराना है। इसके अलावा, यह GPV (Gentry-Peikert-Vaikuntanathan) ढांचे पर आधारित &amp;lsquo;&lt;strong>हैश-एंड-साइन (Hash-and-Sign)&lt;/strong>&amp;rsquo; पैराडाइम को अपनाता है।&lt;/p>
&lt;p>Hash-and-Sign में, संदेश का हैश मान अंतरिक्ष में एक लक्ष्य बिंदु के रूप में सेट किया जाता है, और उस बिंदु के सबसे करीब लैटिस पर बिंदु (क्लोजेस्ट वेक्टर प्रॉब्लम का अनुमानित समाधान) खोजना हस्ताक्षर बन जाता है। इसके लिए, गुप्त कुंजी &amp;lsquo;अच्छी गुणवत्ता के छोटे आधार (good short basis)&amp;rsquo; का उपयोग करके असतत गाऊसी वितरण (discrete Gaussian distribution) के अनुसार बिंदुओं का नमूना लेना आवश्यक है।&lt;/p>
&lt;p>FALCON ने &amp;lsquo;&lt;strong>फास्ट फूरियर ऑर्थोगोनलाइज़ेशन (Fast Fourier Orthogonalization: FFO)&lt;/strong>&amp;rsquo; नामक तकनीक का उपयोग करके इस भारी गणना को नाटकीय रूप से तेज कर दिया।&lt;/p>
&lt;h3 id="72-falcon-क-फयद-और-नकसन">7.2. FALCON के फायदे और नुकसान
&lt;/h3>&lt;p>FALCON का जबरदस्त फायदा यह है कि इसका &lt;strong>हस्ताक्षर आकार और सार्वजनिक कुंजी का आकार बहुत छोटा (कॉम्पैक्ट)&lt;/strong> है। Dilithium3 का हस्ताक्षर आकार लगभग 3,309 बाइट्स है, जबकि FALCON-512 का हस्ताक्षर आकार केवल लगभग 666 बाइट्स है। सार्वजनिक कुंजी भी 897 बाइट्स पर बहुत छोटी है, जो इसे ऐसे वातावरणों में एक तारणहार बनाती है जहाँ संचार बैंडविड्थ बेहद सीमित है, या IoT उपकरणों और विशिष्ट नेटवर्क प्रोटोकॉल के लिए।&lt;/p>
&lt;p>हालाँकि, एक महत्वपूर्ण नुकसान भी है। चूँकि हस्ताक्षर उत्पन्न करते समय जटिल &lt;strong>फ्लोटिंग-पॉइंट गणना (64-बिट IEEE 754)&lt;/strong> के साथ असतत गाऊसी सैंपलिंग आवश्यक है, इसलिए समय रिसाव को रोकने के लिए निरंतर-समय कार्यान्वयन (Constant-time implementation) अत्यंत कठिन है, और कोड भी बड़ा हो जाता है। इस कारण से, FALCON को सामान्य-उद्देश्य के उपयोग (Dilithium) के विपरीत एक विशिष्ट अनुप्रयोग-केंद्रित शक्तिशाली विशेष एल्गोरिदम के रूप में रखा गया है।&lt;/p>
&lt;div class="mermaid">graph LR
A["डिजिटल हस्ताक्षर की आवश्यकताएं"] --> B{"सबसे महत्वपूर्ण बाधा क्या है?"}
B -->|"कार्यान्वयन की सरलता, बहुमुखी प्रतिभा, निरंतर-समय कार्यान्वयन में आसानी"| C["Dilithium (ML-DSA)"]
B -->|"संचार बैंडविड्थ का न्यूनीकरण, डेटा आकार की सघनता"| D["FALCON (FN-DSA)"]
C --> E["सामान्य-उद्देश्य TLS प्रमाणपत्र, सॉफ़्टवेयर इलेक्ट्रॉनिक हस्ताक्षर"]
D --> F["सख्त पैकेट आकार सीमा वाले प्रोटोकॉल, विशेष वातावरण"]&lt;/div>
&lt;hr>
&lt;h2 id="8-sphincs-slh-dsa-सबस-मजबत-सरकष-क-दव-करन-वल-हश-आधरत-हसतकषर">8. SPHINCS+ (SLH-DSA): सबसे मजबूत सुरक्षा का दावा करने वाला हैश-आधारित हस्ताक्षर
&lt;/h2>&lt;p>उस सबसे खराब स्थिति (एक दुर्लभ घटना) की तैयारी में कि भविष्य में एक प्रतिभाशाली गणितज्ञ की सफलता से लैटिस क्रिप्टोग्राफी की सुरक्षा टूट सकती है, NIST ने लैटिस क्रिप्टोग्राफी से बिल्कुल अलग दृष्टिकोण के साथ एक मानक के रूप में &lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>, यानी &lt;strong>SPHINCS+&lt;/strong> तैयार किया।&lt;/p>
&lt;p>SPHINCS+ को &lt;strong>हैश-आधारित हस्ताक्षर&lt;/strong> के रूप में वर्गीकृत किया गया है। इसकी सुरक्षा का आधार केवल एक बात पर निर्भर करता है: &amp;lsquo;उपयोग किए जा रहे क्रिप्टोग्राफिक हैश फ़ंक्शंस (जैसे SHA-2 और SHAKE256) में कोलिजन रेजिस्टेंस (collision resistance) और वन-वेनेस (one-wayness) है&amp;rsquo;। चूँकि यह LWE या अभाज्य गुणनखंड जैसी किसी विशिष्ट बीजगणितीय संरचना वाली गणितीय समस्याओं पर निर्भर नहीं करता है, इसलिए यह अत्यंत मजबूत सुरक्षा (सबसे रूढ़िवादी सुरक्षा) का दावा करता है जिसका भविष्य में कोई भी शक्तिशाली क्वांटम एल्गोरिदम आने पर केवल हैश फ़ंक्शन की आउटपुट लंबाई बढ़ाकर मुकाबला किया जा सकता है।&lt;/p>
&lt;h3 id="81-wots-और-fors-दवर-सटटलस-वसतकल-stateless-architecture">8.1. WOTS+ और FORS द्वारा स्टेटलेस वास्तुकला (Stateless Architecture)
&lt;/h3>&lt;p>हैश-आधारित हस्ताक्षरों का एक लंबा इतिहास है, जो 1970 के दशक में लैम्पोर्ट सिग्नेचर (Lamport signatures) और विंटरनिट्ज़ वन-टाइम सिग्नेचर (WOTS) तक जाता है। ये डिस्पोजेबल कुंजियां (disposable keys) थीं जिन्हें &amp;lsquo;केवल एक बार सुरक्षित रूप से हस्ताक्षर&amp;rsquo; किया जा सकता था। इन्हें कई बार उपयोग करने योग्य बनाने के लिए, XMSS (eXtended Merkle Signature Scheme) और LMS जैसे एल्गोरिदम विकसित किए गए, जो अनगिनत वन-टाइम कुंजियों को एकल रूट हैश के साथ प्रबंधित करने के लिए मर्कल ट्री (Merkle Tree) को मिलाते हैं।&lt;/p>
&lt;p>हालाँकि, XMSS और LMS में एक बड़ी खामी थी कि वे &amp;lsquo;&lt;strong>स्टेटफुल (Stateful)&lt;/strong>&amp;rsquo; थे। हर बार हस्ताक्षर किए जाने पर गैर-वाष्पशील मेमोरी (non-volatile memory) में इंडेक्स स्टेट को कड़ाई से रिकॉर्ड करना आवश्यक था कि &amp;lsquo;कौन सी वन-टाइम कुंजी का उपयोग किया गया था&amp;rsquo;, और यदि वर्चुअल मशीन के स्नैपशॉट को पुनर्स्थापित करने के कारण स्टेट वापस आ जाता है और उसी वन-टाइम कुंजी का दो बार उपयोग किया जाता है, तो गुप्त कुंजी तुरंत लीक हो जाएगी और सिस्टम ढह जाएगा।&lt;/p>
&lt;p>SPHINCS+ एक &amp;lsquo;&lt;strong>स्टेटलेस (Stateless)&lt;/strong>&amp;rsquo; हैश-आधारित हस्ताक्षर है जिसने इस राज्य प्रबंधन (state management) की परेशानी को हल किया।
इसकी मुख्य तकनीक निम्नलिखित का संयोजन है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>WOTS+ (Winternitz One-Time Signature Plus)&lt;/strong>: एक बुनियादी वन-टाइम हस्ताक्षर।&lt;/li>
&lt;li>&lt;strong>FORS (Forest of Random Subsets)&lt;/strong>: फ्यू-टाइम सिग्नेचर (Few-Time Signature) तकनीक। एक ही कुंजी को कुछ बार पुन: उपयोग करने पर भी सुरक्षा बनाए रखता है।&lt;/li>
&lt;li>&lt;strong>Hyper-Tree (विशाल वृक्ष संरचना)&lt;/strong>: एक विशाल संरचना जिसमें मर्कल ट्री को कई परतों में एक के ऊपर পুনরায় रखा गया है।&lt;/li>
&lt;/ol>
&lt;p>SPHINCS+ में, हस्ताक्षर करते समय स्टेट को प्रबंधित करने के बजाय, यह हाइपर-ट्री (Hyper-Tree) के आधार पर बड़ी संख्या में FORS कुंजियों में से एक को बेतरतीब ढंग से चुनने के लिए छद्म यादृच्छिक संख्याओं (pseudo-random numbers) का उपयोग करके हस्ताक्षर करता है। चूँकि पेड़ के पत्तों की संख्या खगोलीय रूप से बड़ी होती है, इसलिए संयोग से एक ही कुंजी को दो बार चुनने की संभावना (टकराव/collision) नगण्य रूप से छोटी हो जाती है, जिसके परिणामस्वरूप स्टेटलेस प्राप्त होता है।&lt;/p>
&lt;p>SPHINCS+ की एकमात्र और सबसे बड़ी कमजोरी यह है कि इसका &lt;strong>हस्ताक्षर आकार बहुत बड़ा है&lt;/strong>। मापदंडों के आधार पर, हस्ताक्षर का आकार 17 किलोबाइट से 49 किलोबाइट तक पहुँच सकता है, और हस्ताक्षर बनाने की गति लैटिस क्रिप्टोग्राफी की तुलना में बहुत धीमी है। इसलिए, यह रोजमर्रा के वेब ब्राउज़िंग में उपयोग किए जाने के बजाय, सॉफ़्टवेयर अपडेट सिग्नेचर या रूट सर्टिफ़िकेट अथॉरिटी (CA) सर्टिफ़िकेट जैसे अनुप्रयोगों में उपयोग किए जाने की उम्मीद है, जहाँ हस्ताक्षर अक्सर नहीं किए जाते हैं और लंबी अवधि के लिए पूर्ण सुरक्षा की दृढ़ता से आवश्यकता होती है।&lt;/p>
&lt;hr>
&lt;h2 id="9-कड-आधरत-करपटगरफ-classic-mceliece-नमक-एक-परन-अचछ-वशलकय-giant">9. कोड-आधारित क्रिप्टोग्राफी: Classic McEliece नामक एक पुराना अच्छा विशालकाय (Giant)
&lt;/h2>&lt;p>NIST की मानकीकरण प्रक्रिया में, राउंड 4 के अंतिम उम्मीदवार के रूप में अभी भी मूल्यांकन किए जा रहे महत्वपूर्ण दृष्टिकोणों में से एक &lt;strong>कोड-आधारित क्रिप्टोग्राफी&lt;/strong> का &lt;strong>Classic McEliece&lt;/strong> है।&lt;/p>
&lt;p>1978 में रॉबर्ट मैकएलीस (Robert McEliece) द्वारा प्रस्तावित यह एल्गोरिदम पब्लिक-की क्रिप्टोग्राफी के इतिहास में RSA के साथ सबसे पुराने एल्गोरिदम में से एक है। यह &amp;lsquo;गोप्पा कोड (Goppa code)&amp;rsquo; नामक एक बीजगणितीय ज्यामिति कोड (algebraic geometry code) का उपयोग करता है, और संदेश में जानबूझकर त्रुटियों (शोर वेक्टर) को जोड़कर इसे एन्क्रिप्ट करता है। यह &amp;lsquo;&lt;strong>सिंड्रोम डिकोडिंग समस्या (Syndrome Decoding Problem)&lt;/strong>&amp;rsquo; पर आधारित है जहाँ केवल वह व्यक्ति जिसके पास गुप्त कुंजी के रूप में गोप्पा कोड का पैरिटी-चेक मैट्रिक्स (parity-check matrix) है, वह शक्तिशाली त्रुटि-सुधार (error-correction) क्षमता का उपयोग करके त्रुटि को दूर कर सकता है और मूल संदेश को डिक्रिप्ट कर सकता है।&lt;/p>
$$ \vec{c} = \vec{m} G + \vec{e} $$
&lt;p>
(यहाँ $G$ एक स्क्रैम्बल्ड जनरेटर मैट्रिक्स है जो सार्वजनिक कुंजी है, $\vec{e}$ वजन $t$ का त्रुटि वेक्टर है)&lt;/p>
&lt;p>Classic McEliece की आश्चर्यजनक बात इसका प्रभावशाली ट्रैक रिकॉर्ड है: &lt;strong>प्रस्तावित किए जाने के 40 से अधिक वर्षों के बाद, और दुनिया भर के क्रिप्टोग्राफ़रों द्वारा तीव्र डिक्रिप्शन अनुसंधान के अधीन होने के बावजूद, इसकी कोई भी मौलिक भेद्यता कभी नहीं खोजी गई है&lt;/strong>। यह PQC के बीच सबसे अधिक &amp;lsquo;समय-परीक्षणित मजबूत सुरक्षा&amp;rsquo; रखता है।&lt;/p>
&lt;p>इसके अलावा, इसका यह लाभ है कि सिफरटेक्स्ट का आकार बहुत छोटा (केवल 100 से 200 बाइट्स) होता है। हालाँकि, एक घातक खामी है कि &lt;strong>सार्वजनिक कुंजी का आकार मेगाबाइट (MB) में होता है&lt;/strong>। सबसे निचले सुरक्षा स्तर (AES-128 समतुल्य) पर भी, सार्वजनिक कुंजी लगभग 250KB है, और उच्च स्तरों पर यह 1MB से अधिक हो जाती है।&lt;/p>
&lt;p>इस कारण से, यह उन अनुप्रयोगों के लिए बिल्कुल लागू नहीं है जो TLS हैंडशेक की तरह संचार के हर बार नेटवर्क पर सार्वजनिक कुंजी भेजते हैं। हालाँकि, विशेष उपयोग के मामलों में जहाँ सार्वजनिक कुंजी को पहले से सिस्टम में रखा जा सकता है, जैसे कि VPN प्री-शेयर्ड कुंजियों का आदान-प्रदान, फ़र्मवेयर में सार्वजनिक कुंजियों को हार्डकोडिंग करना, या उपग्रह संचार, इसकी मजबूत सुरक्षा के कारण इसे एक अत्यंत आशाजनक विकल्प के रूप में माना जाना जारी है।&lt;/p>
&lt;hr>
&lt;h2 id="10-परतयक-pqc-एलगरदम-क-परदरशन-क-तलन-और-टरड-ऑफ-trade-offs">10. प्रत्येक PQC एल्गोरिदम के प्रदर्शन की तुलना और ट्रेड-ऑफ़ (Trade-offs)
&lt;/h2>&lt;p>अब तक बताए गए प्रमुख एल्गोरिदम के संबंध में, सामान्य सुरक्षा स्तरों (NIST Level 2 से 3 समतुल्य, AES-128 से 192 स्तर) पर प्रदर्शन विशेषताओं को निम्न तालिका में संक्षेपित किया गया है।&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">एल्गोरिदम (मानक नाम)&lt;/th>
&lt;th style="text-align:left">श्रेणी&lt;/th>
&lt;th style="text-align:left">गणितीय आधार&lt;/th>
&lt;th style="text-align:left">सार्वजनिक कुंजी का आकार&lt;/th>
&lt;th style="text-align:left">गुप्त कुंजी का आकार&lt;/th>
&lt;th style="text-align:left">सिफरटेक्स्ट/हस्ताक्षर का आकार&lt;/th>
&lt;th style="text-align:left">प्रसंस्करण गति की प्रवृत्ति&lt;/th>
&lt;th style="text-align:left">मुख्य विशेषताएं और अनुप्रयोग&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Kyber768&lt;/strong>&lt;br>(ML-KEM)&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1,184 Bytes&lt;/td>
&lt;td style="text-align:left">2,400 Bytes&lt;/td>
&lt;td style="text-align:left">1,088 Bytes&lt;/td>
&lt;td style="text-align:left">बहुत तेज़&lt;/td>
&lt;td style="text-align:left">कुंजी के आकार और गति का सबसे अच्छा संतुलन। TLS 1.3 आदि के लिए सामान्य KEM मानक।&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Dilithium3&lt;/strong>&lt;br>(ML-DSA)&lt;/td>
&lt;td style="text-align:left">हस्ताक्षर&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1,952 Bytes&lt;/td>
&lt;td style="text-align:left">4,032 Bytes&lt;/td>
&lt;td style="text-align:left">3,309 Bytes&lt;/td>
&lt;td style="text-align:left">निर्माण और सत्यापन दोनों में तेज़&lt;/td>
&lt;td style="text-align:left">सरल कार्यान्वयन। सामान्य-उद्देश्य डिजिटल हस्ताक्षर मानक।&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>FALCON-512&lt;/strong>&lt;br>(FN-DSA)&lt;/td>
&lt;td style="text-align:left">हस्ताक्षर&lt;/td>
&lt;td style="text-align:left">NTRU लैटिस&lt;/td>
&lt;td style="text-align:left">897 Bytes&lt;/td>
&lt;td style="text-align:left">1,281 Bytes&lt;/td>
&lt;td style="text-align:left">666 Bytes&lt;/td>
&lt;td style="text-align:left">हस्ताक्षर निर्माण धीमा है, सत्यापन बहुत तेज़&lt;/td>
&lt;td style="text-align:left">अत्यंत छोटा हस्ताक्षर आकार। हालाँकि फ्लोटिंग-पॉइंट गणना आवश्यक है। एम्बेडेड/IoT के लिए।&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>SPHINCS+&lt;/strong>&lt;br>(SLH-DSA)&lt;/td>
&lt;td style="text-align:left">हस्ताक्षर&lt;/td>
&lt;td style="text-align:left">हैश फ़ंक्शन&lt;/td>
&lt;td style="text-align:left">32 Bytes&lt;/td>
&lt;td style="text-align:left">64 Bytes&lt;/td>
&lt;td style="text-align:left">लगभग 17,000 Bytes&lt;/td>
&lt;td style="text-align:left">निर्माण बहुत धीमा है&lt;/td>
&lt;td style="text-align:left">गणितीय विफलता का जोखिम लगभग शून्य है। रूट प्रमाणपत्र आदि जैसे उच्च-सुरक्षा अनुप्रयोग।&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Classic McEliece&lt;/strong>&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">Goppa कोड&lt;/td>
&lt;td style="text-align:left">&lt;strong>लगभग 1.04 MB&lt;/strong>&lt;/td>
&lt;td style="text-align:left">13,568 Bytes&lt;/td>
&lt;td style="text-align:left">&lt;strong>188 Bytes&lt;/strong>&lt;/td>
&lt;td style="text-align:left">एनकैप्सुलेशन तेज़ है&lt;/td>
&lt;td style="text-align:left">40 वर्षों का सुरक्षा ट्रैक रिकॉर्ड। सार्वजनिक कुंजी विशाल है। उन वातावरणों के लिए जहाँ हार्डकोडिंग संभव है।&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="टरड-ऑफ-trade-offs-क-समझन">ट्रेड-ऑफ़ (Trade-offs) को समझना
&lt;/h3>&lt;p>PQC की दुनिया में, कोई एकल जादुई एल्गोरिदम नहीं है जो &amp;lsquo;आकार में छोटा, गति में तेज़, और गणितीय गारंटी में परिपूर्ण&amp;rsquo; हो।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>इंटरनेट मानक (Kyber / Dilithium)&lt;/strong>: इनके प्रदर्शन का संतुलन सबसे अच्छा है और ये वर्तमान RSA/ECC से ड्रॉप-इन रिप्लेसमेंट (सीधे प्रतिस्थापित करने) के लिए सबसे उपयुक्त हैं।&lt;/li>
&lt;li>&lt;strong>अत्यधिक रूढ़िवादिता (SPHINCS+)&lt;/strong>: यदि आप भविष्य की गणितीय सफलताओं के खिलाफ पूर्ण बीमा चाहते हैं, भले ही इसके लिए डेटा आकार और प्रसंस्करण गति का बलिदान देना पड़े, तो इसे चुना जाता है।&lt;/li>
&lt;li>&lt;strong>विशेष वातावरण के लिए (FALCON / Classic McEliece)&lt;/strong>: ये विशेष हथियार हैं जिन्हें पर्यावरणीय बाधाओं के अनुसार चुना जाता है, जैसे कि जब संचार बैंडविड्थ बेहद संकीर्ण होती है, या पूर्व-वितरण संभव होता है।&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-वयवसयकरण-क-चनतय-और-हइबरड-करपटगरफ-hybrid-cryptography-क-वयवहरक-समधन">11. व्यावसायीकरण की चुनौतियाँ और &amp;lsquo;हाइब्रिड क्रिप्टोग्राफी (Hybrid Cryptography)&amp;rsquo; का व्यावहारिक समाधान
&lt;/h2>&lt;p>NIST के मानकीकरण के पूरा होने और FIPS मानकों के आधिकारिक तौर पर जारी होने के साथ, दुनिया भर में IT बुनियादी ढांचे का PQC संक्रमण (&lt;strong>PQC माइग्रेशन&lt;/strong>) पूरी लगन से शुरू हो गया है। Google का क्रोम ब्राउज़र, Apple का iMessage (PQ3 प्रोटोकॉल), और Cloudflare जैसे नेटवर्क प्रदाताओं ने पहले ही अपने प्रोटोकॉल में PQC समर्थन लागू कर दिया है और वास्तविक संचालन शुरू कर दिया है।&lt;/p>
&lt;p>हालाँकि, अचानक पूरी तरह से नए क्रिप्टोग्राफ़िक एल्गोरिदम में स्विच करने में बहुत अधिक जोखिम शामिल है। यदि कुछ वर्षों में कोई प्रतिभाशाली गणितज्ञ Kyber जैसे लैटिस क्रिप्टोग्राफी के खिलाफ एक घातक हमले का तरीका (एक गणितीय दोष जिसे शास्त्रीय कंप्यूटर से भी हल किया जा सकता है) खोज लेता है, तो उस पर निर्भर संपूर्ण सिस्टम एक पल में पूरी तरह से कमजोर हो जाएगा।&lt;/p>
&lt;p>इस अनिश्चितता के जोखिम को कम करने के लिए एक व्यावहारिक और अनुशंसित दृष्टिकोण &amp;lsquo;&lt;strong>हाइब्रिड क्रिप्टोग्राफी (Hybrid Cryptography)&lt;/strong>&amp;rsquo; है।&lt;/p>
&lt;p>हाइब्रिड क्रिप्टोग्राफी में, कुंजियों का आदान-प्रदान वर्तमान क्लासिकल क्रिप्टोग्राफी के लंबे ट्रैक रिकॉर्ड (उदा: X25519 जैसी एलिप्टिक कर्व क्रिप्टोग्राफी) और नए PQC (उदा: Kyber768) दोनों का एक साथ उपयोग करके किया जाता है। प्रत्येक एल्गोरिदम अलग-अलग साझा कुंजी घटकों को उत्पन्न करता है, और अंततः दोनों घटकों को मिश्रित करने और अंतिम मास्टर सीक्रेट उत्पन्न करने के लिए एक सुरक्षित की डेरिवेशन फ़ंक्शन (Key Derivation Function: KDF) का उपयोग किया जाता है।&lt;/p>
&lt;div class="mermaid">graph TD
A["क्लाइंट"] -->|① X25519 सार्वजनिक कुंजी + Kyber सार्वजनिक कुंजी भेजें| B["सर्वर"]
B -->|② X25519 साझा कुंजी + Kyber एनकैप्सुलेटेड सिफरटेक्स्ट वापस भेजें| A
A --> C{"मास्टर सीक्रेट व्युत्पत्ति (KDF)"}
B --> C
C -->|इनपुट: (X25519 साझा कुंजी) || (Kyber साझा कुंजी)| D["सुरक्षित संचार कुंजी (AES-256 / ChaCha20)"]
D -->|"क्वांटम खतरों और क्लासिकल कमजोरियों दोनों के प्रति प्रतिरोधी"| E["सुरक्षित हाइब्रिड क्रिप्टोग्राफ़िक संचार (TLS 1.3)"]&lt;/div>
&lt;p>यह एक मजबूत टू-टियर सुरक्षा सुनिश्चित करता है, जहाँ &amp;lsquo;यदि क्वांटम कंप्यूटर एक वास्तविकता बन जाते हैं और ECC टूट जाता है, तो Kyber संचार की रक्षा करेगा&amp;rsquo;, और इसके विपरीत, &amp;lsquo;यदि Kyber में कोई अज्ञात गणितीय दोष पाया जाता है, तो ECC संचार की रक्षा करेगा&amp;rsquo;। एक विशिष्ट उदाहरण के रूप में, IETF द्वारा मानकीकृत किया जा रहा &lt;strong>X25519MLKEM768 (पूर्व में X25519Kyber768)&lt;/strong> मसौदा है, और वर्तमान में वेब ब्राउज़र और अत्याधुनिक सर्वरों के बीच संचार इस हाइब्रिड पद्धति का उपयोग करके किया जाता है।&lt;/p>
&lt;p>इसके अलावा, सिस्टम डिज़ाइन में, &lt;strong>क्रिप्टो एजिलिटी (Crypto Agility)&lt;/strong> की अवधारणा, जिसका अर्थ है &amp;lsquo;विशिष्ट क्रिप्टोग्राफ़िक एल्गोरिदम पर अत्यधिक निर्भर न होना, और यदि कोई एल्गोरिदम विफल हो जाता है तो जल्दी से किसी अन्य एल्गोरिदम (उदा: Kyber से McEliece, Dilithium से SPHINCS+) में स्विच करने में सक्षम वास्तुकला बनाना&amp;rsquo;, भविष्य के सिस्टम विकास के लिए एक आवश्यक आवश्यकता बन जाएगी।&lt;/p>
&lt;hr>
&lt;h2 id="12-नषकरष-करपटगरफक-तकनक-क-एक-नय-कषतज">12. निष्कर्ष: क्रिप्टोग्राफ़िक तकनीक का एक नया क्षितिज
&lt;/h2>&lt;p>क्वांटम कंप्यूटर, मानवता की स्वप्निल तकनीक, विडंबना यह है कि उन &amp;lsquo;अभाज्य गुणनखंड&amp;rsquo; और &amp;lsquo;असतत लघुगणक समस्या&amp;rsquo; की गणितीय बाधाओं को तोड़ने का सबसे बड़ा खतरा बन गई है जिन पर हमने कई वर्षों से भरोसा किया था। हालाँकि, इसके आगे झुकने के बजाय, दुनिया भर के क्रिप्टोग्राफ़रों ने लैटिस थ्योरी (lattice theory), हैश फ़ंक्शन ट्री और एरर-करेक्शन कोड जैसे अधिक जटिल और गहन बहुआयामी गणितीय क्षेत्रों का बीड़ा उठाया है, और पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC) नामक एक नई बाधा बनाई है।&lt;/p>
&lt;p>NIST द्वारा FIPS 203 (ML-KEM), FIPS 204 (ML-DSA), और FIPS 205 (SLH-DSA) का मानकीकरण पूरा होना कोई लक्ष्य नहीं है। यह PQC माइग्रेशन नामक महाकाव्य यात्रा का पहला कदम है जो आने वाले दशकों तक जारी रहेगा। सॉफ्टवेयर इंजीनियरों और सिस्टम आर्किटेक्ट्स के लिए, नेटवर्क प्रोटोकॉल और सिस्टम के लिए इन नए एल्गोरिदम द्वारा लाए गए &amp;lsquo;कुंजी के आकार में वृद्धि&amp;rsquo; और &amp;lsquo;कम्प्यूटेशनल लागत में परिवर्तन&amp;rsquo; को कैसे अनुकूल रूप से ढालना है, यह आगे चलकर एक बड़ी तकनीकी चुनौती होगी।&lt;/p>
&lt;p>क्वांटम कंप्यूटर और क्रिप्टोग्राफी के बीच की लड़ाई एक रोमांचक क्षेत्र है जहाँ मानव का गणितीय अन्वेषण और तकनीकी विकास सबसे अधिक तीव्रता से मिलते हैं। मुझे उम्मीद है कि इस लेख के माध्यम से, आपको PQC के पीछे के सुंदर गणितीय सिद्धांत और साइबर सुरक्षा के भविष्य को आकार देने वाले प्रत्येक एल्गोरिदम के अद्भुत तंत्र की गहरी समझ प्राप्त हुई है।&lt;/p>
&lt;hr>
&lt;p>&lt;em>References:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;em>NIST Post-Quantum Cryptography Standardization Program&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 204: Module-Lattice-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 205: Stateless Hash-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;/ul></description></item></channel></rss>