Randstorm / BitcoinJS

Randstorm: العيب في المتصفح وراء محافظ البيتكوين القديمة

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

آخر تحديث 7‏‏/4‏‏/1448 بعد الهجرة

ما الذي حدث فعلاً

تتعلق Randstorm بتوليد المفاتيح في برامج المتصفح القديمة. كان من الممكن أن تجمع دالة SecureRandom() في JSBN بين مصدر غير كافٍ للإنتروبيا ودالة Math.random() قابلة للتنبؤ في المتصفح. أعلنت Unciphered عن المشكلة في 14 نوفمبر 2023، وذكرت محافظ معرضة للخطر أُنشئت خلال 2011–2015. هذه فترة رُصدت فيها حالات، وليست حكماً بأن كل محفظة أُنشئت خلالها متأثرة.

Math.random()قيم بدء تعتمد على المتصفح
SecureRandom()تغذي مجموعة الإنتروبيا مولد أرقام عشوائية زائف (PRNG)
المفتاح الخاصصيغة صحيحة، مصدر محتمل التنبؤ

لا يكفي اسم SecureRandom لضمان الأمان. في الشيفرة التي فُحصت من Coinpunk، يملأ المسار الاحتياطي مخزوناً بحجم 256 بايت باستخدام Math.random()، ويمزج معه قيمة الساعة، ثم يغذي مولّد Arcfour. كِبَر المخزون لا يعوّض غياب عدم قابلية التنبؤ في مدخلاته. وتحتوي الشيفرة نفسها أيضاً على مسارات أقوى تستخدم Web Crypto وNode.js؛ لذا فالفارق المهم هو ما إذا كان التنفيذ يصل إلى المسار الاحتياطي.

الخلل هنا في طريقة اختيار المفتاح الخاص، وليس في التحقق من توقيعات Bitcoin. فتح نسخة احتياطية قديمة بتطبيق أحدث يُبقي المفاتيح نفسها. أما تحويل الأموال إلى مفاتيح مولّدة بصورة مستقلة، فيغيّر المفاتيح التي تمنح صلاحية الإنفاق.

المحافظ، الإصدارات وحدود الأدلة

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

تم التحقق من الأدلة في 19 سبتمبر 2026
المشروعالإصدار أو الفترةما يثبته هذا
BitcoinJS / bitcoinjs-lib0.1.3ورد هذا الإصدار بوصفه مثالاً في الإفصاح. استُخدمت JSBN حتى مارس 2014، لكن ذلك لا يحدد نطاقاً كاملاً للإصدارات المتأثرة في جميع المشاريع المشتقة.
Blockchain.info
Blockchain.com
محفظة ويب تاريخية؛ لم يتم التحقق من نطاق متأثر مرقمبدأ تحقيق Unciphered من محفظة لأحد العملاء. ولا يعني ذلك أن جميع محافظ Blockchain.com أو التطبيق الحالي متأثرة.
bitaddress.org2.6.5 · 2.8.0
2013-12-01 · 2014-01-18
حدّث الإصدار 2.6.5 مكتبة JSBN إلى 1.4. وأضاف الإصدار 2.8.0 تهيئة مخزون الإنتروبيا بالكامل باستخدام Web Crypto، وجعل جمع الإنتروبيا من الفأرة ولوحة المفاتيح إلزامياً. هذه تغييرات موثقة، وليست حداً مثبتاً يعني أن كل الإصدارات الأقدم ضعيفة وكل الإصدارات الأحدث آمنة.
Coinpunk0.2.1
63ca325be538
تعرّف لقطة المستودع المفحوصة نفسها بالإصدار 0.2.1. وهي تضم مساراً احتياطياً يستخدم Math.random()/Arcfour إلى جانب مسارات أقوى. هذا استنتاج من الشيفرة، لا دليل على أن كل تثبيت استخدم المسار الاحتياطي. وقد توقف تطوير المشروع.

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

حضّر الوجهة مرة واحدة

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

محافظ الأجهزة التي نوصي بها كوجهة جديدة →

Electrum — التحميل الرسمي وفحوص التوقيع ↗

  1. استخدم حاسوباً موثوقاً ومحدّثاً لتنزيل Electrum الملائم لنظام تشغيلك. قبل التثبيت، اتبع التعليمات الرسمية للتحقق من التوقيع، وتحقق بصورة مستقلة من بصمة مفتاح الموقّع.
  2. اختر File → New/Restore، سمِ المحفظة randstorm-new، ثم اختر Standard wallet → Create a new seed. قم بتسجيل الكلمات الجديدة وتأكيدها على ورقة، واضبط كلمة مرور لملف المحفظة. لا تستورد المفتاح السري القديم.
  3. قبل الإيداع، أنشئ recovery-check عبر File → New/Restore → Standard wallet → I already have a seed، مستخدماً نسخة الورق الجديدة فقط. قارن أول عنوان استقبال في كلتا المحفظتين عبر View → Addresses وعلامة Addresses. احتفظ بكلتا المحفظتين أثناء هذا الفحص.
  4. في randstorm-new، استخدم Receive → Request (Onchain إذا كان Lightning مفعلاً). انسخ عنوان البيتكوين. يجب أن ترسل المسار الخاص بالمحفظة أدناه إلى هذا العنوان، مع التحقق من الرسوم والوجهة بالكامل قبل الموافقة.

