Randstorm / BitcoinJS
Randstorm: العيب في المتصفح وراء محافظ البيتكوين القديمة
أي البرامج موثقة، وأي الإصدارات مهمة، وكيف تترك محفظة قديمة دون حمل مفاتيحها الضعيفة معك.
فهرس المحتويات
ما الذي حدث فعلاً
Randstorm يتعلق بتوليد المفاتيح في برامج المتصفح القديمة. يمكن لـ SecureRandom() في JSBN أن يدمج مصدر إنتروبيا غير كافٍ مع Math.random() في المتصفح القابل للتنبؤ. كشفت Unciphered عن المشكلة في 14 نوفمبر 2023 وأبلغت عن محافظ معرضة للخطر تم إنشاؤها في الفترة 2011–2015. هذه فترة مراقبة، وليست حكمًا على كل محفظة من تلك السنوات.
اسم SecureRandom ليس ضمانًا أمنيًا. في شفرة Coinpunk التي تم فحصها، يقوم البديل بملء مجموعة بحجم 256 بايت باستخدام Math.random()، يخلطها مع الساعة ويغذي مولد Arcfour. لا يمكن لمجموعة كبيرة أن توفر عدم قابلية التنبؤ التي تفتقر إليها مدخلاتها. تحتوي نفس الشفرة أيضًا على مسارات Web Crypto وNode.js أقوى: الوصول إلى البديل هو التمييز المهم.
هذا عيب في طريقة اختيار المفتاح الخاص. ليس خرقًا للتحقق من التوقيع في البيتكوين. فتح نسخة احتياطية قديمة في تطبيق أحدث يحافظ على تلك المفاتيح؛ نقل الأموال إلى مفاتيح مولدة بشكل مستقل يغير من يخول الإنفاق.
المحافظ، الإصدارات وحدود الأدلة
اقرأ إصدار المكتبة بشكل منفصل عن إصدار المحفظة. بالنسبة لموقع مستضاف، الشفرة المقدمة في يوم إنشاء المفتاح أهم من إصدار التطبيق الحالي. يميز الجدول بين حادث موثق ونتائج شفرة المصدر.
| المشروع | الإصدار أو الفترة | ما يثبته هذا |
|---|---|---|
| BitcoinJS / bitcoinjs-lib | 0.1.3 | مذكور كمثال في الكشف. تم استخدام JSBN حتى مارس 2014؛ هذا لا يثبت نطاق إصدار متأثر كامل لكل مشتق. |
| Blockchain.info Blockchain.com | محفظة ويب تاريخية؛ لم يتم التحقق من نطاق متأثر مرقم | كانت محفظة عميل نقطة بداية تحقيق Unciphered. هذا لا يورط كل محفظة Blockchain.com أو التطبيق الحالي. |
| bitaddress.org | 2.6.5 · 2.8.0 2013-12-01 · 2014-01-18 | 2.6.5 حدثت JSBN إلى 1.4. أضاف 2.8.0 تهيئة Web Crypto للمجموعة الكاملة وإلزامية إنتروبيا الفأرة/لوحة المفاتيح. هذه تغييرات موثقة، وليست حدًا مثبتًا "كل الإصدارات السابقة معرضة / كل الإصدارات اللاحقة آمنة". |
| Coinpunk | 0.2.1 63ca325be538 | تسمية لقطة المستودع المفحوصة 0.2.1 وتحتوي على بديل Math.random()/Arcfour إلى جانب مسارات أقوى. هذا اكتشاف شفرة، وليس دليلاً على أن كل نشر استخدم البديل. توقف التطوير. |
يغطي هذا النظرة العامة التطبيقات التي تم التحقق منها هنا؛ ليست قائمة شاملة للمحافظ المتأثرة. المنتج غير المدرج ليس بالضرورة غير متأثر. تاريخ الإنشاء القديم أو عنوان يبدأ بـ 1 ليس كافيًا لتحديد المولد.
حضّر الوجهة مرة واحدة
الطرق الثلاث أدناه تستخدم محفظة Electrum Desktop جديدة كوجهة. أسماء القوائم تشير إلى واجهة سطح المكتب الإنجليزية 4.8.2 التي تم التحقق منها لهذا المقال. حمّل الإصدار الحالي من الموقع الرسمي؛ 4.8.2 هو مرجع للتعليمات، وليس الحد الأدنى الدائم.
محافظ الأجهزة التي نوصي بها كوجهة جديدة →
Electrum — التحميل الرسمي وفحوص التوقيع ↗
- على كمبيوتر موثوق ومحدث، حمّل Electrum لنظام التشغيل الخاص بك. اتبع تعليمات التوقيع الرسمية وتحقق بشكل مستقل من بصمة الموقّع قبل التثبيت.
- اختر File → New/Restore، سم المحفظة randstorm-new، ثم اختر Standard wallet → Create a new seed. سجل الكلمات الجديدة وحققها على ورق واضبط كلمة مرور لملف المحفظة. لا تستورد السر القديم.
- قبل الإيداع، أنشئ recovery-check عبر File → New/Restore → Standard wallet → I already have a seed، باستخدام نسخة الورق الجديدة فقط. قارن أول عنوان استقبال في كلتا المحفظتين عبر View → Addresses وعلامة Addresses. احتفظ بكلتا المحفظتين أثناء هذا الفحص.
- في randstorm-new، استخدم Receive → Request (Onchain إذا كان Lightning مفعلاً). انسخ عنوان البيتكوين. يجب أن ترسل المسار الخاص بالمحفظة أدناه إلى هذا العنوان، مع التحقق من الرسوم والوجهة كاملة قبل الموافقة.
Blockchain.info: استخدم المحفظة التي تحتوي على العناوين القديمة
هذا المسار لمحفظة Blockchain.info تاريخية لا تزال تستطيع الوصول إليها عبر Blockchain.com. تعليمات الإرسال الحالية تصف واجهة الويب اليوم، وليس شاشة 2012 غير المؤكدة. رصيد حساب التداول منتج مختلف.
- احتفظ بالنسخة الاحتياطية المشفرة الأصلية وسجلات الدخول. في المحفظة على الويب، تحقق من Settings → Wallets & Addresses → Bitcoin للعناوين المستوردة بشكل منفصل. طابق عناوينك العامة القديمة المعروفة مع الأرصدة المعروضة؛ لا يجب افتراض أن عبارة الاسترداد الجديدة تغطي المفاتيح المستوردة.
- افتح Send في لوحة المحفظة، اختر Bitcoin وأدخل عنوان Electrum الجديد كوجهة خارجية. ابدأ بمبلغ صغير، اختر Continue، راجع العنوان والمبلغ والرسوم، ثم Send.
- انتظر التأكيد في History في Electrum. ثم أرسل الرصيد القابل للإنفاق المتبقي مع احتساب الرسوم. تحقق من كل عنوان مستورد ممول بشكل منفصل؛ الاختبار الناجح وحده لا يفرغ المحفظة القديمة. توقف عن استخدام كل عناوين الاستلام المتقاعدة.
bitaddress.org: نقل محفظة ورقية باستخدام Sweep
عادةً ما تمثل طباعة bitaddress مفتاحًا واحدًا، وليس عبارة استرداد حديثة. احتفظ بالورق وأي ملف HTML أصلي: قد يحدد اسم الملف أو التذييل الإصدار. تساعد تاريخ الإصدارات في إعادة بناء الإعداد؛ لكنها لا تشهد على مفتاح فردي.
- حدد المفتاح الخاص، وليس عنوان الاستلام العام. يبدأ WIF الرئيسي عادةً بـ 5 أو K أو L؛ يبدأ المفتاح المشفر بـ BIP38 بـ 6P. البادئة مجرد تلميح للصيغة. احتفظ بشكل الضغط الأصلي لأنه يحدد العنوان المقابل.
- بالنسبة لـ BIP38، فك التشفير أولاً محليًا وغير متصل باستخدام نسخة موثوقة من مستودع bitaddress الرسمي: Wallet Details → أدخل المفتاح المشفر → View Details → أدخل عبارة المرور → Decrypt BIP38. قارن العنوان الناتج مع الورقة قبل استخدام WIF المطابق. لا تدخل المفتاح على موقع مباشر أو تولد محفظة بديلة بهذه الأداة القديمة.
- في محفظة Electrum الجديدة الوجهة، افتح Wallet → Private keys → Sweep. أدخل WIF غير المشفر فقط في هذا الحوار المحلي. تحقق من أن الوجهة تخص randstorm-new، ثم راجع المعاملة والرسوم قبل البث.
- ينقل Sweep الرصيد القابل للإنفاق الذي يتحكم به المفتاح المقدم في معاملة واحدة. ليس استيرادًا وليس تسلسل الاختبار الصغير أعلاه. كرر للمفاتيح الورقية الممولة الأخرى واحتفظ بالأصول حتى يتم تأكيد كل الإيصالات المتوقعة.
Coinpunk: أَمّن النسخة الاحتياطية قبل التعامل مع الخادم القديم
كان Coinpunk مستضافًا ذاتيًا، لذا لا يوجد موقع تسجيل دخول عالمي حالي أو خدمة استرداد. هذه التسميات من لقطة المستودع 63ca325be538، التي يعلن package.json فيها الإصدار 0.2.1. قد يختلف نشر معدل.
- إذا كان التثبيت الأصلي الموثوق لا يزال يعمل، افتح Backup → Download واحتفظ بنسخ متعددة من المحفظة المشفرة. احتفظ بمعرف الدخول، كلمة المرور ونسخة احتياطية من الخادم أيضًا. لا تحدّث أو تعيد تثبيت النسخة الوحيدة الباقية أولاً.
- نموذج Send Bitcoins التاريخي يحتوي على Bitcoin address to send to، Amount ورسوم معروضة. استخدمه فقط إذا كانت النسخة الأصلية لا تزال تعمل بشكل موثوق وتدعم عنوان الوجهة. لا تجبر عنوان bc1 في هذا البرنامج القديم؛ محلل العناوين المفحوص يستخدم Base58Check.
- لوجهة غير متوافقة أو خادم غير متصل، احتفظ بالنسخة الاحتياطية واسترد مفاتيحها محليًا بمساعدة تفهم هذا الإصدار من Coinpunk. نموذج المحفظة يخزن keyPairs، بما في ذلك مفاتيح التغيير، داخل حمولة مشفرة. هذا ليس بذرة Electrum أو wallet.dat من Bitcoin Core؛ إعادة تسمية الملف لا تحولها.
- بمجرد مطابقة مفاتيح WIF المستردة مع العناوين الأصلية، استخدم إجراء Sweep في Electrum أعلاه لكل مفتاح ممول. تحقق من المجموعة الكاملة، بما في ذلك عناوين التغيير. احتفظ بالنسخة الاحتياطية المشفرة وكلمة مرورها حتى تتطابق إيصالات الوجهة مع الرصيد المتوقع.
محافظ الأجهزة التي نوصي بها كوجهة جديدة
لهذه الهجرة، نوصي بـ Trezor Safe 3 إذا كنت تفضل الأزرار الفيزيائية، أو Trezor Safe 5 إذا كانت شاشة لمس أكبر تسهل التحقق من العناوين. كلاهما يمكنه الاحتفاظ بمفاتيح التوقيع الجديدة على جهاز منفصل. شراء واحد لا يصلح مفتاحًا قديمًا: أنشئ محفظة جديدة تمامًا على الجهاز.
روابط Amazon تفتح بحثًا إقليميًا عن المنتج، وليست قائمة بائعين موثوقين. تحقق من البائع مقابل متاجر Trezor الرسمية على Amazon أو الموزعين المعتمدين. استخدم فحوص مصادقة الجهاز أثناء الإعداد؛ لا تستخدم نسخة احتياطية للمحفظة مكتوبة مسبقًا.
- ابدأ من trezor.io/start وثبت Trezor Suite. اتبع إعداد الجهاز وفحوص المصادقة الخاصة به، اختر Create a new wallet وأكمل فحص النسخة الاحتياطية على الجهاز. احتفظ بالنسخة الاحتياطية دون اتصال. لا تستعد المحفظة القديمة أو بذرة المحفظة البرمجية من المثال أعلاه على هذا الجهاز.
- لإرسال عادي، اختر حساب Bitcoin في Trezor Suite، اختر Receive وتحقق من العنوان الكامل على الجهاز المتصل. استخدم هذا العنوان بدلًا من عنوان المحفظة البرمجية في مسار Blockchain.com. تحقق من التحويل الوارد وتأكيداته في Trezor Suite بدلاً من History في Electrum.
- لمسار Sweep في Electrum، وصل Trezor المهيأ حديثًا وأنشئ محفظة Electrum عبر File → New/Restore → Standard wallet → Use a hardware device. اتبع دليل Trezor لـ Electrum واستخدم حساب البيتكوين ونوع العنوان المطابق. تحقق من عنوان استقبال على Trezor، ثم استخدمه كوجهة Sweep. أدخل فقط مفتاح WIF القديم في Sweep؛ لا تكتب كلمات النسخة الاحتياطية لـ Trezor في Electrum أو موقع ويب.
المصادر والنطاق
تغطي هذه الدراسة حالات تنفيذ المتصفحات التاريخية ومسارات الهجرة المختلفة الخاصة بها. للعلاقة الأوسع بين الإنتروبيا، عبارات البذرة والمحافظ الصلبة، تابع المقال الخلفي.
خلفية: كيف تنشأ بذور المحافظ الضعيفة →
- Unciphered — كشف Randstorm، 14 نوفمبر 2023
- bitaddress.org — تاريخ الإصدارات الموقع
- Coinpunk — فحص مولد الأرقام العشوائية ولقطة المستودع · package.json · README
- Electrum — استرداد، مسح وخصوصية الأسئلة المتكررة
- Electrum 4.8.2 — معالج محفظة سطح المكتب · Desktop menus
- Blockchain.com — عناوين بيتكوين المستوردة
- bitaddress.org — تنفيذ BIP38 وWallet Details
- Coinpunk — نموذج المحفظة المشفرة ومفاتيح التغيير · Backup · Send
- Trezor Safe 3
- Trezor Safe 5
- Trezor Suite — trezor.io/start
- Trezor — المتاجر الرسمية والموزعون المعتمدون
- Trezor — الهجرة من محفظة أخرى
- Trezor Suite — استقبال والتحقق من عنوان
تم التحقق في 19 سبتمبر 2026 مقابل الوثائق الأساسية وشفرة المصدر. لم تُستخدم أموال حقيقية أو مفاتيح خاصة في الاختبار. الجدول ليس قائمة شاملة أو تشخيص لمحفظتك.
الأسئلة الشائعة
هل يحدد BitcoinJS 0.1.3 إصدار محفظتي؟
لا. يحدد مثال مكتبة مذكور في كشف Randstorm. يمكن للمحفظة أن تضم أو تعدل تلك المكتبة دون كشف إصدارها للمستخدم. لا يزال يجب تحديد بناء المحفظة الأصلي وبيئة المتصفح.
هل يثبت bitaddress.org 2.8.0 أن محفظتي الورقية آمنة؟
يوثق سجل التغييرات جمع إنتروبيا أقوى في 2.8.0. لا يشهد على كيفية توليد مفتاح فردي، أو ميزات المتصفح المتاحة، أو ما إذا تم تعديل الملف. لذلك يعامل المقال ذلك كتغيير موثق، وليس حد أمان شامل.
لماذا يستخدم مسار المحفظة الورقية Sweep بدلاً من Import؟
الاستيراد يحتفظ بالمفتاح الخاص الأصلي قيد الاستخدام. Sweep ينشئ معاملة تنقل أموالها القابلة للإنفاق إلى محفظة الوجهة المحضرة. يجب أن تحتوي المحفظة الجديدة على مفاتيح مولدة بشكل مستقل، ويجب التحقق من الوجهة والرسوم قبل البث.
هل يمكن لـ Electrum فتح نسخة احتياطية من Coinpunk مباشرة؟
يخزن إصدار Coinpunk المفحوص حمولة محفظة مشفرة، وليس بذرة Electrum. احتفظ بالنسخة الاحتياطية، معرف الدخول وكلمة المرور. استرد المفاتيح محليًا بخبرة خاصة بالإصدار، ثم طابقها مع العناوين الأصلية قبل استخدام مسار Sweep.