Trusted Setup एक ऐसा तंत्र (mechanism) है जिसका उपयोग ZK-SNARKs किसी गुप्त मान (secret value) पर एक बहुपद (polynomial) का मूल्यांकन (evaluate) करने के लिए करते हैं।
ध्यान दें कि किसी बहुपद का मूल्यांकन, गुणांकों (coefficients) और की क्रमिक घातों (successive powers) के आंतरिक गुणनफल (inner product) की गणना करके किया जा सकता है:
उदाहरण के लिए, यदि है, तो इसके गुणांक हैं और हम इस बहुपद की गणना इस प्रकार कर सकते हैं:
दूसरे शब्दों में, हम आमतौर पर उपरोक्त बहुपद के लिए का मूल्यांकन करने के बारे में इस प्रकार सोचते हैं:
लेकिन हम इसका मूल्यांकन इस प्रकार भी कर सकते हैं:
अब मान लीजिए कि कोई व्यक्ति एक गुप्त स्केलर (secret scalar) चुनता है और गणना करता है:
फिर इनमें से प्रत्येक बिंदु को एक क्रिप्टोग्राफ़िक एलिप्टिक कर्व ग्रुप (cryptographic elliptic curve group) के जनरेटर बिंदु (generator point) से गुणा करता है। इसका परिणाम इस प्रकार होगा:
अब कोई भी structure reference string (SRS) ले सकता है और पर 3 डिग्री (या उससे कम) के बहुपद का मूल्यांकन कर सकता है।
उदाहरण के लिए, यदि हमारे पास 2 डिग्री का बहुपद है, तो हम इस बहुपद के साथ structured reference string का आंतरिक गुणनफल (inner product) लेकर का मूल्यांकन कर सकते हैं:
अब हमने क्या है, यह जाने बिना ही की गणना कर ली है!
इसे trusted setup भी कहा जाता है क्योंकि हालाँकि हम नहीं जानते कि का डिस्क्रीट लॉग (discrete log) क्या है, लेकिन जिस व्यक्ति ने structured reference string बनाई है वह जानता है। इससे आगे चलकर जानकारी लीक हो सकती है, इसलिए हम यह भरोसा (trust) करते हैं कि जो संस्था trusted setup बना रही है, वह को डिलीट कर दे और उसे किसी भी तरह से याद न रखे।
Python में उदाहरण
from py_ecc.bn128 import G1, multiply, add
from functools import reduce
def inner_product(points, coeffs):
return reduce(add, map(multiply, points, coeffs))
## Trusted Setup
tau = 88
degree = 3
# tau^3, tau^2, tau, 1
srs = [multiply(G1, tau**i) for i in range(degree,-1,-1)]
## Evaluate
# p(x) = 4x^2 + 7x + 8
coeffs = [0, 4, 7, 8]
poly_at_tau = inner_product(srs, coeffs)
यह जाँचना कि Trusted Setup सही ढंग से जनरेट किया गया था
एक structured reference string दिए जाने पर, हमें यह कैसे पता चलेगा कि वे वास्तव में संरचना का पालन करते हैं और उन्हें बस किसी पासे (dice) के फेंकने की तरह यादृच्छिक रूप से नहीं चुना गया था?
यदि trusted setup करने वाला व्यक्ति भी प्रदान करता है, तो हम यह मान्य (validate) कर सकते हैं कि structured reference string वास्तव में की क्रमिक घातें (successive powers) हैं।
जहाँ एक bilinear pairing है। सहज रूप से (intuitively), हम बाईं ओर और दाईं ओर की गणना कर रहे हैं।
यह मान्य करने के लिए कि और में समान डिस्क्रीट लॉगरिदम (discrete logarithms) हैं (यह माना जाता है कि , है), हम जाँच कर सकते हैं कि:
एक मल्टीपार्टी कंप्यूटेशन (multiparty computation) के हिस्से के रूप में एक structured reference string जनरेट करना
यह एक अच्छी ट्रस्ट धारणा (trust assumption) नहीं है कि structured reference string जनरेट करने वाले व्यक्ति ने वास्तव में को डिलीट कर दिया है।
अब हम कई पक्षों (multiple parties) के लिए मिलकर structured reference string बनाने के एल्गोरिथम का वर्णन करते हैं, और जब तक उनमें से कोई एक भी ईमानदार (honest) है (यानी को डिलीट कर देता है), तब तक structured reference string के डिस्क्रीट लॉग्स (discrete logs) अज्ञात रहेंगे।
Alice structured reference string जनरेट करती है और इसे Bob को पास कर देती है।
Bob पिछले अनुभाग की जाँचों (checks) का उपयोग करके यह सत्यापित करता है कि SRS “सही” है। फिर Bob अपना स्वयं का गुप्त पैरामीटर चुनता है और गणना करता है:
ध्यान दें कि srs के डिस्क्रीट लॉग्स अब यह हैं:
यदि Alice या Bob दोनों में से कोई भी अपना या डिलीट कर देता है, तो अंतिम srs के डिस्क्रीट लॉग्स पुनर्प्राप्त (recover) नहीं किए जा सकते।
बेशक, हमें प्रतिभागियों की संख्या दो तक सीमित करने की आवश्यकता नहीं है, हम जितने चाहें उतने प्रतिभागी रख सकते हैं।
इस मल्टीपार्टी कंप्यूटेशन को अक्सर अनौपचारिक रूप से powers of tau ceremony कहा जाता है।
ZK-SNARKs में trusted setup का उपयोग
एक structured reference string पर किसी बहुपद का मूल्यांकन करने से सत्यापनकर्ता (verifier) को बहुपद के बारे में जानकारी का पता नहीं चलता है, और प्रमाणकर्ता (prover) को यह नहीं पता होता है कि वे किस बिंदु पर मूल्यांकन कर रहे हैं। हम बाद में देखेंगे कि यह योजना (scheme) प्रमाणकर्ता को धोखा देने से रोकने में मदद करती है और उनके विटनेस (witness) को जीरो नॉलेज (zero knowledge) रखने में मदद करती है।