Blockchain.info: استخدم المحفظة التي تحتوي على العناوين القديمة

هذا المسار مخصص لمحفظة Blockchain.info تاريخية لا تزال قادراً على الوصول إليها عبر Blockchain.com. تعليمات الإرسال الحالية تصف واجهة الويب الحالية، وليس شاشة غير مؤكدة من عام 2012. رصيد حساب التداول هو منتج مختلف.

  1. احتفظ بالنسخة الاحتياطية المشفرة الأصلية وسجلات الدخول. في المحفظة على الويب، تحقق من Settings → Wallets & Addresses → Bitcoin للعناوين التي تم استيرادها بشكل منفصل. طابق عناوينك العامة القديمة المعروفة مع الأرصدة المعروضة؛ لا يجب افتراض أن عبارة الاسترداد الجديدة تغطي المفاتيح المستوردة.
  2. افتح Send في لوحة المحفظة، اختر Bitcoin وأدخل عنوان Electrum الجديد كوجهة خارجية. ابدأ بمبلغ صغير، اختر Continue، راجع العنوان والمبلغ والرسوم، ثم اضغط Send.
  3. انتظر التأكيد في History في Electrum. ثم أرسل الرصيد القابل للإنفاق المتبقي مع احتساب الرسوم. تحقق من كل عنوان مستورد ممول بشكل منفصل؛ نجاح الاختبار وحده لا يفرغ المحفظة القديمة. توقف عن استخدام كل عناوين الاستلام القديمة.

Blockchain.com: تعليمات الإرسال الحالية ↗

bitaddress.org: نقل محفظة ورقية باستخدام Sweep

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

  1. حدد المفتاح الخاص، وليس عنوان الاستلام العام. يبدأ WIF الرئيسي عادةً بـ 5 أو K أو L؛ يبدأ المفتاح المشفر بـ BIP38 بـ 6P. البادئة مجرد تلميح للصيغة. احتفظ بشكل الضغط الأصلي لأنه يحدد العنوان المقابل.
  2. بالنسبة لـ BIP38، فك التشفير أولاً محليًا وغير متصل باستخدام نسخة موثوقة من مستودع bitaddress الرسمي: Wallet Details → أدخل المفتاح المشفر → View Details → أدخل عبارة المرور → Decrypt BIP38. قارن العنوان الناتج مع الورقة قبل استخدام WIF المطابق. لا تدخل المفتاح على موقع مباشر أو تولد محفظة بديلة بهذه الأداة القديمة.
  3. في محفظة Electrum الجديدة الوجهة، افتح Wallet → Private keys → Sweep. أدخل WIF غير المشفر فقط في هذا الحوار المحلي. تحقق من أن الوجهة تخص randstorm-new، ثم راجع المعاملة والرسوم قبل البث.
  4. ينقل Sweep الرصيد القابل للإنفاق الذي يتحكم به المفتاح المقدم في معاملة واحدة. ليس استيرادًا وليس تسلسل الاختبار الصغير أعلاه. كرر للمفاتيح الورقية الممولة الأخرى واحتفظ بالأصول حتى يتم تأكيد كل الإيصالات المتوقعة.

bitaddress.org — المستودع الرسمي والملفات الموقعة ↗

Coinpunk: أَمّن النسخة الاحتياطية قبل التعامل مع الخادم القديم

