كيف يعمل BitSignature في Bitcoin

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

عنوان متعدد التواقيع


عنوان Multisignature (عنوان multisig ، باختصار) هو عنوان Bitcoin يتم إرفاق عدة أزواج من مفاتيح ECDSA مرة واحدة. يتكون كل زوج من مفاتيح خاصة وعامة. قد تختلف أنماط الدمج التي يمكن استخدام هذه المفاتيح وفقًا لها. علاوة على ذلك ، من الممكن تهيئة الظروف التي بموجبها سيكون من الضروري تقديم العديد من التوقيعات من أجل إنفاق العملات المعدنية من العنوان.

معاملة بيتكوين تستخدم توقيع متعدد


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

الصورة

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

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

خيارات الجمع بين المفاتيح


هناك العديد من مجموعات المفاتيح الرئيسية عند استخدام عنوان التوقيع المتعدد. الخيارات الأكثر استخدامًا هي 2 من 2 و 2 من 3 و 3 من 3. أقصى خيار ممكن هو 15 من أصل 15.

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

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

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

دعنا نذهب عبر خيارات استخدام هذه المجموعات.

2 من 2


تخيل أن الزوج والزوجة يريدان الحفاظ على ميزانية مشتركة.

الصورة

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

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

كيف تتجنب مثل هذه الحالة وتحمي العملات من الخسارة النهائية للعملات؟

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

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

2 من 3


افترض أن هناك مجموعة من الأشخاص لديهم ميزانية مشتركة.

الصورة

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

مثال على خدمة المحفظة


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

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

الصورة

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

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

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

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

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

فوائد خدمات المحفظة 2 من 3


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

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

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

احتياطات التوقيع المتعدد


والآن يجدر الحديث عن الاحتياطات المتعلقة بالتوقيع المتعدد. في حالة 2 من 2 ، تحتاج إلى إنشاء معاملات LockTime التي يمكنها تحويل الأموال المحظورة إلى عنوان معين. هذا صحيح عندما يحدث فقدان المفتاح.

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

كيف يعمل برنامج Bitcoin Script (على سبيل المثال)


لكي نفهم بمزيد من التفصيل كيف يعمل التوقيع المتعدد ، نحتاج إلى التحدث قليلاً عن كيفية عمل برنامج Bitcoin Script: كيف يتم تعيين قواعد إنفاق العملات المعدنية ، وكيفية تلبيتها ، وما هي عمليات وصف القواعد ، وما هو Bitcoin Script وكيف يتم تنفيذه.

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

الصورة

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

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

علاوة على ذلك ، يشير مؤشر التنفيذ إلى المفتاح العام - يتم دفعه أيضًا إلى المكدس.

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

بعد ذلك ، يتم إجراء التجزئة باستخدام وظيفة التجزئة Hash-160. هذا يعني أن الجزء العلوي من المكدس قد تم تجزئته أولاً بواسطة خوارزمية SHA-2 بطول 256 بت ، ثم بواسطة الدالة RIPEMD-160 بطول 160 بت. العملية هي نفسها تمامًا عند تجزئة المفتاح العام والحصول على العنوان. في الواقع ، هذا هو.

الصورة

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

العملية التالية هي التحقق على قدم المساواة.

الصورة

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

تعلمنا كيف يعمل برنامج Bitcoin Script للتحقق من المدخلات والمخرجات البسيطة للمعاملة. سنتحدث الآن عن كيفية تنظيم التوقيع المتعدد وكيف يعمل عند استخدام Bitcoin Script.

P2SH


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

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

تم قبول هذا الاقتراح لتحسين Bitcoin في 3 يناير 2012. في الواقع ، عيد ميلاد بيتكوين. الآن يتم استخدامه بنشاط لتنفيذ عنوان متعدد التوقيع.

كيف يعمل P2SH؟


دعونا نلقي نظرة على مثال لكيفية عمل ذلك. لإنشاء معاملة ، نحتاج إلى فهم مفاهيم مثل Redeem Script و Locking Script و Unlocking Script.

