बिल्डिंग zk-SNARKs (मात्रा 2)
परिचय
अपनी पिछली पोस्ट में, हमने SNARK की अवधारणा और आवश्यक बुनियादी गुणों का परिचय दिया था। पदों की इस श्रृंखला के मुख्य उद्देश्य को ध्यान में रखते हुए, अर्थात्: किसी भी संगणना के लिए zk-SNARKs का निर्माण कैसे करें, हम इस पोस्ट में एक बहुपद के ज्ञान को सिद्ध करने के लिए SNARK के निर्माण का परिचय देते हैं। हम इसे एक निर्माण से कदम दर कदम आगे बढ़ाएंगे जो सभी आवश्यकताओं को पूरा नहीं करेगा और एक प्रोटोकॉल को समाप्त करेगा जो एक "पूर्ण" शून्य-ज्ञान SNARK होगा।
बहुपदों के लिए ZK-SNARKs
हम एक zk-SNARK कदम दर कदम बनाएंगे, एक सरल निर्माण से शुरू करेंगे जो एक SNARK नहीं है, और फिर नई तकनीकों के साथ इसे तब तक सुधारेंगे जब तक हम अपने उद्देश्यों को पूरा नहीं कर लेते।
पहला कदम: श्वार्ट्ज - जिप्पल लेम्मा
हम एक प्रोटोकॉल बनाना चाहते हैं जो प्रोवर पी को परिमित क्षेत्र एफ में गुणांक के साथ डिग्री एन के एक विशेष बहुपद के ज्ञान के एक सत्यापनकर्ता वी को समझाने की अनुमति देता है। दूसरे शब्दों में, पी वी को विश्वास दिलाना चाहता है कि वह फॉर्म के बहुपद को जानता है।
आइए मान लें कि a_1, a_2, … , a_n ∈ F इस बहुपद की n जड़ें हैं, इसलिए p(x) को इस प्रकार लिखा जा सकता है
आइए मान लें कि V बहुपद p(x) के d <n मूलों को जानता है।
तब हम अपनी समस्या को सुधार सकते हैं: अब P, V को साबित करना चाहता है कि वह एक बहुपद h(x) जानता है जैसे कि
बहुपद t(x) को लक्ष्य बहुपद कहा जाएगा। देखें कि इसका रूप है
हमारे zk-SNARK का पहला संस्करण Schwartz - Zippel लेम्मा पर आधारित है: F को एक फ़ील्ड होने दें और f: F^m → F डिग्री n का एक बहुभिन्नरूपी बहुपद। फिर, किसी परिमित समुच्चय S ⊆ F के लिए:
लेम्मा से पता चलता है कि अगर हम यादृच्छिक रूप से यू ∈ एसएम समान रूप से लेते हैं, तो एफ के लिए जड़ों का एक सेट होने की संभावना अधिक से अधिक n / |S| है। ध्यान दें कि यदि हम S को परिमित क्षेत्र F मानते हैं तो यह संभावना बहुत कम है। क्षेत्र का आकार n की तुलना में बहुत बड़ा होगा।
यह विरोधाभासी लग सकता है लेकिन यह लेम्मा हमें बहुपद f के ज्ञान को सिद्ध करने की अनुमति देता है। हमें यह साबित करने की आवश्यकता नहीं है कि हम p के सभी गुणांक जानते हैं, लेकिन केवल यह जानते हैं कि किसी भी s ∈ Fm के लिए जोड़ी (s, f(s)) की गणना कैसे करें। श्वार्ट्ज-जिप्पल लेम्मा हमारे zk-SNARK में आवश्यक दक्षता प्रदान करता है।
पहला प्रोटोकॉल
हमें याद है कि P बहुपद p(x) को जानता है और V, p(x) के d <n मूल को जानता है या, समतुल्य रूप से, V लक्ष्य बहुपद t(x) को जानता है। पी भी टी (एक्स) जानता है।
हमारा पहला दृष्टिकोण इस प्रकार है:
- V एक यादृच्छिक मान s लेता है और t = t(s) की गणना करता है। V, P को s भेजता है।
- P बहुपद की गणना करता है
4. V जाँचता है कि क्या समानता p = t · h है।
यह प्रोटोकॉल सही है क्योंकि यदि P बहुपद p(x) को जानता है, तो वह h(x) की गणना कर सकता है और इसलिए P मान h और p की गणना भी कर सकता है जैसे कि p = h · t। दूसरी ओर, यह प्रोटोकॉल श्वार्ट्ज-जिप्पल लेम्मा के कारण भी कुशल है।
फिर भी, यह प्रोटोकॉल मजबूत नहीं है क्योंकि प्रोवर लक्ष्य बहुपद का उपयोग करके टी = टी (एस) की गणना कर सकता है, भले ही पी पी (एक्स) नहीं जानता हो। वह एक यादृच्छिक एच ले सकता है और पी = एच · टी की गणना कर सकता है और जोड़ी (एच, पी) को वी को भेज सकता है जो जोड़ी को वैध के रूप में स्वीकार करेगा।
हम देखते हैं कि P को V को मूर्ख बनाने की अनुमति देने वाला महत्वपूर्ण बिंदु यह है कि P मूल्यांकन बिंदु s को जानता है। यह ट्रिक असंभव होगी यदि P मूल्यांकन बिंदु s को जाने बिना p का मूल्यांकन कर सकता है। यह हमें दूसरे चरण की ओर ले जाता है: होमोमोर्फिक ऑबफ्यूजेशन, या होमोमोर्फिक छिपाना।
दूसरा चरण: होमोमोर्फिक ऑबफसकेशन
हमारे प्रोटोकॉल को मजबूत बनाने के लिए, हमें उस बिंदु को जाने बिना एक बिंदु पर एक बहुपद का मूल्यांकन करने में सक्षम होना चाहिए।
हम ऐसा असतत लघुगणक समस्या की कठोरता पर निर्भर करते हुए करेंगे। शास्त्रीय कंप्यूटर के लिए, असतत लघुगणक समस्या कम्प्यूटेशनल रूप से अक्षम्य है: एक चक्रीय समूह G में, क्रम p का और एक तत्व g द्वारा उत्पन्न होता है, एक तत्व का निर्धारण करता है जैसे कि = ga (mod p) एक ज्ञात के लिए।
तो असतत लघुगणक बहुपद की कठोरता को मानते हुए, हम = ga (mod p) की गणना करके एक मान को अस्पष्ट कर सकते हैं। अकेले का रिसीवर मूल्य नहीं सीख सकता है। इस तकनीक का दिलचस्प बिंदु यह है कि घातांक में कुछ समरूपी गुण होते हैं:
दो उलझे हुए मानों का गुणनफल स्पष्ट रूप से जुड़े हुए मूल्यों को जोड़ने के अस्पष्टीकरण के समान है।
अगर हम एक बहुपद का मूल्यांकन करना चाहते हैं
एक बिंदु x = s पर मूल्यांकनकर्ता को सटीक बिंदु बताए बिना, हमें पूरे बहुपद को अस्पष्ट करने की आवश्यकता है:
हमें x = r के लिए अस्पष्टीकृत मानों की 1 से बहुपद की डिग्री तक की शक्तियों की गणना करने की भी आवश्यकता है, अर्थात:
ध्यान दें कि इन सभी तत्वों के साथ, अब हम बिंदु x = r पर बहुपद p के अस्पष्ट मूल्यांकन की गणना कर सकते हैं। वास्तव में:
होमोमोर्फिक छिपाने का एक उदाहरण
आइए परिमित क्षेत्र F = ℤ127 और g = 3 एक जनरेटर पर विचार करें। मान लेते हैं कि P बहुपद p(x) = 4x2 + 3x + 1 जानता है और V चाहता है कि P, बिंदु को जानने के बिना बिंदु x = 2 पर बहुपद का मूल्यांकन करे। हम इसे निम्न चरणों के माध्यम से कर सकते हैं:
- V, x = 2 की 0 से बहुपद की घात, n = 2 की सभी शक्तियों की गणना करता है:
1.बी. 32 (मॉड 127) = 9
1.सी. 34 (मॉड 127) = 81
और जोड़े (9, 81) को P को भेजता है।
2. P, x का मान जाने बिना x = 2 पर p(x) के मूल्यांकन की गणना कर सकता है, वास्तव में, V से प्राप्त जानकारी का उपयोग करके वह गणना कर सकता है:
दूसरा प्रोटोकॉल
अब जब हम जानते हैं कि बिंदुओं को कैसे अस्पष्ट करना है, तो कहावत उस अस्पष्ट बिंदु पर बहुपद का मूल्यांकन कर सकती है, हम पहले प्रोटोकॉल में सुधार करेंगे। हमें याद है कि P बहुपद p(x) को जानता है और V, p(x) के d <n मूल को जानता है या, समतुल्य रूप से, V लक्ष्य बहुपद t(x) को जानता है। पी भी टी (एक्स) जानता है।
हमारा दूसरा प्रोटोकॉल इस प्रकार है:
- V एक यादृच्छिक मान s लेता है और t = t(s) की गणना करता है।
- V गणना करता है और P को निम्नलिखित शक्तियाँ भेजता है:
4. मानों का उपयोग करके, P पिछले उदाहरण के निर्देशों का उपयोग करके g^p = g^{p(s)} और g^h = g*{h(s)} की गणना करता है।
5. P, g^p और g^h को V को भेजता है।
6. वी जांचता है कि निम्नलिखित पहचान रखती है या नहीं: g^p = (g^h)^t
गौर करें कि पहले प्रोटोकॉल में पाई गई खामी को संशोधित कर दिया गया है, लेकिन यह दूसरा प्रोटोकॉल अभी मजबूत नहीं है। वास्तव में P अभी भी zp और zh मानों का उपयोग कर सकता है जैसे कि z_p = (z_h)^t और उन्हें V पर भेज दें जैसे कि वे g^p और g^h थे। P एक यादृच्छिक r लेकर, z_h = g^r की गणना करके और z_p = (g^t)^r सेट करके ऐसा कर सकता है। मूल्य z_p की गणना V द्वारा भेजी गई अस्पष्ट शक्तियों का उपयोग करके की जा सकती है।
इस स्थिति से बचने के लिए, हमें यह सुनिश्चित करने की आवश्यकता है कि g^p और g^h की गणना केवल V द्वारा भेजी गई अस्पष्ट शक्तियों का उपयोग करके की जाती है।
तीसरा चरण: ज्ञान-का-प्रतिपादक धारणा
SNARK को परिभाषित करते समय एक सामान्य धारणा है: आइए हम एक अभाज्य संख्या q पर विचार करें जैसे कि 2q + 1 भी एक अभाज्य संख्या है। आइए हम ℤ_{2q + 1} के ga जनरेटर पर विचार करें। दिए गए q, g और g' = g^, हम एक जोड़ी (x, y) को खोजना चाहते हैं जैसे कि x ≠ g, y ≠ g', और y = x^। एक्सपोनेंट-ऑफ-एक्सपोनेंट धारणा (केईए) का कहना है कि जोड़ी (x, y) को खोजने का एकमात्र तरीका सी ∈ ℤ_q लेना है, पहले x = g^c की गणना करना और फिर y = (g')^ लेना सी।
KEA का अर्थ है कि यदि कोई जोड़ी (x, y) प्राप्त करना चाहता है, तो ऐसा करने का एकमात्र तरीका एक एक्सपोनेंट c को जानना है जैसे कि x = g^c। दूसरे शब्दों में, हम केवल जी की शक्तियों का उपयोग करके केईए संपत्ति के साथ जोड़ी (एक्स, वाई) प्राप्त कर सकते हैं।
KEA का उपयोग करते हुए नीचे दिए गए प्रोटोकॉल से यह सुनिश्चित होता है कि P, g की एक विशेष शक्ति लौटाता है, जो गुणक उपसमूह का एक जनरेटर है, जिसे V द्वारा वितरित किया जाता है:
- V एक यादृच्छिक मान लेता है और g' = g^ (mod 2q + 1) की गणना करता है।
- वी जोड़ी (जी, जी') को पी को भेजता है और एक जोड़ी (बी, बी') के लिए पूछता है जैसे कि (बी, बी') = (जी, जी')।
- P एक मान c लेता है और b = g^c (mod 2q + 1), b' = (g')^c (mod 2q + 1) की गणना करता है और जोड़ी (b, b') V को भेजता है।
- V जाँचता है कि क्या b' = b^ (mod 2q + 1)।
P ने g और g' दोनों के लिए समान शक्ति c का उपयोग किया और वह केवल V द्वारा दिए गए मानों का उपयोग करने में सक्षम था।
तीसरा प्रोटोकॉल
हम एक उचित प्रोटोकॉल बनाने के लिए तैयार हैं जो यह सुनिश्चित करेगा कि प्रोवर पी भ्रमित डोमेन पर मान एस की शक्तियों का उत्पादन करेगा।
- V एक यादृच्छिक मान s लेता है और t = t(s) की गणना करता है।
- V एक यादृच्छिक मान लेता है और t( · s) की गणना करता है।
- वी भ्रमित मूल्यों की निम्न श्रृंखला की गणना करता है और उन्हें पी को भेजता है।
- वी भ्रमित मूल्यों की निम्न श्रृंखला की गणना करता है
5. पी बहुपद एच (एक्स) की गणना करता है।
6. का उपयोग करके, P, g^p = g^{p(s)} और g^h = g^{h(s)} के साथ मिलकर p(s) और h(s) की गणना करता है।
7. का उपयोग करके, P, g^{p'} = g^{p( · s)} के साथ मिलकर p(s) और h(s) की गणना करता है।
8. P, V को g^p, g^h और g^{p'} भेजता है।
9. वी जांच करता है कि पी ने केवल उसके द्वारा भेजी गई जानकारी का उपयोग करके भ्रमित मूल्यों की गणना की है। ऐसा करने के लिए, V जाँचता है कि क्या g^p = g^{p'}.
10. वी जांचता है कि निम्नलिखित पहचान रखती है या नहीं: g^p = (g^h)^{t(s)}।
यह प्रोटोकॉल अब SNARK द्वारा आवश्यक गुणों को संतुष्ट करता है: यह सही है, यह मजबूत है और यह कुशल है। अगले खंड गैर-अन्तरक्रियाशीलता और शून्य-ज्ञान से निपटेंगे।
टिप्पणी: उपरोक्त प्रोटोकॉल में चरण 6 और 7 होमोमोर्फिक छिपाने के उदाहरण के अनुसार किए जाते हैं।
शून्य ज्ञान
अब तक हमने जो प्रोटोकॉल प्रस्तुत किया है, उसमें P को ज्ञात बहुपद के गुणांक ci बहुत विशिष्ट हैं, और V, P से आने वाले gp, gh और gp' का उपयोग करके उनके बारे में कुछ जानकारी सीखने का प्रयास कर सकता है। इसलिए, P को सुनिश्चित करने के लिए कि वी कुछ नहीं सीखेगा, पी को इन मूल्यों को छिपाने की जरूरत है।
P द्वारा भेजे गए मानों को छिपाने की रणनीति पहले उपयोग किए गए चरणों का पालन करती है: P एक यादृच्छिक लेता है और V के साथ संचार में भेजे गए मानों को छिपाने के लिए इसका उपयोग करता है। सटीक होने के लिए, g^p, g^h और g भेजने के बजाय ^{p'}, P गणना करता है और भेजता है (g^p)^, (g^h)^ और (g^{p'})^। फिर V के अंतर्गत छिपे हुए मानों पर सत्यापन चलाता है।
V को चलाने के लिए आवश्यक सत्यापन प्रक्रिया अभी भी इस छिपाने के साथ मान्य है, वास्तव में:
तो तीसरे प्रोटोकॉल को शून्य-ज्ञान बनाने के लिए, चरण 8 को बदल देता है ताकि P अस्पष्ट मान भेज सके।
गैर-अन्तरक्रियाशीलता
हमने जो विभिन्न प्रोटोकॉल प्रस्तुत किए हैं, उनमें प्रोवर और सत्यापनकर्ता के बीच परस्पर क्रिया की आवश्यकता होती है, और इसका कारण यह है कि प्रोटोकॉल की शुद्धता सत्यापनकर्ता द्वारा चुने गए गुप्त मूल्यों s और पर निर्भर करती है।
यदि हम किसी अन्य सत्यापनकर्ता V' के साथ उपरोक्त प्रोटोकॉल में से किसी को दोहराना चाहते हैं, तो V' को नए मान s' और ' चुनने की आवश्यकता होगी। V द्वारा उत्पन्न मूल्यों का उपयोग करने से P को धोखा देने की अनुमति मिल सकती है यदि वह V के साथ सांठगांठ करता है और V मान s और को P को प्रकट करता है।
उपरोक्त स्थिति से बचने के लिए, हमें अपने प्रोटोकॉल को गैर-संवादात्मक होने की आवश्यकता है और हम इसे उन मापदंडों का उपयोग करके प्राप्त कर सकते हैं जो सार्वजनिक, विश्वसनीय और पुन: प्रयोज्य हैं। यह एक जनरेटर जी का उपयोग करके इन मापदंडों को अस्पष्ट करके पूरा किया जा सकता है। फिर भी, भले ही उपयोग की जाने वाली आपत्तिजनक तकनीक होमोमोर्फिक हो, वे केवल छिपे हुए मूल्यों के उत्पाद का उपयोग करके स्पष्ट संदेशों को जोड़ने की अनुमति देते हैं, लेकिन वे भ्रमित डोमेन में स्पष्ट मूल्यों के उत्पाद को निष्पादित करने की अनुमति नहीं देते हैं, और सत्यापन करते समय यह कदम महत्वपूर्ण है बहुपद और उसकी जड़ों की शुद्धता।
हम इस समस्या को हल करने के लिए जोड़ियों का परिचय देंगे। आइए याद करें कि एक जोड़ी में निम्नलिखित संपत्ति होती है:
यह गुण अस्पष्ट डोमेन में उत्पादों की समानता की जाँच करने में सक्षम बनाता है।
इसलिए हमारे प्रोटोकॉल को गैर-संवादात्मक बनाने के लिए, पहला कदम गुप्त यादृच्छिक मूल्यों s और को लेना और उन्हें अस्पष्ट करना है: g^, और ।
एक बार जब हम इन शक्तियों की गणना कर लेते हैं, तो हम गुप्त मूल्यों s और से छुटकारा पा सकते हैं और उनके अस्पष्ट मूल्यों को प्रसारित कर सकते हैं, जिन्हें सामान्य संदर्भ स्ट्रिंग (CRS) के रूप में जाना जाता है। CRS मान आमतौर पर इस प्रकार संग्रहीत किए जाते हैं:
- मूल्यांकन कुंजी: (, )।
- सत्यापन कुंजी: (g^, g^{t(s)}).
अंतिम प्रोटोकॉल: एक बहुपद के ज्ञान के लिए zk-SNARK
लक्ष्य बहुपद t(x) दिए जाने पर घात n वाले बहुपद p(x) के ज्ञान को सिद्ध करने के लिए अब हम zk-SNARK को परिभाषित करते हैं।
पैमाना सेटिंग
- प्रत्येक पार्टी यादृच्छिक रूप से दो गुप्त मान s और लेती है।
- प्रत्येक पार्टी g, और की गणना करती है।
- मान s और नष्ट हो जाते हैं।
- एक मूल्यांकन कुंजी ( और ) प्रसारित करता है।
- एक सत्यापन कुंजी g^, g^{t(s)} प्रसारित करता है।
- यह मानते हुए कि P, p(x) जानता है, P बहुपद h(x) की गणना करता है।
- P, p(x) और h(x) का मूल्यांकन करता है और मूल्यांकन कुंजी में निहित मानों का उपयोग करके gp(s) और gh(s) की गणना करता है।
- P मूल्यांकन कुंजी का उपयोग करके g^{p( · s)} मान की गणना करता है।
- P एक यादृच्छिक मान लेता है।
- P प्रमाण प्रसारित करता है π = (g^{ · p(s)}, g^{ · h(s)}, g^{ · p( · s)}) = (g^{ · p }, जी^{ · एच}, जी^{ · पी'})।
यह मानते हुए कि V के पास π = (g^{ · p}, g^{ · h}, g^{ · p'}) तक पहुंच है, यह जांचता है कि क्या
हम एक zk-SNARK की परिभाषा में आवश्यक सभी गुणों को संतुष्ट करने वाला एक प्रोटोकॉल सेट करने में कामयाब रहे: संक्षिप्तता (क्योंकि प्रमाण केवल एक बिंदु पर एक बहुपद की जाँच कर रहा है), शून्य-ज्ञान और गैर-संवादात्मक (चूंकि यह CRS का उपयोग करता है) ).
सीआरएस की पीढ़ी
Zk-SNARKs को सामान्य संदर्भ स्ट्रिंग (CRS) के रूप में जाने जाने वाले छिपे हुए मानों के एक सेट का उपयोग करके गैर-संवादात्मक बनाया जा सकता है। ये छिपे हुए मूल्य, जो हमारे मामले में और के रूप में हैं, गुप्त मूल्यों, s और से आते हैं, जिन्हें एक बार छिपे हुए मूल्यों को प्राप्त करने के बाद नष्ट कर देना चाहिए। गौर करें कि सीआरएस की पीढ़ी महत्वपूर्ण है क्योंकि यदि कोई अपनी पीढ़ी को किसी तीसरे प्रतिभागी को सौंपता है, तो सभी को यह भरोसा करने की जरूरत है कि प्रतिभागी मूल्यों और को नष्ट कर देगा। तीसरा पक्ष विफलता के एकल बिंदु का प्रतिनिधित्व करता है।
यदि हम विफलता के एकल बिंदु से बचना चाहते हैं तो हमें सीआरएस उत्पन्न करने के लिए एक वितरित तरीके की आवश्यकता होती है जिसमें एक ईमानदार भागीदार यह गारंटी देने के लिए पर्याप्त है कि मूल्यों और को पुनर्प्राप्त नहीं किया जा सकता है।
आइए अपने पिछले उदाहरण में बनाए गए SNARK के लिए CRS का उपयोग करें। हमें याद है कि एस और को रहस्य के रूप में उपयोग करते हुए, हमें छिपे हुए मूल्यों और शक्तियों g^, और की गणना करने की आवश्यकता है।
हमारे नए प्रोटोकॉल में, हम तीन उपयोगकर्ताओं A, B और C द्वारा उत्पन्न मानों s_{ABC} और _{ABC} के साथ एकल तृतीय पक्ष द्वारा उत्पन्न मानों s और को प्रतिस्थापित करेंगे। तंत्र को n उपयोगकर्ताओं तक विस्तारित करना सीधा है .
प्रोटोकॉल इस प्रकार है:
- उपयोगकर्ता ए जोड़ी (एसए, ए) उत्पन्न करता है, गणना करता है और प्रसारित करता है:
3. बी प्रसारण:
4. सी एक यादृच्छिक जोड़ी (एससी, सी) लेता है, गणना करता है और प्रसारित करता है:
यह प्रोटोकॉल s_{ABC} = s_A · s_B · s_C और _{ABC} = _A · _B · _C के लिए छिपे हुए मान उत्पन्न करता है, जिसमें मूल्यों की इस जोड़ी को जानने वाला कोई भी भागीदार नहीं है।
फिर भी, हमें एक प्रोटोकॉल की आवश्यकता है जो प्रतिभागियों को यह जांचने की अनुमति देता है कि उन छिपे हुए मूल्यों की गणना सही ढंग से की गई थी। हमें यह सुनिश्चित करने की आवश्यकता है कि प्रत्येक उपयोगकर्ता द्वारा उत्पन्न मूल्य आवश्यकताओं को पूरा करते हैं, अर्थात् मूल्यों का सेट जीएस की शक्तियां हैं, प्रत्येक उपयोगकर्ता के एस-मूल्य के लिए, और सेट की गणना सही ढंग से की गई थी। ऐसा करने के लिए, हम जांचते हैं कि प्रत्येक (g^s)^i प्रभावी रूप से gs की i-th शक्ति है। यह जाँच कर किया जा सकता है कि निम्नलिखित समानताएँ धारण करती हैं। यह जाँच प्रत्येक प्रतिभागी द्वारा प्रत्येक प्रतिभागी U से जुड़े सभी मूल्यों sU और U के लिए की जाती है:
यह केवल आवश्यक सत्यापन नहीं है। हमें यह भी जांचना होगा कि प्रत्येक प्रतिभागी पिछले प्रतिभागी से सही मूल्यों का उपयोग करता है। ऐसा करने के लिए, प्रत्येक प्रतिभागी एक उपयोगकर्ता के छिपे हुए सार्वजनिक मापदंडों का उपयोग दूसरे प्रतिभागी के आउटपुट के साथ करेगा। उदाहरण के लिए, C निम्नलिखित की पुष्टि करके, A से CRS जानकारी का उपयोग करके, B द्वारा उत्पन्न CRS के मध्यवर्ती मूल्यों की जाँच कर सकता है:
निष्कर्ष
अब तक हमने सीखा है कि एक बहुपद के ज्ञान को साबित करने के लिए, स्क्रैच से और पूरे विवरण के साथ एक SNARK कैसे बनाया जाता है। हमारी अगली पोस्ट में, आखिरी पोस्ट में, हम उपरोक्त निर्माण को किसी भी संगणना तक विस्तारित करेंगे। ऐसा करने के लिए हम दो प्रमुख अवधारणाओं को पेश करेंगे: द्विघात अंकगणितीय कार्यक्रम, क्यूएपी, और रैंक-1 बाधा प्रणाली, आर1सीएस, हालांकि बाद वाले को विशेष रूप से पेश नहीं किया जाएगा (यह एक अचेतन संदेश के रूप में दिखाई देगा)।
संदर्भ
जोर्डी हेरेरा जोनकोमार्टी, क्रिस्टीना पेरेज़ सोला, क्रिप्टोग्राफिया अवंकाडा। लेक्चर नोट्स। कैटेलोनिया का खुला विश्वविद्यालय, 2022।