آنچه در این مقاله خواهید خواند
چکش خواری تراکنش (Transaction Malleability) یکی از باگ های شبکه بیت کوین در سال 2014 بود که در این مطلب درباره آن صحبت خواهیم کرد.
در فوریه 2014 (بهمن 92)، اصطلاحی جدید که تا آن زمانی کسی نشنیده بود ظهور کرد: چکش خواری تراکنش (Transaction Malleability). مت گاکس (Mt Gox) نیز این اتفاق را بهعنوان دلیل کلیدی تعلیق برداشتهای خود خواند و همچنین از آن بهعنوان پایه حملهای بزرگ به شبکه بیت کوین نام برده شد. اما چکشخواری تراکنش بهعنوان یک باگ در شبکه بیت کوین چیست، چگونه کار میکند و آیا باید نگران آن باشیم؟ در این مطلب به تمام این سوالات پاسخ خواهیم داد.
چکش خواری تراکنش چیست؟
چکشخواری نوعی حمله است که به مهاجم اجازه میدهد تا پیش از تایید یک تراکنش در شبکه بیت کوین، شناسه منحصربهفرد آن را تغییر دهد. در صورت وجود شرایط مناسب، این تغییر به هکر کمک میکند تا عدم اتفاق افتادن آن تراکنش را وانمود کند.
آیا چکشخواری همان دابل اسپندیگ است؟
خیر. دابل اسپندینگ (Double Spending) یعنی یک بار خرج کردن یک رمز ارز و سپس ساخت یک تراکنش متفاوت با همان ارز دیجیتال پیش از تایید تراکنش قبلی. از این ترفند برای تایید تراکنش تقلبی مذکور در شبکه بیت کوین استفاده میشود، گویی که تراکنش اول اصلا اتفاق نیفتاده است. این امر یعنی اینکه فرد مهاجم قادر به دو بار استفاده از یک ارز دیجیتال شده است.
چکش خواری تراکنش چگونه کار میکند؟
برای درک این موضوع، ابتدا باید با نحوه کار تراکنشهای بیت کوین آشنا شوید. برخلاف انتقال سنتی پول، در هنگام ارسال رمز ارز BTC شما آنها را از یک حساب خارج نکرده و از طریق ارسال الکترونیکی آن را برای دیگران نمیفرستید. بلکه در عوض تراکنشها را روی بلاک چین بیت کوین میسازید. این بلاک چین نیز بهعنوان یک دفتر کل بزرگ برای شبکه بیت کوین عمل میکند. این دفتر کل، رکورد آدرسهای ارسالکننده وجه به دیگر آدرسها و زمان انتقال را ثبت میکند. این بلاک چین، سابقه کاملی از BTCهای قابل تخصیص به آدرسهای روی شبکه در هر زمانی را فراهم میکند.
یک تراکنش BTC در هنگام ساخته شدن حاوی اطلاعاتی مانند آدرسهای ارسالکننده بیت کوین (ورودی) و آدرسهای دریافتکننده (خروجی)، مقدار تحت انتقال و آدرسهایی است که این مقدار ارز را به آدرس ارسالکننده فرستاده بودند.
هر تراکنش باید دارای شناسه منحصربهفردی باشد تا بتوان در بلاک چین به آن ارجاع داد. این شناسه یا هش تراکنش (TX ID) از طریق وارد کردن اطلاعات تراکنش در یک تابع هش تولید میشود. هشینگ یک فرایند ریاضیاتی است که با گرفتن دادههای مختلف و ترکیب آنها، اطلاعات کوتاهتری به نام هش (Hash) را تولید میکند. یکی از موارد موجود در هش تراکنش، امضای دیجیتال کاربر است که اثباتی بر انجام تراکنش توسط وی است. این امر راهی برای امضای دیجیتالی یک تراکنش محسوب میشود.
یکی از ویژگیهای تابع هشینگ، عدم توانایی تشخیص اطلاعات اصلی از طریق نگاه کردن به مقدار هش است. پیشبینی هش نیز بر اساس اطلاعات ورودی امکانپذیر نیست. با تغییر کوچک در هرگونه جزئیات این دادهها، هش نیز به صورت کاملا غیر قابل پیشبینی تغییر میکند. این امر، تقلب در شناسه تراکنش را غیرممکن میسازد. هر تراکنش باید دارای تنها یک هش باشد. شما نیز میتوانید با قرار دادن تمام اطلاعات مربوط به آن تراکنش در تابع هشینگ، اعتبار هش تولیدی و ایجاد مقدار یکسان را بررسی کنید.
البته این ایده مورد نظر است. اما چکش خواری تراکنش بیت کوین از اینجا حاصل میشود: امضای دیجییتال کاربر بخشی از هش برای «امضای» تراکنش است که باید به یک فرمت خاص باشد. این فرمت همیشه به درستی بررسی نمیشد، به این معنا که امکان تایید یک فرمت بد هم وجود داشت. به همین خاطر، افراد میتوانستند با تغییر امضا، هشهای مختلفی برای یک تراکنش ایجاد کنند.
چکشخواری چه مشکلی برای شبکه بیت کوین ایجاد میکند؟
یکی از مشکلات چکش خواری تراکنش، مربوط به صرافیهای رمز ارزی است که کاربران برای خرید و فروش بیت کوین از آنها استفاده میکنند. افراد پول فیات خود را به یک صرافی فرستاده و آن را به ارز دیجیتال تبدیل میکنند. در مقطعی نیز شاید مایل به برداشت رمز ارز BTC خود از حساب صرافی باشند. در اینجا چند سناریو مطرح است:
حملات فردی مخرب
فرض کنید آلیس مدیر یک صرافی است و آوا بیت کوینهای خود را در آن نگهداری میکند. آوا تصمیم به برداشت ارزهای دیجیتال خود میگیرد و از آلیس میخواهد که آنها را به آدرساش بفرستد. در زمان ارسال BTCها توسط آلیس، به طور خودکار تراکنشی ایجاد میشود تا بتواند در بلاک چین قرار گیرد.
اما آوا وانمود میکند که آلیس هرگز این رمز ارزها را برای وی ارسال نکرده است. آوا با استفاده از نقص چکش خواری، تراکنش اصلی آلیس را دوباره تولید کرده و با تغییر جزئی امضا، هش متفاوتی را ایحاد میکند. سپس وی میتواند با شناسه متفاوت دوباره آن تراکنش را منتقل کند.
در این حالت، شانس تایید تراکنش آوا در بلاک چین وجود دارد. در این صورت، شبکه تراکنش مذکور را معتبر فرض کرده و تراکنش آلیس را ثبت نمیکند. سپس آوا عدم دریافت رمز ارزها را به آلیس خبر میدهد. آلیس هم با بررسی هش تراکنش خود در بلاک چین آن را پیدا نکرده و احتمالا به ارسال دوباره بیت کوینها اقدام خواهد کرد، به این معنا که باعث ضرردهی وی خواهد شد.
اشتباه تصادفی
اگر برای مدیریت بیت کوینها از نرمافزار شخصیسازیشده استفاده میکنید، امکان تولید اشتباهی هشهای بدشکل وجود دارد. این هشها از طریق یک والت بهتر قابل درست شدن هستند. اما این کار ممکن است منجر به تغییر شناسه تراکنش شود. اگر کیف پول شما برای شناسایی تراکنشهای دارای ویژگی مشابه اما شناسه متفاوت طراحی نشده است، احتمال «گیر کردن» تراکنش و بلاتکلیفی آن وجود دارد. بدتر از آن، شاید والت شما تصور کند که هنوز این رمز ارزها برای خرج کردن وجود دارند. در هر حال، در صوتی که نرمافزار شما قادر به مدیریت این امر نباشد، مشکل ایجاد خواهد شد.
حملات محرومسازی از سرویس (DOS)
یک نفر همچنین میتواند بهوسیله نرمافزارهای مخصوص طراحیشده برای ساخت تراکنشهای جهشیافته و با اجرای تعمدی حملات چکش خواری تراکنش در صرافیهای مختلف به یکباره، مشکلات بزرگتری را برای شبکه بیت کوین به بار آورد. این حمله هماهنگشده همان اتفاقی است که در فوریه 2014 برای Bitcoin افتاد و صرافیهای متعددی نیز مورد حمله قرار گرفتند.
سیستم حسابداری صرافیها قادر به مدیریت تعداد متوسط تراکنشهای جهشیافته است، اما در صورت بمباران شدن با آنها، برای مدتی مشکلات لجستیکی بروز خواهند کرد. این امر میتواند مشکلات کوتاه مدتی برای بازار ایجاد کند. هرگونه عدم قطعیت و شکی درباره ثبات بازار، طبیعتا روی قیمت بیت کوین تاثیرگذار خواهد بود.
آیا باگ در شبکه بیت کوین وجود دارد؟
چندین مسئله در فناوری مورد استفاده شبکه بیت کوین وجود داشته که منجر به بروز مشکل چکشخواری شده است. یکی از این مسائل، در کلاینت مرجع (نرمافزار تولیدشده توسط تیم توسعهدهنده اصلی که اکثر مردم برای ساخت سرویسهای خود از آن استفاده میکنند) بود. این مشکل، شکستی در بررسی دوباره دادههای مربوط به امضا پیش از انتقال آن به نرمافزاری بود که کلاینت مرجع از آن استفاده میکرد.
به استناد بیانیه منتشرشده توسط بنیاد بیت کوین در آن زمان، آخرین حمله چکش خواری منجر به ارسال نسخههای جهشیافته تراکنش هایی شده بود که «با افشای باگهایی در هر دوی نرمافزار برخی از صرافیها و پیادهسازی مرجع»، نشان میداد نقایص نرمافزاری در قسمتهای مختلف اکوسیستم بیت کوین باید رفع شوند.
تیم توسعه اصلی همچنین درباره دو «مورد حاد» در کلاینت مرجع (نقایص شدیدا نادر) با وبسایت کویندسک صحبت کرده بود. هر دوی این موارد مربوط به بخش والت نرمافزار بودند.
بعدا مشخص شد که چندین مشکل چکش خواری دیگر توسط یکی از اعضای تیم اصلی توسعهدهنده این شبکه در BIP (طرح بهبود بیت کوین) مطرح شده است. تیم توسعه اصلی هیچگاه درباره این مسائل صحبتی نکرد.
مشکل چکش خواری تراکنش در شبکه بیت کوین چگونه رفع شد؟
جامعه این ارز دیجیتال از این موضوع خبر داشتند و به آنها اجازه میداد از سال 2011 امضاهای بدشکل را ثبت کنند. مشکل این بود که بخشهای کلیدی نرمافزار مورد استفاده توسط کلاینت بیت کوین، امضاهای بدشکل را به درستی پردازش نمیکرد. این امر تقصیر توسعهدهندگان Bitcoin نبود، اما ناکامی آنها، در عدم توانایی وادار کردن کلاینت بیت کوین به بررسی دوباره شکلگیری درست امضاها پیش از انتقال آنها ریشه داشت. این مشکل در نسخه 0.8 کلاینت مرجع رفع شد.
البته تمام صرافیها برای مدیریت تراکنشهای رمز ارز BTC از کلاینت مرجع استفاده نمیکنند و در عوض، ورژن شخصیسازیشده خود را دارند. بنابراین، توسعهدهندگان بیت کوین، کیف پولها و صرافیها، برای حصول اطمینان از اجرای روان برنامهها، در حال نوشتن کدهای شخصی خود هستند.
دیگر بهبودها بیشتر مربوط به فرایندها بود. مسائلی که منجر به مشکلساز شدن چکش خواری میشدند، بر تراکنشهای تاییدنشدهای متکی بودند که پیش از تایید در بلاک چین، کالاها و خدمات را تهیه یا ارسال میکردند. بنابراین الزام به تایید تراکنش همیشه یک ایده خوب است.
در حالت مشابه، داشتن چند تایید دستی برای برداشتهای بیت کوین از صرافیها نیز میتوانست به منظم بودن مسائل کمک کند.
آیا عمر بیت کوین به پایان رسیده است؟
در اکثر محصولات نرمافزاری باگهایی وجود دارند، اما همگی به صورت برابر ساخته نشدهاند. برخی بحرانیتر و برخی ملایمترند. اما مشکل چکش خواری تراکنش از موارد بحرانی شبکه بیت کوین نبود و این بلاک چین خراب نشده است. پایههای اصلی Bitcoin، یعنی مسیر غیرمتمرکزی که بسیاری از کامپیوترها برای تصمیمگیری درباره تراکنشها با یکدیگر کار میکنند، هنوز فعال است.
در مثال صرافی بالا، اگر آلیس حسابداری خود را با جزئیات بیشتری ثبت میکرد، میتوانست بیت کوینهای ارسالی را با هم تطبیق دهد. اگر مثلا در 5 فوریه در ساعت 12:10 عصر یک واحد BTC برای آوا ارسال کرده بود، تراکنش بسیار منحصربهفردی را در دست داشت. مثلا میتوانست بگویید «رکورد ما نشان میدهد که این تراکنش در این تاریخ و با این پارامترها ارسال شده است. پس احتمالا شناسه تراکنش تغییر کرده است و من دوباره این بیت کوینها را نمیفرستم».
یک صرافی میتواند با استفاده از ابزارهایی ورودیهای تراکنش را به صورت خودکار ردیابی کند که به تشخیص جهشها کمک خواهد کرد. بنابراین در صورت چکش خواری تراکنش، امکان اثبات تابآوری این شبکه غیر متمرکز در برابر رویدادهای مجزا وجود دارد. تمرکززدایی یکی از مسائلی است که همهچیز را سر جای خودش نگه میدارد.
برای آشنایی با دیگر انواع حملاتی که شبکههای بلاک چینی و کاربران آنها را تهدید میکنند به صفحه «معرفی انواع حملات سایبری به بلاک چینها» مراجعه کنید.
منبع: CoinDesk