Segregated Witness(隔离见证) هي اقتراح يهدف إلى حل مشكلة قابلية تغيير المعاملات في سلسلة الكتل الخاصة بالبيتكوين (BIP-141).


1. ما هي قابلية تغيير المعاملات (Transaction Malleability)؟

即交易内容没有变,但是交易id变了。在btc网络中使用的ECDSA签名算法,由于椭圆曲线的对称性,对某个交易进行签名,总是可以计算出两个有效的签名,并且这两个有效的签名还可以互相计算出来。在广播了一笔交易之后,再用不同的签名发布一笔相同内容的交易,这两笔交易内容一样,但交易id不同,会在网络中误导网络中的参与者。


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

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


3. يبدو أن المشكلة في الواقع ناتجة عن استخدام معرّف المعاملة (transaction id) كهوية للمعاملة، فهل يمكن عدم استخدام transaction id كمعرّف للمعاملة؟

لنحلّل محتوى كتل البيتكوين، مثل استخدام ارتفاع الكتلة + موضع المعاملة لتحديد الهوية؟ أو تحديدها بنفسك اعتمادًا على تجزئة مدخلات + مخرجات المعاملة؟ هذه بالفعل يمكن أن تكون معرّفات فريدة، لكن إما أنها منخفضة الكفاءة عمليًا، أو ليست مريحة وآمنة مثل transaction id (حيث إن transaction id يُسجَّل مباشرةً في محتوى الكتلة، وبعد إدراجه على السلسلة يصبح غير قابل للتغيير إلى الأبد).


4. كيف يحل segwit مشكلة قابلية تمديد المعاملة؟

يقوم segwit بفصل بيانات توقيع المعاملة (الشاهد) عن الكتلة، بحيث إن تغيير التوقيع لم يعد يؤثر على transaction id، وبذلك تم حل هذه المشكلة بفعالية. كما أن segwit قلّل إلى حد ما حجم الكتلة وزاد من قدرة معالجة المعاملات (مثلًا يمكن لـ SPV معالجة عدد أكبر من محتوى المعاملات ضمن نفس عرض النطاق الترددي).

segwit


5. كيف تم حل هذه المشكلة قبل segwit؟

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

#BTC☀ #SegWit #技术学习

BTC
BTC
81,944
-0.97%