
دراسة تحليلية للشفرات لـ CVE-2025-29774 وعيوب SIGHASH_SINGLE في تنفيذ ECDSA في Bitcoin، مما يتيح استرداد المفتاح الخاص عبر إعادة استخدام nonce وتزوير التوقيع للوصول إلى المحافظ المفقودة.
تقدم هذه الورقة البحثية دراسة تحليلية تشفيرية شاملة للثغرات الحرجة في تطبيق التوقيع الرقمي لبروتوكول البيتكوين، وبالتحديد هجوم التوقيع الشبح (CVE-2025-29774) وخطأ المعالجة الأساسي SIGHASH_SINGLE . تُظهر الدراسة أن المعالجة غير الصحيحة للبدائيات التشفيرية في آلية توقيع المعاملات تخلق ظروفًا للاختراق الكامل للمفاتيح الخاصة لأصحاب محافظ العملات الرقمية دون علمهم. يستغل الهجوم خطأً قديمًا في العميل الأصلي لساتوشي، حيث يعيد النظام قيمة تجزئة شاملة قدرها "1" (uint256) بدلاً من رفض التوقيع إذا كان عدد مدخلات ومخرجات المعاملة غير متطابق.
يتضمن الجزء العملي من الدراسة استخدام الأداة التشفيرية KeyFuzzMaster لتحديد الثغرات في كود التحقق من التوقيع، وعمليات المنحنى الإهليلجي، ووظائف تجزئة المعاملات بشكل منهجي. يتم تقديم الصيغ الرياضية لاستعادة المفتاح الخاص من خلال إعادة استخدام nonce (معامل k) في خوارزمية ECDSA على المنحنى secp256k1. تتم مناقشة البدائيات التشفيرية لخوارزمية ECDSA (خوارزمية التوقيع الرقمي للمنحنى الإهليلجي) فوق المنحنى الإهليلجي secp256k1 . تؤدي التوقيعات الرقمية في البيتكوين وظيفة ثلاثية: تفويض الإنفاق، وعدم الإنكار، وضمان سلامة المعاملة.
ومع ذلك، فإن الحفاظ على الحلول المعمارية القديمة لضمان التوافق مع الإصدارات السابقة أدى إلى ظهور ثغرات تشفيرية دقيقة ذات عواقب محتملة كارثية. ومن بين هذه الثغرات، يبرز خلل SIGHASH_SINGLE —وهو عيب أساسي في آلية توليد تجزئة التوقيع، موروث من تطبيق Bitcoin Core الأصلي ومدمج في إجماع الشبكة.
| معرف CVE | المكون | درجة CVSS | الحرجية |
|---|---|---|---|
| CVE-2025-29774 | xml-crypto / SIGHASH_SINGLE | 9.3 | حرجة |
| CVE-2025-29775 | xml-crypto تجاوز DigestValue | 9.3 | حرجة |
| CVE-2025-48102 | GoUrl Bitcoin Payment Gateway (XSS مخزنة) | 5.9 | متوسطة |
| CVE-2025-26541 | CodeSolz WooCommerce Gateway (XSS منعكسة) | 6.1 | متوسطة |
البيتكوين يستخدم المنحنى الإهليلجي secp256k1 المعرفة بمعيار SECG (Standards for Efficient Cryptography Group). يتم تعريف المنحنى بمعادلة Weierstrass فوق حقل محدود:
معادلة المنحنى:
y² ≡ x³ + ax + b (mod p)
بالنسبة لـ secp256k1:
y² ≡ x³ + 7 (mod p)، حيث a = 0، b = 7
يتم تحديد معلمات المنحنى secp256k1 بواسطة المجموعة T = (p, a, b, G, n, h):
معلمات secp256k1:
p = 2²⁵⁶ − 2³² − 977 (العدد الأولي الذي يحدد الحقل المحدود)
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
(رتبة مجموعة نقاط المنحنى - الرتبة الصحيحة للمولد G)
G = (Gₓ, Gᵧ) — نقطة أساس ثابتة (مولد)
خوارزمية ECDSA تستخدم مفتاحًا خاصًا d لتشكيل توقيع على رسالة M. تتضمن عملية التوقيع العمليات الرياضية التالية:
الخطوة 1: توليد nonce عشوائي k
يتم اختيار رقم عشوائي قوي تشفيريًا k ∈ [1, n-1]
الخطوة 2: حساب النقطة R
R = k × G (الضرب القياسي لنقطة المولد)
الخطوة 3: حساب المعامل r
r = Rₓ mod n (إحداثي x للنقطة R مودولو n)
الخطوة 4: حساب المعامل s
s = k⁻¹ × (H(M) + r × d) mod n
النتيجة: التوقيع (r, s)
حيث H(M) هي تجزئة الرسالة M (في البيتكوين، يتم استخدام SHA-256 المزدوجة)، d هو المفتاح الخاص للمالك.