المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين

نواصل سلسلتنا حول تصميم Monero blockchain ، وسوف تركز مقالة اليوم على بروتوكول RingCT (Ring Confidential Transactions) ، الذي يقدم معاملات سرية وتوقيعات حلقة جديدة. لسوء الحظ ، هناك القليل من المعلومات على الإنترنت حول كيفية عملها ، وحاولنا سد هذه الفجوة.

المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين

سنتحدث عن كيفية إخفاء الشبكة لمقدار عمليات النقل باستخدام هذا البروتوكول ، ولماذا تخلوا عن توقيعات الحلقة الكلاسيكية لـ cryptonote وكيف ستتطور هذه التكنولوجيا أكثر.

نظرًا لأن هذا البروتوكول هو أحد أكثر التقنيات تعقيدًا في Monero ، سيحتاج القارئ إلى معرفة أساسية بهيكل blockchain وقليل من المعرفة في تشفير المنحنى الإهليلجي (لتحديث هذه المعرفة ، يمكنك قراءة الفصول الأولى من السابقة. مقال عن التوقيعات المتعددة).

بروتوكول RingCT

أحد الهجمات المحتملة على عملات cryptonote هو تحليل blockchain بناءً على معرفة مقدار ووقت المعاملة المرسلة. هذا يسمح يضيق بشكل كبير نطاق البحث عن المخارج التي تهم المهاجم. للحماية من مثل هذا التحليل ، نفذت Monero بروتوكول معاملات مجهول الهوية يخفي تمامًا مقدار التحويلات على الشبكة.

وتجدر الإشارة إلى أن فكرة إخفاء المبالغ ليست جديدة. كان من أوائل من وصفها مطور Bitcoin Core جريج ماكسويل في كتابه المادة المعاملات السرية. يعمل التنفيذ الحالي لـ RingCT كتعديل له مع إمكانية استخدام توقيعات الحلقة (حيث بدونها) ، وهكذا حصل على اسمه - Ring Confidential Transactions.

من بين أمور أخرى ، يساعد البروتوكول في التخلص من مشاكل خلط المخرجات المتربة - مخرجات بمبلغ صغير (يتم الحصول عليها عادةً في شكل تغيير من المعاملات) التي تسببت في مشاكل أكثر مما تستحق.

في يناير 2017 ، كانت شبكة Monero شديدة الانقسام ، مما سمح باستخدام اختياري للمعاملات السرية. وبالفعل في سبتمبر من نفس العام ، بدءًا من الإصدار 6 ، أصبحت هذه المعاملات هي المعاملات الوحيدة المسموح بها على الشبكة.

تستخدم RingCT عدة آليات في وقت واحد: تواقيع جماعية مجهولة متعددة الطبقات مرتبطة تلقائيًا (توقيع مجموعة مجهول متعدد الطبقات قابل للربط ، يشار إليه فيما يلي باسم MLSAG) ، مخطط الالتزام (التزامات بيدرسن) وبراهين النطاق (هذا المصطلح ليس له ترجمة ثابتة إلى اللغة الروسية).

يقدم بروتوكول RingCT نوعين من المعاملات مجهولة المصدر: بسيطة وكاملة. تنشأ المحفظة الأولى عندما تستخدم المعاملة أكثر من إدخال واحد ، والثاني - في الوضع المعاكس. تختلف في التحقق من صحة مبالغ المعاملات والبيانات الموقعة بواسطة توقيع MLSAG (المزيد حول هذا أدناه). علاوة على ذلك ، يمكن إنشاء معاملات من النوع الكامل بأي عدد من المدخلات ، ولا يوجد فرق أساسي. في هذا الكتاب من الصفر إلى مونيرو في هذه المناسبة ، يُقال إن قرار حصر المعاملات الكاملة لمدخل واحد تم على عجل وقد يتغير في المستقبل.

توقيع MLSAG

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

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

لم تعد المعاملات السرية تستخدم الكلاسيكيات الكريبتونوت تواقيع الحلقة ، تم استبدالها بـ MLSAG - نسخة تم تكييفها لعدة مدخلات من تواقيع الحلقة أحادية الطبقة المماثلة ، LSAG.

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

دعونا نلقي نظرة على كيفية تكوين توقيع الحلقة باستخدام مثال المعاملة التي تنفق ناتجين حقيقيين وتستخدم m - 2 عشوائيًا من blockchain للمزج. تشير إلى المفاتيح العامة للمخرجات التي ننفقها
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين، والصور الرئيسية لهم ، على التوالي: المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين وهكذا ، نحصل على مصفوفة بالحجم 2 × م. نحتاج أولاً إلى حساب ما يسمى التحديات لكل زوج من المخرجات:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
نبدأ الحسابات بالمخرجات التي ننفقها باستخدام مفاتيحها العامة:المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أينوأرقام عشوائيةالمعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أيننتيجة لذلك ، نحصل على القيم:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين، والتي نستخدمها لحساب التحدي
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أينالزوج التالي من المخرجات (لتسهيل فهم ما نستبدل به ، قمنا بتسليط الضوء على هذه القيم بألوان مختلفة). يتم حساب جميع القيم التالية في دائرة وفقًا للصيغ الموضحة في الرسم التوضيحي الأول. يتم حساب التحدي c أخيرًا لزوج من المخرجات الحقيقية.