يحتوي برنامج Redeem Script على المفاتيح العامة التي سيتم ربط عنوان التوقيع المتعدد بها. في هذه الحالة ، ندرس مجموعة من المفاتيح "2-of-5". تأتي أولاً القيمة 2 ، أي أننا نشير إلى أنه سيكون من الضروري وجود توقيعين ، والتي سيتم التحقق منها من خلال المفاتيح العامة المقابلة. يتبع ذلك مفاتيح عمومية ، في حالتنا هناك 5. بعد ذلك ، نشير إلى القيمة 5 ، حيث حددنا 5 مفاتيح عامة ، وعندما تتم قراءة البيانات بترتيب عكسي ، فهذه القيمة مطلوبة لفهم عدد المفاتيح التي تحتاج إلى قراءتها. بعد ذلك ، يشار إلى فحص التشغيل متعدد التوقيع.

Locking Script - نص برمجي موضح في إخراج معاملة يدفع مقابل عنوان متعدد التوقيع.هنا سيتم تنفيذ عملية الحصول على قيمة التجزئة ، والتي أصبحنا بالفعل على دراية بها بالتفصيل. التالي هو قيمة تجزئة Redeem Script ، والتي تستغرق 20 بايت. بعد ذلك ، يتم إجراء عملية للتحقق من مطابقة البيانات لقيمة التجزئة الفعلية.

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

من المهم أن تكون هناك قيود على الحجم الأقصى لكل من النصوص البرمجية المدرجة وهو 520 بايت. تم حساب هذا الرقم على أساس أن Unlocking Script يمكنه احتواء 15 توقيعًا و 15 مفتاحًا عامًا مقابلًا ، بالإضافة إلى العديد من العمليات للتحقق من هذه القيم. هذه هي الطريقة التي تم بها الحصول على رقم معين ، والذي عند التقريب ، أعطى 520 بايت. يجب أن يقال أن هذا الرقم تم الحصول عليه مع توقع أن عنوان التوقيع المتعدد من نوع "15 من 15" هو حد معقول بما يكفي للاستخدام العملي. استرداد البرنامج النصي عند استخدام عدد كبير من التوقيعات يصبح كبيرًا جدًا في الحجم. المستخدم الذي يستخدم العنوان متعدد التوقيع أو عناوين P2SH الأخرى ، عند إنفاق العملات المعدنية منها ، لديه معاملات كبيرة جدًا. هذا يعنيلتأكيد معاملاته ، سيتعين عليه دفع عمولات كبيرة.

فوائد P2SH


سننظر بشكل منفصل في مزايا P2SH. الأول هو أنه يمكن ترميز هذه العناوين بالشكل المألوف باستخدام Base58 ، حيث يبلغ طولها 34 حرفًا. وفقًا لـ BIP13 ، التي تحدد قواعد إعداد بايت الإصدار لعناوين Bitcoin المشفرة بواسطة Base58Check ، سيبدأ العنوان بثلاث ، أي أنه يتم إدراج بايت إصدار معين هناك.

كمثال ، يمكنك رؤية عنوان P2SH.

3P14159f73E4gFr7JterCCQh9QjiTjiZrG

قد لا يكون هذا عنوانًا متعدد التوقيع . يمكن أن يصف Redeem Script ليس فقط العنوان متعدد التوقيع ، ولكن أيضًا القواعد المعقدة الأخرى لإنفاق العملات المعدنية.

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

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

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

الصورة

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

هذا النهج يؤتي ثماره عند الحاجة إلى إعادة حساب المفاتيح العامة من المفاتيح الشخصية. يجب أن تكون متسلسلة بنفس الترتيب تمامًا ، لأن الخطوة التالية هي إنشاء نص Redeem وتجزئة. إذا دخلت نفس المفاتيح بالضبط في Redeem Script ، ولكن بترتيب مختلف ، فسوف نحصل على قيمة تجزئة مختلفة وعنوان مختلف. سيترتب على ذلك سوء فهم معين. لذلك ، قبل التسلسل ، يجب فرز المفاتيح العامة وفقًا لبعض القواعد. وغالبا ما يستخدمون الفرز الأبجدي في نظام الأرقام Base58.

