توقيعات شبكة مونيرو

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

الصورة

التوقيعات المتعددة هي آلية لإنشاء واستخدام المحافظ المشتركة. المفهوم نفسه ليس جديدًا ، فقد تم تنفيذه بالفعل في بعض العملات المشفرة ، مثل Bitcoin و Ethereum وغيرها. يكمن جوهرها في الملكية المشتركة والتخلص من أموال المحفظة. يتم وضع بعض القيود على التصرف في الأموال: لإجراء معاملة ، من الضروري جمع عدد معين من الأصوات ، والذي يتم تعيينه عند إنشاء محفظة ويعتمد على عدد أصحابها.

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

التشفير في مونيرو


يعتمد التشفير في Monero (كما هو الحال في معظم العملات المشفرة الأخرى) على منحنيات بيضاوية الشكل. يمكنك أن تقرأ عنها على ويكيبيديا . باختصار ، مزايا نظام التشفير هذا هي قوة تشفير أعلى مقارنة بأنظمة التشفير الكلاسيكية ، وحجم مفتاح صغير وسرعة أعلى لعمليات التشفير.

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

علاوة على ذلك ، في المقالة ، سنشير إلى المفاتيح العامة بحروف كبيرة (على سبيل المثال ، B - مفتاح الإنفاق العام) ، والخاصة - الأحرف الصغيرة (ب - مفتاح الإنفاق الخاص). لفهم بعض الحسابات أدناه ، نعرض في المقالة كيف يتم توارث المفتاح العمومي من المفتاح الخاص:

الصيغة: وراثة مفتاح عام. ب = ب

، حيث G هي نقطة ثابتة ، فإن ضرب مفتاح خاص (عددي) يعطي مفتاحًا عامًا ، وهو أيضًا نقطة على منحنى بيضاوي.

توقيعات شبكة مونيرو


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

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

إنشاء محفظة متعددة الأقسام في مونيرو


نسخة الإصدار الحالية من Monero تدعم فقط مخططات N / N و N - 1 / N.

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

بالنسبة لمحافظ N - 1 / N ، تظهر مجموعة مفاتيح أخرى. هذه المجموعة عبارة عن مجموعة من المفاتيح الخاصة ، يتم حسابها كمنتج لمفتاح الإنفاق الخاص الحالي بواسطة كل من مفاتيح الإنفاق العام للمشاركين الآخرين ، أي (باستثناء وظيفة التجزئة للبساطة):

الصيغة: حساب المفاتيح المتعددة

وبالمثل لكل من المشاركين.

سيكون مفتاح الإنفاق الخاص لكل مشارك هو مجموع مفاتيحه المتعددة ، أي:

الصورة

يقوم كل مشارك بهذه العملية. يجب ملاحظة خاصية مهمة واحدة من هذه الأعمال ، على سبيل المثال:

الصورة

ويترتب على هذه المساواة أن كل محفظة لديها مفتاح متعدد (في مثالنا مع مخطط 2/3) ، لديه مشارك آخر.

بعد جيل ، يتبادل المشاركون مفاتيح عامة متعددة:

الصيغة: حساب مفتاح متعدد الوسائط العام

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

الصيغة: حساب مفتاح الإنفاق العام

كما نرى ، لحساب مفتاح الإنفاق (الخاص والعام) في حالة 2/3 ، نحتاج إلى معلومات كافية من أي مشاركين.

هذا يكمل إنشاء المحفظة ، ويمكن استخدامها وفقًا للمخطط المحدد.

المعاملات في مونيرو


لتوضيح كيفية إنشاء المعاملات المتعددة ، دعنا نراجع بإيجاز كيفية تنظيم المعاملة في Monero. مبسطة (بدون توقيعات الحلقة و RingCT) يمكن تخيلها على النحو التالي:

تمثيل المعاملات المبسطة

الشكل 1. عرض المعاملات المبسطة

هنا ، على اليمين ، تظهر مخرجات المعاملة - الأموال التي تولدها (تشبيه مباشر: الأوراق النقدية في المحفظة) ، والمدخلات على اليسار هي الأموال التي تحرقها.

