दो समूहों (groups) के बीच एक homomorphism तब मौजूद होता है जब दोनों समूहों के बीच एक structure preserving map मौजूद हो।
मान लीजिए कि हमारे पास दो बीजगणितीय डेटा संरचनाएं (algebraic data structures) और हैं, जहाँ का बाइनरी ऑपरेटर है और का बाइनरी ऑपरेटर है।
से तक एक homomorphism केवल और केवल तभी मौजूद होता है जब कोई ऐसा फ़ंक्शन मौजूद हो जिससे कि
दूसरे शब्दों में, यदि है, तो होगा।
ध्यान दें कि homomorphism एक-दिशात्मक (one-directional) होता है। फ़ंक्शन , के elements को लेता है और उन्हें के elements पर मैप करता है। “पीछे जाने” (going backwards) के बारे में हमारी कोई आवश्यकता नहीं है।
हम पहले कुछ सरल उदाहरण दिखाएंगे, कुछ स्पष्टीकरण देंगे, और फिर अधिक जटिल उदाहरण प्रदान करेंगे।
Homomorphisms के सरल उदाहरण
Addition के तहत सभी integers से addition के तहत सभी even integers तक
मान लीजिए कि addition के तहत सभी integers का सेट है, और मान लीजिए कि addition के तहत सभी even integers का सेट है। यह स्पष्ट है कि और दोनों groups हैं।
मान लीजिए कि
हम देखते हैं कि , से तक एक homomorphism को परिभाषित करता है क्योंकि integers और की किसी भी जोड़ी के लिए निम्नलिखित सत्य है:
Concatenation के तहत सभी strings से शून्य या उससे बड़े सभी integers तक
उदाहरण के लिए, मान लीजिए कि concatenation के तहत सभी strings (empty string सहित) का Monoid है, और addition के तहत शून्य या उससे बड़े सभी integers का Monoid है।
से तक एक homomorphism मौजूद है क्योंकि एक ऐसा फ़ंक्शन मौजूद है जो strings को शून्य या उससे बड़े integers पर मैप करता है और निम्नलिखित गुण (property) को संरक्षित करता है:
इस मामले में, string की लंबाई (length) है। उदाहरण के लिए:
यहाँ, हमारे पास है:
Addition के तहत सभी real numbers से addition के तहत real numbers के सभी matrices तक
एक बार जब आप इन्हें समझ जाते हैं, तो कुछ homomorphisms काफी मामूली (trivial) लग सकते हैं। यह ऐसे ही एक homomorphism का उदाहरण है। इस मामले में, हमारा फ़ंक्शन केवल real number को बार दोहराता है। उदाहरण के लिए, यदि और है, तो होगा:
एक उदाहरण के रूप में, है क्योंकि:
Homomorphisms के बारे में स्पष्टीकरण
- को के elements की हर संभावित जोड़ी (एक ही element की जोड़ी सहित) के साथ काम करना चाहिए। हालाँकि, इसे के सभी elements तक “पहुँच” (access) बनाने की आवश्यकता नहीं है। उदाहरण के लिए, एक homomorphism जो के प्रत्येक element को के identity element पर मैप करता है, वह एक वैध (valid) homomorphism है, लेकिन उपयोगी नहीं है। इसे trivial homomorphism कहा जाता है।
- यदि हम एक बाइनरी ऑपरेटर के साथ दो मनमाने (arbitrary) sets चुनते हैं, तो जरूरी नहीं कि कोई homomorphism मौजूद हो।
- से तक एक homomorphism हो सकता है, लेकिन जरूरी नहीं कि से तक भी हो।
- यदि से और से तक एक homomorphism है, और , से का map है, तो का inverse जरूरी नहीं कि से के homomorphism के लिए एक वैध map हो।
Homomorphisms के और उदाहरण
Addition के तहत integers से multiplication के तहत की integer powers तक
मान लीजिए कि हमारे पास group (addition के तहत सभी integers का सेट) और group है, जो multiplication के तहत की सभी integer powers का सेट है, यानी । उदाहरण को समझने में आसान बनाने के लिए हम स्वेच्छा से सेट कर सकते हैं।
से तक एक homomorphism मौजूद है, जिसे द्वारा परिभाषित किया गया है। बीजगणित (algebra) के नियमों के अनुसार,
यह संबंध क्यों लागू होता है, इसे समझने के लिए विचार करें कि:
Addition के तहत integers से modulo a prime number के साथ multiplication के तहत की integer powers तक
यह काफी हद तक ऊपर दिए गए उदाहरण के समान है, बस इसमें एक modulus जोड़ा गया है। हम इसे पाठक के लिए एक अभ्यास के रूप में छोड़ते हैं कि वे homomorphism को परिभाषित करने वाले फ़ंक्शन की पहचान करें।
Addition के तहत matrices से addition के तहत integers तक
इस मामले में, बस matrix के सभी elements को जोड़ता है। यह क्यों काम करता है, यह पाठक के लिए एक अभ्यास के रूप में छोड़ दिया गया है।
Multiplication के तहत integers के matrices से multiplication के तहत integers तक
पहले से दूसरे Monoid तक एक homomorphism है क्योंकि matrix का determinant है और निम्नलिखित नियम लागू होता है:
जहाँ integer matrices हैं। ये दो algebraic data structures Monoids क्यों हैं और groups क्यों नहीं, यह पाठक के लिए एक अभ्यास के रूप में छोड़ दिया गया है।
Rational numbers का group (उन rational numbers को छोड़कर जिनका denominator का गुणज है) से addition modulo तक
यह अवधारणा (concept) पहले ही finite fields पर हमारे लेख में सिखाई जा चुकी है, लेकिन हमने इसका वर्णन करने के लिए “homomorphism” शब्द का उपयोग नहीं किया था।
मान लीजिए कि addition के तहत उन सभी rational numbers का group है जिनके denominators का multiple नहीं हैं। मान लीजिए कि finite field modulo है।
Group से group तक एक homomorphism मौजूद है। है:
या Python में:
p = 11
def phi(num, den):
return num * pow(den, -1, p) % p
उदाहरण के लिए:
- , के congruent है
- , के congruent है
यह कहना कि , के congruent है, कथन के बराबर (equivalent) है।
Rational numbers का Monoid (उन rational numbers को छोड़कर जिनका denominator का multiple है) से multiplication modulo (शून्य को छोड़कर) तक
आइए ऊपर वाले ही उदाहरण का उपयोग करें, लेकिन multiplication के साथ। फ़ंक्शन समान रहता है।
- , के congruent है
- , के congruent है
पाठक के लिए अभ्यास
निम्नलिखित algebraic data structures की जोड़ियों के लिए एक homomorphism खोजें। यदि आप फँस जाते हैं (या बस समस्या को हल नहीं करना चाहते हैं), तो आप उत्तर Google कर सकते हैं या किसी चैटबॉट (chatbot) से सलाह ले सकते हैं।
- Addition के तहत real numbers से addition के तहत real coefficients वाले polynomials तक।
- Real coefficients वाले polynomials से addition के तहत real numbers तक। संकेत (Hint): भले ही यह समस्या 1 के समान दिखता है, फ़ंक्शन पिछले प्रश्न के उत्तर से पूरी तरह से असंबंधित होगा।
- Multiplication के तहत शून्य से बड़े positive real numbers से addition के तहत सभी real numbers तक।
Homomorphic Encryption
यदि को invert करना computationally कठिन है, तो , के elements को homomorphically encrypt करता है।
मान लीजिए कि addition के तहत सभी integers हैं, और target group है और , का बाइनरी ऑपरेटर है।
Zero Knowledge Addition, उदाहरण 1
मान लीजिए कि हम एक verifier को यह साबित करना चाहते हैं कि हमने की गणना की है। हम verifier को देंगे जहाँ है और verifier यह जाँच करेगा कि:
ध्यान दें कि homomorphic encryption का अर्थ है कि verifier फ़ंक्शन को जानता है।
Zero Knowledge Addition, उदाहरण 2
एक prover यह दावा करता है, “मेरे पास दो नंबर और हैं, और , का पाँच गुना है।” prover, और को verifier के पास भेजता है, और verifier जाँच करता है कि:
याद रखें, यहाँ “multiplication” बाइनरी ऑपरेटर नहीं है, यह केवल बार-बार किए जाने वाले addition का संक्षिप्त रूप (shorthand) है।
इन उदाहरणों में, ध्यान दें कि हमने इस बारे में कुछ नहीं कहा कि के elements क्या हैं या क्या है। डरावने गणितीय ऑब्जेक्ट (mathematical objects) हो सकते हैं, और एक डरावना गणितीय ऑपरेटर हो सकता है, लेकिन इससे कोई फर्क नहीं पड़ता।
यही abstract algebra की सुंदरता है: हमें जानने की आवश्यकता नहीं है। जब तक इसमें वे गुण (properties) हैं जिनकी हमें परवाह है, हम इसके व्यवहार के बारे में तर्क कर सकते हैं, भले ही हम इसके implementation के बारे में कुछ न जानते हों।
Motivation
ठीक है बढ़िया; हम groups और homomorphisms को समझते हैं, लेकिन यह हमारी कैसे मदद करता है? मैंने यह सब समझाने में इतनी मेहनत इसलिए की क्योंकि मैं चाहता हूँ कि आप नीचे दिए गए कथन (statement) को समझें:
“Addition के तहत एक finite field में Elliptic curve points एक finite cyclic group होते हैं और addition के तहत integers इस group के लिए homomorphic होते हैं।”
आप शायद नहीं जानते होंगे कि elliptic curve points क्या हैं या उन्हें जोड़ने का क्या मतलब है, लेकिन आप यह जानते हैं:
- Addition के तहत elliptic curve points का सेट एक और elliptic curve point उत्पन्न करता है।
- वह बाइनरी ऑपरेटर जो दो elliptic curve points लेता है और दूसरा elliptic curve point लौटाता है, associative होता है।
- Elliptic curve points के सेट में एक identity element होता है।
- Elliptic curve group में एक identity element होता है, जो अद्वितीय (unique) होता है।
- प्रत्येक elliptic curve point का एक inverse होता है जिससे कि एक point और उसके inverse को जोड़ने पर identity प्राप्त होती है।
- चूँकि group cyclic है, प्रत्येक elliptic curve point को किसी generator element पर बाइनरी ऑपरेटर को बार-बार लागू करके उत्पन्न किया जा सकता है।
- चूँकि elliptic curve points का group cyclic है, यह एक abelian group भी है।
- चूँकि यह एक finite group है, इसका order finite होता है।
- Homomorphism के कारण, हमारे पास इस बात का एक ठोस विचार (strong idea) है कि elliptic curve points के लिए बाइनरी ऑपरेटर कैसे व्यवहार करता है। हम एक निश्चित अर्थ में “integers को जोड़ने” के लिए elliptic curve point बाइनरी ऑपरेटर का उपयोग कर सकते हैं।
भले ही आप नहीं जानते कि elliptic curve points क्या हैं, फिर भी आप उनके बारे में पहले से ही नौ बातें जानते हैं!
तो ये अजीब ऑब्जेक्ट्स (bizarre objects) “elliptic curve points” चाहे जो भी हों, आप जानते हैं कि यह कैसा व्यवहार करता है, और इसमें वही गुण हैं जो हमने ऊपर चर्चा किए गए groups में देखे हैं।
मानें या न मानें, आप elliptic curves को समझने की राह में 90% आगे बढ़ चुके हैं। अन्य परिचित संरचनाओं (familiar structures) के साथ उनकी समानता को समझकर elliptic curves को समझना, उनके अजीबोगरीब गणित को शुरुआत से समझने की कोशिश करने की तुलना में कहीं अधिक आसान है।
यह वैसा ही है जैसे मैं आपको बताऊँ कि Ethereum state को स्टोर करने के लिए “Patricia Merkle trees” का उपयोग करता है। आप शायद न जानते हों कि “Patricia tree” या “Merkle tree” क्या है, लेकिन आप यह जानते हैं:
- इसका एक root होता है।
- आप संभवतः logarithmic समय में elements तक पहुँच (access) प्राप्त कर सकते हैं, या कम से कम यही इसका उद्देश्य (intent) है।
- Leaves में कुछ उपयोगी डेटा स्टोर होता है।
- Tree को traverse करने और आपकी ज़रूरत के leaf तक पहुँचने के लिए कोई algorithm मौजूद होता है।
तो जब मैं आपको बताता हूँ कि addition के तहत elliptic curve points एक group बनाते हैं, तो आपको पहले से ही पता होना चाहिए कि जब आप उस विषय के बारे में सीखेंगे तो किन बातों का ध्यान रखना है।
फिर से, groups का रहस्यमय चाँद वाला गणित (mysterious moon math) होना ज़रूरी नहीं है। एक प्रोग्रामर के रूप में आपने सहज रूप से (intuitively) groups के साथ काम किया है। अब आपके पास इस बार-बार होने वाली घटना (recurring phenomenon) का वर्णन करने के लिए एक ठोस शब्द है।
“Group” कहना इस बात को कहने से कहीं अधिक कुशल (efficient) है कि “यह एक ऐसा सेट है जिसमें elements को associatively संयोजित (combine) करने का एक तरीका है और सभी elements में फलाना-ढिमकाना (blah blah blah) है।”
मुझे पता है कि यह एक बड़े विषय-भटकाव (huge tangent) जैसा लग सकता है, लेकिन मेरा विश्वास करें, “homomorphism” को समझना हमें उस अवधारणा (concept) का संक्षेप में वर्णन करने में सक्षम बनाता है जिसे हम नियमित रूप से देखेंगे। जब हम Quadratic Arithmetic Programs पर चर्चा करेंगे तो यह फिर से काम आएगा। ZK की दुनिया में Homomorphisms अक्सर दिखाई देते हैं।
“Roots” या “leaves” शब्द के बिना tree data structures पर चर्चा करने की कोशिश करने की कल्पना करें। यह बेहद निराशाजनक (frustrating) होगा।
सारांश (Summary)
से तक एक homomorphism केवल और केवल तभी मौजूद होता है जब एक ऐसा फ़ंक्शन मौजूद हो जो से एक element लेता है और से एक element लौटाता है और में सभी और के लिए है, जहाँ , का बाइनरी ऑपरेटर है और , का बाइनरी ऑपरेटर है। का अस्तित्व (existence) homomorphism के मौजूद होने के लिए पर्याप्त है।
Homomorphisms का द्विदिशात्मक (bidirectional) होना आवश्यक नहीं है। उन्हें केवल एक दिशा में काम करने की आवश्यकता होती है, से तक।
यदि को invert करना computationally कठिन है, तो , के elements को homomorphically encrypt करता है। इसका मतलब है कि हम में elements का उपयोग करके में होने वाली computations के बारे में दावों (claims) को मान्य (validate) कर सकते हैं।
अच्छी खबर यह है कि हम abstract algebra के अपने अध्याय को पूरा कर चुके हैं, और अब हमारे पास elliptic curves की ओर बढ़ने के लिए एक मजबूत नींव (strong foundation) है।