
श्रृंखला: Zcash First Principles से . लेख 1 . Finite Fields पाठक-वर्ग: नए पाठक। हम केवल सामान्य स्कूली अंकगणित (जोड़ना, गुणा करना, भाग देना) मानकर चलते हैं। क्रिप्टोग्राफी या उच्च गणित का कोई पूर्वज्ञान आवश्यक नहीं है। आप यहाँ से क्या लेकर जाएँगे: finite fields की सहज और सही समझ, cryptographers उनका उपयोग क्यों करते हैं, और Zcash के भीतर वे कहाँ दिखाई देते हैं।
लेख 0 में हमने पाँच पात्रों से मुलाकात की थी: note, commitment, note commitment tree, nullifier, और zero-knowledge proof। वहाँ हमने एक खुला सिरा छोड़ दिया था: ये सारी keys और गुप्त विधियाँ आखिर आती कहाँ से हैं? वे संख्याओं से आती हैं। लेकिन उन सामान्य संख्याओं से नहीं जिनके साथ आप बड़े हुए हैं। वे एक विशेष, आत्म-निहित संख्या-प्रणाली से आती हैं जिसे finite field कहा जाता है, और Zcash की लगभग हर cryptography उसी के ऊपर बनाई गई है।
यह लेख उस विचार तक धीरे-धीरे पहुँचता है। जैसा वादा था, पहले intuition। सूत्र तभी, जब वे सचमुच काम आएँ।
सामान्य संख्याओं में cryptography के लिए एक समस्या है: उनकी संख्या अनंत होती है, और वे जानकारी लीक करती हैं।
सोचिए, जब कोई संख्या बड़ी होती जाती है तो क्या होता है। अगर मैं आपको बताऊँ कि किसी गुप्त गणना का परिणाम 8,142,067 निकला, तो आप पहले ही बहुत कुछ जान लेते हैं: यह सात अंकों की संख्या है, विषम है, और "काफी बड़ी" है। आकार अपने-आप में एक संकेत है। और संकेत वही चीज़ हैं जिन्हें कोई privacy system बिल्कुल भी बाहर नहीं जाने दे सकता।
क्रिप्टोग्राफी को ऐसी संख्या-प्रणाली चाहिए जिसमें:
इस पूरी इच्छासूची का एक नाम है। उसे finite field कहते हैं। एक भी चिन्ह लिखने से पहले उसकी intuition बना लेते हैं।
आप finite field का उपयोग पहले से ही हर दिन करते हैं। वह है आपकी दीवार पर लगी घड़ी।
12-घंटे की घड़ी पर संख्याएँ फिर से शुरू हो जाती हैं। 10 बजे से शुरू कीजिए, 5 घंटे जोड़िए, और आप "15 बजे" पर नहीं पहुँचते, बल्कि 3 बजे पर पहुँचते हैं। घड़ी में केवल बारह स्थान होते हैं, और ऊपर से आगे गिनने पर गिनती बस वापस शुरुआत पर लौट आती है।

