Coldcard এক্সপ্লয়েট: ডিটারমিনিস্টিক PRNG-এ $৮৮ মিলিয়ন BTC নিষ্কাশিত

২০২৬ সালের ১ আগস্ট, একটি সমন্বিত অভিযানে প্রায় ১,১৯৬টি বিটকয়েন ঠিকানা খালি করে দেওয়া হয়। কোনো ফিশিং নেই। কোনো ক্ষতিকর স্বাক্ষরিত PSBT নেই। প্রচলিত অর্থে কোনো ব্যবহারকারীর ভুল নেই। Coldcard-এর যে দুর্বলতায় প্রায় ৮৮ মিলিয়ন ডলার সমতুল্য BTC নিষ্কাশিত হয়েছে, সেটি চুরির মুহূর্তে একটিও ডিভাইস স্পর্শ করেনি, CoinDesk-এর প্রতিবেদন অনুযায়ী।
মূল কারণটি প্রথম ২৪ ঘণ্টায় দেখা সব বিশ্লেষণের চেয়ে ভয়াবহ। এটি ছিল একটি হার্ডওয়্যার ওয়ালেটের ফার্মওয়্যার ত্রুটি, যা ২০২১ সালে প্রকাশিত হয়েছিল এবং চুপচাপ হার্ডওয়্যার ট্রু-র্যান্ডম-নম্বর জেনারেটরকে একটি সফটওয়্যার সিউডো-র্যান্ডম রুটিন দিয়ে প্রতিস্থাপন করেছিল। সেই বিল্ডের অধীনে তৈরি প্রতিটি সিড ছিল নির্ধারিত। সেই সিড থেকে প্রাপ্ত প্রতিটি ঠিকানা, নীতিগতভাবে, বাগটি রিভার্স-ইঞ্জিনিয়ার করা যেকেউ আগে থেকেই গণনা করতে পারত।
এটি কোনো হ্যাক নয়। এটি কমিট এবং পরিণতির মধ্যে পাঁচ বছরের ব্যবধান।
Coinkite ফার্মওয়্যার বাগটি আসলে কী করেছিল
The Hacker News-এর বিস্তারিত বিবরণ অনুযায়ী, ত্রুটিপূর্ণ বিল্ডটি SE চিপের হার্ডওয়্যার RNG-এর পরিবর্তে একটি ছোট, সহজে অনুমানযোগ্য অবস্থা থেকে সিড করা সফটওয়্যার PRNG-এর মাধ্যমে এনট্রপি কলগুলো রুট করত। ব্যবহারকারীদের পক্ষে এই অদলবদল শনাক্ত করার কোনো উপায় ছিল না। ডিভাইসটি চালু হত, প্রত্যাশিত সেটআপ স্ক্রিন দেখাত, একটি ২৪-শব্দের সিড তৈরি করত এবং সঠিকভাবে তৈরি ওয়ালেটের মতোই দেখাত।
এটি যে সিডগুলো তৈরি করত, সেগুলো সম্ভবত কয়েক বিলিয়ন সম্ভাবনার একটি অনুসন্ধানযোগ্য পরিসরের মধ্যে ছিল। এটি কোনো ওয়ালেট নয়। এটি একটি লটারির টিকিট।
যখন আক্রমণকারী (বা, সম্ভবত, যে গবেষক এটি আবিষ্কার করে দায়িত্বশীলভাবে প্রকাশ করেননি) ১ আগস্ট UTXO সেটের বিপরীতে পরিসরটি গণনা শুরু করেন, তখন নিষ্কাশনে মাস নয়, মাত্র কয়েক ঘণ্টা লেগেছিল।
কেন ১,১৯৬টি বিটকয়েন ঠিকানা নিষ্কাশনের সংখ্যাটি গুরুত্বপূর্ণ
১,১৯৬ সংখ্যাটি পরম অর্থে ছোট, কিন্তু সংকেতের বিচারে বিশাল। এটি সেই ব্যবহারকারীদের মোট সংখ্যা নির্ধারণ করে যারা ঠিক সেই ফার্মওয়্যার উইন্ডোতে একটি সিড তৈরি করেছিলেন এবং কখনো রোটেট করেননি। এটি ব্লাস্ট রেডিয়াস সম্পর্কে একটি পরীক্ষাযোগ্য, মিথ্যাপ্রমাণযোগ্য দাবি, এবং TechSpot-এর লেখাটি নিশ্চিত করে যে ক্ষতিগ্রস্ত ডিভাইসগুলো একটি সংকীর্ণ শিপমেন্ট সময়কালের সাথে যুক্ত।
আপনি যদি ভিন্ন ফার্মওয়্যারে আপনার সিড তৈরি করে থাকেন, অথবা ফার্মওয়্যার আপডেটের পরে রোটেট করে থাকেন, তাহলে আপনি প্রায় নিশ্চিতভাবেই নিরাপদ। কিন্তু আপনি যদি সেই বিল্ডে সিড তৈরি করে কখনো কয়েন না সরিয়ে থাকেন, তাহলে আপনার ওয়ালেট আগেই খালি হয়ে গিয়েছিল, শুধু জানতেন না।
একটি নীরব তথ্য: কিছু খরচ হওয়া UTXO ২০২১ সাল থেকে অস্পর্শ্য পড়েছিল। পাঁচ বছর ধরে "আমার চাবি, আমার কয়েন," আর চাবিগুলো কখনোই সত্যিকার অর্থে আপনার ছিল না।
নির্ধারণবাদী PRNG বিটকয়েন সমস্যাটি পুরনো এবং বারবার ফিরে আসে
এই শ্রেণির বাগের একটি দীর্ঘ, বিব্রতকর ইতিহাস রয়েছে। ২০১৩ সালে Android-এর SecureRandom একইভাবে মানুষের BTC হারিয়ে দিয়েছিল। ২০০৮ সালের Debian OpenSSL PRNG বাগ কেউ বুঝতে পারার আগেই দুই বছর ধরে SSH কী নষ্ট করেছিল। প্রতিটি প্রজন্ম নতুন করে শেখে যে এনট্রপি হলো সেই একটি জিনিস যা আউটপুটের দিকে তাকিয়ে পরীক্ষা করা যায় না।
একটি সুগঠিত র্যান্ডম ২৫৬-বিট সংখ্যা এবং একটি নির্ধারণবাদী ২৫৬-বিট সংখ্যা পরিদর্শনে অভিন্ন দেখায়। আপনাকে উৎস পরীক্ষা করতে হবে, নমুনা নয়। পুরো খেলাটাই এটুকু।
হার্ডওয়্যার ওয়ালেটগুলো এই প্রতিশ্রুতি বিক্রি করে যে সিকিউর এলিমেন্ট আপনার হয়ে এটি সামলে নেবে। যখন ফার্মওয়্যার SE-কে বাইপাস করে, তখন আপনি কোল্ড স্টোরেজের সব ঝামেলা পান কিন্তু কোনো নিশ্চয়তা পান না। উভয় জগতের মধ্যে সবচেয়ে খারাপ অবস্থা।
সেলফ-কাস্টডি বনাম ETF বিতর্কটি মানুষ যা ভাবে তা নয়
এটি আমার মত, এবং আমি এর দায় নিচ্ছি: সেলফ-কাস্টডি বনাম ETF আলোচনাটিকে মতাদর্শের প্রশ্ন হিসেবে উপস্থাপন করা হয়েছে, অথচ এটি আসলে একটি সাপ্লাই-চেইন প্রশ্ন।
একটি স্পট BTC ETF-এর যে আক্রমণের পৃষ্ঠটা আমাকে সবচেয়ে বেশি ভাবায় সেটা একটাই: কাস্টোডিয়ানের অপারেশনাল নিরাপত্তা। সেই পৃষ্ঠটি নিয়ন্ত্রকদের দ্বারা নিরীক্ষাযোগ্য, বিমাযোগ্য, এবং এমন মানুষদের দ্বারা পরিচালিত যাদের পূর্ণকালীন কাজই হলো কয়েন না হারানো। ব্যর্থ হলে, কেউ না কেউ চেক কাটে।
সেলফ-কাস্টডির শৃঙ্খলটা আরও দীর্ঘ: চিপ বিক্রেতা, ফার্মওয়্যার বিল্ড পাইপলাইন, রিলিজ সাইনিং, সাপ্লাই রুট, এন্ড-ইউজার OPSEC, ব্যাকআপ হাইজিন। যেকোনো একটি লিঙ্ক ব্যর্থ হলে কোনো চেক নেই। Coldcard ড্রেইনটা সেই থিসিসের Terra মুহূর্ত, এজন্য নয় যে সেলফ-কাস্টডি মৃত, বরং কারণ ম্যাক্সিমালিস্ট "শুধু নিজের চাবি নিজে রাখো" ফ্রেমিংকে পরিপক্ক হতে হবে।
উভয় মডেলেই বাস্তব ঝুঁকি আছে। এর একটিকে ঝুঁকিমুক্ত বলে ভান করাই ১,১৯৬টি ঠিকানা ড্রেইন করিয়েছে।
Coldcard এক্সপ্লয়েটের পরে আসলে কী বদলায়
কিছু বিষয় আমার মনে হয় পরিবর্তন হবে (এবং হওয়া দরকার):
- রিপ্রোডিউসিবল ফার্মওয়্যার বিল্ড এখন ন্যূনতম প্রত্যাশা। সোর্স থেকে বাইনারি পুনর্নির্মাণ করে বাইট-ম্যাচ করতে না পারলে আপনি কোডবেসকে নয়, একটি সিগনেচারকে বিশ্বাস করছেন।
- জেনারেশন-পরবর্তী এন্ট্রপি অ্যাটেস্টেশন। ডিভাইসটির এমন একটি প্রমাণে সাইন করা উচিত যে একটি নির্দিষ্ট সিড সফটওয়্যার থেকে নয়, SE থেকে এসেছে। এটি কঠিন কিছু নয়। Coinkite এটি এক কোয়ার্টারের মধ্যে শিপ করতে পারে।
- স্বাধীন সিড স্যানিটি চেক। থার্ড-পার্টি টুল যা আপনার সিড না দেখেই যাচাই করতে পারবে যে এর ডেরিভেশন পাথ প্রকৃত র্যান্ডমনেসের সাথে সামঞ্জস্যপূর্ণ একটি বিতরণে পড়ে।
- সেলফ-কাস্টডির জন্য ইন্স্যুরেন্স পণ্য। প্যারোডি ধরনের নয়। প্রকৃত আন্ডাররাইটিং যা অ্যাটেস্টেড ফার্মওয়্যার বাধ্যতামূলক করে এবং বিল্ড পুরনো হলে কভারেজ পরিবর্তন করে।
এর কোনোটিই হার্ডওয়্যার ওয়ালেটকে অপ্রচলিত করে না। এটি তাদের এন্টারপ্রাইজ-গ্রেডে নিয়ে যায়, যা তারা সবসময় দাবি করে আসছিল।
আমাদের বাকিদের জন্য অস্বস্তিকর তুলনামূলক পাঠ
LCX-এ আমরা এমন কাজে ইঞ্জিনিয়ারিং সময়ের অসমানুপাতিক ভাগ ব্যয় করি যা ব্যবহারকারীদের চোখে অদৃশ্য: HSM কী সেরেমোনি, ডিটারমিনিস্টিক বিল্ড পাইপলাইন, প্রাইভেট কী স্পর্শ করে এমন যেকোনো কোড পাথে এন্ট্রপি অডিট। এটি একঘেয়ে কাজ। এটিই আবার একটি বড় দুর্ঘটনা আর একটি সাধারণ মঙ্গলবারের মধ্যে পার্থক্য।
Coldcard ঘটনাটি এ বছরের শুরুতে DeFi অডিট নিয়ে OpenZeppelin-এর CEO-এর মন্তব্য-এর মতোই একই প্রভাব ফেলেছে। আমরা উত্তরাধিকার সূত্রে যে অডিট কাঠামো পেয়েছি, তা এমন একটি দুনিয়াকে সামনে রেখে তৈরি হয়েছিল যেখানে আপনি যে কোড পাঠাতেন, সেটাই চালাতেন। এখন আর সেই দুনিয়া নেই, আদৌ কখনো ছিল কিনা সেটাও সন্দেহের বিষয়।
কোল্ড স্টোরেজকে একঘেয়ে, কিন্তু সঠিক উত্তর বলে ধরে নেওয়া হয়েছিল। দেখা গেল, একঘেয়েটাকে টিকিয়ে রাখতে আমরা যা মেনে নিয়েছিলাম তার চেয়ে অনেক বেশি সহায়ক কাঠামো দরকার।