جاناتان گودمن تمام قوانین حفظ امنیت بیت کوین را رعایت کرده بود. کیف پول سختافزاری که کلیدهای او را نگه میداشت (یک کلدکارد – Coldcard)، هرگز به اینترنت متصل نشده بود. او آن را در یک صندوق امانات نگهداری میکرد. عبارات بازیابی (Seed Phrase) او نیز که هرگز با کسی به اشتراک نگذاشته بود، در صندوق امانات دیگری نگهداری میشد. اما به گفته گودمن، در تاریخ ۲۹ جولای تمامی کیفپولهای او خالی شد و آخرین ساتوشی او هم به سرقت رفت. این کارآفرین اهل تورنتو گزارش داد که ۱۸.۲۵ بیتکوین خود را به ارزش بیش از ۱.۱۷ میلیون دلار در زمان حمله از دست داده است.
او در پستی در شبکه اجتماعی X در تاریخ ۱ آگوست نوشت: «شاید سختترین بخش این ماجرا این باشد که من همه کارها را درست انجام داده بودم!»
خسارت گودمن بخشی از یک هک بسیار بزرگتر بود که هزاران کاربر کلدکارد را تحت تاثیر قرار داد. موسسه پژوهشی «گلکسی ریسرچ» اعلام کرد با اطمینان بالا، ۱,۵۹۶ بیتکوین — به ارزش بیش از ۱۰۰ میلیون دلار — طی سری حملاتی از حدود ۷,۳۰۰ آدرس سرقت شده است. الکس تورن، مدیر پژوهش گلکسی در ۴ آگوست برآورد کرد که حداقل ۱۵ مهاجم مختلف در حال سوءاستفاده از این آسیبپذیری بودهاند. هیچکدام از آنها نیازی به دسترسی فیزیکی به دستگاهها نداشتند.
کل فرض امنیتی یک کیف پول سختافزاری این است که اسرار (کلیدهای) آن هرگز از تراشه خارج نمیشوند. بدون اتصال به اینترنت، هیچ راه نفوذی به جز دسترسی فیزیکی به دستگاه وجود ندارد. اگرچه دسترسی فیزیکی به کیف پول سختافزاری خطرات خاص خود را برای کاربران دارد — از خطرات سادهای مثل گم کردن دستگاه گرفته تا خطرات نگرانکنندهای مانند حملات زورگیری — اما ویژگی اصلی و نقطه فروش آنها این است که از دستبرد هکرها و سایر خطرات فضای آنلاین در امان هستند.
اما در مورد کلدکارد، این وعده امنیتی ناکام ماند. آسیبپذیری در خود کیف پول نبود — بلکه در نحوه تولید رمز عبور سری یا همان «عبارت بازیابی» بود که از سکههای کاربران محافظت میکرد.
مبانی کیف پولها
کیف پولهای بیتکوین میتوانند در اشکال مختلفی باشند. کیف پولهای نرمافزاری که «کیف پول گرم» نیز نامیده میشوند، روی دستگاههای متصل به اینترنت اجرا میشوند؛ موضوعی که استفاده از آنها را آسان میکند، اما در صورت نفوذ به دستگاه، آنها را در معرض خطر قرار میدهد.
کیف پولهای سختافزاری یا «کیف پول سرد» مانند کلدکارد، کلیدها را روی دستگاهی مجزا نگه میدارند که به اینترنت متصل نیست. یکی از اولین اشکال کیف پولهای سرد، به اصطلاح «کیف پولهای کاغذی» بودند که در آنها کاربران کلیدهای لازم برای دسترسی به کیف پول خود را روی یک تکه کاغذ مینوشتند. اگرچه این کیف پولها از دست هکرها در امان بودند، اما خطر بسیار بالای آسیب دیدن یا گم شدن را به همراه داشتند.
کیف پولهای سختافزاری چیزی بین یک کیف پول کاغذی و یک کیف پول گرم مبتنی بر مرورگر هستند. هک کردن آنها سختتر از نرمافزار و گم کردن آنها سختتر از کاغذ است، اما آسیبناپذیر نیستند. آنها میتوانند گم یا دزدیده شوند و کاربران باید بتوانند در وهله اول به دستگاه اعتماد کنند تا کلیدهایشان را به درستی بسازد.
بابی گری، بنیانگذار TEXITcoin به کویندسک گفت:
سیستمهای ایرگپ (کاملاً جدا از شبکه) کمککنندهاند، اما راهحل کاملی نیستند. امنیت باید از نحوه تولید کلیدها آغاز شده و در تمام مراحل فرآیند نگهداری ادامه یابد.
متأسفانه این درست همان جایی است که اوضاع برای Coinkite، سازنده کیف پول کُلدکارد، خراب شد.
یک باگ در سیستم
در مارس ۲۰۱۶، این شرکت بیتکوینی مستقر در تورنتو به مشتریان خود اعلام کرد که خدمات کیف پول گرم میزبانیشده خود را تعطیل میکند. اداره یک شرکت خدمات مالی آنلاین، ترافیک مخرب و مداومی از اینترنت را به همراه داشت که هدفش از دسترس خارج کردن خدمات آنها بود، علاوه بر اینکه هزینههای حقوقی و پیچیدگیهای مقرراتی سنگینی را تحمیل میکرد.
در عوض، Coinkite اعلام کرد که میخواهد چیز متفاوتی را امتحان کند. آنها میخواستند سختافزار غیرمتمرکز و «نرمافزار-نه-بهعنوان-خدمات» بسازند. این اتفاق در اوایل تاریخ کریپتو رخ داد، قبل از دومین هاوینگ بیتکوین، زمانی که هر بیتکوین اندکی بالاتر از ۴۰۰ دلار معامله میشد.
تغییر مسیر Coinkite ابتدا منجر به تولید Opendime در آوریل ۲۰۱۶ شد. این فلشمموری کوچک، یک کلید خصوصی تولید و پنهان میکرد و اجازه میداد بیتکوین مانند یک دارایی فیزیکی بینام از فردی به فرد دیگر منتقل شود. شکستن فیزیکی پلمپ دستگاه، کلید را نمایان میکرد و اجازه خرج کردن سرمایه را میداد.
کُلدکارد بهزودی پس از آن آمد. Coinkite در دسامبر ۲۰۱۷ این دستگاه را زیر عنوان «جهان به یک کیف پول سختافزاری متنباز، ارزان و فوق امن نیاز دارد» معرفی کرد. این شرکت در آن زمان استدلال کرد که کیف پولهای سختافزاری موجود بیش از حد گران بوده و به برنامههای اختصاصی همراه وابسته هستند.
طرح اولیه ترکیبی از یک صفحه کلید عددی، صفحه نمایش، عنصر امنیتی (Secure Element) و شیار کارت MicroSD بود. کاربران میتوانستند فایلهای تراکنش امضاشده و امضانشده را بدون ایجاد اتصال داده زنده، بین کلدکارد و رایانه جابهجا کنند. آنها برای استفاده از کیف پول نیازی به حساب کاربری Coinkite یا برنامه دسکتاپ نداشتند.
اولین سری از محصولات در سال ۲۰۱۸ عرضه شد. مدل بعدی که در آوریل ۲۰۱۹ منتشر شد، امکانات جذاب بیشتری را اضافه کرد. با هر نسخه بهروزرسانیشده، کُلدکارد پیچیدهتر و از نظر تئوری، از نظر فناوری پیشرفتهتر میشد.
پیچیدگی کُلدکارد بخشی از جذابیت آن بود. این دستگاه برای کاربرانی ساخته شده بود که تمایل داشتند جزئیات تراکنشها را بررسی کنند، بکآپها را مدیریت نمایند و مدل امنیتی خودشان را بسازند.
مجموعهای از ویژگیها شامل پینهای تحت فشار (Duress PINs)، بکآپهای رمزنگاریشده روی MicroSD، پشتیبانی از چندامضایی (Multisig) و تاسریختن توسط خود کاربر، پاسخگوی دارندگان بیتکوینی بود که با موضوع نگهداری داراییها مثل یک مانور تقابلی و امنیتی رفتار میکردند.
سورسکد کُلدکارد نیز عمومی بود. کاربران میتوانستند فریمور (میانافزار) را بررسی کنند، یک ساخت مجدد (Build) انجام دهند و آن را با نسخه انتشاری Coinkite مقایسه کنند. این شفافیت، طرز فکر مرکزی زیستبوم بیتکوین یعنی «اعتماد نکن، راستیآزمایی کن» را تقویت میکرد.
باگی که از راستیآزمایی جان سالم به در برد!
اگرچه کاربران قادر به بررسی کد کُلدکارد بودند، اما هیچکس واقعاً خیلی دقیق به آن نگاه نکرد. خطای تولید عبارت بازیابی (Seed) در جریان یک تغییر نرمافزاری بزرگ در سال ۲۰۲۱ وارد کلدکارد شد و برای سالها از دید دور ماند.
شرکت Coinkite نسخه 4.0.0 فریمور را به عنوان «کد کاملاً جدید، با همان ویژگیهای فوقالعاده» توصیف کرد. این نسخه کدهای قبلی را با معادلهای جدید جایگزین کرد، قابلیت ساخت مجدد قابل تکرار را اضافه و از حسابی به نام “switck” بابت «کتابخانه جدید سورسکد» تشکر کرد.
جیمز اوبرن، توسعهدهنده بیتکوین، پس از یافتن ۵۸ تغییر کد منتشرشده تحت این نام که دارای همان امضای دیجیتال رمزنگاریشده مورد استفاده توسط پیتر گری (همبنیانگذار Coinkite) بود، حساب “switck” را متعلق به پیتر گری شناسایی کرد.
چنین امضاهایی مانند امضاهای دیجیتالی دستکاریناپذیر عمل میکنند و نشان میدهند که یک کلید امضای سری یکسان هر دو مجموعه کار را تایید کرده است. شرکت Coinkite به این ادعای هویت پاسخی نداده است.
حساب Switck کتابخانهای به نام libngu را توسعه داد؛ مجموعهای از کدهای قابل استفاده مجدد که در فریمور کُلدکاردِ نصبشده روی دستگاههای مشتریان گنجانده شده بود. یکی از وظایف آن کمک به تولید تصادفیسازی (Randomness) هنگام ساخت کیف پولها بود.
اوبرن گفت هنگام حسابرسی کد کُلدکارد در می ۲۰۲۵ نسبت به این فرآیند ابراز تردید کرده است. او پس از ردگیری منشا تصادفیسازی کیف پول به کتابخانه libngu، احتمال وجود یک نقص را با Coinkite مطرح کرد.
به گفته اوبرن، پاسخ شرکت این بود که اگر یک مشکل واقعی وجود داشت، احتمالاً تا الان کشف شده بود. او بعداً درباره پیتر گری نوشت:
این همان کسی است که گزارش من در می ۲۰۲۵ درباره احتمال وجود این نقص را نادیده گرفت و از آن شانه خالی کرد.
تصادفیسازی حیاتی است زیرا یک کیف پول جدید باید یک عبارت بازیابی را از میان تعداد بسیار عظیمی از مقادیر ممکن انتخاب کند. غیرقابلپیشبینی بودن این انتخاب با واحد بیتِ «آنتروپی» سنجیده میشود که برای اشاره به عدم امکان پیشبینی به کار میرود. هر بیت اضافه، تعداد احتمالات را دو برابر میکند و حدس زدن عبارت بازیابی را سختتر میسازد.
قرار بود کُلدکارد این تصادفیسازی را از یک مولد سختافزاری اختصاصی درون دستگاه دریافت کند. اما در عوض، یک خطای پیکربندی، کیف پول را به سمت یک مولد نرمافزاری سادهتر هدایت کرد که از اطلاعاتی مانند دادههای دستگاه و زمان استفاده میکرد.
این اطلاعات کاملاً تصادفی نیستند، بنابراین میتوان آنها را محدودتر یا بازتولید کرد، که این موضوع تعداد عبارات بازیابی که یک مهاجم نیاز به تست کردنشان دارد را به شدت کاهش میدهد.
به زبان ساده، کد کُلدکارد قرار بود رمز سری هر کیف پول را از میان مجموعهای از احتمالات آنقدر وسیع انتخاب کند که هیچ کامپیوتر کاملاً نتواند همه آنها را امتحان کند. اما در عوض، یک خطای سیمکشی (کدنویسی)، آن را به یک منبع کوچکتر و ضعیفتر هدایت کرد که این مجموعه را آنقدر کوچک ساخت تا یک مهاجم بتواند تمام گزینههای آن را بررسی و پردازش کند.
اوضاع کجا خراب شد؟
به گفته تیم مهندسی بیت کوین و امنیت شرکت Block، این خطا به نحوه ارتباط دو بخش از نرمافزار برای خواندن یک تنظیم مربوط میشد.
آن تنظیم قرار بود پس از اینکه کُلدکارد منبع دیگری را اضافه کرد، یکی از منابع اعداد تصادفی را خاموش کند. کتابخانه Libngu فقط بررسی میکرد که آیا آن تنظیم وجود دارد یا خیر، نه اینکه روشن است یا خاموش. بنابراین فریمور طبق معمول کاملاً درست ساخته میشد در حالی که از مولد اشتباه استفاده میکرد.
شرکت Block اعلام کرد دستگاههای متأثر Mk2 و Mk3 از طریق این فرآیند هیچ تصادفیسازی امنی دریافت نکردند. دستگاههای Mk4 ،Q و Mk5 مقداری دریافت کردند، اما نرمافزار تنها سهم کوچکی از آن را نگه داشت.
شرکت Coinkite برآورد میکند که آن دستگاههای جدیدتر به جای ۱۲۸ بیت تصادفیسازیِ مورد نظر، عبارات بازیابی با ۷۲ بیت تصادفیسازی تولید کردهاند. این امر باعث شد احتمالات موجود برای عبارات بازیابی، حدود ۷۲ کوادریلیون برابر کمتر از حد استاندارد شود.
تیم Block کد آسیبپذیر را تا فریمور نسخه 4.0.0 منتشر شده در ۱۷ مارس ۲۰۲۱ ردیابی کرد. شرکت Coinkite نسخه 4.0.1 را به عنوان اولین نسخه دارای آسیبپذیری برای کاربران Mk2 و Mk3 معرفی میکند.
سورسکد به صورت عمومی در دسترس بود و مولد سختافزاری درست نیز در فریمور نهایی وجود داشت. بازرسان تایید کردند که این قطعه وجود دارد، اما نتوانستند فرآیند تولید عبارت بازیابی را از ابتدا تا انتها دنبال کنند تا مشخص نمایند دستگاه در عمل از کدام مولد استفاده کرده است.
این شرکت گفت که بررسیهای مبتنی بر هوش مصنوعی که قبل از سرقت انجام داده بود نیز این خطا را نادیده گرفته بودند. تستهای انجامشده با استفاده از چند مدل پیشرو هوش مصنوعی پس از حادثه نیز نتوانستند آن را شناسایی کنند.
شرکت Coinkite قول داده است که شرح کاملتری از این شکست را منتشر کند. این شرکت اعلام کرده که به طور مستقیم از مشتریان متأثر پشتیبانی میکند.
این شرکت به درخواست رسانهها برای اظهار نظر پاسخ نداده است.
شرکت Coinkite فریمور اصلاحشده را برای تمام مدلها و نسخههای متأثر کُلدکارد منتشر کرده است. این بهروزرسانی تولید عبارات بازیابی در آینده را اصلاح میکند، اما عبارات بازیابی که قبلاً با نرمافزار آسیبپذیر ساخته شدهاند را تقویت نمیکند.
طبق اطلاعیه Coinkite، کاربران متأثر باید فریمور اصلاحشده را نصب کنند، یک عبارت بازیابی جدید تولید کنند و بیتکوین خود را به آدرسهای حاصل از آن منتقل نمایند.
نوع دیگری از خطر طرف مقابل (Counterparty Risk)
کُلدکارد بر پایه این فکربکِر ساخته شد که بیتکوینیها میتوانند واسطهها را حذف کنند و تعداد طرفهایی که باید به آنها اعتماد کنند را کاهش دهند. این حادثه اعتماد به یک صرافی یا بانک را به عنوان طرف مقابل بازنمیگرداند. اما نشان میدهد که نگهداری شخصی (Self-custody) نوع دیگری از وابستگی را جایگزین میکند: کاربران کلیدها را در دست دارند، اما سازنده کیف پول همچنان تعیین میکند که آیا آن کلیدها به صورت امن ساخته شدهاند یا خیر.
کلید گنجینه بیتکوینی میلیون دلاری جاناتان گودمن در یک صندوق امانات و داخل دستگاهی قرار داشت که هرگز آنلاین نشده بود. اما به دلیل وجود نقص در نرمافزار تولید عبارت بازیابی کُلدکارد، تلاش گودمن برای محافظت فیزیکی از ثروتش هیچ تفاوتی ایجاد نکرد.
منبع: Coindesk