अभी तीन चीज़ें हुईं, और यही इस पूरे लेख का सार है:
इस wrap-around अंकगणित का एक औपचारिक नाम है: modular arithmetic। घड़ी "modulo 12" पर काम करती है, जिसे mod 12 लिखा जाता है। गणितज्ञ स्थानों की गिनती 0 से शुरू करना पसंद करते हैं, इसलिए "mod 12 की घड़ी" में वास्तव में 0, 1, 2, ..., 11 स्थान होते हैं। mod 7 की घड़ी में 0 से 6 तक स्थान होंगे।
एकमात्र नियम: "mod p" में कुछ भी निकालने के लिए सामान्य अंकगणित कीजिए, फिर
pसे भाग देकर केवल शेषफल रख लीजिए। mod 7 का उदाहरण:5 + 4 = 9, और9को7से भाग देने पर शेष2बचता है, इसलिए5 + 4 = 2 (mod 7)।
घड़ी हमें जोड़ने देती है। Field उसका उन्नत रूप है: ऐसी संख्या-प्रणाली जिसमें चारों क्रियाएँ ठीक से चलती हैं, यहाँ तक कि कठिन वाली—भाग—भी।
अनौपचारिक रूप से, field ऐसी किसी भी "संख्या" का संग्रह है जिसमें आप जोड़, घटा, गुणा और भाग कर सकें (शून्य से छोड़कर), और परिचित नियम अब भी लागू हों: जोड़ और गुणा में क्रम बदलने से फर्क न पड़े, कोष्ठकों को फिर से समूहित किया जा सके, एक 0 और एक 1 हो, और हर संख्या का एक ऋणात्मक तथा (0 को छोड़कर) एक reciprocal हो।
परिमेय संख्याएँ एक field हैं। वास्तविक संख्याएँ एक field हैं। हमें चाहिए इनका एक सीमित रूप।
अब मुख्य परिणाम, और यह बहुत सुंदर है:
पूरी संख्याएँ
0, 1, ..., p-1लीजिए और उन पर सारी गणना modpकीजिए। यदिpएक prime संख्या है, तो परिणाम एक finite field होता है। इसे हमF_pलिखते हैं (पढ़ें "F sub p")।
तो mod 7 की घड़ी-जैसी अंकगणित के साथ F_7 = {0, 1, 2, 3, 4, 5, 6} सचमुच एक finite field है। आइए इसे काम करते हुए देखें।
तालिका की हर प्रविष्टि (row x column) mod 7 है:
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| 2 | 0 | 2 | 4 | 6 | 1 | 3 | 5 |
| 3 | 0 | 3 | 6 | 2 | 5 | 1 | 4 |
| 4 | 0 | 4 | 1 | 5 | 2 | 6 | 3 |
| 5 | 0 | 5 | 3 | 1 | 6 |
1 से 6 तक की पंक्तियों को देखिए: हर पंक्ति में 1..6 का हर nonzero मान ठीक एक बार आता है। यह "न दोहराव, न कुछ गायब" वाला पैटर्न field का दिखाई देने वाला fingerprint है।
भाग वास्तव में "reciprocal से गुणा" ही है। F_7 में किसी संख्या a का reciprocal (या inverse) वह मान a^(-1) है जिसके लिए a x a^(-1) = 1। इन्हें सीधे तालिका से पढ़ते हैं:
a | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
a⁻¹ | 1 | 4 | 5 | 2 | 3 | 6 |
एक जाँच: 2 x 4 = 8 = 1 (mod 7)। तो F_7 में "2 से भाग" का मतलब है "4 से गुणा"। हर nonzero तत्व का एक साथी है। यही चीज़ F_7 को field बनाती है।
यह इस लेख का सबसे महत्वपूर्ण विचार है, इसलिए इसे अमूर्त रखने के बजाय ठोस रूप में देखते हैं।
देखिए क्या टूटता है यदि हम सीधे-सीधे mod 6 पर एक "field" बनाने की कोशिश करें (और 6 prime नहीं है):
क्या कोई
xहै जिसके लिए2 x x = 1 (mod 6)हो? सब जाँच लें:2x0=0, 2x1=2, 2x2=4, 2x3=0, 2x4=2, 2x5=4। उत्तर1कभी आता ही नहीं। इसलिए mod 6 में2का कोई reciprocal नहीं है। इससे भी बुरा,2 x 3 = 6 = 0 (mod 6)है: दो nonzero संख्याओं का गुणनफल शून्य निकल आया।
दूसरी बात अंकगणित के लिए विनाशकारी है। दो nonzero चीज़ों का गुणा शून्य देना (जिसे zero divisor कहते हैं) मतलब भाग की व्यवस्था टूट गई, और जिसकी division टूटी हो वह प्रणाली field नहीं हो सकती। यह ठीक इसलिए होता है क्योंकि 6 के गुणनखंड 2 x 3 हैं।
परिभाषा के अनुसार prime में ऐसे गुणनखंड नहीं होते। इसलिए किसी prime के mod में zero divisors नहीं आते, हर nonzero तत्व का साफ reciprocal मिलता है, और संरचना एक सही field बनती है।

