थ्रेशोल्ड होमोमॉर्फिक एन्क्रिप्शन DAVINCI मतदान प्रोटोकॉल का एक अहम बुनियादी हिस्सा है। इससे यह पक्का होता है कि कोई भी एक पक्ष अकेले वोट के परिणाम डिक्रिप्ट न कर सके: डिक्रिप्शन कुंजी कई स्वतंत्र नोड में बँटी रहती है, और परिणाम तभी डिक्रिप्ट हो पाते हैं जब उनमें से पर्याप्त नोड मिलकर काम करें।
लेकिन डिक्रिप्शन से पहले उन नोड को मिलकर वह कुंजी बनानी होती है। इसी प्रक्रिया को Distributed Key Generation (DKG) कहते हैं। हम DKG का ऐसा रूप बना रहे हैं जो खास तौर पर blockchain के माहौल के लिए डिज़ाइन किया गया है, जहाँ हर प्रतिभागी को on-chain स्वीकार होने से पहले यह साबित करना होता है कि उसका योगदान सही है।
DAVINCI मतदान प्रक्रिया की गोपनीयता थ्रेशोल्ड होमोमॉर्फिक एन्क्रिप्शन स्कीम से पक्की करता है। खास तौर पर, elliptic curve पर threshold ElGamal cryptosystem इस्तेमाल होता है। एन्क्रिप्टेड संदेशों को आपस में मिलाकर मूल plaintext के योग का एन्क्रिप्शन पाया जा सकता है, और इसके लिए उन्हें डिक्रिप्ट करने की ज़रूरत नहीं पड़ती। इस स्कीम से किसी खास ciphertext को डिक्रिप्ट किया जा सकता है और थ्रेशोल्ड गुप्त कुंजी कभी उजागर नहीं होती, यानी आखिरी गिनती डिक्रिप्ट हो जाती है जबकि हर मतपत्र गोपनीय बना रहता है।
प्रोटोकॉल का खाका¶
NI-DKG एक blockchain-नेटिव प्रोटोकॉल है, जिसे पूरी तरह नॉन-इंटरैक्टिव रखने के लिए इस तरह बनाया गया है कि सही होने की जाँच जमा करने के वक्त ही ZK प्रमाण से हो जाए।
शिकायत के चरणों और विवाद के दौरों के बजाय, हर प्रतिभागी को जमा करते ही यह साबित करना होता है कि उसका योगदान सही है। स्मार्ट कॉन्ट्रैक्ट प्रमाण की जाँच तुरंत करता है: वैध सबमिशन स्वीकार होते हैं, गलत वहीं खारिज हो जाते हैं। न कोई आगे-पीछे की बातचीत होती है, न बाद में चुनौती देने की गुंजाइश। और चूँकि पूरा ट्रांसक्रिप्ट on-chain दर्ज रहता है, इसलिए हमें सार्वजनिक सत्यापन क्षमता भी मिलती है।
डिज़ाइन से ही नॉन-इंटरैक्टिव होने के अलावा, NI-DKG प्रोटोकॉल व्यवहार में संचालन के स्तर पर एसिंक्रोनस भी है। इसके चरण नाज़ुक जवाबी समय-सीमाओं के बजाय ब्लॉक नंबर से तय होते हैं।
यह क्यों मायने रखता है¶
आज के blockchain-आधारित DKG प्रोटोकॉल विवाद के चरणों पर टिके हैं: अगर किसी नोड को खराब डेटा मिले, तो वह on-chain शिकायत दर्ज कराता है, और आरोपित को तय समय-सीमा में जवाब देना होता है। इससे और दौर जुड़ते हैं, gas की लागत बढ़ती है और हमले की सतह चौड़ी होती है: ईमानदार नोड सिर्फ़ देर से जवाब देने पर बाहर हो सकते हैं, और बदनीयत लोग प्रक्रिया अटकाने के लिए बेमतलब शिकायतें दर्ज करा सकते हैं। पूरी तरह एसिंक्रोनस DKG पर हाल के अकादमिक काम ने प्रभावशाली सैद्धांतिक नतीजे दिए हैं, लेकिन वे प्रोटोकॉल बहुत पेचीदा हैं।
सबसे अहम बात, NI-DKG पूरी तरह जाने-पहचाने मानक क्रिप्टोग्राफ़िक प्रिमिटिव से बना है। हम कोई नई धारणा नहीं जोड़ते, बल्कि जमी-जमाई तकनीकों को ज़्यादा व्यावहारिक तरीके से इस्तेमाल करते हैं। यह प्रोटोकॉल एक व्यावहारिक और ज़मीनी बीच का रास्ता अपनाता है: पूरी तरह एसिंक्रोनस रचनाओं से सरल, फिर भी सीधे-सादे सिंक्रोनस स्कीमों से ज़्यादा मज़बूत। यह अपने नीचे चल रही blockchain का टाइमिंग मॉडल अपनाता है, जो on-chain एप्लिकेशन के लिए स्वाभाविक है, और उसके साथ पहले से तैयार zero-knowledge प्रमाण जोड़कर शिकायत की इंटरैक्टिव प्रक्रिया हटा देता है, जो मौजूदा ढाँचों की एक आम कमज़ोरी है। नतीजा एक ज़्यादा सुरक्षित प्रोटोकॉल है, जो असल दुनिया में इस्तेमाल के लिए खूब जँचता है।
NI-DKG प्रोटोकॉल के चरण¶
जनरेशन
- शुरुआत: आयोजक पैरामीटर
(n, t) पोस्ट करता है।
- हाज़िरी: पात्र नोड अपनी तैयारी का संकेत देते हैं (चाहें तो stake के साथ)।
- नोड का चयन: chain की रैंडमनेस से
n नोड चुने जाते हैं, और अगर नीति पूरी न हो तो प्रक्रिया रोक दी जाती है।
- मुख्य DKG प्रक्रिया: हर नोड polynomial कमिटमेंट और एन्क्रिप्टेड कुंजी-टुकड़े पोस्ट करता है, साथ में सही होने का ZK प्रमाण।
- समापन: आयोजक सार्वजनिक कुंजी
PK और निजी टुकड़ों के कमिटमेंट निकालता है, और इन्हें सही होने के ZK प्रमाण के साथ blockchain पर पोस्ट करता है।