لذلك قام Bob بحساب قيمة التجزئة من Redeem Script. يمكنه تمثيله على أنه 20 بايت وإرساله إلى Alice ، قائلًا أن هذا عنوان متعدد التوقيع باستخدام P2SH. ومع ذلك ، يمكن لـ Bob ترميزه باستخدام بايت إصدار ، مثل العنوان العادي ، وإرساله إلى Alice. ستفهم أليس من إصدار بايت أن هذا عنوان متعدد التوقيع ، ويؤلف معاملة ، ويملأ ناتجها وفقًا لذلك حتى يتلقى بوب عملاته المعدنية. ثم تقوم بنشر المعاملة على الشبكة. إنهم ينتظرون التأكيد ويقبل بوب الدفع من أليس. بديل Bob ، على سبيل المثال ، يوفر خدمة أو ينقل البضائع.

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

لنفترض أن بوب يريد إرسال دفعة إلى Eve.

الصورة

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

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

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

الأسئلة


الآن نأتي إلى أسئلتك.

- هل من الممكن تشغيل نفس المحفظة في وقت واحد على ثلاثة أجهزة كمبيوتر مختلفة وبدء التزامن؟

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

— P2SH Segregated Witness?

الشاهد المنفصل هو هيكل للمعاملات حيث يتم نقل دليل ملكية العملات المعدنية إلى هيكل منفصل ، ولا تقع في blockchain ، ولكن عند التحقق من صحة المعاملات ، يتم توزيعها معًا ، أي أن جميع المصادقين يتحققون من صحة المعاملات في هيكل منفصل مع إثبات. بعد تأكيد المعاملة ، لا يتم حفظ الدليل ، لأنه لا معنى له. هناك أيضًا مزايا في بناء سلاسل المعاملات هذه حيث يتم إنفاق بعض العملات المعدنية بالفعل دون تأكيد فعلي في المعاملة الحالية في العملة التالية المبنية على أساسها ، ولكنها لا يتم توزيعها على الشبكة. وبالتالي ، يتم تشكيل سلاسل المعاملات التي لا تكشف عن دليل على ملكية العملات المعدنية. هذا يسهل نقل البيانات ويضيف الخصوصية. تم استخدام نوع مختلف من العناوين لـ Segregated Witness ،يحتوي على معاملات مختلفة قليلاً. من الممكن إرسال العملات المعدنية المخزنة في العناوين العادية ، بما في ذلك عناوين P2SH ، إلى عناوين Witness P2SH.

- هل تبدأ العناوين من الثلاثة الأوائل في شبكة الإضاءة؟

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

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

— , 70-80%, ?

من المكتوب جيدًا أن هذه عملة وليست عملة مشفرة ، لأن العملة المشفرة تعمل على نفس مبادئ Bitcoin ، أي أن جميع العمليات لا مركزية إلى أقصى حد: الانبعاثات والتحقق من المعاملات وتخزين البيانات وقبول التغييرات وما إلى ذلك. ولكن هناك مثل هذه العملات ، سنطلق عليها العملات الرقمية ، حيث لا تكون جميع العمليات المذكورة غير لامركزية. قد يكون أحد الخيارات قضية مركزية ، أي أنه لا يوجد شيء مثل التعدين والتعدين ، أي أنه لا يوجد حل لمشكلة معقدة. وفقا لهذا المبدأ ، عمل Ripple ، Stellar ، العملة الرقمية NXT ، Cardano. تم تطبيق مبادئ أخرى لتوزيع العملات المعدنية بين المستخدمين هناك ، على سبيل المثال ، من خلال ICOs ، وإثبات الهوية ، وما إلى ذلك. نظرًا لحقيقة أنه ليس كل العمليات يمكن أن تكون لا مركزية ومستقلة ، فلا يمكنك تسمية أي عملة رقميةعملة مشفرة . بالإضافة إلى ذلك ، فإن مسألة الثقة بعملة معينة مسألة شخصية بطبيعتها. أنت من يقرر مقدار هذه الثقة. من الضروري مراعاة الأغراض التي تُستخدم العملة من أجلها ، بالإضافة إلى مخاطرها وحدودها.

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


All Articles