شرح Bulletproofs: كيف يُتحقق من المبالغ المخفية

· مدة القراءة: 5 د

Bulletproofs هي إثباتات نطاق قصيرة بمعرفة صفرية تتيح للعملة المشفرة إخفاء كل مبالغ المعاملات، بينما تتحقق كل عقدة مع ذلك من أنه لم تُخلق أي عملات. يشرح هذا الدليل التزامات Pedersen، ولماذا تحتاج المبالغ المخفية إلى إثباتات نطاق، وكيف تُبقي Bulletproofs تلك الإثباتات صغيرة، وكيف يستخدمها Blocknet على كل مُخرَج.

ما هي Bulletproofs؟

إجابة مختصرة

Bulletproofs إثباتات قصيرة بمعرفة صفرية، نشرها Bünz وBootle وBoneh وPoelstra وWuille وMaxwell عام 2018. في العملات المشفرة، تثبت أن مبلغًا مخفيًا يقع ضمن نطاق صالح، مثل من 0 إلى 2^64، دون كشفه. ولا تحتاج إلى إعداد موثوق، ولا يزداد حجمها إلا مع لوغاريتم النطاق.

ظهرت الورقة البحثية Bulletproofs: Short Proofs for Confidential Transactions and More في ندوة IEEE للأمن والخصوصية عام 2018. صممها مؤلفوها للمعاملات السرية، حيث تُستبدل المبالغ على سلسلة الكتل بالتزامات. ولفهم سبب الحاجة إلى مثل هذا الإثبات أصلًا، لنبدأ بالالتزام.

ما هو التزام Pedersen؟

الالتزام (commitment) هو النسخة التشفيرية من الظرف المختوم. تضع رقمًا بداخله، وتُري الجميع الظرف، ويمكنك لاحقًا إثبات ما كان فيه. لا يستطيع أحد قراءة الرقم من الظرف، ولا تستطيع استبداله برقم آخر بعد ذلك.

يحقق التزام Pedersen، الذي وصفه Torben Pedersen عام 1991، ذلك باستخدام نقاط على منحنى إهليلجي. للالتزام بمبلغ v، تختار المحفظة سرًا عشوائيًا r يُسمى عامل التعمية، وتحسب:

C = v·G + r·H

G وH نقطتان عامتان ثابتتان على المنحنى، اختيرتا بحيث لا يعرف أحد كيف يكتب إحداهما كمضاعف للأخرى. والنتيجة C نقطة واحدة بحجم 32 بايت. ولها خاصيتان:

كيف تتحقق العقد من معاملة لا تستطيع قراءتها؟

إجابة مختصرة

يمكن جمع التزامات Pedersen. مجموع التزامين هو التزام بمجموع مبلغيهما، مع جمع عوامل التعمية أيضًا. تجمع العقدة التزامات مُدخلات المعاملة، والتزامات مُخرَجاتها مضافًا إليها الرسوم، وتتحقق من تطابق المجموعين، فتؤكد التوازن دون رؤية أي مبلغ.

جمع التزامين يعطي (v1 + v2)·G + (r1 + r2)·H، وهو بحد ذاته التزام بـ v1 + v2. يرتب المرسل عوامل التعمية بحيث يساوي مجموع تعمية المُدخلات مجموع تعمية المُخرَجات. وإذا توازنت المبالغ أيضًا، يكون الفرق بين مجموع المُدخلات ومجموع المُخرَجات صفرًا تمامًا، وتستطيع أي عقدة التحقق من ذلك.

رسوم الشبكة هي الرقم العام الوحيد في المعاملة. تحوّلها العقد إلى التزام بعامل تعمية يساوي صفرًا وتضيفه إلى جانب المُخرَجات، فيصبح التحقق: المُدخلات = المُخرَجات + الرسوم.

لماذا تحتاج المبالغ المخفية إلى إثباتات نطاق؟