كما نرى ، في جميع الأعمدة ، باستثناء العمود الذي يحتوي على مخرجات حقيقية ، يتم استخدام الأرقام المولدة عشوائيًا.المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين. إلى πالعمود العاشر ، نحتاجها أيضًا. دعونا نتحولالمعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أينفي ق:المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
التوقيع نفسه عبارة عن مجموعة من كل هذه القيم:

المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين

علاوة على ذلك ، يتم كتابة هذه البيانات في المعاملة.

كما نرى ، يحتوي MLSAG على تحدي واحد فقط c0، والذي يسمح لك بحفظ حجم التوقيع (الذي يتطلب بالفعل مساحة كبيرة). علاوة على ذلك ، أي مدقق باستخدام البياناتالمعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين، يستعيد القيم c1 ، ... ، cm ويتحقق من ذلكالمعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين. وهكذا ، تم إغلاق الخاتم الخاص بنا والتحقق من التوقيع.

بالنسبة لمعاملات RingCT من النوع الكامل ، يتم إضافة صف آخر إلى المصفوفة بمخرجات مختلطة ، لكننا سنتحدث عن هذا أدناه.

التزامات بيدرسن

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

تُستخدم التزامات Monero لإخفاء مبلغ التحويلات واستخدام الخيار الأكثر شيوعًا - التزامات Pedersen. بالمناسبة ، حقيقة مثيرة للاهتمام - في البداية ، اقترح المطورون إخفاء الكميات بالخلط المعتاد ، أي إضافة مخرجات بكميات عشوائية من أجل إدخال عدم اليقين ، لكنهم تحولوا بعد ذلك إلى الالتزامات (ليس حقيقة أنهم حفظ على حجم الصفقة كما سنرى أدناه).
بشكل عام ، يبدو الالتزام كما يلي:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أينحيث C - معنى الالتزام نفسه ، a - مبلغ مخفي H هي نقطة ثابتة على منحنى إهليلجي (مولد إضافي) ، و x - بعض القناع التعسفي الذي يخفي عاملًا عشوائيًا. القناع مطلوب هنا حتى لا يتمكن الطرف الثالث من التقاط قيمة الالتزام بالتعداد البسيط.

عند إنشاء مخرجات جديدة ، تحسب المحفظة التزامًا لها ، وعند إنفاقها ، فإنها تأخذ القيمة المحسوبة أثناء التوليد أو تعيد حسابها مرة أخرى ، اعتمادًا على نوع المعاملة.

RingCT بسيط

في حالة معاملات RingCT البسيطة ، من أجل ضمان أن تكون المخرجات الناتجة عن المعاملة مساوية لمجموع المدخلات (لم يتم جني الأموال من فراغ) ، من الضروري أن يكون مجموع الالتزامات في الأول والثاني هو نفسه ، إنه:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
تعتبر لجان الالتزام بشكل مختلف قليلاً - بدون قناع:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أينحيث a - مقدار العمولة متاح للجمهور.

يتيح لنا هذا النهج أن نثبت للطرف المعتمد أننا نستخدم نفس المبالغ دون الكشف عنها.

لتوضيح الأمور ، دعنا نلقي نظرة على مثال. لنفترض أن المعاملة تنفق ناتجين (أي يصبحان مدخلات) لـ 10 و 5 XMR وتولد ثلاثة مخرجات بقيمة 12 XMR: 3 و 4 و 5 XMR. في نفس الوقت ، يدفع عمولة 3 XMR. وبالتالي ، فإن المبلغ الذي تم إنفاقه بالإضافة إلى المبلغ المتولد والعمولة يساوي 15 XMR. دعنا نحاول حساب الالتزامات وننظر إلى الفرق بين مبالغها (تذكر الرياضيات):

المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
هنا نرى أن المعادلة تتقارب - نحتاج إلى أن تكون مجاميع أقنعة المدخلات والمخرجات هي نفسها. للقيام بذلك ، يتم إنشاء المحفظة بشكل عشوائي x1 و y1 و y2 و y3والباقي x2 يحسب مثل هذا:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
باستخدام هذه الأقنعة ، يمكننا أن نثبت لأي مراجع أننا لا نقوم بتوليد أموال أكثر مما ننفقه دون الكشف عن المبلغ. الأصل ، أليس كذلك؟

RingCT ممتلئ