وبالتالي ، عندما تريد أليس إرسال 1 XMR إلى Bob ، تقوم بجمع عمولة XMR plus واحدة من مخرجاتها غير المنفقة ، وتضعها في مكان إدخال المعاملات ، وتحسب صورة رئيسية لكل منها ، وتنتج مخرجات بمبلغ 1 XMR وتحسب لكل من لهم مفتاح الإخراج.

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

على الرغم من حقيقة أن المعاملة متعددة الزوايا من وجهة نظر الشبكة لا تختلف عن أي معاملة أخرى ، إلا أن إنشائها أكثر تعقيدًا بعض الشيء وفي عدة مراحل:

  • يتبادل المشاركون صورًا أساسية جزئية لمخرجات معروفة (أو ببساطة يتبادلون المخرجات)
  • يعيد المشاركون مزامنة محافظهم من أجل الحصول على توازن دقيق ، مع مراعاة الصورة الرئيسية الكاملة بالفعل
  • يقوم المرسل بإعداد المعاملة وتوقيعها وإرسالها إلى المشارك التالي
  • يضيف كل مشارك لاحق جزءًا من توقيع RingCT.
  • الموقِّع الأخير يكمل RingCT

والآن أصبحت المعاملة جاهزة لإرسالها إلى الشبكة.

توليد الصورة الرئيسية ومشاركة الإخراج


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

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

فكر في عملية تكوين صورة رئيسية. يتم حسابه بالصيغة:

الصيغة: الصورة الرئيسية للتكوين

، حيث Hp هي دالة تجزئة محددة مسبقًا ، P هي مفتاح الخروج العام (انظر الشكل 1) ، x هو مفتاح الخروج الخاص الذي سيتم استعادته لمستلم هذا الإخراج ، يتم حسابه على النحو التالي:

الصيغة: استعادة مفتاح الخروج الخاص

، حيث Hs هي دالة تجزئة تشفير معينة معروفة ، a هو مفتاح عرض خاص ، R هو مفتاح معاملة عامة (Tx pub key ، انظر الشكل 1) ، و b هو مفتاح إنفاق خاص. باستبدال تعبير في آخر وفتح الأقواس ، نحصل على:

الصيغة: حساب الصورة الرئيسية

ولكن نظرًا لعدم وجود مفتاح إنفاق كامل ، فنحن بحاجة إلى استعادته. في حالة N / N ، كل شيء بسيط (خذ على سبيل المثال 3/3):

الصيغة: استعادة الصورة الرئيسية لـ N / N

هنا H p (P) b i هي صورة رئيسية جزئية تم استلامها من المشارك الأول.

بالنسبة للمخططات N - 1 / N (2/3 نيابة عن المشارك الأول بدون مشاركة الثالث):

الصيغة: استعادة الصورة الرئيسية لـ N - 1 / N

في هذه الحالة ، H p (P) b i B j هي صورة رئيسية جزئية.

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

بعد الحصول على هذه البيانات ، يمكن لبادئ المعاملة تكوينها وإعدادها للتوقيع. يتم إرسال المعاملة التي تم إنشاؤها إلى جميع الذين يوافقون على التوقيع عليها لإنشاء توقيعات Ring CT ، ويتم إنشاء جميع التوقيعات اللازمة وإرسال المعاملة إلى الشبكة.

أتمتة تبادل البيانات


يتم وصف الإجراءات المذكورة أعلاه لتبادل أجزاء من المفاتيح والصور الرئيسية التي يجب تنفيذها إما مرة واحدة أو بعد كل معاملة يتم إرسالها. في تطبيق Monero Core Wallet الحالي ، يُقترح تنفيذ هذه الإجراءات يدويًا من خلال تبادل البيانات الضرورية يدويًا عبر قنوات الاتصال الآمنة مع مراسليهم (من خلال تصدير البيانات الضرورية من المحفظة وإرسالها عبر برامج المراسلة الفورية أو بطريقة أخرى).

