
كيف تهدد ثغرات CVE-2025-29774 وخطأ SIGHASH_SINGLE طرق تشغيل محافظ التوقيع المتعدد باستخدام RawTX مزيف
في هذه المقالة، سننظر في الهجوم التشفيري لتزوير التوقيع الرقمي (Digital Signature Forgery Attack)، حيث تشكل عواقبه تهديدًا لأمن المعاملات في شبكة البيتكوين، لأن التوقيعات الرقمية تؤكد ملكية وتحويل العملات المشفرة. سننظر في أمثلة على تأثير مثل هذه الهجمات على البيتكوين بناءً على الأبحاث الحديثة والثغرات المكتشفة.
هجوم تزوير التوقيع الرقمي هو محاولة من قبل المهاجم لإنشاء توقيع رقمي مزيف لـ ECDSA سيعترف به شبكة البيتكوين على أنه صالح. يسمح هذا الهجوم بتفويض المعاملات دون معرفة المفتاح الخاص للمالك، مما يعرض أمن الأموال في محفظة العملات المشفرة لحامل عملة BTC للخطر.
في التشفير، يوفر التوقيع الرقمي تأكيدًا على صحة رسالة أو معاملة. تزوير التوقيع يعني أنه من الممكن إنشاء زوج "RawTX" سيقبله النظام على أنه صالح، على الرغم من أنه في الواقع لم يتم إنشاؤه بواسطة مالك المفتاح الخاص. وهذا يفتح الطريق أمام الاحتيال وسرقة الأموال وانتهاك سلامة سلسلة الكتل. يتم تنفيذ هجوم تزوير التوقيع الرقمي (DSFA) كهجوم تشفيري في مكونات برمجية تستخدم مكتبة xml-crypto للتحقق من توقيعات مستندات XML على منصة Node.js.
بادئ ذي بدء، يتعلق هذا بحلول التكامل المؤسسي والخدمات السحابية وأنظمة تسجيل الدخول الموحد، مثل IBM App Connect Enterprise Certified Container والتطبيقات الأخرى التي تعتمد على xml-crypto لمصادقة SAML والتفويض. لا ترتبط الثغرات بأجهزة مادية محددة، بل يتم تنفيذها في منتجات برمجية تستخدم المكتبة المعرضة للخطر.
يتم تنفيذ الثغرات CVE-2025-29774 وCVE-2025-29775، المعروفة باسم هجوم تزوير التوقيع الرقمي، في مكتبة xml-crypto البرمجية ، وهي مكتبة للتوقيع الرقمي وتشفير مستندات XML على منصة Node.js.
النشرة الأمنية: معاملات حاوية IBM App Connect Enterprise Certified Container المعتمدة معرضة لتجاوز التحقق من التوقيع في بيانات XML [CVE-2025-29774] [CVE-2025-29775]
الإفصاح عن CVE-2025-29774 وCVE-2025-29775 (SAMLStorm).
وبالتالي، ينفذ هذا الكود خوارزميات التوقيع التشفيري والتحقق من التوقيع لمخططات مختلفة (RSA مع تجزئات SHA مختلفة وHMAC-SHA1)، مما يسمح بدمجها في الأنظمة التي تتطلب توقيعًا رقميًا للبيانات.
يُستخدم كود signature-algorithms.ts لإنشاء والتحقق من التوقيعات الرقمية بشكل آمن، مما يضمن صحة البيانات وسلامتها. توفر توقيعات ECDSA التحقق من التأليف باستخدام مفتاح خاص، وتوفر HMAC التحقق من السلامة والأصالة باستخدام مفتاح سري. تتوافق الخوارزميات المستخدمة مع معايير XML Digital Signature (تشير URIs الخوارزميات إلى مواصفات W3C).
وبالتالي، فإن كود signature-algorithms.ts ينفذ خوارزميات التوقيع التشفيري والتحقق من التوقيع لمخططات مختلفة (ECDSA، RSA مع تجزئات SHA مختلفة وHMAC-SHA1)، مما يسمح بدمجها في الأنظمة التي تتطلب توقيعًا رقميًا للبيانات.
SignatureAlgorithm وتوفر طرقًا لـ:
getSignature): تأخذ بيانات التوقيع ومفتاح خاص، وتعيد توقيعًا رقميًا بتنسيق base64.verifySignature): تأخذ الإدخال والمفتاح العام والتوقيع، وتعيد قيمة منطقية تشير إلى ما إذا كان التوقيع صحيحًا.getAlgorithmName): تعيد URI يحدد خوارزمية التوقيع المستخدمة.crypto.createSign و crypto.createVerify مع الخوارزميات المقابلة ("RSA-SHA1"، "RSA-SHA256"، "RSA-SHA512").crypto.createHmac مع خوارزمية "SHA1".createOptionalCallbackFunction ، والتي تسمح على الأرجح باستخدامها مع كل من الاسترجاعات والوعود (التفاصيل غير موجودة في الكود).يحتوي استخدام خوارزمية RSA-SHA1 في التوقيعات التشفيرية على ثغرة تتعلق بتصادمات تجزئة SHA-1. يسمح هذا للمهاجم بإنشاء رسالتين مختلفتين بنفس التوقيع إذا كان يتحكم في جزء من البيانات الموقعة.
على وجه التحديد، المشكلة في الفئة RsaSha1:
const signer = crypto.createSign("RSA-SHA1"); // سطر معرض للخطر
signature-algorithms.ts#L7
أيضًا الثغرة الثانية موجودة في الفئة RsaSha1:
const verifier = crypto.createVerify("RSA-SHA1"); // سطر معرض للخطر
signature-algorithms.ts#L17
HmacSha1أقل عرضة للخطر، ولكنها أيضًا قديمة. HMAC أكثر مقاومة للتصادم من SHA-1 "المجرد"، ولكن الانتقال إلى SHA-256 هو الأفضل.
تعد CVE-2025-29774 وCVE-2025-29775 ثغرات حرجة في مكتبة xml-crypto لـ Node.js تتعلق بالتحقق غير السليم من التوقيعات الرقمية في مستندات XML. تسمح كلتا الثغرتين للمهاجم بتعديل رسائل XML الموقعة بطريقة لا يتم اكتشافها من خلال التحقق من التوقيع.
في الكود المقدم، تستخدم الفئات RsaSha1 الخوارزمية القديمة RSA-SHA1 للتوقيع والتحقق:
const signer = crypto.createSign("RSA-SHA1"); // سطر معرض للخطر رقم 7
const verifier = crypto.createVerify("RSA-SHA1"); // سطر معرض للخطر رقم 17SHA1 يعتبر غير آمن تشفيريًا، المشكلة الرئيسية تكمن في منطق معالجة المكتبة لبنى XML :
<SignedInfo> إلى مستند XML ، مما يؤدي إلى حساب تجزئة غير صحيح أثناء التحقق.<Signature> <SignedInfo>...</SignedInfo> <!-- العقدة الأصلية --> <SignedInfo>...</SignedInfo> <!-- أضافها المهاجم --> </Signature>
// استخدام SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");<SignedInfo> في التوقيع.معالجة هذه الثغرات أمر بالغ الأهمية للأنظمة التي تستخدم توقيعات XML للمصادقة (مثل SAML و SOAP).
مكتبة xml-crypto تُستخدم على نطاق واسع للتحقق من التوقيعات الرقمية في رسائل XML، بما في ذلك بروتوكولات مثل SAML و SOAP وغيرها. ويترتب على ذلك أن الثغرة قد تؤثر على:
لتقييم المخاطر على أجهزة محددة، يُوصى بالتحقق مما إذا كانت تستخدم إصدارات ضعيفة من xml-crypto أو تعتمد على آليات توقيع XML مماثلة. للعمل مع محافظ العملات الرقمية القائمة على Node.js، تقدم IBM حلولاً منفصلة، مثل IBM Secure Bitcoin Wallet، وهو تطبيق قائم على عميل Electrum Bitcoin يستخدم Node.js للتفاعل مع شبكة Bitcoin وإدارة المحفظة.
في هذا الحل، يمكن تخزين المفاتيح الخاصة والمحفظة وتشفيرها باستخدام IBM Cloud Hyper Protect Crypto Services (zHSM)، الذي يوفر تخزينًا آمنًا للأجهزة للمفاتيح. عادةً ما يتم تنفيذ إنشاء المفاتيح الخاصة لمحافظ Bitcoin في مكتبات تشفير متخصصة مثل Electrum و bitcoinjs-lib وما إلى ذلك، والتي يمكن دمجها في تطبيقات Node.js. يستخدم IBM Secure Bitcoin Wallet خلفية Electrum معدلة على Node.js لإدارة المفاتيح والمعاملات، من خلال التكامل مع IBM Cloud Hyper Protect Crypto Services، الذي يوفر تشفير الأجهزة والتخزين الآمن للمفاتيح الخاصة.
من نظرية الثغرة CVE-2025-29775 من المعروف أن المهاجم يمكنه معالجة مكتبة xml-crypto غير المحدثة لقيم معاملات غير صحيحة. دعنا ننتقل إلى الجزء العملي من المقالة وننظر في مثال باستخدام محفظة Bitcoin: 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe، حيث كانت هناك عملات مفقودة بقيمة: 0.059672 BTC اعتبارًا من يوليو 2025 هذا المبلغ هو: 7،052 USD
دعنا ننظر في التنسيق: المعاملة الأولية البيانات الثنائية والسداسية العشرية التي تحتوي على جميع المعلومات حول المعاملة. إنها ضرورية لنقل المعاملات أو التحقق منها أو إنشائها على مستوى منخفض وهي الأساس لعمل شبكة Bitcoin بأكملها. نادراً ما يواجه المستخدمون العاديون المعاملات الأولية بشكل مباشر، ولكن بالنسبة للمطورين ومشجعي العملات الرقمية، فهذه هي الأداة الرئيسية للتحكم الكامل في جميع معاملات شبكة Bitcoin.
المعاملة الأولية (Raw Transaction)
لاسترداد كائنات UTXO بالكامل في شبكة Bitcoin، سنستخدم أداة Dark AI. UTXO هو الجزء الرئيسي من بنية البيانات في blockchain ويمثل مقدار عملات BTC التي يمكن لحامل المفتاح الخاص (الذي يتحكم في عنوان Bitcoin هذا) إنفاقها. كل UTXO هو ناتج معاملة سابقة محددة، لم تُستخدم مطلقًا كمدخل في المعاملات اللاحقة.
https://colab.research.google.com/drive/1TKrJ0bKsNgc72H9UvzpCnh2YPmRsyPdW
الأوامر:
!wget https://darkai.ru/repositories/neuralnet_tools.zipwget— أداة سطر أوامر لتنزيل الملفات من الشبكة عبر بروتوكولات HTTP و HTTPS و FTP.neuralnet_tools.zipunzip— أمر لاستخراج أرشيفات ZIP في الدليل الحالي.يقوم هذا الأمر باستخراج جميع الملفات من neuralnet_tools.zip
!unzip neuralnet_tools.zip
دعنا نشغل الأمر ls لعرض سريع وسهل
ls
!./darkai
دعنا نشغل الأمر للحصول على معلومات حول ما يسمى مخرجات المعاملات غير المنفقة ( UTXO ، فك التشفير: Unspent Transaction Output ) لعنوان Bitcoin المحدد. هذه المعلومات مهمة لتقييم رصيد العنوان وإمكانية إجراء معاملات جديدة.
!./darkai -bitcoinaddress 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe[
{'output': '8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0', 'value': 677200},
{'output': 'bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0', 'value': 5000000}
]كل UTXO يحتوي على:
<txid>:<n>، حيث <txid> هو تجزئة فريدة للمعاملة، و <n> هو رقم المخرج في قائمة المخرجات لهذه المعاملة.8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0الرصيد الإجمالي المتاح للعنوان يساوي مجموع جميع UTXOs الموجودة:

