
فئة جافا سكريبت SecureRandom()
يحتوي على خطأ ولا يُنشئ مفاتيح آمنة حقًا.
وكيف ترتبط بالعملات المشفرة؟
هناك العديد من منتجات العملات المشفرة المستندة إلى المتصفح والتي لا تزال تستخدم شعبي SecureRandom()
فئة شبيبة. تحظى JavaScript بشعبية كبيرة في إنشاء المنتجات المستندة إلى المتصفح، ولكنها ليست بالأمر الجيد حقًا لاستخدامها لأغراض التشفير. المشكلة الرئيسية هي أن JS ليست لغة آمنة للنوع.
اكتب الأمان هو موضوع معقد ولا يوجد تعريف متفق عليه لماهية اللغة "الآمنة للكتابة" بالضبط، ولكن وفقًا لأي تعريف لها تقريبًا، فإن JavaScript ليست آمنة للكتابة. هذا يعني أن JS لا يمنع أو يمنع أخطاء الكتابة غير المسموح بها في التشفير.
الاستنتاج هو أن جميع محافظ العملات المشفرة التي تم إنشاؤها بواسطة أدوات JS داخل المتصفحات لديها (وبعضها - لا يزال لديها!) مفاتيح يمكن التنبؤ بها بدرجة كافية لاختراقها عن طريق هجوم القوة الغاشمة. نعم، تتمتع هذه المفاتيح بالطول المناسب (من حيث التشفير) ولكنها أقل من 48 بت من الإنتروبيا بسبب خطأ في فئة JavaScript.
التناول العميق شرح تقني.
ماذا تفعل الآن؟
في الواقع، ليس هناك الكثير للقيام به حيال ذلك. مثل جميع الأخطاء الجيدة في مجال العملات المشفرة، هذا الخطأ ليس جديدًا على الإطلاق - هنا يتحدث عنه جريج ماكسويل تقريبًا قبل ثلاث سنوات (51:00 يوم):
تؤثر هذه المشكلة عليك إذا كنت:
- استخدم عناوين العملات المشفرة القديمة
- تم إنشاؤها باستخدام جافا سكريبت، أي، في متصفح الويب
من المحتمل أن تتأثر:
- BitAddress قبل عام 2013؛
- bitcoinjs قبل عام 2014؛
- تيار برنامج يستخدم اتفاقيات إعادة شراء قديمة من Github.
ماذا أفعل:
- انقل أموالك من تلك العناوين
- لا تستخدمها مرة أخرى
سيؤدي هذا إلى تقليل خطر اختراق مفاتيحك، ولكن بشكل عام، يجب أن تجعلك هذه المعلومات تتوقف عن التفكير في أن الأمر سيستغرق وقتًا طويلاً حتى يتم اختراق مفاتيح التشفير الحديثة. اتضح أنه قد يتم تصدعه في غضون أسبوع.
بعض الحقائق المثيرة للاهتمام:
جافا سكريبت كان يسمى في الأصل LiveScript. لم يتم تطويره بواسطة Sun Microsystems (مثل جافا) ولم يكن هناك سبب وجيه لإعادة تسمية LiveScript إلى JavaScript. أدى هذا إلى ارتباك حول أن JavaScript مرتبطة بطريقة ما بـ Java، لكن JavaScript هي لغة مختلفة، فهي تشترك مع اللغات الوظيفية مثل Lisp أو Scheme أكثر من Java.
جافا سكريبت هي لغة برمجة فعلية عالية المستوى ومفسرة، وليست لغة نصية، كما هو الحال في لغة البرمجة النصية -النصي تشير اللاحقة.