
کسی در حال خالی کردن کیف پولهای بیت کوینی بوده که هرگز نباید قابل دسترسی میبودند.
این کوینها روی دستگاههای Coldcard قرار داشتند – کیف پولهای سختافزاری از تولیدکننده کانادایی Coinkite، از آن دست که هرگز به اینترنت وصل نمیشوند. بدون لینک فیشینگ. بدون بدافزار. بدون لپتاپ سرقت شده. مهاجمان به سادگی کلیدهای خصوصی (private keys) را کشف کردند.
اکنون Galaxy Research سرقت بیش از ۱۵۹۶ بیت کوین را در سه موج تایید شده ردیابی کرده است، با یک موج چهارم مشکوک که مجموع را به حدود ۲۰۵۵ بیت کوین – تقریباً ۱۳۰ میلیون دلار با قیمتهای فعلی – میرساند. در یکی از این حملات، ۷۰ میلیون دلار در ۴۱ دقیقه جابجا شد. Coinkite میگوید حداقل ۱۵ مهاجم جداگانه در این حملات دست داشتهاند.
این شرکت در تاریخ ۱ آگوست یک سند فنی منتشر کرد که توضیح میداد چه اتفاقی افتاده است. این یک سند به طرز غیرمعمولی صریح است، و خلاصه آن این است که کیف پول برای هشت سال بدون اینکه کسی متوجه شود، با تاسهای دستکاری شده بازی میکرد.
در سال ۲۰۲۱، Coinkite رمزنگاری Coldcard را به libsecp256k1 منتقل کرد، همان کتابخانهای که بیت کوین کور (Bitcoin Core) استفاده میکند. تصمیم درستی بود. اما ادغام آنجا بود که همه چیز از هم پاشید.
این مهاجرت به آرامی تولید سید را از مولد اعداد تصادفی سختافزاری خود Coldcard به سمت راه حل نرمافزاری MicroPython تغییر مسیر داد – یک الگوریتم کوچک به نام Yasmarang که برای دستگاههای بدون تراشه تصادفیساز وجود دارد.
🚨LOSSES FROM COLDCARD HACK EXCEED $100M
High confidence 1,596 BTC has been stolen from ~7300 addresses across 3 confirmed waves + more 14 smaller incidents.
If we add suspected (but unconfirmed), the total balloons to $130m (2k BTC).
More in the thread below 👇 pic.twitter.com/RAl3ib67qa
— Galaxy Research (@glxyresearch) August 3, 2026
Coldcard تراشه تصادفیساز دارد. فقط دیگر از آن استفاده نمیشد.
دلیل آن تقریباً غیرقابل باور است. یک محافظ ساخت (build guard) از #ifndef استفاده میکرد، که بررسی میکند آیا یک تنظیم وجود دارد یا خیر، نه اینکه آیا روشن است یا خیر. Coinkite آن تنظیم را به عنوان صفر تعریف کرده بود، به معنای "خاموش". از آنجایی که صفر همچنان به عنوان تعریف شده محسوب میشود، بررسی ایمنی موفقیتآمیز بود و ساخت (build) کامل شد. هر دو نسخه تابع امضای یکسانی داشتند، بنابراین هیچ چیز اشتباه به نظر نمیرسید.
Coinkite نوشت: "بخش عمدهای از تصادفی بودن در COLDCARD از یک PRNG میآمد که نمیدانستم واقعاً در کد منبع وجود دارد"، و به یک مولد اعداد شبهتصادفی (pseudo-random number generator) اشاره کرد – نرمافزاری که اعدادی تولید میکند که تصادفی به نظر میرسند اما از یک دستورالعمل ثابت بر اساس یک مقدار اولیه پیروی میکنند.
اگر به دستورالعمل همان مقدار اولیه را بدهید، هر بار همان خروجی را دریافت خواهید کرد.
در دستگاههای Mk2 و Mk3 که از فریمور ۴.۰.۱ تا ۴.۱.۹ استفاده میکردند، آن مقدار اولیه از شماره سریال تراشه و ساعت آن میآمد. Coinkite فضای جستجوی حاصل را حدود ۴۰ بیت تخمین میزند. مدلهای جدیدتر کمی آنتروپی (entropy) عنصر امن را اضافه کردند و آنها را به حدود ۷۲ بیت رساندند.
هیچ کدام ۱۲۸، یعنی هدف، نیست.
این شکاف بیش از آنچه به نظر میرسد اهمیت دارد. بیتها توان هستند. یک فضای جستجوی ۱۲۸ بیتی ترکیبات بیشتری از تعداد اتمهای موجود در جهان قابل مشاهده را در خود جای میدهد، و هیچ کس آن را جستجو نمیکند. چهل بیت حدود یک تریلیون است – عددی که یک لپتاپ مناسب میتواند آن را پردازش کند. هر بیتی که از دست میدهید، کار را نصف میکند.
تیم مهندسی Block، که تحلیل خود را منتشر کرد، فضای جستجوی موثر عنصر امن در دستگاههای جدیدتر را 2^32 کاندیدا، با میانگین حدود 2^31 آزمایش، تخمین زد. ارزیابی آنها برای بردهای قدیمیتر صریحتر است: برای یک شناسه دستگاه (device ID) شناخته شده، وضعیت تایمر (timer state) و تاریخچه تماس، تولید کیف پول قطعی (deterministic) است.
و قطعی بودن (deterministic) نقطه مقابل تصادفی بودن است، که برای رمزنگاری ضروری است.
Coinkite گمان میکند که این مشکل توسط ماشین کشف شده است. این شرکت نوشت: "باید فرض کنیم که کسی از هوش مصنوعی (AI) برای بررسی نسخههای قبلی فریمور ما استفاده کرده و به این مشکل برخورده است"، و افزود که اخیراً یکی از بهترین مدلهای هوش مصنوعی موجود را بر روی همان کد اجرا کرده و چیزی پیدا نکرده است. "هم مهاجمان و هم مدافعان ابزارهای هوش مصنوعی یکسانی دارند، اما امروز این ابزار به ما کمکی نکرد و فقط به افراد بد کمک کرد."
فریمور رفع شده برای هر مدل آسیبدیده منتشر شده است. این فریمور سیدهای موجود را ترمیم نمیکند؛ این کیف پولها باید دوباره تولید شده و وجوه جابجا شوند. Decrypt پوشش داده است که چگونه ذخیرهسازی ایزوله (air-gapped storage) پس از یک اکسپلویت اینچنینی تغییر میکند و ضررهای رو به افزایش از ۱۱۴ میلیون دلار را ردیابی کرده است.
آنتروپی معیاری است از میزان عدم آگاهی مهاجم.
به عبارت دیگر، اساساً عدم قطعیت است که بر حسب بیت شمارش میشود. یک بیت یک پرتاب سکه است: دو نتیجه، و حدسزننده نصف مواقع درست حدس میزند. ده بیت ۱۰۲۴ نتیجه است. هر بیت کار حدسزننده را دو برابر میکند.
یک کیف پول بیت کوین یک عدد بسیار بزرگ است که محرمانه نگه داشته میشود. آدرسی که مردم کوینها را به آن میفرستند، به صورت ریاضی از آن مشتق میشود، و این اشتقاق فقط یک طرفه است – شما میتوانید از کلید به آدرس بروید، اما هرگز برعکس.
بنابراین امنیت هر کیف پول به یک سوال بستگی دارد: یک مهاجم باید چند عدد را امتحان کند؟
اگر عدد با ۱۲۸ بیت آنتروپی انتخاب شده بود، پاسخ این است: "بیش از آنچه فیزیک اجازه میدهد." اگر با ۴۰ بیت انتخاب شده بود، پاسخ این است: "کمی به من زمان بدهید."
این همان ویژگی است که تهدید محاسبات کوانتومی را قابل بحث میکند – یک ماشین کوانتومی به ریاضیاتی که کلید را به آدرس مرتبط میکند، حمله خواهد کرد. نقص Coldcard هرگز نیازی به این کار نداشت. این نقص باعث شد کلیدها قبل از دخالت آن ریاضیات قابل حدس شوند.
اینجا جایی است که واژگان گیجکننده میشوند. یک مولد شبهتصادفی (pseudo-random generator) خروجی تولید میکند که از آزمونهای آماری برای تصادفی بودن عبور میکند، بنابراین اساساً چیزی نیست که یک صفحه گسترده (spreadsheet) آن را پرچمگذاری کند. آن خروجی همچنان به طور کامل توسط مقدار سید (seed value) آن تعیین میشود. تصادفی به نظر میرسد اما نیست.
تصادفی بودن آماری و غیرقابل پیشبینی بودن رمزنگاری ویژگیهای متفاوتی هستند، و خروجی Coldcard از آزمون اول با موفقیت عبور میکرد در حالی که در آزمون دوم به طور کامل شکست میخورد.
تصادفی بودن واقعی باید از نویز فیزیکی ناشی شود: لرزش الکتریکی در یک مدار، نوسان حرارتی، واپاشی رادیواکتیو. این همان چیزی بود که تراشه سختافزاری روی Coldcard برای آن ساخته شده بود. این همان تراشهای است که پرچم ساخت (build flag) آن را قطع کرد.
هنگامی که کاربران برای بازتولید سیدها عجله داشتند، بسیاری به سراغ راه حل آشکار و کمفناوری رفتند. Coldcardها به شما اجازه میدهند تاس فیزیکی بیندازید و نتایج را به عنوان آنتروپی وارد کنید. راهنمایی خود Coinkite، سیدهای ساخته شده با حداقل ۵۰ پرتاب تاس مستقل و خصوصی را در معرض خطر این نقص نمیداند.
شاید احمقانه به نظر برسد، اما این شرکت در واقع یک کیسه حاوی "۱۰۰ تاس کوچک و بامزه" میفروشد تا کل فرآیند را برای شما آسانتر کند.
در ۳۱ جولای، لوک دشجر، توسعهدهنده بیت کوین کور (Bitcoin Core)، هشداری منتشر کرد: "تعداد زیادی از مردم در حال پیشنهاد/استفاده از تاس برای کاهش آسیبپذیری Coldcard هستند. توجه داشته باشید که تاسهای معمولی برای امنیت رمزنگاری طراحی نشدهاند. اگر قصد انجام این کار را دارید، احتمالاً باید تاسهای دقیق کازینو بخرید. و حتی در آن صورت، منبع دیگری از آنتروپی داشته باشید."
توییتر بیت کوین این را به آرامی نپذیرفت.
یک کاربر نوشت: "lol حالا حتی نمیتوانید تاس بیندازید." "خود نگهداری دیگر تمام است..." دیگری پرسید که آیا باید کسی را با پارکینسون استخدام کند تا تاسها را بیندازد. (کار درستی نیست.)
should I hire someone with parkinsons to throw the dice?
— Murern (@Bitcoin_Murern) July 31, 2026
احتمالاً مفیدترین پاسخ با محاسبات ریاضی همراه بود. جاستین شارپ، توسعهدهنده، اعداد را برآورد کرد که یک تاس بد چقدر برای شما هزینه دارد:
"زیادهروی است. یک تاس ۶ وجهی کامل (d6) ۲.۵۸۵ بیت در هر پرتاب میدهد. یک تاس به طور محسوسی سوگیرانه، مثلاً با یک وجه که ۲۰٪ مواقع به جای ۱۶.۷٪ فرود میآید، همچنان حدود ۲.۵۵ بیت میدهد. در ۹۹ پرتاب، این تفاوت بین ~۲۵۶ بیت و ~۲۵۲ بیت آنتروپی است."
چهار بیت از ۲۵۶. این تمام مجازات برای یک تاس به وضوح ناعادلانه است.
دشجر اشتباه نمیکند که تاسهای ارزان قیمت سوگیری قابل اندازهگیری دارند – سوراخهای تزریق پلاستیک مقادیر کمی متفاوت از پلاستیک را از هر وجه حذف میکنند، دقیقاً به همین دلیل است که کازینوها از تاسهای دقیق با پرکننده همسطح استفاده میکنند. او در مورد فیزیک حق با اوست و در مورد اهمیت اشتباه میکند. از دست دادن چهار بیت از ۲۵۶، شما را در ۲۵۲ باقی میگذارد. اما نقص Coldcard کاربران را در ۴۰ بیت رها کرد.
اما یک استدلال قویتر در توصیه او نهفته است، و آن در مورد تحمل ساخت نیست. بلکه در مورد عدم اعتماد به یک منبع واحد است. شکست Coldcard این نبود که آنتروپی آن کمی سوگیرانه بود – بلکه این بود که یک جزء بیصدا از مشارکت بازماند و هیچ چیز آن را تشخیص نداد.
اگر یک سید (seed) را روی یک Coldcard آسیبدیده بدون پرتاب تاس (واقعاً) یا یک عبارت عبور (passphrase) قوی BIP-39 تولید کردهاید، آن سید به خطر افتاده است.
فریمور را بهروزرسانی کنید، یک سید جدید تولید کنید، اثر انگشت (fingerprint) را تأیید کنید، یک تراکنش آزمایشی ارسال کنید، سپس همه چیز را منتقل کنید. توصیه Coinkite آن را مدل به مدل توضیح میدهد. سیدهای صادر شده این نقص را با خود حمل میکنند – انتقال یک سید معیوب به یک برنامه کیف پول دیگر چیزی را حل نمیکند.
برای بقیه، نتیجه این نیست که کیف پولهای سختافزاری خراب هستند یا تاسها یک تلهاند.
بلکه این است که "تصادفی بودن" یک ادعا است، و ادعاها نیاز به بررسی دارند. کد منبع Coldcard تمام مدت عمومی بود. RNG سختافزاری مورد نظر درست در باینری قرار داشت. بازبینها تأیید کردند که وجود دارد اما هرگز تأیید نکردند که مولد سید واقعاً آن را فراخوانی کرده است.
هشت سال ممیزی کد صحیح را بررسی کرد. هیچ کس بررسی نکرد که آیا اجرا میشود یا خیر.