डिक्रिप्शन
- ciphertext का प्रकाशन: एक ciphertext
(C1, C2) राउंड की पहचान के साथ प्रकाशित होता है। नोड को पता रहता है कि ऐसे ciphertext कब प्रकाशित होते हैं।
- आंशिक डिक्रिप्शन का प्रकाशन: नोड
C1 का आंशिक डिक्रिप्शन प्रकाशित करते हैं, साथ में discrete logarithm की बराबरी का प्रमाण।
- डिक्रिप्शन: जब
t या उससे ज़्यादा आंशिक डिक्रिप्शन प्रकाशित हो जाएँ, तो संदेश वापस पाने के लिए स्मार्ट कॉन्ट्रैक्ट कॉल किया जा सकता है।

कुंजी का वैकल्पिक खुलासा
ध्यान दें कि कुंजी का खुलासा DAVINCI प्रोटोकॉल का हिस्सा नहीं है। आम तौर पर इसकी ज़रूरत नहीं पड़ती, क्योंकि गुप्त कुंजी प्रकाशित किए बिना भी डिक्रिप्शन चरण को साबित किया जा सकता है।
- शुरुआत: गुप्त कुंजी के खुलासे का अनुरोध आयोजक भेज सकता है या यह अपने आप शुरू हो सकता है, बशर्ते नीति के पैरामीटर इसकी इजाज़त दें।
- गुप्त कुंजी के टुकड़े प्रकाशित करना: हर प्रतिभागी नोड गुप्त कुंजी का अपना टुकड़ा प्रकाशित करता है।
- गुप्त कुंजी निकालना: जब
t या उससे ज़्यादा मान जमा हो जाएँ, तो कोई भी गुप्त कुंजी निकाल सकता है।