تعمل حسابات الالتزامات بمقياس عدد كبير جدًا، هو رتبة مجموعة المنحنى، ويبلغ نحو 2^252. وفي هذا الحساب، المبلغ «السالب» ليس إلا عددًا موجبًا ضخمًا. يمكن لشخص ما أن ينفق مُدخلًا قيمته 10 عملات وينشئ مُخرَجين، أحدهما بقيمة 11 والآخر بقيمة «سالب 1». ستتوازن الالتزامات تمامًا، وستظهر عملة واحدة من العدم، مخفية عن كل مراقب.

يسد إثبات النطاق هذه الثغرة. فهو يثبت أن المبلغ داخل الالتزام يقع بين 0 و2^64 دون ذكر قيمته. ومع تقييد كل مُخرَج بهذه الطريقة، لا يمكن لعدد قليل من المُخرَجات أن يصل مجموعها إلى رقم كبير بما يكفي ليلتف حول رتبة المجموعة، فتعني الالتزامات المتوازنة مبالغ متوازنة.

استخدمت تصاميم المعاملات السرية الأقدم إثباتات نطاق يزداد حجمها خطيًا مع عدد البتات. أما Bulletproofs فلا تزداد إلا مع اللوغاريتم، وهو ما يخفض إثبات الـ 64 بت إلى بضع مئات من البايتات.

كيف تعمل Bulletproofs؟

يثبت Bulletproof النطاق في ثلاث خطوات.

  1. تقسيم المبلغ إلى بتات. يصبح المبلغ ذو الـ 64 بت متجهًا من 64 بتًا. يلتزم المُثبِت بهذا المتجه ويُظهر حقيقتين عنه: كل عنصر فيه 0 أو 1، والبتات، موزونةً بقوى العدد اثنين، مجموعها يساوي المبلغ الملتزم به.
  2. تحويل هاتين الحقيقتين إلى جداء داخلي واحد. باستخدام تحديات عشوائية، يطوي المُثبِت كل تلك الشروط في ادعاء واحد عن الجداء الداخلي لمتجهين. ولأن التحديات عشوائية، لا يجتاز الادعاء الخاطئ إلا باحتمال ضئيل لا يُذكر.
  3. إثبات الجداء الداخلي بالتنصيف. في كل جولة، يرسل المُثبِت نقطتين على المنحنى، L وR، ويُطوى كلا المتجهين إلى نصف طولهما. وبعد log2(64) = 6 جولات، يتبقى زوج واحد من الأعداد.

ومن هذا التنصيف يأتي الحجم. يحدد ملخص الورقة البحثية حجم إثبات النطاق بـ 2·log2(n) + 9 من عناصر المجموعة والحقل لنطاق من n بت. ولـ 64 بت يعني ذلك 12 نقطة من الجولات الست إضافة إلى 9 أخرى، أي 21 عنصرًا في المجموع، أو 672 بايت عندما يكون كل عنصر 32 بايت.

الإثبات غير تفاعلي. فبدلًا من مُتحقِّق حي يرسل التحديات، يشتقها الطرفان بتجزئة سجل الإثبات، وهي تقنية معيارية تُعرف بمبدأ Fiat-Shamir. ولا تحتاج Bulletproofs أيضًا إلى إعداد موثوق: فالمولّدات عامة ومشتقة علنًا، ويقوم الأمان فقط على افتراض اللوغاريتم المنفصل. ويمكن تجميع عدة إثباتات معًا بإضافة عدد لوغاريتمي فقط من العناصر، ويمكن التحقق منها دفعةً واحدة.

من يستخدم Bulletproofs؟

فعّل Monero تقنية Bulletproofs في ترقية شبكته بتاريخ 18 أكتوبر 2018 (الإصدار v0.13.0) لتقليل أحجام المعاملات. وتطبّقها مكتبة bulletproofs بلغة Rust من مشروع dalek-cryptography على مجموعة Ristretto الخاصة بـ Curve25519، ومكتبة التشفير في Blocknet مبنية عليها.

كيف يخفي Blocknet كل مبلغ؟

في Blocknet، يحمل كل مُخرَج من كل معاملة التزام Pedersen بدلًا من المبلغ، ويحمل كل مُخرَج إثبات Bulletproof خاصًا به بطول 64 بت. الخصوصية جزء من صيغة المعاملة دون وضعية شفافة، فلا توجد طريقة لإرسال دفعة بمبلغ ظاهر.

