एक trusted setup पर Quadratic Arithmetic Program (QAP) को evaluate करने से एक prover को यह साबित करने की अनुमति मिलती है कि QAP संतुष्ट (satisfied) है, वह भी witness को उजागर किए बिना और एक constant sized proof का उपयोग करते हुए।
विशेष रूप से, QAP polynomials का मूल्यांकन एक अज्ञात बिंदु (unknown point) पर किया जाता है। QAP समीकरण (equation)
संतुलित (balanced) होगा यदि vector समीकरण को संतुष्ट करता है, और अन्यथा इसके असंतुलित (unbalanced) होने की अत्यधिक संभावना (overwhelming probability) होगी।
यहाँ दिखाई गई योजना (scheme) एक सुरक्षित ZK Proof नहीं है, लेकिन यह यह दिखाने की दिशा में एक कदम (stepping stone) है कि Groth16 कैसे काम करता है।
एक Concrete Example
इसे थोड़ा कम abstract बनाने के लिए, मान लेते हैं कि Rank 1 Constraint System (R1CS) के matrices , , और में 3 rows और 4 columns हैं।
चूँकि हमारे पास 3 rows हैं, इसका मतलब है कि हमारे interpolating polynomials की degree 2 होगी। क्योंकि हमारे पास 4 columns हैं, प्रत्येक matrix से 4 polynomials प्राप्त होंगे (कुल मिलाकर 12 polynomials)।
हमारा QAP होगा
Notation और Preliminaries
हम groups और में generators elliptic curve points को क्रमशः और के रूप में संदर्भित करते हैं। में एक element को के रूप में दर्शाया जाता है। में एक element को के रूप में दर्शाया जाता है। जहाँ किसी list में indices को संदर्भित करने वाले subscripts के साथ अस्पष्टता (ambiguity) हो सकती है, वहाँ हम कहते हैं कि या । दो बिंदुओं के बीच एक elliptic curve pairing को के रूप में दर्शाया जाता है।
मान लीजिए कि , का -th column है। हमारे उदाहरण में, rows होंगी और columns होंगे। मान लीजिए कि वह polynomial है जो के -th column पर Lagrange interpolation चलाने से प्राप्त होता है, जिसमें values का उपयोग किया जाता है और values, -th column की values होती हैं।
चूँकि हमारे पास 4 columns हैं, हम से चार polynomials प्राप्त करते हैं
से चार polynomials
और से चार polynomials
एक polynomial का अर्थ है -th polynomial और -th coefficient (power)। उदाहरण के लिए, का अर्थ है से जुड़ा coefficient।
हमारे उदाहरण के लिए QAP है
जहाँ और है
R1CS के आकार के संबंध में QAP में polynomials की degrees
सामान्य स्थिति (general case) में polynomials की degrees के बारे में कुछ अवलोकन (observations):
- और की degree अधिकतम तक हो सकती है क्योंकि वे points को interpolate करते हैं, जहाँ , R1CS में rows की संख्या है।
- की degree कम से कम 0 हो सकती है यदि polynomials का योग जुड़कर शून्य (zero) polynomial बन जाता है, अर्थात्, coefficients एक-दूसरे को योगात्मक (additively) रूप से cancel कर देते हैं।
- परिभाषा के अनुसार की degree होती है।
- polynomials को गुणा करने पर उनकी degrees आपस में जुड़ जाती हैं, और polynomials को विभाजित करने पर उनकी degrees घट जाती हैं।
इसलिए, h(x) अधिकतम होगा क्योंकि
Terms का विस्तार (Expanding)
यदि हम अपने पिछले उदाहरण से sums का विस्तार करते हैं, तो हमें निम्नलिखित प्राप्त होता है
इनमें से प्रत्येक मामले में, चूँकि हम 4 degree 2 वाले polynomials को जोड़ रहे हैं, हमें एक degree 2 वाला polynomial प्राप्त होता है।
सामान्य रूप में, expression एक ऐसा polynomial उत्पन्न करता है जिसकी अधिकतम power के समान होती है (यह कम भी हो सकती है, यदि उदाहरण के लिए जुड़कर 0 हो जाए)। सुविधा के लिए, हमने coefficients को पेश किया है जहाँ coefficient की power है और का अर्थ है कि हमने polynomials को witness के साथ मिला दिया है।
इस प्रकार polynomials को reduce करने के बाद polynomials यहाँ दिए गए हैं:
एक QAP के साथ trusted setup को Combine करना
अब हम polynomials को evaluate करने के लिए trusted setup से structured reference string को लागू कर सकते हैं।
अर्थात्, दी गई एक structured reference string
जिसकी trusted setup में इस प्रकार गणना (computed) की गई थी
हम गणना कर सकते हैं
यहाँ, का अर्थ है कि polynomials का मूल्यांकन trusted setup में से उत्पन्न structured reference string का उपयोग करके किया गया था, इसका अर्थ यह नहीं है कि “ को डालें और polynomials को evaluate करें”। चूँकि trusted setup के बाद को नष्ट कर दिया गया था, इसलिए का मान (value) अज्ञात है।
हमने srs का उपयोग करके अधिकांश QAP की गणना कर ली है, लेकिन हमने अभी तक की गणना नहीं की है:
की गणना करना (Computing)
याद करें कि की degree 3 (आमतौर पर ) है और की degree 1 (आमतौर पर ) है। यदि हम इन्हें एक साथ गुणा करते हैं, तो हमें अधिकतम degree 3 वाला polynomial मिल सकता है, जो कि powers of tau ceremony द्वारा प्रदान किए जाने वाले से अधिक है। इसके बजाय, के लिए एक structured reference string प्रदान करने के लिए powers of tau ceremony को समायोजित (adjusted) किया जाना चाहिए।
जो व्यक्ति trusted setup कर रहा है उसे पता होता है, यह बस होता है। हालाँकि, एक ऐसा polynomial है जिसकी गणना prover द्वारा की जाती है और यह के मानों के आधार पर बदलता है, इसलिए इसे trusted setup के दौरान जाना नहीं जा सकता है।
ध्यान दें कि हम और को अलग-अलग (एक structured reference string का उपयोग करके) evaluate नहीं कर सकते और फिर उन्हें एक साथ pair नहीं कर सकते। इससे element प्राप्त नहीं होगा जिसकी हमें आवश्यकता है।
Polynomial products के लिए SRS
ध्यान दें कि निम्नलिखित सभी computations का परिणाम समान मान (value) ही होता है:
- Polynomial का पर मूल्यांकन, या
- को से गुणा किया गया, या ( का पर मूल्यांकन और का पर मूल्यांकन)
- को evaluation से गुणा किया गया, फिर पर evaluate किया गया, यानी
हम की गणना करने के लिए तीसरी विधि का उपयोग करेंगे। मान लीजिए, व्यापकता को खोए बिना (without loss of generality), कि है और है। तो computation होगी
यदि हम को में डालते हैं, तो वह होगा।
हालाँकि, इस polynomial को पर evaluate करने के लिए prover को पता होना आवश्यक होगा। यहाँ मुख्य अंतर्दृष्टि (key insight) यह है कि उपरोक्त computation को इस प्रकार संरचित किया जा सकता है:
यदि trusted setup प्रदान करता है, और prover प्रदान करता है, तो prover को जाने बिना की गणना कर सकता है, क्योंकि से जुड़ी कोई भी चीज़ inner product के right vector में है।
के लिए Structured reference string
के लिए एक structured reference string बनाने के लिए, हम की क्रमिक powers (successive powers) से गुणा किए गए के evaluations बनाते हैं।
(थोड़ा भ्रमित करने वाली बात यह है कि degree वाले एक polynomial में terms होते हैं, इसलिए हम degree वाले एक polynomial के लिए evaluations उत्पन्न करते हैं। ध्यान दें कि Upsilon से शुरू होता है और 0 पर समाप्त होता है)।
यहाँ, , R1CS में rows की संख्या है, और हमने स्थापित किया है कि की degree से अधिक नहीं हो सकती।
की गणना के लिए structured reference string का उपयोग करने के लिए, prover यह करता है:
एक Trusted Setup पर QAP को Evaluate करना
अब हम सब कुछ एक साथ जोड़ते हैं। मान लीजिए कि हमारे पास rows और columns वाले matrices के साथ एक R1CS है। इससे, हम इसे QAP में बदलने के लिए Lagrange interpolation लागू कर सकते हैं
Sum terms में से प्रत्येक degree वाला एक polynomial उत्पन्न करेगा (एक Lagrange polynomial की degree उसके द्वारा interpolate किए जाने वाले points की संख्या से एक कम होती है), और polynomial की degree अधिकतम होगी, तथा की degree होगी।
एक trusted setup एक random field element उत्पन्न करता है और गणना करता है:
ध्यान दें कि QAP में polynomials को समायोजित (accommodate) करने के लिए structured reference strings में पर्याप्त terms होने चाहिए।
फिर trusted setup को नष्ट कर देता है और structured reference strings को publish करता है:
Prover, QAP के components को इस प्रकार evaluate करता है:
Prover को publish करता है और verifier जाँच सकता है कि
यदि witness QAP को संतुष्ट करता है, तो उपरोक्त समीकरण संतुलित (balanced) हो जाएगा। लेकिन समीकरण का संतुलित होना यह सुनिश्चित नहीं करता है कि prover एक संतुष्ट करने वाले को जानता है क्योंकि prover arbitrary elliptic curve points publish कर सकता है और verifier को यह नहीं पता होता कि वे वास्तव में QAP से प्राप्त हुए हैं या नहीं।
Proof बहुत छोटा होता है
ध्यान दें कि proof में केवल तीन elliptic curve points होते हैं। यदि एक element का आकार 64 bytes है, और एक element का आकार 128 bytes है, तो proof केवल 256 bytes का होता है। यह R1CS के आकार के बावजूद सत्य है!
R1CS जितना बड़ा होगा, prover का काम उतना ही अधिक होगा, लेकिन verifier का काम constant रहता है।
इस समस्या का समाधान Groth16 protocol पर अगले अध्याय में वर्णित है।
Groth16 में proof अभी भी constant आकार का रहता है, जैसा कि Proof नामक struct पर Tornado Cash के source code में देखा जा सकता है।
मूल रूप से 28 अगस्त, 2023 को प्रकाशित