أربعة أسطر من الكود.
ضياع أكثر من 1,596 بتكوين.
في مارس 2021، توقف بناء برنامج ثابت لـ COLDCARD عن طلب أرقام عشوائية من شريحة الأجهزة وجعل برمجيات عاديّة تحسبها بدلاً من ذلك. لم يلاحظ أحد ذلك لمدة خمس سنوات. وفي يوليو 2026، قام المهاجمون بإجراء الحسابات وبدأوا في إفراغ المحافظ.
فحص أمان كان موجوداً، ولم يفعل شيئاً
كل الحماية تقوم على رقم واحد لا يستطيع أحد تخمينه
تؤدي محفظة الأجهزة عدة مهام. فهي تعرض لك ما تقوم بالتوقيع عليه فعليًا بدلاً من مطالبتك بالثقة في شاشة كمبيوتر مصاب، وتحتفظ بمفتاحك داخل شريحة مصممة مقاومة للفتح. يفترض كل دفاع من هذه الدفاعات أن الرقم الذي أتى منه مفتاحك لا يمكن تخمينه. وإذا كان من الممكن تخمينه، فلن يحتاج المهاجم أبدًا إلى تجاوز أي منها. المجمع الذي يُستمد منه العبارة المكونة من 24 كلمة يحتوي تقريبًا على رقم واحد لكل ألف ذرة في الكون المرصد. مجمع بهذا الحجم لا يمكن البحث فيه. هذا هو نموذج الأمان بأكمله.
تحمل 12 كلمة 128 بتاً من العشوائية، وتحمل 24 كلمة 256 بتاً، بالإضافة إلى رمز تحقق (checksum) ناتج عن خوارزمية SHA-256 لتلك العشوائية. يعمل معيار BIP-39 على توسيع النتيجة لتصبح المفتاح الرئيسي لمعيار BIP-32.
تحمل 12 كلمة 128 بتاً من العشوائية، وتحمل 24 كلمة 256 بتاً، بالإضافة إلى رمز تحقق (checksum) ناتج عن خوارزمية SHA-256 لتلك العشوائية. يعمل معيار BIP-39 على توسيع النتيجة لتصبح المفتاح الرئيسي لمعيار BIP-32.
توقف COLDCARD عن السحب من ذلك الحوض
أدى تغيير في البرامج الثابتة عام 2021 إلى توقف المحفظة بهدوء عن مطالبة شريحة العشوائية المخصصة بذلك الرقم، والاعتماد بدلاً من ذلك على البرمجيات العادية لحسابه. جنباً إلى جنب، إليك ملابسات الحادث بالكامل:
هذا ليس أمانًا منخفضًا بمقدار الثلثين. يضاعف كل بت العمل، لذا فإن تقليل 88 بت يقلل المهمة بعامل 2⁸⁸. التريليون هو رقم كبير لشخص وصغير لشخص يستأجر آلات عالية الأداء للعمل على ذلك.
انتقل توليد البذور من ckcc.rng_bytes() إلى ngu.random.bytes(). تقدر Coinkite حوالي 40 بت من مساحة البحث المتبقية على Mk3 وحوالي 72 على Mk4/Mk5/Q، مقابل هدف 128 بت. يصل التحليل المستقل بواسطة Block إلى نفس الترتيب (أقل من 2⁴⁰·⁷ وأقل من 2⁷۳·³) ويجد شروطًا أضيق حيث يتبقى أقل بكثير.2
انتقل توليد البذور من ckcc.rng_bytes() إلى ngu.random.bytes(). تقدر Coinkite حوالي 40 بت من مساحة البحث المتبقية على Mk3 وحوالي 72 على Mk4/Mk5/Q، مقابل هدف 128 بت. يصل التحليل المستقل بواسطة Block إلى نفس الترتيب (أقل من 2⁴⁰·⁷ وأقل من 2⁷۳·³) ويجد شروطًا أضيق حيث يتبقى أقل بكثير.2
لأن البرمجيات لا يمكن أن تكون عشوائية
فكر في ما يجعل رمية العملة غير قابلة للتنبؤ. قوة الرمية، الجاذبية، تيار هوائي من مكيف الهواء، هزات خفيفة في الأرض. عشرات التأثيرات التي يمكنك تسميتها وعشرات لا يمكنك تسميتها. لا يمكن لأحد حساب المسار، لذلك لا يمكن لأحد توقع النتيجة. تعمل البرمجيات بشكل مختلف. فهي تشغل صيغة ثابتة على عدد قليل من قيم البداية وتنتج إجابة ثابتة. هنا كانت تلك القيم هي الرقم التسلسلي للشريحة ومدة تشغيل الجهاز. المهاجم الذي يتعرف على الوصفة والمكونات يعيد حساب الناتج بدلاً من تخمينه.
مع تعطيل RNG للأجهزة، تم ربط rng_get() بـ MicroPython's Yasmarang PRNG، وتم إعداده من حالة غير سرية (UID، SysTick، RTC) ولم يجمع أي عشوائية جديدة بعد ذلك، لذلك تحسب المرشحات في وضع عدم الاتصال. لا تعتبر Coinkite البذور المختلطة بـ 50 أو أكثر من الرميات النزيهة والخاصة معرضة للخطر من هذه المشكلة وحدها: 50 × log₂6 ≈ 129 بت.3
مع تعطيل RNG للأجهزة، تم ربط rng_get() بـ MicroPython's Yasmarang PRNG، وتم إعداده من حالة غير سرية (UID، SysTick، RTC) ولم يجمع أي عشوائية جديدة بعد ذلك، لذلك تحسب المرشحات في وضع عدم الاتصال. لا تعتبر Coinkite البذور المختلطة بـ 50 أو أكثر من الرميات النزيهة والخاصة معرضة للخطر من هذه المشكلة وحدها: 50 × log₂6 ≈ 129 بت.3
وعملية التحقق المخصصة لإيقافه طرحت السؤال الخطأ
كان هناك حارس في البناء، كتب خصيصًا لمنع شحن البرامج الثابتة بدون مولد الأجهزة. لقد سأل عما إذا كان الإعداد موجودًا، وليس عما إذا كان الإعداد قيد التشغيل. كان الإعداد موجودًا، وكان مغلقًا. ظل الحارس صامتًا، ولم يُبلغ البناء عن أي أخطاء، وشُحنت البرامج الثابتة.
#ifndef يختبر فقط التعريف. قام تكوين اللوحة بتعريف MICROPY_HW_ENABLE_RNG كـ 0، معرف ومعطل، لذلك لم يتم تشغيل الخطأ مطلقًا وحل المربط rng_get() إلى الاحتياطي البرمجي.3
#ifndef يختبر فقط التعريف. قام تكوين اللوحة بتعريف MICROPY_HW_ENABLE_RNG كـ 0، معرف ومعطل، لذلك لم يتم تشغيل الخطأ مطلقًا وحل المربط rng_get() إلى الاحتياطي البرمجي.3
العيب، مقتبسا من المصدر.3
لم يبدو أي شيء خاطئاً طوال خمس سنوات
تبدو عبارة الاسترداد الضعيفة تمامًا مثل العبارة القوية. أربعة وعشرون كلمة عادية، والمجموع الاختباري الصحيح، وجهاز يتصرف بشكل طبيعي. لا شيء يحذرك على الشاشة ولا شيء يحدث خطأ في البناء. كان المصدر عامًا طوال الوقت. قراءته ما زالت تتطلب من شخص ما فتح هذا الملف المعين.
تنجح اختبارات طول المخرجات، وعدم الصفرية، وعدم التكرار على مولد الأرقام العشوائية الزائفة الضعيف، ولهذا لم تستطع فحوصات الجودة الاعتيادية اكتشاف الخلل أيضاً.
تنجح اختبارات طول المخرجات، وعدم الصفرية، وعدم التكرار على مولد الأرقام العشوائية الزائفة الضعيف، ولهذا لم تستطع فحوصات الجودة الاعتيادية اكتشاف الخلل أيضاً.
ثم قام أحدهم بإجراء الحسابات
لم يلمسوا جهازاً واحداً قط؛ بل قاموا بتوليد العبارات المحتملة على أجهزتهم الخاصة، ومعرفة عناوين بيتكوين التي ستنتجها كل عبارة، ومقارنة تلك العناوين بسلسلة الكتل العامة. وتم إفراغ كل عنوان يحتوي على رصيد. محفظة ظلت مفصولة في درج منذ عام 2022 كانت عرضة للخطر تماماً مثل تلك المستخدمة يومياً.
تُستمد المرشحات دون اتصال عبر معيار BIP-39/BIP-32؛ وعملية البحث النهائية للرصيد وحدها هي التي تتصل بالشبكة، لذا لا توجد أي إشارة من جهة الضحية مسبقاً.3
تُستمد المرشحات دون اتصال عبر معيار BIP-39/BIP-32؛ وعملية البحث النهائية للرصيد وحدها هي التي تتصل بالشبكة، لذا لا توجد أي إشارة من جهة الضحية مسبقاً.3
هذه الصفحة ليست احتفالاً بانتصار.
كشفت Coinkite عن الخلل، ونشرت تقريرًا تقنيًا وشحنت إصلاحًا. تمكن الباحثون الخارجيون من إعادة بناء ما حدث لأن COLDCARD مفتوحة المصدر.
تنبيه واحد بشأن التقديرات: فهي توضح حجم التخمين الذي يواجه المهاجم في ظل الافتراضات الحالية، وليست مؤشراً زمنياً. لا يستطيع أحد أن أخبارك بالوقت الذي سيستغرقه اختراق أي محفظة معينة.2
اقرأ هذا قبل أي شيء آخر
ما تحتاج إلى القيام به يعتمد على الجهاز الذي كنت تستخدمه عند إنشاء عبارة الاسترداد لأول مرة، وليس الجهاز الذي تمتلكه اليوم.
افترض أن هذا لا يزال يحدث. تم جعل العبارات قابلة للتخمين في عام 2021 والطريقة أصبحت عامة الآن، لذا يمكن لأي شخص إجراء نفس البحث. لا يوجد تصحيح يغلقه من الخارج، ولا يوجد سبب للتوقف للمهاجم. إذا كنت متأثرًا، فالافتراض الآمن هو أن الوقت هو الشيء الوحيد بينك وبينهم.
Mk2 وMk3: انقلو عملاتكم الآن
النطاق المتأثر هو إصدارات البرامج الثابتة من 4.0.1 إلى 4.1.9. يُصلح الإصدار 4.2.0 طريقة إنشاء العبارات الجديدة، ولكن لا يوجد تحديث يمكنه الرجوع إلى الوراء لإضافة العشوائية إلى عبارة موجودة بالفعل. أنشئ محفظة جديدة على جهاز تثق به وانقُل أموالك إليها.1
Mk4 وMk5: تحقق من إصدار البرامج الثابتة
إذا تم إنشاء العبارة على برنامج ثابت أقدم من 5.6.0 (أو 6.6.0X على إصدارات Edge)، قم بالتحديث، وأنشئ محفظة جديدة تمامًا على البرامج الثابتة المحدثة، ثم انقلو أموالكم. التحديث بمفرده لا يصلح العبارة القديمة.1
Q: نفسه، الحد الأدنى هو 1.5.0Q
قم بالتحديث إلى الإصدار 1.5.0Q أو أحدث، أو 6.6.0QX في إصدارات Edge، وأنشئ محفظة جديدة، واكتب النسخة الاحتياطية واختبرها، وأرسل معاملة اختبارية صغيرة واحدة، ثم انقُل الباقي.1
هل يُصلح تحديث البرنامج الثابت لجهاز COLDCARD عبارة الاسترداد التي أمتلكها مسبقاً؟
كيف أعرف إصدار البرنامج الثابت الذي أنشأ عبارة الاسترداد الخاصة بي في COLDCARD؟
كيف أتحقق مما إذا كان عنواني متورطاً في هذه المشكلة؟
هل تحمي رمي النرد أو عبارة المرور عبارة استرداد COLDCARD؟
هل تغطي التحذيرات الصادرة عن Coinkite جميع أجهزة COLDCARD المتأثرة؟
لا يوجد أي جهاز OneKey متأثر
وليس نموذجًا واحدًا شحناه من قبل. البرامج الثابتة الخاصة بنا لا تحمل أي تبعية لـ libngu أو Coinkite أو COLDCARD أو CKCC، وبالتالي فإن مسار الكود الذي فشل ليس موجودًا ليتم الوصول إليه، ويمكنك التحقق من ذلك بنفسك في مستودعاتنا. على أجهزتنا الحالية، يأتي المفتاح من المولد العشوائي الحقيقي داخل عنصر آمن معتمد، وليس أبدًا من البرامج الموجودة على المعالج الرئيسي. هذا الاستبدال هو ما كان عليه هذا الفشل.
لم نأخذ ذلك على محمل الثقة أيضًا. عندما انتشرت الأخبار، تتبع Anzen Lab عشوائيتنا من البداية إلى النهاية (من أين تأتي، وماذا تستدعي، وإعدادات البناء التي تقرر النسخة التي تصل إلى جهازك) ونشر الملفات الدقيقة التي قاموا بفحصها.12
قراءة إعادة الفحص من Anzen Labهل كان يمكن أن يحدث هذا مع OneKey؟
هذا الفشل تطلب ثلاثة أشياء منفصلة لتكون صحيحة في نفس الوقت. على OneKey لا شيء منها صحيح، ويمكنك التحقق من الثلاثة بنفسك.
إذن من أين تأتي العشوائية في OneKey؟
مصنوعة داخل رقاقة معتمدة بدرجة EAL 6+
يتم إنشاء مفاتيحك والاحتفاظ بها داخل رقاقة مخصصة ومقاومة للعبث بدلاً من المعالج ذي الغرض العام الذي يشغل كل شيء آخر. درجة EAL 6+ هي مستوى الأمان المستخدم لبطاقات الدفع والهوية.
عشوائية تراقب نفسها
تولد هذه الشريحة العشوائية من ضوضاء مادية حقيقية، وتختبر باستمرار ناتجها الخاص. إذا بدأت العشوائية في التصرف بشكل سيء، تلاحظ الشريحة ذلك بدلاً من الاستمرار بهدوء.
قمنا بإعادة فحص نظامنا
بعد أخبار COLDCARD، تتبع Anzen Lab عشوائيتنا الخاصة طوال الطريق (من أين تأتي، وماذا تستدعي حقًا، وإعدادات البناء التي تقرر النسخة التي ينتهي بها المطاف على جهازك) ونشر الملفات الدقيقة التي نظروا إليها.11


