इनर प्रोडक्ट आर्गुमेंट्स के संदर्भ में एक रेंज प्रूफ (range proof) यह प्रमाण है कि स्केलर v को V पर कमिट किया गया है और v किसी गैर-ऋणात्मक पूर्णांक n के लिए 2n से कम है।
यह लेख दिखाता है कि Bulletproofs पेपर इस तरह का प्रमाण कैसे बनाता है। इसका उच्च-स्तरीय विचार यह है कि यदि हम यह साबित कर सकें कि एक वेक्टर aL में केवल एक और शून्य (ones and zeros) हैं और aL, v का बाइनरी रिप्रजेंटेशन है, तो v निश्चित रूप से 2n से कम होना चाहिए। यह यह कहने के समान है कि 8 बिट अनसाइन्ड इंटीजर (unsigned integer) में फिट होने वाली संख्या 256 से कम होनी चाहिए।
रेंज प्रूफ के लिए Bulletproofs का उपयोग करने का फायदा यह है कि बिना arithmetic circuit की आवश्यकता के सीधे रेंज प्रूफ का निर्माण किया जा सकता है।
Monero uses Bulletproof Range Proofs (यहाँ प्रस्तुत एल्गोरिथम) यह सुनिश्चित करने के लिए कि ट्रांज़ैक्शन का योग ऋणात्मक नहीं है (एक finite field में, ऋणात्मक संख्याएँ वे तत्व हैं जो p/2 से अधिक हैं क्योंकि वे p/2 से कम या उसके बराबर के तत्वों के एडिटिव इन्वर्स (additive inverses) हैं जहाँ p फील्ड ऑर्डर है)।
y−n एक n डायमेंशनल वेक्टर [1,y−1,y−2,...,y−(n−1)] है।
ध्यान दें कि yn∘y−n=1n है।
Range proof overview
यह साबित करने के लिए कि V एक ऐसे स्केलर का कमिटमेंट है जिसका मान 2n से कम है, निम्नलिखित साबित करने की आवश्यकता है:
aL बाइनरी है (केवल 0 और 1 मान रखता है)।
इनर प्रोडक्ट ⟨aL,2n⟩=v है।
दूसरे बिंदु को साबित करना आसान है, हम एक सामान्य इनर प्रोडक्ट प्रूफ करते हैं और फिर प्रकट करते हैं कि 2n कमिटमेंट के वेक्टर्स में से एक है – या वेरिफायर (verifier) से स्वयं 2n का कमिटमेंट बनाने के लिए कहते हैं। हालांकि, बिना एरिथमेटिक सर्किट के यह साबित करने के लिए कि aL बाइनरी है, कुछ अलजेब्रिक ट्रिक्स (algebraic tricks) की आवश्यकता होती है।
Four useful tricks
Bulletproofs पेपर स्पष्ट रूप से चार अलजेब्रिक ट्रिक्स का उपयोग करता है जिन्हें सीधे रेंज प्रूफ एल्गोरिथम देखने से पहले स्पष्ट रूप से समझना सबसे अच्छा है।
1. Proving aL is binary
यह कथन कि aL बाइनरी है, निम्नलिखित दो दावों के समतुल्य है:
aR=aL−1n
aL∘aR=0n
उदाहरण के लिए, यदि aL=[1,0,0,1] है तो aR=[0,−1,−1,0] होगा।
इस मामले में, aL∘aR=0n है क्योंकि
[1,0,0,1]∘[0,−1,−1,0]=[0,0,0,0]=0n
अब एक ऐसे मामले पर विचार करें जहाँ aL बाइनरी नहीं है, उदाहरण के लिए [2,1,0,0]। aR, [1,0,−1,−1] होगा। aL और aR का हैडामर्ड प्रोडक्ट (Hadamard product) [2,0,0,0]=0n होगा।
अधिक सामान्यतः, यदि aL में कोई गैर-बाइनरी प्रविष्टि है, तो उस प्रविष्टि से 1 घटाया जाएगा, और aR में परिणामी प्रविष्टि गैर-शून्य होगी। जब हैडामर्ड प्रोडक्ट की गणना की जाती है, तो उस विशेष इंडेक्स पर, aL और aR दोनों गैर-शून्य होंगे और प्रोडक्ट गैर-शून्य होगा, जिसका अर्थ है aL∘aR=0n।
हालांकि, यदि aL में एक विशेष प्रविष्टि 1 है, तो उस इंडेक्स पर aR, 0 होगा ताकि उस इंडेक्स पर हैडामर्ड प्रोडक्ट भी शून्य हो जाए।
अंत में, यदि aL में एक विशेष प्रविष्टि 0 है, तो उस इंडेक्स पर aR, −1 होगा और उनका एलिमेंट-वाइज़ प्रोडक्ट उस इंडेक्स पर भी शून्य ही रहेगा।
इसलिए, यदि aL बाइनरी है और aR की गणना aR=aL−1 के रूप में की जाती है, तो aL∘aR=0n होगा।
2. Proving a vector is all zero
मान लीजिए कि हम यह साबित करना चाहते हैं कि पेडरसन कमिटमेंट (Pedersen commitment) A एक शून्य वेक्टर रखता है। हम पेडरसन कमिटमेंट A=⟨a,G⟩+αB बनाते हैं और एक वेरिफायर को यह साबित करना चाहते हैं कि a=0n है।
ऐसा लग सकता है कि केवल ब्लाइंडिंग टर्म (blinding term) α भेजना पर्याप्त है, लेकिन हमारे समाधान को अधिक कंपोजेबल (composable) बनाने के लिए, हम ब्लाइंडिंग टर्म को प्रकट नहीं करना चाहते हैं क्योंकि यह हमारे द्वारा बनाए गए अन्य कमिटमेंट्स को प्रभावित कर सकता है।
इसके बजाय, प्रूवर (prover) A को वेरिफायर को भेजता है, और वेरिफायर रैंडम मानों से भरे एक वेक्टर r के साथ प्रतिक्रिया देता है। प्रूवर को अब यह साबित करना होगा कि
⟨a,r⟩=0
ध्यान दें कि यह एक प्रॉबेबिलिस्टिक टेस्ट (probabilistic test) है। यह नगण्य संभावना (negligible probability) के साथ संभव है कि a=0n के लिए ⟨a,r⟩=0 हो, लेकिन प्रूवर के लिए ऐसा a बनाना संभव नहीं है क्योंकि वे पहले से नहीं जानते कि r क्या होगा।
हालांकि, r को ट्रांसमिट करने के लिए O(n) कम्युनिकेशन ओवरहेड की आवश्यकता होती है, इसलिए वेरिफायर केवल एक सिंगल रैंडम एलिमेंट y भेजता है और प्रूवर yn की गणना करता है और yn का उपयोग रैंडम वेक्टर के रूप में करता है।
तब, प्रूवर साबित करता है कि ⟨a,yn⟩=0 है।
3. Proving an inner product is of the form ⟨aL,aR∘yn⟩ where y is chosen by the verifier and the prover computes yn
हमारे पास अभी तक यह साबित करने का कोई तंत्र नहीं है कि aL∘aR=0n, क्योंकि यह एक हैडामर्ड प्रोडक्ट है, इनर प्रोडक्ट नहीं। हालांकि, यह कहना कि वेक्टर aL∘aR पूरी तरह से 0n है, यह कहने के समान है कि ⟨aL∘aR,yn⟩=0 है। इनर प्रोडक्ट नियमों के अनुसार, हम aR को इनर प्रोडक्ट के दूसरी तरफ ले जा सकते हैं और अब हमारे पास ⟨aL,aR∘yn⟩=0 है।
वेरिफायर को aL और aR के कमिटमेंट्स प्राप्त होंगे, न कि aR∘yn के। यह वेरिफायर पर निर्भर करेगा कि वह aR∘yn का एक कमिटमेंट बनाए ताकि उन्हें यकीन हो जाए कि प्रूवर ने इनर प्रोडक्ट में दूसरे वेक्टर के रूप में aR∘yn का उपयोग किया है।
हम जिस मुख्य ट्रिक पर निर्भर करते हैं वह यह है कि प्रूवर अपने वेक्टर्स को कमिट करने के लिए बेसिस वेक्टर्स (basis vectors) G और H का उपयोग करता है, लेकिन वेरिफायर G और H∘y−n का उपयोग करता है।
जब प्रूवर मूल्यांकन ru भेजता है, तो प्रूवर को यह सुनिश्चित करना होगा कि yn टर्म्स वेरिफायर के बेसिस वेक्टर y−n∘H में y−n के साथ रद्द (cancel) हो जाएंगे।
विशेष रूप से, प्रूवर निम्नलिखित कमिटमेंट्स का निर्माण करता है:
AS=⟨aL,G⟩+⟨aR,H⟩+αB=⟨sL,G⟩+⟨sR,H⟩+βB
और वेरिफायर को (A,S) भेजता है। V को कमिट करके भेजने की कोई आवश्यकता नहीं है क्योंकि इस मामले में यह शून्य है।
प्रूवर के पॉलिनॉमियल्स (polynomials) होंगे:
l(x)r(x)=aL+sLx=aR∘yn+sR∘ynx
महत्वपूर्ण रूप से, प्रूवर ने sR को yn से हैडामर्ड गुणा किया है। पहले, r(x) की गणना r(x)=aR∘yn+sRx (बिना yn∘sR के) के रूप में की जाती थी। यह बाद में सभी yn टर्म्स को रद्द करने की अनुमति देगा जब वेरिफायर कमिटमेंट ⟨ru,y−n∘H⟩ की गणना करेगा। आंतरिक रूप से (Under the hood), ru, (aR+sRu)∘yn है, इसलिए जब वेरिफायर ⟨(aR+sRu)∘yn,y−n∘H⟩ की गणना करेगा तो yn रद्द हो जाएगा, यानी:
हालांकि, प्रूवर अभी तक l(x) या r(x) की गणना नहीं कर सकता है क्योंकि वेरिफायर ने अभी तक y नहीं भेजा है। इसलिए, (A,S) प्राप्त करने के बाद वेरिफायर y भेजता है और प्रूवर yn की गणना करता है और पॉलिनॉमियल t(x) की गणना करता है:
t(x)=⟨l(x),r(x)⟩=⟨aL,aR∘yn⟩+t1x+t2x2
जहाँ
t1t2=⟨aL,sR∘yn⟩+⟨sL,aR∘yn⟩=⟨sL,sR∘yn⟩
प्रूवर कोएफिशिएंट्स t1 और t2 पर कमिट करता है:
T1T2=t1G+τ1B=t2G+τ2B
और (T1,T2) वेरिफायर को भेजता है। वेरिफायर u के साथ प्रतिक्रिया देता है और प्रूवर वेक्टर पॉलिनॉमियल्स l(x) और r(x) का मूल्यांकन करता है:
ध्यान दें कि πt में केवल t1 और t2 के ब्लाइंडिंग टर्म्स शामिल हैं। पिछले इम्प्लीमेंटेशन में, πt की गणना γ+τ1u+τ2u2 के रूप में की गई थी, जहाँ γ, V के लिए ब्लाइंडिंग टर्म है, जो पॉलिनॉमियल t(x) का कांस्टेंट कोएफिशिएंट भी है।
कोई ब्लाइंडिंग टर्म γ नहीं है क्योंकि V के लिए कोई कमिटमेंट नहीं है, यानी v गुप्त नहीं है – यह 0 है। प्रूवर (lu,ru,tu,πlr,πt) भेजता है और वेरिफायर यह जांचता है कि:
पहला महत्वपूर्ण अंतर यह है कि ru का कमिटमेंट पहले चर्चा किए गए कारणों से H के बजाय बेसिस वेक्टर y−n∘H के संबंध में किया जाता है।
दूसरा, tuG=?T1u+T2u2−πtB में कोई कांस्टेंट कमिटमेंट नहीं है। आम तौर पर, समीकरण tuG=?V+T1u+T2u2−πtB होता है, लेकिन इस मामले में V, 0 का कमिटमेंट है।
सामान्य रूप से, यदि V में ऐसे मान शामिल हैं जो वेरिफायर को ज्ञात हैं, तो वेरिफायर V के कमिटमेंट का निर्माण कर सकता है जैसा कि हम अगले अनुभाग में दिखाएंगे।
4. Proving an inner product when an additive public constant is involved
जैसा कि ऊपर के अनुभाग में संकेत दिया गया है, वेरिफायर कमिटमेंट्स का पुनर्निर्माण कर सकता है यदि वेरिफायर अंडरलाइंग (underlying) वेक्टर को जानता है।
उदाहरण के लिए, मान लीजिए कि हम यह साबित कर रहे हैं कि
⟨aL+j,aR∘yn+k⟩=vz
जहाँ j और k वेरिफायर को ज्ञात वेक्टर्स हैं और z एक स्केलर है जो वेरिफायर को पहले से ज्ञात है। yn के विपरीत, ये वेक्टर्स और स्केलर प्रमाण शुरू होने से पहले ही ज्ञात होते हैं। ध्यान दें कि इस उदाहरण में k को yn से हैडामर्ड गुणा नहीं किया गया है।
प्रूवर हमेशा की तरह केवल गुप्त मानों aL, aR और v पर कमिट करता है:
ASV=⟨aL,G⟩+⟨aR,H⟩+αB=⟨sL,G⟩+⟨sR,H⟩+βB=vG+γB
हमेशा की तरह, पॉलिनॉमियल्स l(x) और r(x) ऐसे हैं कि कांस्टेंट टर्म मूल इनर प्रोडक्ट का वेक्टर है और लीनियर टर्म्स sL और sR हैं। वेरिफायर से y प्राप्त करने पर, प्रूवर yn की गणना करता है और l(x) और r(x) बनाता है लेकिन उनका मूल्यांकन नहीं करता है:
ध्यान दें कि k को yn के साथ हैडामर्ड गुणा नहीं किया गया है, लेकिन लीनियर टर्म sR के साथ किया गया है। हम बाद में दिखाएंगे कि वेरिफायर इसे कैसे हैंडल करता है।
ध्यान दें कि πt में कांस्टेंट टर्म γz है। प्रूवर (lu,ru,tu,πlr,πt) भेजता है। अंत में, वेरिफायर गणना करता है:
tuA+Su+commitment to j in l(x)⟨j,G⟩+commitment to k in r(x)⟨k,y−n∘H⟩tuG=?⟨lu,ru⟩=?⟨lu,G⟩+⟨ru,y−n∘H⟩+πlrB=?Vz+T1u+T2u2−πtB
lu और ru में क्रमशः j और k शामिल हैं, लेकिन A और S में नहीं। इसलिए, वेरिफायर उन वेक्टर्स के लिए कमिटमेंट्स की गणना करता है और उन्हें कमिटमेंट्स A और S में जोड़ता है। k के मामले में, बेसिस वेक्टर y−n∘H, k को k∘y−n बना देगा, इसलिए कमिटमेंट की गणना y−n∘H के संबंध में की जानी चाहिए। अंत में, ब्लाइंडिंग टर्म πt में vz शामिल है लेकिन V में z शामिल नहीं है। इसलिए, प्रूवर को V को z से गुणा करना होगा।
⟨j,G⟩, ⟨k,yn∘H⟩ और Vz की गणना करके, वेरिफायर सुनिश्चित हो सकता है कि इनर प्रोडक्ट गणना में वास्तव में वे टर्म्स शामिल थे।
Range proof
यह साबित करने के लिए कि V एक मान है जो 2n से कम है, हमें तीन चीजें साबित करनी होंगी:
इनर प्रोडक्ट ⟨aL,2n⟩=V, यानी aL, v का बाइनरी रिप्रजेंटेशन है
aR=aL−1
aL∘aR=0
अंतिम दो दावे सीधे इनर प्रोडक्ट के रूप में नहीं हैं। हालांकि, इसे प्राप्त करने के लिए हम उन्हें थोड़ा संशोधित कर सकते हैं। हम वास्तव में यह कह रहे हैं कि वेक्टर्स:
aR−aL+1
aL∘aR
दोनों 0n हैं। यह साबित करने के लिए कि वे शून्य हैं, हम पिछले अनुभाग की ट्रिक का उपयोग कर सकते हैं। अर्थात, प्रूवर को यह स्थापित करने की आवश्यकता है कि
⟨aL∘aR,yn⟩=0
और
⟨aR−aL+1,yn⟩=0
जहाँ yn वेरिफायर द्वारा भेजे गए y मान से प्राप्त रैंडम वेक्टर है।
मूल बुलेटप्रूफ्स (Bulletproofs) पेपर पहले दावे को थोड़ा इस प्रकार संशोधित करता है ताकि हम पिछले अनुभाग में तीसरी ट्रिक का उपयोग कर सकें:
⟨aL,aR∘yn⟩=0
इसलिए, प्रूवर को स्थापित करने के लिए तीन इनर प्रोडक्ट्स हैं:
⟨aL,2n⟩=v
⟨aL,aR∘yn⟩=0n
⟨aL−1n−aR,yn⟩=0n
Combining three inner products into one
इन तीन इनर प्रोडक्ट्स को वेरिफायर द्वारा प्रदान किए गए रैंडमनेस z के साथ एक रैंडम लीनियर कॉम्बिनेशन का उपयोग करके एक में मिलाया जा सकता है।
नीचे बॉक्स किए गए टर्म्स में वेरिफायर को ज्ञात मान होते हैं, इसलिए हम स्पष्ट रूप से उन मानों की जांच करने के लिए अपने वेरिफिकेशन एल्गोरिथम का निर्माण करेंगे। अर्थात, वेरिफायर बॉक्स किए गए टर्म्स में मानों के लिए कमिटमेंट्स की गणना करेगा, न कि प्रूवर:
जगह बचाने के लिए, Bulletproofs पेपर टर्म (z−z2)⋅⟨1n,yn⟩−z3⟨1n,2n⟩ को δ(y,z) के रूप में संदर्भित करता है, इसलिए इनर प्रोडक्ट को इस प्रकार लिखा जा सकता है:
⟨aL−z⋅1n,yn∘aR+yn⋅z+z2⋅2n⟩=z2⋅v+δ(y,z)
ध्यान दें कि δ(y,z) एक ऐसा मान है जिसकी गणना वेरिफायर कर सकता है।
Range Proof Algorithm
प्रूवर v और इसके बाइनरी रिप्रजेंटेशन aL को चुनता है और aR=aL−1 की गणना करता है।
प्रूवर फिर रैंडम रूप से ब्लाइंडिंग टर्म α चुनता है और बेसिस वेक्टर्स G और H का उपयोग करके aL और aR के संयुक्त कमिटमेंट की गणना इस प्रकार करता है:
A=⟨aL,G⟩+⟨aR,H⟩+αB
प्रूवर फिर जल्द ही बनने वाले वेक्टर पॉलिनॉमियल्स l(x) और r(x) के लीनियर टर्म्स को sL और sR के रूप में चुनता है और उन्हें कमिट करता है:
S=⟨sL,G⟩+⟨sR,H⟩+βB
प्रूवर V के इनर प्रोडक्ट को G के संबंध में एक अज्ञात डिस्क्रीट लॉग (अज्ञात बेस) (जो G से असंबंधित है) के साथ कमिट करता है:
V=vG+γB
प्रूवर वेरिफायर को (A,S,V) भेजता है।
वेरिफायर रैंडम मानों (y,z) के साथ प्रतिक्रिया देता है जिसका उपयोग प्रूवर तीन इनर प्रोडक्ट्स को एक में मिलाने के लिए करेगा।
⟨aL−z⋅1n,yn∘aR+yn⋅z+z2⋅2n⟩=z2⋅v+δ(y,z)
इनर प्रोडक्ट का बायां भाग aL−z⋅1, l(x) का कांस्टेंट टर्म होगा और yn∘aR+yn⋅z+z2⋅2n, r(x) का कांस्टेंट टर्म होगा।
इस प्रकार, हम l(x) का निर्माण इस प्रकार करते हैं:
l(x)=constant termaL−z⋅1+sLx
और हम r(x) का निर्माण इस प्रकार करते हैं:
r(x)=constant termyn∘(aR+z⋅1)+z22n+yn∘sRx
ध्यान दें कि हमने ऊपर Prerequisites अनुभाग के भाग 3 में चर्चा किए गए कारणों से sRx को yn के साथ एलिमेंट-वाइज़ गुणा किया है।
प्रूवर अब कांस्टेंट कोएफिशिएंट t0, लीनियर कोएफिशिएंट t1 और क्वाड्रैटिक कोएफिशिएंट t2 के साथ t(x)=⟨l(x),r(x)⟩ का निर्माण इस प्रकार कर सकता है:
प्रूवर t1 और t2 के कमिटमेंट्स इस प्रकार भेजता है:
T1T2=t1G+τ1B=t2G+τ2B
t0 पर कमिट करने की कोई आवश्यकता नहीं है – ध्यान दें कि यह ठीक वही इनर प्रोडक्ट है जिसे हम साबित करने का प्रयास कर रहे हैं, इसलिए वेरिफायर के पास पहले से ही V के रूप में कमिटमेंट है।
वेरिफायर रैंडमनेस u भेजता है और प्रूवर गणना करता है:
याद करें कि प्रूवर ने इनर प्रोडक्ट के बाएँ और दाएँ पक्ष के लिए उपयोग किए गए संपूर्ण वेक्टर्स को कमिट नहीं किया था, बल्कि केवल aL और bL को कमिट किया था। बाकी वेक्टर्स एडिटिव पब्लिक वेक्टर्स (additive public vectors) थे जो वेरिफायर को ज्ञात थे, इसलिए वेरिफायर ने कांस्टेंट टर्म्स के कमिटमेंट्स का निर्माण करके और उन्हें प्रूवर द्वारा आपूर्ति किए गए गुप्त वेक्टर्स के कमिटमेंट में जोड़कर वेक्टर्स के कमिटमेंट्स का पुनर्निर्माण किया।
याद दिलाने के लिए, यहाँ वेरिफायर को ज्ञात मानों के बॉक्स के साथ मूल इनर प्रोडक्ट दिया गया है:
⟨aL+−z⋅1n,yn∘aR+yn⋅z+z2⋅2n⟩=z2⋅v+δ(y,z)
पाठकों को यह वेरिफाई करने के लिए प्रोत्साहित किया जाता है कि मूल प्रोडक्ट में बॉक्स किए गए टर्म्स (वेरिफायर को ज्ञात मान) को ऊपर दिए गए समानता चेक्स (equality checks) के सेट में बॉक्स किए गए टर्म्स में वेरिफायर द्वारा फिर से बनाया गया था।
प्रूवर की गणना के एक हिस्से को दोहराकर, वेरिफायर यह सुनिश्चित करता है कि प्रूवर ने वास्तव में दावा की गई गणना की है।
Correctness of the verification algorithm
अब हम दिखाते हैं कि यदि प्रूवर ईमानदार था, तो अंतिम वेरिफिकेशन चेक्स पूरी तरह से सही हैं।
नीचे हम सटीक अलजेब्रा दिखाते हैं, लेकिन सहज रूप से वेरिफायर इनर प्रोडक्ट aL−z⋅1n में लेफ्ट वेक्टर, इनर प्रोडक्ट yn∘aR+yn⋅z+z2⋅2n में राइट वेक्टर और आउटपुट z2v+δ(y,z) का “पुनर्निर्माण” कर रहा है।
वेरिफायर को aL−z⋅1n और yn∘aR+yn⋅z+z2⋅2n के कमिटमेंट्स नहीं दिए गए हैं बल्कि aL और aR के दिए गए हैं। इसी तरह, वेरिफायर को आउटपुट z2v+δ(y,z) का कमिटमेंट नहीं दिया गया है बल्कि केवल v का दिया गया है।
एडिटिव टर्म्स और yn द्वारा एलिमेंट-वाइज़ गुणा किए गए टर्म्स को वेरिफायर द्वारा फिर से बनाया जाना चाहिए।
Correctness of tu=t(u)
tu=?⟨lu,ru⟩ चेक के लिए, यह परिभाषा के अनुसार सत्य है, क्योंकि प्रूवर ने tu की गणना इसी तरह की है।
Correctness of the committed l(x) and r(x) with respect to A and S
के लिए: A+Su+⟨−z⋅1n,G⟩+⟨z⋅yn+z2⋅2n,Hy−1⟩=?⟨lu,G⟩+⟨ru,Hy−1⟩+πlrB
हम निम्नलिखित प्रतिस्थापन (substitution) करते हैं:
हालांकि, ऐसा अलजेब्रा बेहद जटिल होगा। इसके बजाय, हम देखते हैं कि z2v+δ(y,z)G, ⟨l(x),r(x)⟩ के वेक्टर पॉलिनॉमियल इनर प्रोडक्ट का कांस्टेंट टर्म है। V में γB में ब्लाइंडिंग टर्म को रद्द करने के लिए, ध्यान दें कि πt में z2γ शामिल है, इसलिए यह Vz2=(vG+γB)z2 में गामा टर्म के साथ रद्द हो जाएगा।
चूंकि पेडरसन कमिटमेंट्स एडिटिवली होमोमोर्फिक (additively homomorphic) हैं, इसलिए वेरिफायर पॉलिनॉमियल t(x) के कांस्टेंट टर्म के कमिटमेंट की गणना करने के लिए आसानी से δ(y,z)G की गणना करके उसे Vz2 में जोड़ सकता है।
Logarithmic-sized range proof
हम lu और ru का कमिटमेंट C भेजकर और यह साबित करके डेटा ट्रांसमिशन के आकार को कम कर सकते हैं कि कमिट किए गए वेक्टर्स का इनर प्रोडक्ट tu है, इसके लिए लॉगरिदमिक-साइज्ड (logarithmic-sized) प्रूफ का उपयोग किया जाता है, और फिर वेरिफाई किया जाता है कि
A+Su+⟨−z⋅1n,G⟩+⟨z⋅yn+z2⋅2n,Hy−1⟩−πlrB=?C
और
tu=?⟨lu,ru⟩
बेसिस वेक्टर्स G और Hy−1 के संबंध में।
Using the range proof algorithm for the subset sum
सबसेट सम प्रॉब्लम (subset sum problem) यह पूछता है, "संख्याओं का एक सेट दिए जाने पर, क्या कोई सबसेट (संभवतः पूरे सेट सहित) जुड़कर k के बराबर होता है? उदाहरण के लिए यदि k=16 है और सेट {3,5,7,11} है तो उत्तर हाँ है क्योंकि 5+11=16। हालांकि यदि k=13 है, तो उत्तर नहीं है।
सबसेट सम प्रॉब्लम NP-Complete है, जिसका अर्थ है कि, एक बूलियन सर्किट (Boolean circuit) या एरिथमेटिक सर्किट (arithmetic circuit) के समान, यह NP में किसी भी समस्या का प्रतिनिधित्व कर सकता है। अर्थात, NP में किसी भी समस्या को सबसेट सम इंस्टेंस में फिर से लिखा (तकनीकी शब्द “रिड्यूस्ड (reduced)”) जा सकता है।
2n को [3,5,7,11] से बदलकर, हम यह साबित कर सकते हैं कि हम बिना उत्तर बताए सबसेट सम का समाधान जानते हैं। विशेष रूप से, प्रूवर को पता होगा कि यदि k=16 है तो aL=[0,1,0,1] है। सामान्य तौर पर, aL में एक (one) प्रविष्टि का अर्थ है कि हम उस एलिमेंट को सबसेट में शामिल करते हैं और शून्य का अर्थ है कि यह सबसेट में शामिल नहीं है।
इसलिए, Bulletproofs किसी भी NP समस्या के लिए किसी भी विटनेस (witness) का ज्ञान साबित करने में सक्षम हैं।
Appendix: Derivation of combining three inner products into one
हम aR∘yn वाले टर्म्स को मिलाने के लिए नियम ⟨x,b+c⟩+⟨b,y⟩=v→⟨x+y,b+c⟩=v+⟨y,c⟩ का उपयोग कर सकते हैं। यहाँ b, aR∘yn है, c, z⋅yn+z2⋅2n है, और y, −z⋅1n है।