نستخدم عملية التفسير لمعالجة مكتبة xml-crypto غير المحدثة لإنشاء قيم معاملات غير صالحة وإرسال مبلغ كبير، ستختار خوارزمية Dark AI أي UTXO تستخدمه (أو تجمع بين الاثنين).
عنوان Bitcoin 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe لديه UTXO نشطان بمجموع 0.05677200 BTC. يمكن استخدام هذه الأموال لإجراء معاملات جديدة؛ يعتبر كلا المخرجين مؤكدين وغير منفقين.
للحصول على أجزاء من المعلومات حول مخرجات معاملة بيتكوين، استخدم الأوامر التالية، حيث المخرج الأول (
outs) من المعاملة له معرف فريد8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd
!./darkai -deserialize 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — نص برمجي يحدد شروط إنفاق هذا المخرج.
a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287a914...87، والتي تتوافق مع تنسيق P2SH (الدفع إلى تجزئة النص البرمجي):
a9— OP_HASH160 (عامل التجزئة)14— طول القيمة التالية (20 بايت = 40 حرفًا سداسيًا عشريًا)06612b7cb2027e80ec340f9e02ffe4a9a59ba762— تجزئة (hash160) لعنوان محفظة بيتكوين نفسه حيث يتم تخزين عملات BTC.87— OP_EQUAL (عامل أمر أساسي في Bitcoin Script ينفذ مقارنة بين قطعتين من البيانات للتحقق من تطابقهما)نتيجة لإلغاء تسلسل المعاملة بواسطة المعرف،
8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afdتم الحصول على المخرج الأول، الذي يحتوي على مبلغ 677,200 ساتوشي (0.00677200 BTC)، محمي بواسطة نص برمجي P2SH. لإدارة هذه الأموال، سيكون من الضروري تقديم النص البرمجي الوجهة والتوقيع الصحيح لمعاملة فتح القفل التي تستوفي شروط التجزئة المحددة.
للحصول على أجزاء من المعلومات حول مخرجات البيانات الأصلية (
output) لمعاملة بيتكوين، قم بتطبيق الأوامر التالية، حيث المخرج الأول (outs) من المعاملة ذات المعرف الفريدbd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
!./darkai -deserialize bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786باستخدام عملية التفسير، وبمساعدة Dark AI باستخدام وظيفة إلغاء التسلسل، نحصل بعد ذلك على معلومات حول هيكل عنصر المخرج الأول ( output) للمعاملة الثانية بالمعرفbd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.
النتيجة:
{'value': 5000000, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}5000000'outs'. لا يمكن إنفاقه إلا إذا تم استيفاء الشروط المكتوبة في النص البرمجي المحدد في الحقل 'script'.
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'تتوافق القيمة المحددة مع نوع النص البرمجي القياسي في شبكة بيتكوين:
a9— كود العملية OP_HASH160 (ينتج RIPEMD-160 من SHA-256 من السطر التالي).14— طول الحقل التالي: 20 بايت (40 حرفًا سداسيًا عشريًا).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— تجزئة بطول 20 بايت تحدد إما عنوان محفظة بيتكوين أو نصًا برمجيًا.87— كود العملية OP_EQUAL.معًا، يعني هذا الإدخال عنوان P2SH (الدفع إلى تجزئة النص البرمجي). في هذه الحالة، يتم تخصيص الأموال لمجموعة معينة من النصوص البرمجية، ولصرفها، ستحتاج إلى الكشف عن النص البرمجي الذي تم تسجيل تجزئته هنا وتقديم توقيعات (أو بيانات أخرى) تفي بشروط هذا النص البرمجي.
الاستخدامات الأكثر شيوعًا لهذا المخطط هي للتوقيعات المتعددة، والعقود الذكية البسيطة والمعقدة، والتوقيعات المتعددة الثنائية، ومخططات الأمان الشرطية، وغيرها من السيناريوهات المتقدمة.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762وبالتالي، فإن نتيجة إلغاء التسلسل تبلغ عن وجود مبلغ معين من البيتكوين في عنوان شرطي (P2SH) وتحدد قواعد صارمة لإنفاقها، مما يلعب دورًا رئيسيًا في إدارة الأموال والمحاسبة في شبكة بيتكوين.
النص البرمجي 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'تم اختياره واستخدامه في مخرج هذه المعاملة لأنه يمثل نصًا برمجيًا قياسيًا P2SH (الدفع إلى تجزئة النص البرمجي) في شبكة بيتكوين.
دعنا ننظر إليه جزءًا جزءًا:
a9— OP_HASH160: عملية تجزئة تطبق أولاً SHA-256 ثم RIPEMD-160 على البيانات التالية.14— طول التجزئة هو 20 بايت (بالتنسيق السداسي العشري).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— تجزئة بطول 20 بايت للنص البرمجي، تُعرف باسم تجزئة النص البرمجي .87— OP_EQUAL: عامل يتحقق من تساوي قيمتين على المكدس.وبالتالي، يتطلب هذا النص البرمجي أنه في وقت الاستخدام (إنفاق الأموال) يتم تقديم نص برمجي تتطابق تجزئته 06612b7cb2027e80ec340f9e02ffe4a9a59ba762، واستيفاء شروط هذا النص البرمجي.
النص البرمجي
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'هو نص برمجي قفل P2SH، مما يعني أنه لإنفاق 0.05 BTC، تحتاج إلى تقديم النص البرمجي الأصلي بالتجزئة06612b7cb2027e80ec340f9e02ffe4a9a59ba762واستيفاء الشروط المحددة فيه. هذا يوفر توازنًا بين الراحة والأمان والوظائف – السبب الرئيسي لاختيار هذا النص البرمجي بالذات في هذه المعاملة. التجزئة06612b7cb2027e80ec340f9e02ffe4a9a59ba762في نص P2SH هي نتيجة تجزئة محددة للنص البرمجي الأصلي (redeem script) ، الذي يحدد شروط إنفاق الأموال من هذا المخرج.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762. تحدد هذه التجزئة بشكل فريد السيناريو الدقيق الذي تم إنشاؤها من أجله.SHA-256 + RIPEMD-160)من النص البرمجي الأصلي (redeem script)، لذلك لا يمكن اختيار تجزئة مختلفة بشكل عشوائي أو تعسفي.a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287وبالتالي، فإن اختيار هذه التجزئة بالذات تمليه الحاجة إلى ربط دقيق وآمن للمخرج بشروط إنفاق محددة تتحكم في الوصول إلى الأموال في سلسلة الكتل. كل هذا مضمون بخصائص دوال التجزئة التشفيرية، وفرادتها، واستحالة الاسترداد العكسي للبيانات الأصلية.
قام مطورو البيتكوين بكتابة آلية P2SH (الدفع إلى تجزئة النص البرمجي) في الكود كابتكار رئيسي يضمن الأمان ويوسع قدرات شبكة البلوكشين. دعنا ننظر في هيكل ومبدأ تشغيل هذا النص البرمجي، واختلافه عن المعاملات التقليدية، بالإضافة إلى أسباب اختيار هذا الأسلوب لتخزين وحماية الأصول الرقمية.
تقليديًا، كانت معاملات البيتكوين تعمل باستخدام مخطط الدفع إلى تجزئة المفتاح العام (P2PKH) – حيث يتم "قفل" الأموال باستخدام تجزئة المفتاح العام للمستلم. لإنفاق هذه الأموال، يجب على المستخدم تقديم توقيعه الرقمي ومفتاحه العام، والتي يتم التحقق منها بواسطة الشبكة.
ومع ذلك، بعد P2PKH، كانت الواجهة محدودة، حيث أن Bitcoin Script يسمح بشروط إنفاق أكثر تعقيدًا بكثير، بدءًا من التوقيعات المتعددة وحتى الأقفال الزمنية واتفاقيات العقود الذكية الأخرى. كانت المشكلة هي أن النصوص البرمجية الطويلة والمعقدة تزيد حتمًا من حجم المعاملات وتقلل من سهولة استخدامها.
كان لتبسيط التفاعل مع مثل هذه السيناريوهات المعقدة، تم تقديم مفهوم P2SH في عام 2012 ، وتم توحيده في BIP 16 بواسطة Gavin Andresen. يتلخص جوهر P2SH في استبدال النص البرمجي الكامل لشروط الإنفاق في scriptPubKey بـ تجزئة تشفيرية خاصة به – ما يسمى بتجزئة النص البرمجي.

