تقرير شامل عن الحادثة · 16 مرجعاً · Anzen Lab

أربعة أسطر من الكود.
ضياع أكثر من 1,596 بتكوين.

في مارس 2021، توقف بناء برنامج ثابت لـ COLDCARD عن طلب أرقام عشوائية من شريحة الأجهزة وجعل برمجيات عاديّة تحسبها بدلاً من ذلك. لم يلاحظ أحد ذلك لمدة خمس سنوات. وفي يوليو 2026، قام المهاجمون بإجراء الحسابات وبدأوا في إفراغ المحافظ.

ما كلفه هذا الإعداد
5 سنوات
بقي الخلل في شيفرة برمجية عامة تماماً دون أن يلاحظه أحد1
1,596+ BTC
تأكيد سرقتها من حوالي 7,300 عنوان، ولا يزال العدد في ارتفاع7
41 دقيقة
أكبر عملية سحب فردية: 1,083 BTC، حوالي 70 مليون دولار في ذلك الوقت9
1 من كل ترليون
الاحتمالات التي كان على المهاجم التغلب عليها على جهاز Mk3. كان التصميم يقتضي فرصة واحدة في رقم مكون من 78 رقمًا1
ما الذي حدث خطأ

فحص أمان كان موجوداً، ولم يفعل شيئاً

01

كل الحماية تقوم على رقم واحد لا يستطيع أحد تخمينه

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

تفاصيل تقنية

تحمل 12 كلمة 128 بتاً من العشوائية، وتحمل 24 كلمة 256 بتاً، بالإضافة إلى رمز تحقق (checksum) ناتج عن خوارزمية SHA-256 لتلك العشوائية. يعمل معيار BIP-39 على توسيع النتيجة لتصبح المفتاح الرئيسي لمعيار BIP-32.

تفاصيل تقنية

تحمل 12 كلمة 128 بتاً من العشوائية، وتحمل 24 كلمة 256 بتاً، بالإضافة إلى رمز تحقق (checksum) ناتج عن خوارزمية SHA-256 لتلك العشوائية. يعمل معيار BIP-39 على توسيع النتيجة لتصبح المفتاح الرئيسي لمعيار BIP-32.

02

توقف 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

ما ينبغي سحب الكلمات الـ 24 منه
115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936
ما سحبه COLDCARD فعلياً
1,099,511,627,776
03

لأن البرمجيات لا يمكن أن تكون عشوائية

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

تفاصيل تقنية

مع تعطيل 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

04

وعملية التحقق المخصصة لإيقافه طرحت السؤال الخطأ

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

تفاصيل تقنية

#ifndef يختبر فقط التعريف. قام تكوين اللوحة بتعريف MICROPY_HW_ENABLE_RNG كـ 0، معرف ومعطل، لذلك لم يتم تشغيل الخطأ مطلقًا وحل المربط rng_get() إلى الاحتياطي البرمجي.3

تفاصيل تقنية

#ifndef يختبر فقط التعريف. قام تكوين اللوحة بتعريف MICROPY_HW_ENABLE_RNG كـ 0، معرف ومعطل، لذلك لم يتم تشغيل الخطأ مطلقًا وحل المربط rng_get() إلى الاحتياطي البرمجي.3

العيب، مقتبسا من المصدر.3

05

لم يبدو أي شيء خاطئاً طوال خمس سنوات

تبدو عبارة الاسترداد الضعيفة تمامًا مثل العبارة القوية. أربعة وعشرون كلمة عادية، والمجموع الاختباري الصحيح، وجهاز يتصرف بشكل طبيعي. لا شيء يحذرك على الشاشة ولا شيء يحدث خطأ في البناء. كان المصدر عامًا طوال الوقت. قراءته ما زالت تتطلب من شخص ما فتح هذا الملف المعين.

تفاصيل تقنية

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

تفاصيل تقنية

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

06

ثم قام أحدهم بإجراء الحسابات

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

تفاصيل تقنية