كان Coinpunk مستضافًا ذاتيًا، لذا لا يوجد موقع تسجيل دخول عالمي حالي أو خدمة استرداد. هذه التسميات من لقطة المستودع 63ca325be538، التي يعلن package.json فيها الإصدار 0.2.1. قد يختلف نشر معدل.

  1. إذا كان التثبيت الأصلي الموثوق لا يزال يعمل، افتح Backup → Download واحتفظ بنسخ متعددة من المحفظة المشفرة. احتفظ بمعرف الدخول، كلمة المرور ونسخة احتياطية من الخادم أيضًا. لا تحدّث أو تعيد تثبيت النسخة الوحيدة الباقية أولاً.
  2. نموذج Send Bitcoins التاريخي يحتوي على Bitcoin address to send to، Amount ورسوم معروضة. استخدمه فقط إذا كانت النسخة الأصلية لا تزال تعمل بشكل موثوق وتدعم عنوان الوجهة. لا تجبر عنوان bc1 في هذا البرنامج القديم؛ محلل العناوين المفحوص يستخدم Base58Check.
  3. لوجهة غير متوافقة أو خادم غير متصل، احتفظ بالنسخة الاحتياطية واسترد مفاتيحها محليًا بمساعدة تفهم هذا الإصدار من Coinpunk. نموذج المحفظة يخزن keyPairs، بما في ذلك مفاتيح التغيير، داخل حمولة مشفرة. هذا ليس بذرة Electrum أو wallet.dat من Bitcoin Core؛ إعادة تسمية الملف لا تحولها.
  4. بمجرد مطابقة مفاتيح WIF المستردة مع العناوين الأصلية، استخدم إجراء Sweep في Electrum أعلاه لكل مفتاح ممول. تحقق من المجموعة الكاملة، بما في ذلك عناوين التغيير. احتفظ بالنسخة الاحتياطية المشفرة وكلمة مرورها حتى تتطابق إيصالات الوجهة مع الرصيد المتوقع.

محافظ الأجهزة التي نوصي بها كوجهة جديدة

لهذه الهجرة، نوصي بـ Trezor Safe 3 إذا كنت تفضل الأزرار الفيزيائية، أو Trezor Safe 5 إذا كانت شاشة لمس أكبر تسهل التحقق من العناوين. كلاهما يمكنه الاحتفاظ بمفاتيح التوقيع الجديدة على جهاز منفصل. شراء واحد لا يصلح مفتاحًا قديمًا: أنشئ محفظة جديدة تمامًا على الجهاز.

بوصفي عضوًا في برنامج Amazon Associates، أحصل على عمولة من عمليات الشراء المؤهلة.

Trezor Safe 3

زران وشاشة أحادية اللون: اختيارنا للقراء الذين يريدون تأكيدًا متعمدًا بالأزرار. تحقق من العنوان الكامل على الجهاز قبل نقل الرصيد القديم.

عرض Trezor Safe 3 على Amazon

Trezor Safe 5

شاشة لمس ملونة 1.54 بوصة مع ردود فعل لمسية: اختيارنا عندما تكون حجم الشاشة والتحكم باللمس أهم. العرض الأكثر راحة لا يجعل المفاتيح المعاد استخدامها أو المكشوفة آمنة.

عرض Trezor Safe 5 على Amazon

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

  1. ابدأ من trezor.io/start وثبت Trezor Suite. اتبع إعداد الجهاز وفحوص المصادقة الخاصة به، اختر Create a new wallet وأكمل فحص النسخة الاحتياطية على الجهاز. احتفظ بالنسخة الاحتياطية دون اتصال. لا تستعد المحفظة القديمة أو بذرة المحفظة البرمجية من المثال أعلاه على هذا الجهاز.
  2. لإرسال عادي، اختر حساب Bitcoin في Trezor Suite، اختر Receive وتحقق من العنوان الكامل على الجهاز المتصل. استخدم هذا العنوان بدلًا من عنوان المحفظة البرمجية في مسار Blockchain.com. تحقق من التحويل الوارد وتأكيداته في Trezor Suite بدلاً من History في Electrum.
  3. لمسار Sweep في Electrum، وصل Trezor المهيأ حديثًا وأنشئ محفظة Electrum عبر File → New/Restore → Standard wallet → Use a hardware device. اتبع دليل Trezor لـ Electrum واستخدم حساب البيتكوين ونوع العنوان المطابق. تحقق من عنوان استقبال على Trezor، ثم استخدمه كوجهة Sweep. أدخل فقط مفتاح WIF القديم في Sweep؛ لا تكتب كلمات النسخة الاحتياطية لـ Trezor في Electrum أو موقع ويب.

Trezor: وصل الجهاز إلى Electrum ↗

المصادر والنطاق

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

خلفية: كيف تنشأ بذور المحافظ الضعيفة →

تم التحقق في 19 سبتمبر 2026 مقابل الوثائق الأساسية وشفرة المصدر. لم تُستخدم أموال حقيقية أو مفاتيح خاصة في الاختبار. الجدول ليس قائمة شاملة أو تشخيص لمحفظتك.

الأسئلة الشائعة

هل يحدد BitcoinJS 0.1.3 إصدار محفظتي؟

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

هل يثبت bitaddress.org 2.8.0 أن محفظتي الورقية آمنة؟

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

لماذا يستخدم مسار المحفظة الورقية Sweep بدلاً من Import؟

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

هل يمكن لـ Electrum فتح نسخة احتياطية من Coinpunk مباشرة؟

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