دعنا ننظر إلى النص البرمجي المحدد كنتيجة لإلغاء التسلسل:
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUALيختلف هذا النص البرمجي عن P2PKH القياسي في أنه بدلاً من تجزئة المفتاح العام، فإنه يخزن تجزئة لـ redeemScript – مجموعة من الشروط التي يمكن بموجبها إنفاق الأموال.
لإنفاق هذه الأموال، من الضروري نقل ما يلي في مدخلات (scriptSig) المعاملة التي تشير إلى هذا المخرج:
عند معالجة المعاملة، تقوم عُقد الشبكة بـ:
وبالتالي، فإن P2SH ينقل مسؤولية تقديم والتحقق من شروط الإنفاق من المرسل (الذي ينشئ النص البرمجي المطلوب) إلى المنفق.
يسمح P2SH بإنشاء عناوين بشروط عشوائية، غالبًا ما تكون متعددة المستويات – على سبيل المثال، اشتراط التوقيع المتعدد (2 من 3، 3 من 5، إلخ)، والقيود الزمنية، ومنطق التوزيع، وغير ذلك الكثير. في هذه الحالة، يقوم المرسل ببساطة بإرسال الأموال إلى عنوان تجزئة مضغوط، دون الخوض في التفاصيل الفنية.
بدلاً من تخزين النص البرمجي الكامل في البلوكشين، يتم تخزين تجزئته فقط في المعاملة. هذا يقلل الحمل على الشبكة، ويقلل حجم الكتل، ويسرع التحقق من المعاملات.
نظرًا لأن redeemScript يتم الكشف عنه والتحقق منه فقط في وقت الإنفاق، فإن ذلك يزيد من سرية الشروط ويجعل محاولات الوصول غير المصرح بها أكثر صعوبة. يضمن استخدام دوال التجزئة التشفيرية الحماية ضد التزوير والتعديل – أي انحراف طفيف في النص البرمجي سيؤدي إلى تجزئة مختلفة وسترفض الشبكة قبول المعاملة.
يقوم P2SH بتوحيد وتبسيط استخدام العقود الذكية المعقدة في البيتكوين، مما يبسط التكامل ويزيد التوافق مع مجموعة متنوعة من المحافظ والخدمات.
المثال الكلاسيكي هو المحفظة التي تتطلب توقيعات من اثنين من خمسة مشاركين لإتمام الصفقة. باستخدام P2SH:
هذا يجعل P2SH مثاليًا للحسابات المؤسسية والمشاريع المشتركة والمواقف الأخرى التي تتطلب التحكم في الوصول. آلية الدفع إلى تجزئة النص البرمجي (P2SH) هي جزء أساسي من بنية البيتكوين، وتوفر توازنًا بين:

