पॉलिनॉमियल्स (Polynomials) का ज़ीरो नॉलेज मल्टीप्लिकेशन
पिछले अध्याय की polynomial commitment स्कीम का उपयोग करके, एक प्रूवर (prover) यह दिखा सकता है कि उसके पास तीन पॉलिनॉमियल्स l(x), r(x), और t(x) हैं और यह साबित कर सकता है कि t(x)=l(x)r(x) है।
इस एल्गोरिदम के काम करने के लिए, वेरिफायर (verifier) को यह विश्वास होना चाहिए कि पॉलिनॉमियल इवैल्यूएशन (evaluations) सही हैं – लेकिन यह एक ऐसी चीज़ है जिसे हमने पिछले अध्याय में दिखाया था। यहाँ के अधिकांश चरण (steps) केवल उसी polynomial commitment एल्गोरिदम को दोहरा रहे हैं जो हमने पहले किया था।
एक हाई-लेवल पर, प्रूवर l(x), r(x), और t(x) के लिए कमिट (commit) करता है और कमिटमेंट्स (commitments) को वेरिफायर के पास भेजता है। फिर, वेरिफायर x के लिए एक रैंडम वैल्यू (random value) u के रूप में चुनता है और प्रूवर से u पर पॉलिनॉमियल्स को इवैल्यूएट करने के लिए कहता है। वेरिफायर तब जाँचता है कि इवैल्यूएशन सही ढंग से किए गए थे या नहीं, और क्या l(x) के इवैल्यूएशन को r(x) के इवैल्यूएशन से गुणा करने पर वह t(x) के इवैल्यूएशन के बराबर है।
उदाहरण के लिए, मान लें कि पहला पॉलिनॉमियल l(x)=2x है और दूसरा r(x)=x+1 है। तो t(x)=2x(x+1)=2x2+2 होगा। वेरिफायर किसी भी रैंडम x वैल्यू को सैंपल कर सकता है, और l(x)r(x) के गुणनफल (product) का परिणाम t(x) होगा। नीचे दिया गया ग्राफ वेरिफायर द्वारा x=2 चुनने का एक उदाहरण दिखाता है:
वेरिफायर फिर यह जाँचेगा कि 3×4=12 है और प्रूवर के दावे को स्वीकार करेगा।
Schwartz-Zippel lemma यह बताता है कि यदि f(x)=g(x) है, तो किसी रैंडम वैल्यू u के लिए f(u)=g(u) होने की प्रोबेबिलिटी (probability) d/p से कम होती है, जहाँ d दोनों पॉलिनॉमियल्स की अधिकतम डिग्री (maximum degree) है और pfinite field का ऑर्डर (order) है। यदि d≪p (d, p से बहुत बहुत छोटा है), तो u के दो असमान पॉलिनॉमियल्स का इंटरसेक्शन पॉइंट (intersection point) होने की प्रोबेबिलिटी नगण्य (negligible) है।
विशेष रूप से, मान लीजिए कि प्रूवर झूठ बोल रहा है और l(x)r(x)=t(x) है। उस स्थिति में, एक रैंडम u के लिए, अत्यंत उच्च प्रोबेबिलिटी के साथ l(u)r(u)=t(u) होगा। यदि l(x)r(x)=t(x) है, तो l(x)r(x) और t(x) केवल अधिकतम d पॉइंट्स पर इंटरसेक्ट करते हैं (l(x)r(x) या t(x) दोनों में से किसी की अधिकतम डिग्री), और इसकी संभावना बहुत कम है कि वेरिफायर रैंडमली ऐसा u चुनेगा जो उन d इंटरसेक्शन पॉइंट्स में से एक हो।
स्केल (scale) का अंदाज़ा लगाने के लिए, हमारे मामले में d 2 है, लेकिन हमारे इलिप्टिक कर्व्स (elliptic curves) का कर्व ऑर्डर (curve order) (और इसलिए फील्ड का ऑर्डर) लगभग 2254 है। इसलिए यदि t(x)=l(x)r(x) है, तो t(u)=l(u)r(u) होने की प्रोबेबिलिटी 1/2253 है, जो कि लुप्त होने की हद तक छोटी (vanishingly small) है।
अब हम एल्गोरिदम का विस्तार से वर्णन करते हैं, और फिर एक ऑप्टिमाइज़ेशन (optimization) दिखाते हैं।
पॉलिनॉमियल मल्टीप्लिकेशन की नॉलेज साबित करने के स्टेप्स
प्रूवर दो लीनियर (डिग्री 1) पॉलिनॉमियल्स l(x), r(x), और एक क्वाड्रैटिक (डिग्री 2) पॉलिनॉमियल t(x) को कमिट करता है, और वेरिफायर को कमिटमेंट्स भेजता है। वेरिफायर एक रैंडम वैल्यू u के साथ प्रतिक्रिया देता है, और प्रूवर इवैल्यूएशन के प्रूफ्स πl,πr,πt के साथ lu=l(u), ru=r(u), और tu=t(u) का इवैल्यूएशन करता है। वेरिफायर यह सुनिश्चित करता है कि सभी पॉलिनॉमियल्स का इवैल्यूएशन ठीक से किया गया था और tu=luru है।
सेटअप (Setup)
प्रूवर और वेरिफायर एक अज्ञात डिस्क्रीट लॉग रिलेशनशिप (discrete log relationship) वाले इलिप्टिक कर्व पॉइंट्स G और B पर सहमत होते हैं (यानी पॉइंट्स को रैंडमली चुना जाता है)।
इसलिए उन्हें प्रत्येक गुणांक (coefficients) के लिए कुल 7 Pedersen commitments उत्पन्न करने की आवश्यकता होगी, जिसके लिए सात ब्लाइंडिंग टर्म्स (blinding terms) α0,α1,β0,β1,τ0,τ1,τ2 की आवश्यकता होगी।
प्रूवर मान (values) (lu,ru,tu,πl,πr,πt) वेरिफायर को भेजता है। ध्यान दें कि ये सभी फील्ड एलिमेंट्स हैं, न कि इलिप्टिक कर्व पॉइंट्स।
फाइनल वेरिफिकेशन स्टेप
वेरिफायर जाँचता है कि प्रत्येक पॉलिनॉमियल्स का सही ढंग से इवैल्यूएशन किया गया था और t(u) का इवैल्यूएशन l(u) और r(u) के इवैल्यूएशन का गुणनफल (product) है। पहले तीन चेक्स (checks) इस बात के प्रमाण हैं कि कोएफिशिएंट्स के कमिटमेंट के संबंध में पॉलिनॉमियल का सही ढंग से इवैल्यूएशन किया गया था, और अंतिम चेक यह वेरिफाई करता है कि पॉलिनॉमियल्स के आउटपुट में दावा किया गया प्रोडक्ट रिलेशनशिप (product relationship) है।
पहले चरण में, प्रूवर 7 इलिप्टिक कर्व पॉइंट्स भेजता है, और अंतिम चरण में, वेरिफायर 4 इक्वालिटीज़ (equalities) की जाँच करता है। हम केवल 5 इलिप्टिक कर्व पॉइंट्स भेजने और 3 इक्वालिटी चेक करने के लिए एल्गोरिदम में सुधार कर सकते हैं।
यह l(x) और r(x) के कांस्टेंट कोएफिशिएंट्स को एक ही कमिटमेंट में और उन पॉलिनॉमियल्स के लीनियर कोएफिशिएंट्स को एक अलग कमिटमेंट में रखकर किया जाता है। याद दिलाने के लिए, हमने l(x) और r(x) को इस प्रकार परिभाषित किया था:
l(x)r(x)=a+sLx=b+sRx
इसलिए a और b कांस्टेंट कोएफिशिएंट्स हैं, और sL तथा sR लीनियर कोएफिशिएंट्स हैं।
यह उसी तरह है जैसे हम एक वेक्टर (vector) को कमिट करते हैं। हम एक तरह से कांस्टेंट कोएफिशिएंट्स को एक वेक्टर के रूप में और लीनियर कोएफिशिएंट्स को दूसरे वेक्टर के रूप में कमिट कर रहे हैं।
सेटअप (Setup)
सेटअप के दौरान, अब हमें 3 इलिप्टिक कर्व पॉइंट्स की आवश्यकता है: G, H, और B।
ध्यान दें कि l(x) के कोएफिशिएंट्स G पर लागू होते हैं और r(x) के कोएफिशिएंट्स H पर लागू होते हैं। प्रूवर वेरिफायर को (A,S,T0,T1,T2) भेजता है, जो u के साथ प्रतिक्रिया देता है।
lu, ru, tu, πlr, और πt की गणना पहले की तरह की जाती है, लेकिन l(x) और r(x) के इवैल्यूएशन के प्रूफ्स, जो पहले πl और πr थे, उन्हें मिलाकर एक कर दिया गया है: πlr।
बाईं ओर (left-hand-side) कुछ पुनर्व्यवस्था (rearranging) के साथ, हम देख सकते हैं कि इक्वालिटी चेक एक साथ यह जाँचता है कि l(x) और r(x) दोनों का इवैल्यूएशन सही ढंग से किया गया था।
हमारा यह प्रूफ कि हमने तीसरे पॉलिनॉमियल को प्राप्त करने के लिए दो पॉलिनॉमियल्स को सही ढंग से गुणा किया है, का उपयोग यह साबित करने के लिए किया जा सकता है कि हमने तीसरे को प्राप्त करने के लिए दो स्केलर्स (scalars) को एक साथ गुणा किया है। एल्गोरिदम में किसी बदलाव की आवश्यकता नहीं है, केवल सिमेंटिक्स (semantics) में एक मामूली बदलाव है (हम कमिटमेंट्स की व्याख्या कैसे करते हैं)।
मान लें कि हम यह साबित करना चाहते हैं कि हमने ab=v का गुणा (multiplication) किया है।
समस्या का विवरण (Problem statement)
A, a और b के लिए एक कमिटमेंट है, और V, v के लिए एक कमिटमेंट है जहाँ v=ab है। हम यह साबित करना चाहते हैं कि A और V को दावे के अनुसार कमिट किया गया है बिना a, b, या v को प्रकट किए।
समाधान (Solution)
हाई-लेवल विचार यह है कि स्वेच्छा से (arbitrarily) चुने गए लीनियर टर्म को जोड़कर एक स्केलर को पॉलिनॉमियल में बदला जा सकता है, उदाहरण के लिए a, a+sLx बन जाता है और b, b+sRx बन जाता है। sL और sR प्रूवर द्वारा रैंडमली चुने जाते हैं।
जब पॉलिनॉमियल्स a+sLx और b+sRx को एक साथ गुणा किया जाता है, तो ab का गुणा पॉलिनॉमियल मल्टीप्लिकेशन के “अंदर” होता है।
(a+sLx)(b+sRx)=ab+(asR+bsL)x+sLsrx2
याद करें कि प्रूवर कमिटमेंट्स भेजकर एल्गोरिदम शुरू करता है:
ASVT1T2=aG+bH+αB=sLG+sRH+βB=abG+τ0B=(asR+bSL)G+τ1B=sLsRG+τ2B// aऔरbकेलिएकमिटमेंट// लीनियरटर्म्सकोकमिटकरें// प्रोडक्ट V कोकमिटकरें// t(x)कालीनियरकोएफिशिएंट// t(x)काक्वाड्रैटिककोएफिशिएंट
हम बस A की “व्याख्या (interpretation)” को पॉलिनॉमियल्स के कांस्टेंट टर्म्स होने के बजाय उन कांस्टेंट्स a और b में बदल देते हैं जिन्हें हम गुणा कर रहे हैं। हम उस मल्टीप्लिकेशन में V के कमिटमेंट के रूप में व्याख्या के बदलाव को दर्शाने के लिए T0 को V में बदलते हैं जिसे हम यह साबित करने का प्रयास कर रहे हैं कि हमने सही ढंग से किया है, यानी v=ab।
अभ्यास (Exercise): ऊपर वर्णित एल्गोरिदम को लागू करने के लिए छूटे हुए Python कोड को भरें।