إليك ما تتحقق منه العقدة قبل قبول معاملة:

يمكنك رؤية ذلك على مستكشف Blocknet. تسرد صفحة المعاملة مبالغها بالشكل “hidden · Pedersen commitments”، ويعرض كل مُخرَج التزامه ومذكرة مشفرة وإثبات نطاق بحجم “672 bytes · Bulletproof”، وهو الحجم الذي يتوقعه الحساب أعلاه.

ومع ذلك يرى المستلم الرقم الحقيقي. يحمل كل مُخرَج المبلغ مشفرًا بالسر الذي تتشاركه محفظتا المرسل والمستلم، وتفك محفظة المستلم تشفيره بمفتاح العرض الخاص. فيكون المبلغ مرئيًا لطرفي الدفعة ولا أحد غيرهما.

تعمل المبالغ المخفية جنبًا إلى جنب مع طبقات Blocknet الأخرى: التوقيعات الحلقية على 16 مُخرَجًا تخفي المرسل، والعناوين الخفية لمرة واحدة تخفي المستلم، وDandelion++ يخفي النقطة التي دخلت منها المعاملة إلى الشبكة. ويستعرض دليل ميزات الخصوصية في Blocknet كلًا منها.

احصل على BNT خاصة بك

طريقة بسيطة للحصول على عملات بمبالغ مخفية هي تعدينها. يستخدم Blocknet إثبات عمل Argon2id كثيف الذاكرة يمكنك تعدينه على جهاز كمبيوتر عادي، ويعدّنه seine على معالجك، مع أي بطاقات NVIDIA رسومية بجانبه، ويضبط نفسه دون أي إعداد. وكل دفعة يرسلها إليك bntpool.com تصل كمُخرَج خاص بالتزام وإثبات Bulletproof. ويأخذك دليل التعدين من التنزيل إلى الحصص المقبولة خلال دقائق.

الأسئلة الشائعة

هل تحتاج Bulletproofs إلى إعداد موثوق؟

لا. تعتمد Bulletproofs فقط على افتراض اللوغاريتم المنفصل، وهو الافتراض نفسه الذي تقوم عليه توقيعات المنحنيات الإهليلجية، وتستخدم معاملات عامة يستطيع أي شخص اشتقاقها. لا توجد مراسم إعداد ولا سر يجب على أحد إتلافه بعد ذلك، وتستخدمها عملات الخصوصية ومنها Monero وBlocknet في إثباتات النطاق الخاصة بها.

ما حجم إثبات النطاق في Bulletproofs؟

يحتوي إثبات Bulletproof واحد بطول 64 بت على 2 × log2(64) + 9 = 21 عنصرًا. وفي مجموعة Ristretto يشغل كل عنصر 32 بايت، فيبلغ حجم كل إثبات 672 بايت، وهو بالضبط ما يعرضه مستكشف Blocknet لكل مُخرَج. ويزداد الحجم مع لوغاريتم النطاق، فمضاعفة طول البتات لا تضيف إلا عنصرين.

من يستطيع رؤية مبلغ معاملة Blocknet؟

المرسل والمستلم فقط. تخزّن السلسلة التزام Pedersen وإثبات نطاق لكل مُخرَج، إضافة إلى المبلغ مشفرًا بالسر الذي تتشاركه المحفظتان. وتفك محفظة المستلم تشفيره بمفتاح العرض الخاص. ورسوم الشبكة هي الرقم العام الوحيد، لكي تضيفه العقد إلى التحقق من التوازن.

كيف تعرف العقد أنه لم تُخلق عملات جديدة إذا كانت المبالغ مخفية؟

تتحقق كل عقدة من أمرين في كل معاملة. يجب أن تتوازن التزامات Pedersen، فتساوي المُدخلات المُخرَجات مضافًا إليها الرسوم، ويجب أن يحمل كل مُخرَج إثبات نطاق صالحًا يثبت أن مبلغه يقع بين 0 و2^64. ومعًا يستبعد هذان الشرطان أي تضخم مخفي دون كشف مبلغ واحد.