ins)دعنا ننفذ أمرًا للحصول على معلومات حول أحد مدخلات معاملة بتجزئة 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132. تحليل مثل هذا المدخل مهم لفهم آلية تفويض إنفاق الأموال على مستوى النص البرمجي.
!./darkai -scriptsig 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132يتم عرض نتيجة استخراج أول مدخل للمعاملة (
ins) على النحو التالي:
{
'script': '00483045022100e5d7c59ea1fb5d0285e755dfc09634e1e3af36d12950b9b5d5f92b136021b3d202202c181129443b08dcfb8d9ced30187186c57c96f9cdb3f3914e0798682ea35d2b03493046022100e1f8dbad16926cfa3bf61b66e23b3846323dcabf6c75748bcfad762fc50bfaf402210081d955160b5f8d2b9d09d8838a2cf61f5055009d9031e0e106e19ebab234d949034c695221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae',
'outpoint': {
'index': 1,
'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'
},
'sequence': 4294967295
}script)scriptهي scriptSig ، والتي تُستخدم لفتح مخرج المعاملة السابق المقابل.00، والذي يمكن أن يعني في سياق scriptSig OP_0 ، المستخدم تقليديًا في سيناريوهات التوقيع المتعدد (على سبيل المثال، في حالة معيار التوقيع المتعدد للدفع إلى تجزئة النص البرمجي، حيث تكون هناك حاجة إلى عنصر نائب).3045...)، والتي تتكون عادةً من سلسلة من البايتات تحتوي على تفاصيل التوقيع.'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'— هي تجزئة المعاملة السابقة.'index': 1– يشير إلى المخرج الثاني (مرقم من الصفر)، المستخدم للفتح.4294967295 (0xFFFFFFFF)هي أقصى رقم 32 بت.أظهر التحليل التشفيري لاستخراج أول مدخل للمعاملة (
ins) مع تجزئة المعاملة المحددة ما يلي:
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.وبالتالي، تسمح البيانات التي تم الحصول عليها بفهم أعمق لآليات التحقق من حقوق إنفاق الأموال، وتستخدم لضمان أمان شبكة البيتكوين، وكذلك في تطوير وتدقيق العقود الذكية القائمة على نصوص البيتكوين البرمجية.
outs)دعنا ننفذ الأمر للحصول على معلومات حول أحد مخرجات المعاملة بالمعرف
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577.
!./darkai -redeemscript ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577تم استخراج
outsعلى وجه التحديد، المخرج الثاني ( ) من هذه المعاملة، العنصر ذو الفهرس 1 .
{
'value': 350000,
'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
}value
scripta91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287هو نص برمجي للقفل كلاسيكي (scriptPubKey) بتنسيق P2SH (الدفع إلى تجزئة النص البرمجي) .a9— OP_HASH160 هو مشغل يطبق أولاً SHA-256 ثم RIPEMD-160 على بيانات الإدخال.14— طول (20 بايت) القيمة التالية هو حجم التجزئة.06612b7cb2027e80ec340f9e02ffe4a9a59ba762— تجزئة 20 بايت، تُعرف أيضًا باسم تجزئة النص البرمجي ، وهي تمثيل فريد للنص البرمجي للاسترداد الذي يتحكم في إنفاق هذه الأموال.87— OP_EQUAL هو مشغل يقارن قيمتين ويعيد صحيحًا إذا كانتا متساويتين.وبالتالي، يتطلب النص البرمجي أنه من أجل الفتح (إنفاق الأموال)، يقدم المستخدم نصًا برمجيًا للاسترداد تتطابق تجزئته مع هذه القيمة.
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577مرتبط بمخرِج يحتوي على 0.0035 BTC.06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
تؤكد المعلومات الواردة أن سجل المخرِج الثاني للمعاملة
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577يخزن مبلغ 0.0035 BTC، ويتم التحكم فيه بواسطة نص P2SH قياسي بقيمة hash16006612b7cb2027e80ec340f9e02ffe4a9a59ba762. لإدارة هذه الأموال، من الضروري تقديم نص الاسترداد المقابل، مما يوفر مستوى عالٍ من الأمان والمرونة في إدارة البيتكوين.
OP_FALSE 304502... 304602... 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeلنشغّل الأمر للحصول على HASH160 لقد وضع مطورو Bitcoin معيارًا لتجزئة بطول 20 بايت (سداسي عشري) يُستخدم على نطاق واسع دون تغييرات في عملات رقمية شهيرة أخرى مثل Bitcoin (BTC)، Ethereum (ETH)، Tether (USDT)، BNB (BNB)، Solana (SOL)، XRP (XRP)، Cardano (ADA)، Dogecoin (DOGE)، USDC (USDC)، Polkadot (DOT)، Avalanche (AVAX)، Shiba Inu (SHIB)، Stellar (XLM)، TRON (TRX)، Chainlink (LINK)، Litecoin (LTC)، Bitcoin Cash (BCH)، Monero (XMR) للدلالة على المعرف المختصر للنصوص والمفاتيح العامة.
!./darkai -hexdata 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeعملية المعالجة:
06612b7cb2027e80ec340f9e02ffe4a9a59ba762تسمى هذه التجزئة بطول 20 بايت (سداسي عشري) HASH160 وتُستخدم على نطاق واسع في Bitcoin للدلالة على المعرف المختصر للنصوص والمفاتيح العامة.
خطوة رئيسية في معالجة نصوص Bitcoin باستخدام دوال التجزئة التشفيرية.
تحويل النصوص المتسلسلة أو المفاتيح العامة إلى HASH160 يسمح بتحديد وفهرسة وحماية البيانات بكفاءة على بلوكشين Bitcoin.
التجزئة المستلمة:
{'06612b7cb2027e80ec340f9e02ffe4a9a59ba762'}أنتج الفريق التجزئة الدقيقة التي تعمل كحلقة وصل بين النصوص المعقدة والتنسيق المدمج المستخدم لتخزين والتحقق من المعاملات على شبكة Bitcoin.
اختار ساتوشي ناكاموتو استخدام التجزئة المزدوجة SHA-256 (أي تطبيق SHA-256 مرتين متتاليتين) في خوارزميات التجزئة في Bitcoin لعدة أسباب مهمة تعزز القوة التشفيرية وأمان الشبكة.
الاستخدام المزدوج لـ
SHA-256هو اختيار متعمد من ساتوشي ناكاموتو لتوفير طبقة إضافية من الأمان وقوة تشفيرية قوية لنظام Bitcoin بأكمله. هذا التصميم يقلل من مخاطر التصادم، ويعزز الاتجاه الواحد، ويحمي البيانات بشكل آمن على شبكة البلوكشين، مما يخلق أساساً متيناً لأمان المعاملات والإجماع في النظام. وبالتالي، فإن SHA-256 المزدوجة هي عنصر أساسي في بنية Bitcoin، تجمع بين تقنيات التشفير المتقدمة والنظام الموزع.