تُستمد المرشحات دون اتصال عبر معيار BIP-39/BIP-32؛ وعملية البحث النهائية للرصيد وحدها هي التي تتصل بالشبكة، لذا لا توجد أي إشارة من جهة الضحية مسبقاً.3

تفاصيل تقنية

تُستمد المرشحات دون اتصال عبر معيار BIP-39/BIP-32؛ وعملية البحث النهائية للرصيد وحدها هي التي تتصل بالشبكة، لذا لا توجد أي إشارة من جهة الضحية مسبقاً.3

هذه الصفحة ليست احتفالاً بانتصار.

كشفت Coinkite عن الخلل، ونشرت تقريرًا تقنيًا وشحنت إصلاحًا. تمكن الباحثون الخارجيون من إعادة بناء ما حدث لأن COLDCARD مفتوحة المصدر.

تنبيه واحد بشأن التقديرات: فهي توضح حجم التخمين الذي يواجه المهاجم في ظل الافتراضات الحالية، وليست مؤشراً زمنياً. لا يستطيع أحد أن أخبارك بالوقت الذي سيستغرقه اختراق أي محفظة معينة.2

إذا كنت تمتلك جهاز COLDCARD

اقرأ هذا قبل أي شيء آخر

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

افترض أن هذا لا يزال يحدث. تم جعل العبارات قابلة للتخمين في عام 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 المتأثرة؟

الإشعار التقني الرسمي لـ Coinkiteانتقل إلى محفظة جديدة على جهاز تثق به بالفعل، وأرسل معاملة اختبار واحدة صغيرة قبل ترحيل كل شيء. احتفظ بالأدلة العامة (معرفات المعاملات والعناوين والطوابع الزمنية) ولا تحتفظ بالسر أبدًا. أي شخص يعرض استعادة أموالك هو سرقة ثانية قيد التنفيذ، ولا توجد خدمة من هذا القبيل. الأجهزة التي يجب شراؤها بعد ذلك يمكن أن تنتظر حتى تصبح عملاتك بأمان.
وإذا كنت تمتلك OneKey

لا يوجد أي جهاز OneKey متأثر

وليس نموذجًا واحدًا شحناه من قبل. البرامج الثابتة الخاصة بنا لا تحمل أي تبعية لـ libngu أو Coinkite أو COLDCARD أو CKCC، وبالتالي فإن مسار الكود الذي فشل ليس موجودًا ليتم الوصول إليه، ويمكنك التحقق من ذلك بنفسك في مستودعاتنا. على أجهزتنا الحالية، يأتي المفتاح من المولد العشوائي الحقيقي داخل عنصر آمن معتمد، وليس أبدًا من البرامج الموجودة على المعالج الرئيسي. هذا الاستبدال هو ما كان عليه هذا الفشل.

غير متأثرة
OneKey Pro
OneKey Classic 1S
OneKey Classic 1S Pure
OneKey Touch
OneKey Classic
OneKey Mini

لم نأخذ ذلك على محمل الثقة أيضًا. عندما انتشرت الأخبار، تتبع Anzen Lab عشوائيتنا من البداية إلى النهاية (من أين تأتي، وماذا تستدعي، وإعدادات البناء التي تقرر النسخة التي تصل إلى جهازك) ونشر الملفات الدقيقة التي قاموا بفحصها.12

قراءة إعادة الفحص من Anzen Lab
السؤال الذي تطرحه فعلياً

هل كان يمكن أن يحدث هذا مع OneKey؟

هذا الفشل تطلب ثلاثة أشياء منفصلة لتكون صحيحة في نفس الوقت. على OneKey لا شيء منها صحيح، ويمكنك التحقق من الثلاثة بنفسك.

من أين تأتي عشوائيتنا

إذن من أين تأتي العشوائية في OneKey؟

مصنوعة داخل رقاقة معتمدة بدرجة EAL 6+

يتم إنشاء مفاتيحك والاحتفاظ بها داخل رقاقة مخصصة ومقاومة للعبث بدلاً من المعالج ذي الغرض العام الذي يشغل كل شيء آخر. درجة EAL 6+ هي مستوى الأمان المستخدم لبطاقات الدفع والهوية.