आपके लेखों के लिए याद रखने लायक एक पंक्ति: prime modulus डालो, साफ division पाओ।
हमने F_7 के लिए inverses तालिका से पढ़ लिए, लेकिन Zcash का prime सैकड़ों अंकों का होता है; वहाँ कोई तालिका संभव नहीं। इसके लिए एक क्लासिक shortcut है, और यही इस लेख का एकमात्र सूत्र है।
Fermat's Little Theorem कहती है कि किसी prime p और किसी भी nonzero a के लिए:
a^(p-1) = 1 (mod p)
इसे थोड़ा पुनर्व्यवस्थित कीजिए (यानी a का एक गुणक अलग कीजिए) और inverse मुफ्त में मिल जाता है:
a^(-1) = a^(p-2) (mod p)
इसे F_7 में जाँचें (p = 7, तो p - 2 = 5): 2 का inverse 2^5 = 32 = 4 (mod 7) होना चाहिए। और हमारी तालिका ने सचमुच यही कहा था कि 2^(-1) = 4। कंप्यूटर बहुत बड़ी घातों को भी बेहद तेज़ी से निकाल लेते हैं, इसलिए यह "reciprocal खोजो" को विशाल primes के लिए भी एक तेज़, सटीक गणना में बदल देता है।
आपको इसे कंठस्थ करने की आवश्यकता नहीं है। आपको यह जानना है कि finite field में division एक तेज़ और सटीक क्रिया है, और यही कारण है कि cryptographers उसके ऊपर निर्माण करने में प्रसन्न रहते हैं।
अब तक की intuition को एक साथ रखें, तो पूरी बात एक ही पृष्ठ पर यह है।
F_p का गुण | कोई privacy system इसे क्यों चाहता है |
|---|---|
| सीमित | कंप्यूटर किसी भी तत्व को ठीक-ठीक संग्रहित कर सकता है; न rounding, न overflow, न floating-point की धुंधलाहट |
| Wrap-around | "आकार" मिटा देता है, इसलिए कोई मान यह नहीं बताता कि वह कैसे उत्पन्न हुआ |
| चारों क्रियाएँ काम करती हैं | Cryptographic recipes (keys, commitments, proofs) को केवल गिनती नहीं, असली बीजगणित चाहिए |
| आकार चुना जा सकता है | 255-bit या 381-bit prime चुनिए और field में दृश्य ब्रह्मांड के परमाणुओं से भी अधिक तत्व होंगे; अनुमान लगाना निराशाजनक है |
| सटीक और deterministic | एक ही चीज़ की गणना करने वाले दो ईमानदार पक्ष हमेशा एक जैसे परिणाम पाते हैं, और proofs इसी पर निर्भर करते हैं |
एक वाक्य में finite field है: अंकगणित के लिए एक पूरी तरह बंद, पूरी तरह सटीक, और पूरी तरह विशाल खेल का मैदान। Zcash में बाकी सब कुछ उसी के भीतर खेलते हुए बनाया जाता है।
आपको "Zcash finite fields का उपयोग करता है" यह बात मानकर चलने की ज़रूरत नहीं है। यह उसका ठोस नक्शा है (गहरी मशीनरी बाद के लेखों में आएगी; अभी सिर्फ इतना दिखाना है कि fingerprint सचमुच मौजूद हैं)।