في معاملات RingCT الكاملة ، يكون التحقق من مبالغ التحويل أكثر تعقيدًا إلى حد ما. في هذه المعاملات ، لا تقوم المحفظة بإعادة حساب الالتزامات الخاصة بالمدخلات ، ولكنها تستخدم تلك التي تم حسابها عند إنشائها. في هذه الحالة ، يجب أن نفترض أننا لن نحصل بعد الآن على فرق المبالغ التي تساوي صفرًا ، ولكن بدلاً من ذلك:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
ومن z هو الفرق بين أقنعة الإدخال والإخراج. إذا نظرنا zG كمفتاح عام (وهو الأمر الواقع) ، إذن z هو المفتاح الخاص. وبالتالي ، فإننا نعرف المفاتيح العامة والمفاتيح الخاصة المقابلة. باستخدام هذه البيانات ، يمكننا استخدامها في توقيع حلقة MLSAG جنبًا إلى جنب مع المفاتيح العامة للمخرجات المعجن:
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
وبالتالي ، فإن توقيع الحلقة الصالحة سيضمن أننا نعرف جميع المفاتيح الخاصة لأحد الأعمدة ، ويمكننا فقط معرفة المفتاح الخاص في الصف الأخير إذا لم تولد المعاملة أموالاً أكثر مما تنفقه. بالمناسبة ، إليك إجابة السؤال "لماذا لا يؤدي الاختلاف في مبالغ الالتزامات هنا إلى الصفر" - إذا زج = 0، ثم نقوم بتوسيع العمود بمخرجات حقيقية.

ولكن كيف يكتشف متلقي الأموال مقدار الأموال التي تم إرسالها إليه؟ كل شيء بسيط هنا - مرسل المعاملة ومفاتيح تبادل المستلم باستخدام بروتوكول Diffie-Hellman ، باستخدام مفتاح المعاملة ومفتاح عرض المستلم وحساب السر المشترك. يكتب المرسل في الحقول الخاصة لبيانات المعاملة على كميات المخرجات المشفرة باستخدام هذا المفتاح المشترك.

البراهين النطاق

ولكن ماذا يحدث إذا استخدمت رقمًا سالبًا كمبلغ الالتزامات؟ قد يؤدي هذا إلى توليد عملات إضافية! مثل هذه النتيجة غير مقبولة ، لذلك نحن بحاجة إلى ضمان بأن المبالغ التي نستخدمها ليست سلبية (دون الكشف عن هذه المبالغ ، بالطبع ، وإلا فإن الكثير من العمل وكل هذا عبثًا). بمعنى آخر ، يجب أن نثبت أن المجموع يقع في الفترة [0 ، 2 ن - 1].

للقيام بذلك ، يتم تقسيم مجموع كل ناتج إلى أرقام ثنائية ويتم اعتبار الالتزام لكل رقم على حدة. كيف يحدث هذا أفضل من خلال مثال.

لنفترض أن مجاميعنا صغيرة وتتناسب مع 4 بتات (عمليا 64 بت) ، وننشئ مخرجات بمبلغ 5 XMR. نحن نأخذ في الاعتبار الالتزامات الخاصة بكل فئة والالتزام الإجمالي لكامل المبلغ:المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أين
علاوة على ذلك ، يتم خلط كل التزام مع بديل (CI-2iH) وتوقيع أزواج مع توقيع حلقة Borromean (توقيع خاتم آخر) اقترحه Greg Maxwell في عام 2015 (يمكنك قراءة المزيد عنه هنا):
المعاملات السرية في Monero ، أو كيفية نقل من يعرف ماذا إلى من يعرف أينبشكل جماعي ، يسمى هذا برهان النطاق ويضمن أن الالتزامات تستخدم مبالغ في النطاق [0 ، 2 ن - 1].

ما هي الخطوة التالية؟

في التطبيق الحالي ، تشغل براهين النطاق مساحة كبيرة - 6176 بايت لكل إخراج. هذا يؤدي إلى معاملات كبيرة ، وبالتالي ، عمولات أعلى. لتقليل حجم معاملة Monero ، يقدم المطورون مواد مضادة للرصاص بدلاً من توقيعات Borromeo - آلية دليل النطاق دون التزامات بت. حسب بعض التقديرات، فهي قادرة على تقليل مدى إثبات النطاق بنسبة تصل إلى 94٪. بالمناسبة ، في منتصف يوليو ، مرت التكنولوجيا аудит من Kudelski Security ، والتي لم تكشف عن أوجه قصور كبيرة في كل من التكنولوجيا نفسها وتنفيذها. يتم نشر التكنولوجيا بالفعل على testnet ، ومع هارد فورك الجديد ، من المحتمل أن تنتقل إلى الشبكة الرئيسية أيضًا.

اطرح أسئلتك ، واقترح موضوعات لمقالات جديدة حول التقنيات في مجال العملات المشفرة ، واشترك أيضًا في مجموعتنا في فيسبوكلمواكبة الأحداث والمنشورات لدينا.

المصدر: www.habr.com

إضافة تعليق