عشوائية تراقب نفسها

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

قمنا بإعادة فحص نظامنا

بعد أخبار COLDCARD، تتبع Anzen Lab عشوائيتنا الخاصة طوال الطريق (من أين تأتي، وماذا تستدعي حقًا، وإعدادات البناء التي تقرر النسخة التي ينتهي بها المطاف على جهازك) ونشر الملفات الدقيقة التي نظروا إليها.11

OneKey Pro's EAL 6+ certified secure element
EAL 6+ Badge
كل معاملة، مؤمنة بواسطة شرائح معتمدة بمستوى EAL 6+.
أين يتم توليد العشوائية
الشريحة الآمنة
THD89
مستوى الضمان
معتمد بمستوى EAL 6+
مصدر العشوائية
مولد أرقام عشوائية حقيقي (TRNG) هاردوير مع اختبار ذاتي
المخرجات معتمدة وفقاً لـ
BSI AIS 20 / 31
إعادة التدقيق بعد هذا الحادث
مختبر Anzen Lab، تم نشر الشيفرة المصدرية
كيف تم تصنيع OneKey، ومن يراقبها

أربع عمليات تدقيق على كل جهاز OneKey، ولا تعتمد أي منها على الثلاثة الأخرى

قد يفوت أي منها شيئاً ما. المغزى هو أن الطبقات الأربع يجب أن يفوتها نفس الشيء بالذات. لم تكن لدى COLDCARD مثل هذه الشبكة الاحتياطية: فإعداد بناء واحد غير مفحوص كان كافياً.

01

مصدر مفتوح يمكنك التحقق منه فعلياً

برامجنا الثابتة وتطبيقاتنا عامة على GitHub، وبناؤنا قابل للتكرار، مما يعني أنه يمكنك إعادة بناء الكود بنفسك والتأكد من أنه ينتج بالضبط البرمجيات التي تعمل على جهازك. هذه هي الخطوة التي تلتقط مشكلة "الكود الصحيح، الإصدار الخاطئ".

OneKey على GitHub
02
SlowMist

جهات خارجية تفحصنا، بسجل رسمي

تقوم شركة الأمان SlowMist بمراجعتنا ونشر التقارير. تغطي تقييمات منفصلة OneKey Pro وClassic 1S وSDK الخاص بنا. ممارسات الأمان لدينا معتمدة وفقًا لـ ISO/IEC 27001، وتم اعتماد خط Pro وClassic 1S ضد EN 18031 من قبل هيئة تعينها الاتحاد الأوروبي. كلها منشورة وليست مقيمة ذاتيًا.13

قراءة ملخص تدقيق SlowMist
03

فريق يتقاضى أجراً لاختراق منتجاتنا الخاصة

Anzen Lab هو فريق الأمان الداخلي لدينا من مهندسي أمان الأجهزة والبرامج الثابتة والتطبيقات، يعمل مع مجموعة دورية من الباحثين الخارجيين. مهمتهم هي كسر محافظ الأجهزة، بما في ذلك محفظتنا، قبل شحن أي شيء. عندما اندלعت هذه القصة، أعادوا فحص عشوائية OneKey من البداية إلى النهاية ونشروا الملفات التي فحصوها بدقة.11

قراءة تحليل Anzen Lab
04

ندفع للغرباء ليكتشفوا أخطاءنا

يمكن لأي شخص الإبلاغ عن ثغرة لنا بشكل خاص، عبر برنامجنا العام على BugRap أو مباشرة إلى [email protected]، والحصول على مكافأة مقابل ذلك. تحدد شدة الثغرة قيمة الدفع، وفق تقييم CVSS. والهدف الأساسي هو جعل إخبارنا بالثغرة أكثر جاذبية من بيعها.15

OneKey على BugRap
entro.tools · صُمِّمت بواسطة مؤسسنا

اختبر المحفظة في يدك

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