तो लेख 0 के खुले प्रश्न, "ये गुप्त recipes आती कहाँ से हैं?", का उत्तर यहीं से शुरू होता है: सब कुछ finite field में अंकगणित से शुरू होता है। अगले लेख में हम इसी field से वास्तविक वस्तुएँ बनाएँगे—elliptic curve पर बिंदु—जो आगे चलकर keys और commitments बनते हैं।
नए पाठकों के लिए इसे अनुकूल बनाए रखने के लिए हमने कुछ सच बातों को सरल किया है। Finite fields केवल F_p रूप में नहीं आते; आप p^n तत्वों वाले fields भी बना सकते हैं (जिन्हें extension fields कहा जाता है), और Sapling की proof system जिन "pairings" पर निर्भर करती है, उनमें इनका महत्व है। हमने field axioms की पूरी सूची भी छोड़ दी, और यह भी नहीं बताया कि इतने बड़े primes चुने और सत्यापित कैसे किए जाते हैं। इससे आपकी अभी की intuition बदलती नहीं; बस और परिष्कृत होती है। जब किसी बाद के लेख को उसकी ज़रूरत होगी, तब हम सावधानी से वह सटीकता वापस जोड़ देंगे।
0..p-1 संख्याओं पर किसी prime p के mod में अंकगणित करने से एक वास्तविक field F_p मिलता है, जिसमें आप भाग भी कर सकते हैं क्योंकि हर nonzero तत्व का inverse होता है।2 x 3 = 0 mod 6) और division तोड़ देता है।a^(-1) = a^(p-2)) के माध्यम से inverses तेज़ी से निकालते हैं।| शब्द | सरल अर्थ |
|---|---|
| Modular arithmetic | ऐसा अंकगणित जो किसी निश्चित मान पर पहुँचने के बाद घड़ी की तरह फिर से शुरू हो जाता है |
| mod p | "p से भाग दो और शेषफल रख लो" |
| Field | ऐसी संख्या-प्रणाली जिसमें जोड़, घटाव, गुणा और भाग सब काम करते हैं |
Finite field F_p | 0..p-1 संख्याएँ, जिन पर किसी prime p के mod में अंकगणित किया जाता है |
| Inverse (reciprocal) | वह तत्व a^(-1) जिसके लिए a x a^(-1) = 1 हो; "a से भाग" का मतलब उसी से गुणा करना है |
| Zero divisor | दो nonzero मान जिनका गुणनफल शून्य हो जाए; वही चीज़ जो composite modulus को बिगाड़ती है |
| Prime | 1 से बड़ी ऐसी पूर्ण संख्या जिसके 1 और स्वयं के अलावा कोई गुणनखंड न हों |
सामान्य integers या decimals का ही उपयोग क्यों न करें? Decimals में rounding और drift आती है; integers बिना सीमा के बढ़ते जाते हैं और अपना आकार प्रकट करते हैं। Finite fields सटीक, सीमित, और आकार-अंधे होते हैं, और cryptography को यही चाहिए।
क्या "चक्कर लगाकर वापस आना" जानकारी खो देता है? हाँ, जानबूझकर। मध्यवर्ती मानों के आकार को मिटा देना privacy के लिए bug नहीं, feature है।
क्या बड़ा prime हमेशा अधिक सुरक्षित होता है? ढीले अर्थ में, बड़ा field अधिक संभावित मान देता है और अनुमान लगाना कठिन बनाता है, लेकिन सुरक्षा केवल field के आकार पर नहीं, पूरी construction पर निर्भर करती है। आगे के लेख इसे सटीक बनाएँगे।
Zcash में यही विशेष primes (255-bit, 381-bit) क्यों हैं? उन्हें इसलिए चुना जाता है ताकि उन पर बनी curves में proof system के लिए सही संरचना और दक्षता हो। यही "सही संरचना" अगले दो लेखों का विषय है।
F_7 में 5 - 6 क्या होगा? (याद रखें: wrap-around करके {0,...,6} के भीतर ही रहना है।) (उत्तर नीचे है।)
5 - 6 = -1, और F_7 में wrap करने पर -1, 6 बन जाता है (क्योंकि 6 + 1 = 7 = 0)। इसलिए 5 - 6 = 6 (mod 7)। घटाव कभी field से बाहर नहीं जाता; बस दूसरी दिशा में wrap हो जाता है।
लेख 2 . Elliptic curves: अभी जो finite field हमने बनाया है, अगले लेख में हम उसी का उपयोग एक अजीब तरह की curve बनाने के लिए करेंगे जिसके बिंदुओं को आपस में "जोड़ा" जा सकता है। वही बिंदु Zcash की keys और commitments बनते हैं, और उनमें एक one-way trapdoor छिपा होता है जो पूरी privacy system को संभव बनाता है। हमेशा की तरह, पहले intuition।
यह Zcash First Principles से श्रृंखला का हिस्सा है, ZecHub के लिए। Licensed CC BY-SA 4.0.
| 4 |
| 2 |
| 6 | 0 | 6 | 5 | 4 | 3 | 2 | 1 |