मान लीजिए कि पैगी को रहस्य उजागर किए बिना विक्टर को यह साबित करने की जरूरत है कि उसके पास एक रहस्य है। क्या वह ऐसा इस तरह कर सकती है जिससे विक्टर को यकीन हो जाए कि वह वास्तव में रहस्य जानता है? यह सबसे शक्तिशाली क्रिप्टोग्राफ़िक प्रक्रियाओं में से एक के मूल में प्रश्न है जिसे हम पहचान प्रणालियों में नियोजित कर सकते हैं: शून्य-ज्ञान प्रमाण (जेडकेपी) ।
उदाहरण के लिए मान लीजिए कि पैगी के पास एक डिजिटल ड्राइवर का लाइसेंस है और वह बारटेंडर विक्टर को यह साबित करना चाहती है कि वह अपना ड्राइवर लाइसेंस सौंपे बिना या यहां तक कि उसे अपनी जन्मतिथि दिखाए बिना 21 वर्ष से अधिक की है। ZKPs पेगी को यह साबित करने की अनुमति देता है कि उसका ड्राइविंग लाइसेंस कहता है कि वह कम से कम 21 वर्ष की है, जिससे पेगी को कुछ और बताए बिना विक्टर को यकीन हो जाए (यानी, कोई अतिरिक्त ज्ञान नहीं है)।
इस समस्या की खोज सबसे पहले 1980 के दशक में सूचना रिसाव से निपटने के एक तरीके के रूप में एमआईटी शोधकर्ताओं शफी गोल्डवेसर, सिल्वियो मिकाली और चार्ल्स रैकॉफ द्वारा की गई थी। लक्ष्य यह है कि सत्यापनकर्ता, विक्टर, कहावतकर्ता, पेग्गी के बारे में अतिरिक्त जानकारी की मात्रा को कम कर सके।
यह समझने का एक तरीका है कि ZKPs कैसे काम करते हैं, अलीबाबा की गुफा की कहानी है, जिसे पहली बार क्रिप्टोग्राफर क्विस्क्वाटर, गुइलौ और बर्सन1 द्वारा प्रकाशित किया गया था। निम्नलिखित चित्र एक चित्रण प्रदान करता है।
अलीबाबा की गुफा में ए और बी नामक दो मार्ग हैं, जो प्रवेश द्वार से जुड़े एक मार्ग को विभाजित करते हैं। पैगी के पास एक गुप्त कोड है जो उसे ए और बी को जोड़ने वाले दरवाजे को अनलॉक करने की अनुमति देता है। विक्टर कोड खरीदना चाहता है लेकिन वह तब तक भुगतान नहीं करेगा जब तक उसे यकीन नहीं हो जाता कि पैगी को यह पता है। पेगी इसे विक्टर के साथ तब तक साझा नहीं करेगी जब तक वह भुगतान नहीं कर देता।
पैगी के लिए यह साबित करने के लिए एल्गोरिदम कि वह कोड जानती है, इस प्रकार आगे बढ़ती है:
यदि पेगी हमेशा विक्टर द्वारा चुने गए किसी भी रास्ते से वापस आ सकती है, तो इस बात की संभावना बढ़ जाती है कि पेगी को वास्तव में कोड पता है। 20 कोशिशों के बाद, लाखों में एक से भी कम मौका है कि पैगी बस अनुमान लगा रही है कि विक्टर किस पत्र पर कॉल करेगा। यह एक संभाव्य प्रमाण है कि पैगी को रहस्य पता है।
यह एल्गोरिदम न केवल पैगी को विक्टर को यह विश्वास दिलाने की अनुमति देता है कि वह कोड जानती है, बल्कि यह इसे इस तरह से करता है कि यह सुनिश्चित करता है कि विक्टर किसी और को यह विश्वास नहीं दिला सके कि पेगी को कोड पता है। मान लीजिए विक्टर पूरे लेन-देन को रिकॉर्ड करता है। केवल एक चीज जिसे एक पर्यवेक्षक देखता है वह है विक्टर को पत्र बुलाना और पैगी को सही सुरंग से बाहर आना। पर्यवेक्षक निश्चित नहीं हो सकता कि विक्टर और पैगी पर्यवेक्षकों को मूर्ख बनाने के लिए पहले से पत्रों के अनुक्रम पर सहमत नहीं थे।
ध्यान दें कि यह संपत्ति उच्च-एन्ट्रॉपी बीज के साथ एक अच्छे छद्म-यादृच्छिक संख्या जनरेटर का उपयोग करके एल्गोरिदम पर निर्भर करती है ताकि पैगी और तीसरे पक्ष के पर्यवेक्षक विक्टर की पसंद की भविष्यवाणी न कर सकें।
इस प्रकार, जबकि पैगी विक्टर से इनकार नहीं कर सकती कि वह रहस्य जानती है, वह इस बात से इनकार कर सकती है कि वह अन्य तीसरे पक्षों को रहस्य जानती है। यह सुनिश्चित करता है कि जो कुछ भी वह विक्टर को साबित करती है वह उनके बीच रहता है और विक्टर इसे लीक नहीं कर सकता है - कम से कम क्रिप्टोग्राफ़िक तरीके से जो साबित करता है कि यह पैगी से आया है। पैगी अपने रहस्य और इस तथ्य को कि वह इसे जानती है, दोनों पर नियंत्रण रखती है।
जब हम "शून्य ज्ञान" कहते हैं और विक्टर के बारे में बात करते हैं कि वह प्रश्न में दिए गए प्रस्ताव से परे कुछ भी नहीं सीख रहा है, तो यह पूरी तरह से सच नहीं है। अलीबाबा की गुफा में, पैगी शून्य-ज्ञान में साबित करती है कि वह रहस्य जानती है। लेकिन विक्टर को पेगी के बारे में कई अन्य बातें पता चलती हैं जिनके बारे में ZKPs कुछ नहीं कर सकते। उदाहरण के लिए, विक्टर जानता है कि पैगी उसे सुन सकती है, उसकी भाषा बोल सकती है, चल सकती है और सहयोगात्मक है। वह गुफा के बारे में बातें भी जान सकता है, जैसे दरवाज़ा खोलने में लगभग कितना समय लगता है। पैगी को विक्टर के बारे में ऐसी ही बातें पता चलती हैं। तो, वास्तविकता यह है कि प्रमाण लगभग शून्य ज्ञान है न कि पूर्णतः शून्य ज्ञान।
अलीबाबा की गुफा का उदाहरण ZKPs का एक बहुत ही विशिष्ट उपयोग है, जिसे ज्ञान का शून्य-ज्ञान प्रमाण कहा जाता है। पैगी साबित कर रही है कि वह कुछ जानती है (या उसके पास कुछ है)। आम तौर पर, पैगी विक्टर के सामने कई तथ्य साबित करना चाह सकती है। इनमें प्रस्तावात्मक वाक्यांश या मूल्य भी शामिल हो सकते हैं। ZKPs भी ऐसा कर सकते हैं.
यह समझने के लिए कि हम शून्य ज्ञान में प्रस्तावों को कैसे सिद्ध कर सकते हैं, एक अलग उदाहरण पर विचार करें, जिसे कभी-कभी समाजवादी करोड़पति समस्या भी कहा जाता है। मान लीजिए पैगी और विक्टर जानना चाहते हैं कि क्या उन्हें उचित वेतन दिया जा रहा है। विशेष रूप से, वे जानना चाहते हैं कि क्या उन्हें समान राशि का भुगतान किया जाता है, लेकिन वे एक-दूसरे या यहां तक कि किसी विश्वसनीय तीसरे पक्ष को अपनी विशिष्ट प्रति घंटा दर का खुलासा नहीं करना चाहते हैं। इस उदाहरण में, पैगी यह साबित नहीं कर रही है कि वह कोई रहस्य जानती है, बल्कि, वह एक समानता (या असमानता) प्रस्ताव साबित कर रही है।
सरलता के लिए, मान लें कि पैगी और विक्टर को $10, $20, $30, या $40 प्रति घंटे में से एक का भुगतान किया जा रहा है।
एल्गोरिथ्म इस तरह काम करता है:
इसे विस्मृति स्थानांतरण कहा जाता है और यह प्रस्ताव VictorSalary = PeggySalary
शून्य ज्ञान में सही या गलत साबित करता है (यानी, किसी भी अन्य जानकारी का खुलासा किए बिना)।
इसे काम करने के लिए, पैगी और विक्टर को भरोसा करना होगा कि दूसरा आगे आएगा और अपना वास्तविक वेतन बताएगा। विक्टर को यह भरोसा करने की ज़रूरत है कि पैगी तीन अन्य चाबियाँ फेंक देगी। पैगी को भरोसा होना चाहिए कि विक्टर बक्सों में "+" लिखी केवल एक पर्ची डालेगा।
ठीक उसी तरह जैसे डिजिटल प्रमाणपत्रों को अकेले स्व-जारी किए गए प्रमाणपत्रों से परे विश्वास स्थापित करने के लिए PKI की आवश्यकता होती है, ZKPs एक ऐसी प्रणाली में अधिक शक्तिशाली हैं जो पैगी और विक्टर को दूसरों द्वारा उनके बारे में कही गई बातों से तथ्यों को साबित करने की अनुमति देती है, न कि केवल वे जिसके बारे में कहते हैं खुद। उदाहरण के लिए, पैगी और विक्टर द्वारा स्वयं अपने वेतन का दावा करने के बजाय, मान लीजिए कि वे अपना दावा करने के लिए मानव संसाधन विभाग से एक हस्ताक्षरित दस्तावेज़ पर भरोसा कर सकते हैं ताकि दोनों को पता चले कि दूसरा अपना वास्तविक वेतन बता रहा है। सत्यापन योग्य क्रेडेंशियल कई अलग-अलग तथ्यों को अकेले या एक साथ साबित करने के लिए ZKPs का उपयोग करने के लिए एक प्रणाली प्रदान करते हैं, जो विधि में विश्वास और डेटा में विश्वास प्रदान करते हैं।
पिछले उदाहरणों में, पैगी बातचीत की एक श्रृंखला के माध्यम से विक्टर को चीजें साबित करने में सक्षम थी। ZKPs के व्यावहारिक होने के लिए, प्रूवर और सत्यापनकर्ता के बीच बातचीत न्यूनतम होनी चाहिए। सौभाग्य से, SNARK नामक तकनीक गैर-संवादात्मक शून्य-ज्ञान प्रमाण की अनुमति देती है।
SNARKs में निम्नलिखित गुण हैं (जहां से उन्हें अपना नाम मिला):
आप आम तौर पर सामने की ओर "zk" (शून्य-ज्ञान के लिए) देखेंगे, जो यह दर्शाता है कि इस प्रक्रिया के दौरान, सत्यापनकर्ता सिद्ध किए जा रहे तथ्यों के अलावा कुछ भी नहीं सीखता है।
zkSNARKs के अंतर्निहित गणित में उच्च-डिग्री बहुपदों पर होमोमोर्फिक गणना शामिल है। लेकिन हम समझ सकते हैं कि zkSNARKs अंतर्निहित गणित को जाने बिना कैसे काम करते हैं जो यह सुनिश्चित करता है कि वे सही हैं। यदि आप गणित के बारे में अधिक विवरण चाहते हैं, तो मैं क्रिश्चियन रीटविस्नर के "zkSNARKs in a Nutshell" की अनुशंसा करता हूं।
एक सरल उदाहरण के रूप में, मान लीजिए कि विक्टर को कुछ मूल्य का sha256
हैश, H
दिया गया है। पैगी यह साबित करना चाहती है कि वह s
मान इस प्रकार जानती है कि sha265(s) == H
विक्टर को s
बताए बिना। हम एक फ़ंक्शन C
परिभाषित कर सकते हैं जो संबंध को दर्शाता है:
C(x, w) = ( sha256(w) == x )
तो, C(H, s) == true
, जबकि w
के लिए अन्य मान false
लौटाएंगे।
zkSNARK की गणना के लिए तीन फ़ंक्शन G
, P
, और V
की आवश्यकता होती है। G
कुंजी जनरेटर है जो lambda
और फ़ंक्शन C
नामक एक गुप्त पैरामीटर लेता है और दो सार्वजनिक कुंजी, साबित कुंजी pk
और सत्यापन कुंजी vk
उत्पन्न करता है। किसी दिए गए फ़ंक्शन C
के लिए उन्हें केवल एक बार जेनरेट करने की आवश्यकता होती है। इस चरण के बाद पैरामीटर lambda
नष्ट कर दिया जाना चाहिए क्योंकि इसकी दोबारा आवश्यकता नहीं है और जिसके पास भी यह है वह नकली सबूत उत्पन्न कर सकता है।
प्रोवर फ़ंक्शन P
इनपुट के रूप में सिद्ध कुंजी pk
, एक सार्वजनिक इनपुट x
और एक निजी (गुप्त) गवाह w
लेता है। P(pk,x,w)
को निष्पादित करने का परिणाम एक प्रमाण है, prf
, कि कहावत w
के लिए एक मान जानता है जो C
संतुष्ट करता है।
सत्यापनकर्ता फ़ंक्शन V
V(vk, x, prf)
की गणना करता है जो सत्य है यदि प्रमाण prf
सही है और अन्यथा गलत है।
पैगी और विक्टर के पास लौटकर, विक्टर एक फ़ंक्शन C
चुनता है जो दर्शाता है कि वह पैगी को क्या साबित करना चाहता है, एक यादृच्छिक संख्या lambda
बनाता है, और साबित करने और सत्यापन कुंजी उत्पन्न करने के लिए G
चलाता है:
(pk, vk) = G(C, lambda)
पैगी को lambda
का मूल्य नहीं सीखना चाहिए। विक्टर पेग्गी के साथ C
, pk
, और vk
साझा करता है।
पैगी यह साबित करना चाहती है कि वह वह s
जानती है जो x = H
के लिए C
संतुष्ट करता है। वह इनपुट के रूप में इन मानों का उपयोग करके प्रूविंग फ़ंक्शन P
चलाती है:
prf = P(pk, H, s)
पैगी विक्टर को प्रमाण prf
प्रस्तुत करती है जो सत्यापन कार्य चलाता है:
V(vk, H, prf)
यदि परिणाम सत्य है, तो विक्टर को आश्वस्त किया जा सकता है कि पैगी को s
का मान पता है।
फ़ंक्शन C
हैश तक सीमित करने की आवश्यकता नहीं है जैसा कि हमने इस उदाहरण में किया है। अंतर्निहित गणित की सीमा के भीतर, C
काफी जटिल हो सकता है और इसमें जितने भी मूल्य शामिल होंगे, विक्टर चाहेंगे कि पेगी एक ही समय में साबित करे।
यह लेख ओ'रेली मीडिया द्वारा प्रकाशित मेरी पुस्तक लर्निंग डिजिटल आइडेंटिटी का एक अंश है।