भीतर क्या चलता है¶
यह प्रोटोकॉल पूरे जीवनचक्र को समेटता है: कुंजी जनरेशन, थ्रेशोल्ड डिक्रिप्शन और कुंजी का वैकल्पिक खुलासा। हर चरण पर स्मार्ट कॉन्ट्रैक्ट तालमेल और सत्यापन की परत का काम करता है, जबकि zero-knowledge प्रमाण भारी क्रिप्टोग्राफ़िक जाँचें off-chain ले जाते हैं। ज़िम्मेदारियों का बँटवारा साफ़ है: blockchain क्रम और सार्वजनिक रिकॉर्ड संभालती है। प्रमाण प्रणाली सही होने की गारंटी देती है।
इसके क्रिप्टोग्राफ़िक बुनियादी हिस्से ये हैं:
- Shamir + Feldman VSS: सार्वजनिक coefficient कमिटमेंट वाले polynomial।
- टुकड़े एन्क्रिप्ट करने के लिए Hashed ElGamal।
- Chaum-Pedersen DLOG बराबरी का प्रमाण, जो आंशिक डिक्रिप्शन के लिए इस्तेमाल होता है।
- on-chain सत्यापन के लिए zk-SNARKs (Groth16, FFLONK, …)।
सर्किट:
| चरण |
मकसद |
आउटपुट / क्या साबित होता है |
| जनरेशन चरण 4: मुख्य DKG |
हर प्रतिभागी के योगदान का प्रमाण |
हर प्रतिभागी का DKG योगदान वैध है। |
| जनरेशन चरण 5: गुप्त टुकड़े और सार्वजनिक कुंजी निकालना |
समापन |
आखिरी सार्वजनिक कुंजी और टुकड़ों के कमिटमेंट सही तरीके से निकाले गए हैं। |
| डिक्रिप्शन चरण 2: आंशिक डिक्रिप्शन का प्रकाशन |
आंशिक डिक्रिप्शन + DLEQ प्रमाण (हर नोड के लिए) |
हर नोड का आंशिक डिक्रिप्शन सही है और उसके साथ सही होने का DLEQ प्रमाण रहता है। |
| डिक्रिप्शन चरण 3: डिक्रिप्शन |
आंशिक डिक्रिप्शन जोड़कर → plaintext |
वैध आंशिक डिक्रिप्शन जोड़ने पर सही plaintext मिलता है। |
| कुंजी का वैकल्पिक खुलासा, चरण 2: गुप्त कुंजी के टुकड़े देना |
टुकड़े बनाम कमिटमेंट की जाँच (हर नोड के लिए) |
हर नोड साबित करता है कि उसका उजागर किया टुकड़ा पहले प्रकाशित कमिटमेंट से मेल खाता है। |
| कुंजी का वैकल्पिक खुलासा, चरण 3: गुप्त कुंजी निकालना |
t टुकड़ों से गुप्त कुंजी दोबारा बनाना |
थ्रेशोल्ड (t) टुकड़ों से गुप्त कुंजी दोबारा बनाना सही है। |
सीमाएँ¶
चूँकि चरण ब्लॉक नंबर से बँधे हैं, इसलिए प्रोटोकॉल अपनी host chain की आंशिक सिंक्रोनी अपना लेता है। on-chain सत्यापन भी स्केलिंग की पाबंदियाँ लगाता है, फिर भी पेपर में बताई गई इनपुट घटाने की रणनीतियों के साथ हम व्यावहारिक तौर पर 40-50 प्रतिभागियों की समितियाँ संभाल सकते हैं। ज़्यादातर व्यावहारिक इस्तेमाल के लिए जितना दायरा चाहिए, यह उससे कहीं ज़्यादा है।
हालाँकि यह DKG लचीला है और दूसरी एन्क्रिप्शन स्कीमों के मुताबिक ढाला जा सकता है, BN254 पर Groth16 इस्तेमाल करने का मतलब है कि सबसे कारगर विकल्प वही एन्क्रिप्शन स्कीम है जो BN254 scalar field पर बनी हो, यानी BabyJubJub curve वाली।
हम कहाँ तक पहुँचे¶
प्रोटोकॉल का डिज़ाइन पूरा हो चुका है। एक ड्राफ़्ट रिसर्च पेपर पूरी रचना बताता है, सर्किट का विस्तृत ब्यौरा देता है और on-chain लागत घटाने की रणनीतियों का विश्लेषण करता है। अगला कदम तय EVM चेन पर इंप्लीमेंटेशन और बेंचमार्किंग है।
बुनियादी स्कीमा जाँचने के लिए एक Golang PoC यहाँ है।
पूरा पेपर यहाँ उपलब्ध है।
यह open source है। अगर आप योगदान देना चाहें, तो हमसे संपर्क करें, चाहे डेवलपमेंट से, विचारों से, संसाधनों से या आर्थिक मदद से।
संपर्क करें