يمكنك إظهار ذلك بمثال إنشاء محفظة وفقًا لنظام 2/3 وتوقيع المعاملة. يقوم كل مشارك بتنفيذ الأوامر التالية باستخدام أداة monero-wallet-cli:

  [محفظة 9uKCgo]: إعداد_متعدد
 MultisigV1baCWviNomMXe271W8HW4imh8SsnNEWP2bCswQfoB9MGzNZ8FUG3e8UCNm5toKQzSQH2e8rUWUCGazaCcvej1ToCQYBMovJZYaYiYWQvzsvyWruXycZdVDSsyugjEzwQNK3FUEkug2LXiH91NmekGb7kp9gK9kuoxDDhGn1nLKXUpnXR5
 أرسل هذه المعلومات المتعددة إلى جميع المشاركين الآخرين ، ثم استخدم make_multisig <threshold> <info1> [<info2> ...] مع معلومات multisig للآخرين
 يتضمن هذا مفتاح العرض PRIVATE ، لذا يجب الإفصاح عنه فقط للمشاركين في هذه المحفظة المتعددة 

 [محفظة 9uKCgo]: make_multisig 2 MultisigV1XQugvU4JwcwTQbKdH5qGFnavxUX54wGxNis2iN6zoLD94DahnXbyNxH1NQBp2rYRFFJCT2uiJbssHLJYEAb8X1tS5UCqTXYu3FkgRNSZt5mRNgE58iXZHPj839Pbm3ozGcXmRT6GcRMMxMjRonfYKpnPq1UyZSMN7Qr9AYin1gYyoJSh MultisigV1HVqTW8P4UNWUE8QfBaEdwDWJuXBWEPnTrKqVJiUudGG14cHREk9TKmeR9xzSs4wf4jd22mV94C2ehSViApawnpp2SpRqp19eKXLHz2JmNp7eGR6TJMt4VsDTqANRwb1FtD9weef342f5KXDRZK7iQT1MTubyHhEcFyV5aLCjjQ8owMkH
 مطلوب خطوة أخرى
 MultisigxV1PQwytRuYGkB6UEVJ7v2S7q492cwNTdwySXyasToAuQQq73TvM1rBrog5bcYz5w2P6Z4jwKtzrHr7shRGo5mAShvLVbYtBdQNhQsizMb51K7iaWQB4te5mQaiB1cok84CbvA9WKnVpTJGyb7SbS7NwAgmpEhU812RTdzrdHp5sD41duYtRNW6qna5mTMYmtTjAEdKpKCvM6EwhV4ncWscpvoBfyYP
 أرسل معلومات multisig إلى جميع المشاركين الآخرين ، ثم استخدم finalize_multisig <info1> [<info2> ...] مع معلومات multigig للآخرين

 [محفظة 9uKCgo]: finalize_multisig MultisigxV1PdeMJo5rxcWTXDJ7rbyuacBseugsn2djZKKEdwvFYVmz73TvM1rBrog5bcYz5w2P6Z4jwKtzrHr7shRGo5mAShvLUxykuq5gho7gGQBCEa3JmBaY7rNHqqUaCUs1WWQi9tojZTMmCJJ4evwJzcXEDqcAd7ShwxsJtJtXdiATs54BbBfyCbwXbnDRKAtagJF36z74KJA58NgEmnHv23ZQeePCoacM MultisigxV1RTwyE53FjKPQaAn4ZMWM5hc8C92eJndpyKby4L9HpF2TUxykuq5gho7gGQBCEa3JmBaY7rNHqqUaCUs1WWQi9tojVbYtBdQNhQsizMb51K7iaWQB4te5mQaiB1cok84CbvA928U2yJFK86jNxtMopxHkcnYjjeYfp8TAB53Y1CukBiHfL2M4EztDALXLReXjJxkMry65Jw6vVePJp2T5CW8T8QE5 

قبل إرسال المعاملة ، يجب على الطرفين تبادل صور رئيسية جزئية:

  [محفظة 9uKCgo]: export_multisig_info ki1
 تم تصدير معلومات Multisig إلى ki1
 [محفظة 9uKCgo]: import_multisig_info ki2 ki3
 الارتفاع 1103873 ، txid <f7e648915287fafca1dc67eb26267e09f92bba7ab7fd52a12600c3e6440db0eb> ، 2.000000000000 ، idx 0/0
 الارتفاع 1103882 ، txid <2e3a5591c741c0943a47a2bcbd1ec26493158088c88308bcbfc97423ea95c491> ، 0.009000000000 ، idx 0/0
 تم استيراد معلومات Multisig 