أمان ومرونة معاملات Bitcoin الحديثة يعتمدان على نظام النصوص الذي يسمح بشروط معقدة لإنفاق الأموال. إحدى الآليات الرئيسية هي التوقيع المتعدد (multisig) ، حيث لا يمكن إنفاق الأموال إلا إذا كان هناك عدة توقيعات رقمية صالحة من مجموعة من التوقيعات المحتملة. في هذه المقالة، سننظر بالتفصيل في كيفية تنفيذ ذلك بالضبط في Bitcoin، وما هو redeemScript، وكيف تعمل التعليمة OP_CHECKMULTISIG ، ولماذا هذا النهج مطلوب.
في سياق Bitcoin، redeemScript هو نص يحتوي على شروط إنفاق الأموال، والتي يتم تخزينها في مخرِج المعاملة بتنسيق Pay-to-Script-Hash (P2SH). بدلاً من تخزين النص الكامل على البلوكشين، يتم تخزين تجزئة redeemScript في المخرِج، مما يوفر المساحة ويخفي تفاصيل الشروط حتى وقت الإنفاق.
يمكن أن يتضمن RedeemScript، على سبيل المثال، مفاتيح عامة متعددة وعددًا عتبويًا من التوقيعات – وهذا ما تنفذه محافظ التوقيع المتعدد.
لننظر في التعليمة OP_CHECKMULTISIG: الغرض والتشغيل، حيث العنصر الرئيسي في redeemScript الذي ينفذ التحقق من التوقيع المتعدد هو OP_CHECKMULTISIG .
بسبب خطأ تاريخي في تنفيذ OP_CHECKMULTISIG ، يتم إزالة عنصر إضافي واحد، قيمة غير مستخدمة، من المكدس أثناء التنفيذ. لتجنب هذه المشكلة، scriptSig يستخدم عنصراً خاصاً
OP_FALSE(القيمة 0) في البداية، والذي يعوض هذا الخطأ ويمنع الثغرات المحتملة.
OP_FALSE <signature1> <signature2> ... <redeemScript>OP_FALSEبناءً على كود redeemScript:
023927... 03d2c0... 03ec01... 3 OP_CHECKMULTISIG
OP_CHECKMULTISIGتتحقق من أن التوقيعين المقدمين (في scriptSig) يتوافقان مع اثنين من المفاتيح الثلاثة وأنهما صالحان.OP_FALSEفي scriptSig يعوض خطأ إزالة القيمة الإضافية.OP_FALSE، أثبتت الآلية موثوقيتها ووجدت تطبيقاً واسعاً.RedeemScript مع التعليمة OP_CHECKMULTISIG هي أداة معقدة وقوية في ترسانة البيتكوين تسمح لك بإنشاء محافظ متعددة التوقيعات بعتبة توقيع، مما يوفر مستوى عالٍ من الأمان والتحكم في الأموال. أصبحت هذه الآلية حجر الزاوية للمنظمات والمستخدمين والخدمات التي ترغب في استخدام الإدارة المشتركة لأصولها في بيئة لا مركزية وآمنة. وبالتالي، فإن التوقيع المتعدد عبر redeemScript وOP_CHECKMULTISIG ليس مجرد تقنية، بل وظيفة توسع قدرات نموذج العملة المشفرة الكلاسيكي.