وهي تعمل على Trezor وKeepKey بالإضافة إلى أجهزتنا الخاصة، لذا يمكنك مقارنتها جنباً إلى جنب بدلاً من الوثوق بادعاء أي بائع بمفرده.
كيف يعمل
في متصفحك، عبر WebUSB
الاختبارات المطبقة
FIPS 140-2، NIST SP 800-22 / 90B
بياناتك
لا تغادر الصفحة أبداً
تحديث البرامج الثابتة
غير مطلوب
فحص العشوائية

تشغيل اختبارات الصحة FIPS 140-2 وNIST SP 800-22 وSP 800-90B محليًا عبر WebUSB (سطح المكتب Chrome أو Edge). يطلب الجهاز تصدير العشوائية، وهي مجموعة من الأرقام العشوائية التي تم إنشاؤها للتو، وليس عبارة الاسترداد الخاصة بك أبدًا.16

يتطلب اختبار ماورر العام 387,840 بت على الأقل، وعند أقل من ذلك يضع التقرير علامة «تم تخطيه» بدلاً من حذفه بصمت.16

المحافظ التي يمكن التحقق منها

ما إذا كان الشخص الخارجي يمكنه قراءة الأرقام العشوائية الخام للجهاز على الإطلاق. هذا بعد ضيق واحد. انظر الملاحظة أدناه.

OneKey
قابل للتحقق بنفسك
جميع الطرازات، البرامج الثابتة الأساسية16
Trezor
قابل للتحقق بنفسك
جميع الطرازات، بروتوكول الاتصال المشترك16
KeepKey
قابل للتحقق بنفسك
عائلة بروتوكول اتصال Trezor16
Ledger
ثق بالمزوّد
شريحة أمان مغلقة؛ لا يوجد أمر مضيف يكشف عن أرقام عشوائية خام16
BitBox02
ثق بالمزوّد
تمت إزالة طلب الأرقام العشوائية الخاص بالبروتوكول بواسطة المزود16
Blockstream Jade
ثق بالمزوّد
يمكن للمضيف إضافة العشوائية فقط؛ ولا توجد طريقة لقراءة المصدر مرة أخرى16
COLDCARD
ثق بالمزوّد
يحتوي على منفذ USB، ولكن بروتوكوله لا يحتوي على أمر عشوائية على الإطلاق16
Keystone
ثق بالمزوّد
معزول هوائياً بطبيعته؛ يحمل USB معلومات الجهاز وتحديثات البرامج الثابتة فقط16
"لا يمكن اختبارها" و"غير آمنة" مطالبتان مختلفتان. تتبع العناصر الآمنة المغلقة مسار اعتمادها الخاص. النتيجة الناجحة تثبت فقط عدم ظهور أي عيب إحصائي اليوم. لا يمكنها إثبات عدم القدرة على التنبؤ التشفيري، ولا تقول شيئًا عن العشوائية المستخدمة في اليوم الذي تم فيه إنشاء محفظتك.
لا تزال تساوركم أسئلة

الأسئلة التي يثيرها هذا الأمر بالنسبة للجميع

هل تأثرت OneKey بعطل العشوائية في COLDCARD؟

ما هي محفظات الأجهزة التي يتأثر عطل العشوائية في COLDCARD بها؟

هل يمكنني اختبار عشوائية محفظتي بنفسي؟

كيف أقيم ما إذا كان يمكن الوثوق بمحفظة أجهزة؟

أمان يمكنك التحقق منه، لا أمان يُطلب منك تصديقه.

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

Cold Storage Weeks
ما يصل إلى $50 من البيتكوين مع كل جهاز، حتى 17 أغسطس.

المراجع

المصادر أدناه، تم استرجاعها في 6 أغسطس 2026. تأتي استشارة Coinkite وتقريرها التقني أولاً، يليهما تحليل مستقل على مستوى المصدر والمحاسبة على السلسلة. لا تزال أرقام الخسائر تُعدل تصاعديًا: أكدت Galaxy Research على 1,596 BTC في 4 أغسطس وقدرت الخسائر المشتبه بها بنحو 2,055 BTC.