بعد ذلك ، تتم إعادة مزامنة المحفظة مع مراعاة المفاتيح الكاملة ، وبعد استلام البيانات حول المدفوعات الصادرة ، يمكن للمشارك تحضير المعاملة:

  [محفظة 9uKCgo]: نقل 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX 1
 لم يتم تضمين معرف الدفع في هذه المعاملة.  هل هذا جيد؟  (نعم / نعم / لا / لا): ص
 يوجد حاليًا مجموعتان متراكمتان على مستوى الرسوم.  هل هذا جيد؟  (نعم / نعم / لا / لا)

 المعاملة 1/1:
 الإنفاق من فهرس العناوين 0
 إرسال 1.000000000000.  رسوم المعاملة 0.012000000000
 هل هذا جيد؟  (نعم / نعم / لا / لا): ص
 تمت كتابة المعاملة (المعاملات) غير الموقعة بنجاح على الملف: multisig_monero_tx 

من الضروري نقل الملف الذي تم إنشاؤه إلى مشارك آخر للتوقيع وإرساله إلى الشبكة:

  [محفظة 9twQxU]: sign_multisig multisig_monero_tx
 تحميل 1 المعاملات، ل+1.031762770000، رسوم 0،012000000000، وإرسال 1،000000000000 إلى 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX، 0،019762770000 تغيير 9uKCgopHzXrQLnph1ZNFQgdxZZyGhKRLfaNv7EEgWc1f3LQPSZR7BP4ZZn4oH7kAbX3kCd4oDYHg6hE541rQTKtHB7ufnmk، مع حجم خاتم دقيقة 7، لا ID الدفع.  هل هذا جيد؟  (نعم / نعم / لا / لا): ص
 تم توقيع المعاملة بنجاح لملف multisig_monero_tx ، txid 1d28af64bc78d05b625c4f7af7c321d4c8943c4c2692f57aa53e303387f40db6
 [محفظة 9twQxU]: Submit_multisig multisig_monero_tx
 تحميل 1 المعاملات، ل+1.031762770000، رسوم 0،012000000000، وإرسال 1،000000000000 إلى 9vUnTucAioDHD4ZqrFHXAgfLqrsC3LkZ6JFr5axBLhDiFMaHuEk33aqXimoZEMtQh5ibdYxcNSBw2hBZLAsCnuw4B4rBeZX، 0،019762770000 تغيير 9uKCgopHzXrQLnph1ZNFQgdxZZyGhKRLfaNv7EEgWc1f3LQPSZR7BP4ZZn4oH7kAbX3kCd4oDYHg6hE541rQTKtHB7ufnmk، مع حجم خاتم دقيقة 7، لا ID الدفع.  هل هذا جيد؟  (نعم / نعم / لا / لا): ص
 تم إرسال المعاملة بنجاح ، المعاملة <1d28af64bc78d05b625c4f7af7c321d4c8943c4c2692f57aa53e303387f40db6>
 يمكنك التحقق من حالتها باستخدام الأمر `show_transfers`. 

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

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

يمكنك معرفة المزيد عن هذا المشروع على wallet.exan.tech ، وحول الموارد التي ندعمها لشبكة Monero ، راجع exan.tech/en/projects/monero .

الخلاصة


لقد درسنا آلية إنشاء محافظ متعددة الحسابات وتكوين المعاملات مع التوقيعات المتعددة في Monero. حاليًا ، لا يتم دعم سوى مجموعة محدودة من مخططات التوقيع ، ولكن سيتم توسيعها إلى صيغ عشوائية من النموذج 2/5 ، وما إلى ذلك. الآلية الحالية لتبادل البيانات اللازمة لتشغيل المحفظة غير ملائمة إلى حد ما ، ولكن بسبب انفتاح نظام Monero البيئي بمساعدة حلول الطرف الثالث ، يمكن تقديمها إلى الجودة المعتادة للمستخدمين العاديين.

في المقالات التالية ، سنتحدث عن جوانب أخرى من جهاز Monero: RingCT وتوقيعات الحلقة ، وبنية المحفظة ومكتبة libwallet ، بالإضافة إلى آفاق تطوير هذا blockchain.

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

Source: https://habr.com/ru/post/ar412921/


All Articles