تعتمد آلية التحقق من التوقيع المتعدد في البيتكوين على استخدام سكربتات خاصة مع التعليمات OP_CHECKMULTISIG و redeemScript ، مما يسمح بمطابقة التوقيعات ذات العتبة، مما يوفر أمانًا متزايدًا وإدارة مشتركة للأموال.
التوقيع المتعدد (Multisig) هو نظام تتطلب فيه توقيعات صالحة متعددة من مجموعة معينة من المفاتيح العامة لإتمام معاملة. يُشار إلى المخطط النموذجي كـ m من n — على سبيل المثال، "2 من 3"، حيث يلزم وجود أي توقيعين من ثلاثة مفاتيح لترخيص الإنفاق.
في البيتكوين، يتم تنفيذ هذا المنطق عبر:
تتحقق التعليمة
OP_CHECKMULTISIGمن أن التوقيعات المقدمة فيscriptSigصالحة وتطابق المفاتيح العامة المنشورة من redeemScript.
هيكل redeemScript يكون مشابهًا لهذا:
OP_M <pubkey1> <pubkey2> ... <pubkeyN> OP_N OP_CHECKMULTISIGOP_Mو OP_N— تعليمات لتحديد عدد التوقيعات المطلوبة والعدد الإجمالي للمفاتيح العامة، على التوالي (على سبيل المثال، OP_2 و OP_3).<pubkeyX>— المفاتيح العامة للمشاركين.OP_CHECKMULTISIG— عامل (operator) ينفذ التحقق من التوقيع المتعدد.m.من الميزات التقنية الهامة وجود خطأ تاريخي في التنفيذ لـ
OP_CHECKMULTISIGيؤدي إلى إزالة عنصر إضافي غير مستخدم من المكدس. للتعويض عن هذا الخطأ، يتم وضع قيمةOP_FALSE(الكود 0) في بدايةscriptSigلـ "قفل" إزاحة المكدس.
لمحفظة ذات توقيع متعدد "2 من 3"، قبل إنفاق الأموال، يتم تشكيل scriptSigعلى النحو التالي:
OP_FALSE <signature1> <signature2> <redeemScript>OP_FALSE— قيمة وهمية للتعويض عن خطأ OP_CHECKMULTISIG.<signature1>و <signature2>– توقيعان رقميان معتمدين من قبل مالكي المفاتيح الخاصة المقابلة.<redeemScript>— السكربت نفسه مع المفاتيح العامة ومعاملات التحقق.عند التحقق من معاملة من قبل العقدة (node):
إذا اجتازت جميع مدخلات المعاملة هذا الفحص، تعتبر المعاملة صالحة. مع هذه الصلاحية، من خلال تنفيذ عامل هذا الخطأ، يعوض المهاجم عن OP_CHECKMULTISIG كثغرة محتملة.
تتيح آلية التحقق من التوقيع المتعدد في البيتكوين باستخدام التعليمة
OP_CHECKMULTISIGو redeemScript إعداد مخططات توقيع ذات عتبة معقدة، ومن خلال تنفيذ عامل هذا الخطأ، يعوض المهاجم عن OP_CHECKMULTISIG كثغرة محتملة في المعاملات الخاضعة للتحكم في شبكة البيتكوين الموزعة.
ما هي الميزات والقيود عند التحقق من توقيعات متعددة باستخدام OP_CHECKMULTISIG؟ دعنا نلقي نظرة على الجوانب والقيود الرئيسية:
OP_FALSEفي بداية scriptSig لمحاذاة المكدس بشكل صحيح. هذه ميزة معترف بها ومقبولة من قبل المجتمع.