تعتبر مضادات الرصاص عبارة عن حجج معرفية قصيرة تعتمد على المعرفة الصفرية ولا تتطلب إعدادًا موثوقًا به. أنظمة الحجج هي أنظمة إثبات ذات سلامة حسابية.
تعتبر مضادات الرصاص مناسبة لإثبات البيانات المتعلقة بالقيم الملتزم بها، مثل أدلة النطاق، والملفات التي يمكن التحقق منها، والدوائر الحسابية، وما إلى ذلك. وهي تعتمد على الافتراض اللوغاريتمي المنفصل وتصبح غير تفاعلية باستخدام اختبار فيات شامير.
الخوارزمية الأساسية لـ Bulletproofs هي خوارزمية المنتج الداخلي التي قدمها Groth [2]. توفر الخوارزمية حجة معرفة لالتزامين بيدرسن المتجهين الملزمين اللذين يرضيان علاقة منتج داخلية معينة. تعتمد مضادات الرصاص على تقنيات Bootle et al. [3] لتقديم دليل منتج داخلي فعال في الاتصال يقلل من تعقيد الاتصال العام للوسيطة إلى فقط أين هو البعد بين متجهي الالتزامات.
تقدم مضادات الرصاص بروتوكولًا لإجراء تجارب قصيرة المدى ومجمعة. يقومون بتشفير دليل على نطاق الرقم الملتزم في منتج داخلي، باستخدام كثيرات الحدود. بروفات النطاق هي براهين على أن القيمة السرية تقع في فترة زمنية معينة. لا تؤدي إثباتات النطاق إلى تسريب أي معلومات حول القيمة السرية، بخلاف حقيقة أنها تقع في الفاصل الزمني.
يمكن رسم خوارزمية الإثبات في 5 خطوات:
يترك تكون قيمة في و ناقلات قليلا من هذا القبيل . مكونات هي الأرقام الثنائية ل . نحن نبني ناقل تكميلي وتتطلب ذلك يحمل.
- أين و أعمى بيدرسن التزاماته و .
- المدقق يرسل التحديات و لإصلاح و .
- أين و هي التزامات للمعاملات ، من كثير الحدود شيدت من القيم الموجودة في البروتوكول.
,
- يتحدى المدقق Prover ذو القيمة .
- يرسل المُثبت العديد من الالتزامات التي سيقوم المُدقق بعد ذلك بالتحقق منها.
راجع Prover.hs للحصول على تفاصيل التنفيذ.
أصبح التفاعل الموصوف غير تفاعلي باستخدام تحويل Fiat-Shamir حيث يتم استبدال جميع التحديات العشوائية التي قام بها V بتجزئة النص حتى تلك النقطة.
يتم تقليل حجم الدليل بشكل أكبر من خلال الاستفادة من الاتفاق إثبات المنتج الداخلي.
تسمح حجة المنتج الداخلي في البروتوكول بإثبات المعرفة بالنواقل و ، الذي يكون منتجه الداخلي والالتزام هو التزام هذين المتجهات. لذلك يمكننا استبدال الإرسال ( ) مع نقل ( ) وتنفيذ وسيطة المنتج الداخلي.
ثم، بدلا من المشاركة و ، والتي تبلغ تكلفة الاتصال بها العناصر، تنقل حجة المنتج الداخلي فقط عناصر. في المجموع، يرسل المثل فقط عناصر المجموعة و 5 عناصر في
يمكننا إنشاء برهان واحد لنطاق القيم المتعددة، مع تحمل تكلفة مساحة إضافية فقط قدرها ل قيم إضافية ، على عكس العامل المضاعف لـ عند الإنشاء البراهين مجموعة مستقلة.
يستخدم إثبات النطاق الإجمالي وسيطة المنتج الداخلي. ويستخدم ( ) عناصر المجموعة و 5 عناصر في .
راجع مثال إثبات النطاق المتعدد
إثبات نطاق واحد
استيراد Data.Curve.Weierstrass.SECP256K1 (Fr)استيراد Bulletproofs.RangeProof كـ RPimport Bulletproofs.Utils (commit)testSingleRangeProof :: Integer -> (Fr, Fr) -> IO BooltestSingleRangeProof UpperBound (v, vBlinding) = اسمح لـ vCommit = الالتزام ضد vBlinding - Prover إثبات <- runExceptT (RP.generateProof UpperBound (v، vBlinding)) - إثبات حالة التحقق من Left err -> الذعر (إظهار الخطأ) [email protected]{..} -> نقي (RP.verifyProof UpperBound vCommitإثبات )
دليل متعدد النطاق
import Data.Curve.Weierstrass.SECP256K1 (Fr)استيراد مضادات الرصاص المؤهلة.MultiRangeProof كـ MRPimport Bulletproofs.Utils (commit)testMultiRangeProof :: Integer -> [(Fr, Fr)] -> IO BooltestMultiRangeProof UpperBound vsAndvBlindings = do Let vCommits = fmap ( غير متوقع الالتزام) vsAndvBlindings - Prover إثبات <- runExceptT (MRP.generateProof UpperBound vsAndvBlindings) - إثبات حالة التحقق من الخطأ الأيسر -> ذعر (إظهار الخطأ) حق إثبات@RP.RangeProof{..} -> نقي (MRP.verifyProof UpperBound vCommits إثبات)
لاحظ أن الحد العلوي يجب أن يكون الأمر كذلك ، أين هي أيضًا قوة 2. يستخدم هذا التطبيق المنحنى الإهليلجي secp256k1، وهو منحنى كوبليتز، الذي يتمتع بأمان 128 بت. راجع أمثلة نطاقات البراهين لمزيد من التفاصيل.
دائرة حسابية على المجال والمتغيرات هو رسم بياني حلقي موجه تسمى رؤوسه بوابات.
يمكن وصف الدائرة الحسابية بشكل بديل على أنها قائمة من بوابات الضرب مع مجموعة من معادلات الاتساق الخطي المتعلقة بمدخلات ومخرجات البوابات. يمكن تحويل أي دائرة توصف بأنها رسم بياني غير دوري بكفاءة إلى هذا الوصف البديل.
تقدم Bulletproofs بروتوكولًا لإنشاء وسيطة المعرفة الصفرية للدوائر الحسابية باستخدام وسيطة المنتج الداخلي، مما يسمح بالحصول على إثبات الحجم العناصر وتضمين القيم الملتزمة كمدخلات للدائرة الحسابية.
في البروتوكول، يثبت Prover أن منتج Hadamard و ومجموعة من القيود الخطية عقد. قيم الإدخال يتم استخدامها لإنشاء الدليل ثم يتم الالتزام بها ومشاركتها مع أداة التحقق.
import Data.Curve.Weierstrass.SECP256K1 (Fr)import Data.Field.Galois (rnd)import Bulletproofs.ArithmeticCircuitimport Bulletproofs.Utils (hadamard، التزام)-- مثال:-- 2 قيود خطية (q = 2):-- aL [0] + آل[1] + آل[2] + آل[3] = v[0]-- aR[0] + aR[1] + aR[2] + aR[3] = v[1]---- 4 قيود الضرب (ضمنية) (n = 4):-- aL[ 0] * aR[0] = aO[0]-- aL[1] * aR[1] = aO[1]-- aL[2] * aR[2] = aO[2]-- aL[3] * aR[3] = aO[3]---- 2 قيم إدخال (m = 2)arithCircuitExample :: ArithCircuit FrarithCircuitExample = ArithCircuit { الأوزان = GateWeights { ول = [[1، 1، 1، 1] ,[0, 0, 0, 0]] ، wR = [[0، 0، 0، 0] ,[1, 1, 1, 1]] ، wO = [[0، 0، 0، 0] ,[0, 0, 0, 0]] } ، أوزان الالتزام = [[1، 0] ,[0, 1]] ، خدمات العملاء = [0، 0] }testArithCircuitProof :: ([Fr], [Fr]) -> ArithCircuit Fr -> IO BooltestArithCircuitProof (aL, aR) arithCircuit = do Let m = 2 -- قيود الضرب Let aO = aL `hadamard` aR -- القيود الخطية v0 = مجموع L v1 = مجموع aR الالتزام بليندرز <- ريبلايتM m rnd Let الالتزامات = zipWith الالتزام [v0, v1] الالتزام بليندرز Let arithWitness = ArithWitness { مهمة = مهمة aL aR aO الالتزامات = الالتزامات الالتزام بليندرز = الالتزام بليندرز } إثبات <- إنشاء حساب إثبات للدائرة الحسابية شاهد نقي (التحقق من إثبات الالتزامات إثبات الحساب الحسابي)
راجع مثال الدائرة الحسابية لمزيد من التفاصيل.
مراجع :
Bunz B.، Bootle J.، Boneh D.، Poelstra A.، Wuille P.، Maxwell G. “المضادات للرصاص: أدلة قصيرة للمعاملات السرية والمزيد”. ستانفورد، كلية لندن الجامعية، بلوكستريم، 2017
Groth J. “الجبر الخطي مع حجج المعرفة الصفرية الخطية”. كلية لندن الجامعية، 2009
Bootle J.، Cerully A.، Chaidos P.، Groth J، Petit C. “وسيطات المعرفة الصفرية الفعالة للدوائر الحسابية في إعداد السجل المنفصل”. كلية لندن الجامعية وجامعة أكسفورد، 2016.
تدوين :
:منتج هادمارد
: المنتج الداخلي
: المتجهات
هذا رمز تجريبي مخصص لمشاريع البحث فقط. يرجى عدم استخدام هذا الرمز في الإنتاج حتى ينضج بشكل ملحوظ.
Copyright 2018-2022 Stephen Diehl Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.