أربع عمليات تدقيق على كل جهاز OneKey، ولا تعتمد أي منها على الثلاثة الأخرى
قد يفوت أي منها شيئاً ما. المغزى هو أن الطبقات الأربع يجب أن يفوتها نفس الشيء بالذات. لم تكن لدى COLDCARD مثل هذه الشبكة الاحتياطية: فإعداد بناء واحد غير مفحوص كان كافياً.
مصدر مفتوح يمكنك التحقق منه فعلياً
برامجنا الثابتة وتطبيقاتنا عامة على GitHub، وبناؤنا قابل للتكرار، مما يعني أنه يمكنك إعادة بناء الكود بنفسك والتأكد من أنه ينتج بالضبط البرمجيات التي تعمل على جهازك. هذه هي الخطوة التي تلتقط مشكلة "الكود الصحيح، الإصدار الخاطئ".
OneKey على GitHub
جهات خارجية تفحصنا، بسجل رسمي
تقوم شركة الأمان SlowMist بمراجعتنا ونشر التقارير. تغطي تقييمات منفصلة OneKey Pro وClassic 1S وSDK الخاص بنا. ممارسات الأمان لدينا معتمدة وفقًا لـ ISO/IEC 27001، وتم اعتماد خط Pro وClassic 1S ضد EN 18031 من قبل هيئة تعينها الاتحاد الأوروبي. كلها منشورة وليست مقيمة ذاتيًا.13
قراءة ملخص تدقيق SlowMistفريق يتقاضى أجراً لاختراق منتجاتنا الخاصة
Anzen Lab هو فريق الأمان الداخلي لدينا من مهندسي أمان الأجهزة والبرامج الثابتة والتطبيقات، يعمل مع مجموعة دورية من الباحثين الخارجيين. مهمتهم هي كسر محافظ الأجهزة، بما في ذلك محفظتنا، قبل شحن أي شيء. عندما اندלعت هذه القصة، أعادوا فحص عشوائية OneKey من البداية إلى النهاية ونشروا الملفات التي فحصوها بدقة.11
قراءة تحليل Anzen Labندفع للغرباء ليكتشفوا أخطاءنا
يمكن لأي شخص الإبلاغ عن ثغرة لنا بشكل خاص، عبر برنامجنا العام على BugRap أو مباشرة إلى [email protected]، والحصول على مكافأة مقابل ذلك. تحدد شدة الثغرة قيمة الدفع، وفق تقييم CVSS. والهدف الأساسي هو جعل إخبارنا بالثغرة أكثر جاذبية من بيعها.15
OneKey على BugRapاختبر المحفظة في يدك
entro.tools هي أداة مجانية ومفتوحة المصدر تقرأ الأرقام العشوائية الفعلية الصادرة عن محفظة الأجهزة وتجري اختبارات الصحة الإحصائية القياسية عليها، في متصفحك، عبر USB، دون تحميل أي شيء في أي مكان ودون الحاجة إلى تحديث البرامج الثابتة.
تشغيل اختبارات الصحة FIPS 140-2 وNIST SP 800-22 وSP 800-90B محليًا عبر WebUSB (سطح المكتب Chrome أو Edge). يطلب الجهاز تصدير العشوائية، وهي مجموعة من الأرقام العشوائية التي تم إنشاؤها للتو، وليس عبارة الاسترداد الخاصة بك أبدًا.16
يتطلب اختبار ماورر العام 387,840 بت على الأقل، وعند أقل من ذلك يضع التقرير علامة «تم تخطيه» بدلاً من حذفه بصمت.16
المحافظ التي يمكن التحقق منها
ما إذا كان الشخص الخارجي يمكنه قراءة الأرقام العشوائية الخام للجهاز على الإطلاق. هذا بعد ضيق واحد. انظر الملاحظة أدناه.
الأسئلة التي يثيرها هذا الأمر بالنسبة للجميع
هل تأثرت OneKey بعطل العشوائية في COLDCARD؟
ما هي محفظات الأجهزة التي يتأثر عطل العشوائية في COLDCARD بها؟
هل يمكنني اختبار عشوائية محفظتي بنفسي؟
كيف أقيم ما إذا كان يمكن الوثوق بمحفظة أجهزة؟
شرح ما هو معقّد هو عملنا
أمان يمكنك التحقق منه، لا أمان يُطلب منك تصديقه.
مفتوحة المصدر وقابلة للتكرار، تم مراجعتها من قبل أطراف خارجية، وتمت مهاجمتها من قبل مختبرنا الخاص، ويتم الدفع مقابلها عندما يجد شخص ما ثغرة. هذه هي الأجهزة التي يدور حولها النقاش.
المراجع
المصادر أدناه، تم استرجاعها في 6 أغسطس 2026. تأتي استشارة Coinkite وتقريرها التقني أولاً، يليهما تحليل مستقل على مستوى المصدر والمحاسبة على السلسلة. لا تزال أرقام الخسائر تُعدل تصاعديًا: أكدت Galaxy Research على 1,596 BTC في 4 أغسطس وقدرت الخسائر المشتبه بها بنحو 2,055 BTC.
- 1. Coinkite · COLDCARD Mk3 Seed Generation Security Advisory
- 2. Coinkite · Technical Deep Dive into the Entropy Issue
- 3. Block Engineering · Predictable RNG Fallback and 32-Bit Reseed in COLDCARD Firmware
- 4. CoinDesk · Bitcoin cold-wallet attack spreads to 4,500 addresses as losses near $89 million
- 5. CoinDesk · Major bitcoin wallet flaw drains 594 BTC in 25-minute sweep
- 6. Crypto Briefing (Galaxy Research) · Galaxy Research identifies 1,367 BTC drained in attacks on Coldcard addresses
- 7. The Crypto Times (Galaxy Research) · Coldcard hack losses hit $100M with 1,596 BTC stolen in ongoing attack
- 8. The Crypto Times (Galaxy Research) · 15 attackers exploit ongoing Coldcard hack as losses approach $130M
- 9. The Hacker News · Coldcard Hardware Wallet Flaw Linked to $70 Million Bitcoin Theft in 41 Minutes
- 10. Bitcoin Magazine · Coinkite Releases Fixed Firmware After Coldcard Bug
- 11. OneKey Anzen Lab · The COLDCARD Entropy Failure: How a Silent RNG Fallback Cost Users $38 Million
- 12. OneKey · Statement: OneKey devices are not affected by this issue
- 13. OneKey · OneKey has passed a security audit by SlowMist — separate reports cover the Pro, the Classic 1S and the SDK
- 14. SlowMist · SlowMist Audit Report — OneKey Pro
- 15. BugRap · OneKey Bug Bounty Program
- 16. entro.tools · Entropy Check — verify your hardware wallet's randomness (device support matrix)








