در سال ۲۰۱۴ بزرگترین صرافی بیت کوین Mt.Gox نام داشت و حدود ۷۰ درصد معاملات بیت کوین در این صرافی انجام میشد. در فوریه ۲۰۱۴ مبادلات Mt.Gox به حالت تعویق در آمدند و وبسایت و سرویس صرافی آن بسته شدند. در آپریل ۲۰۱۴ روند انحلال این صرافی که در توکیوی ژاپن تاسیس شده بود، آغاز گردید. Mt.Gox اعلام کرد که حدود ۸۵۰ هزار بیت کوین متعلق به مشتریان صرافی، که در آن زمان ارزشی در حدود ۴۵۰ میلیون دلار داشتند، احتمالا به سرقت رفته است. در نتیجه این سرقت بزرگ، یکی از بزرگترین سقوطهای قیمت بیت کوین اتفاق افتاد. در ابتدا اعلام شد که این تعداد بیت کوین در اثر سرقت، کلاهبرداری، سوءمدیریت و یا ترکیبی از آنها از دست رفتهاند. در سال ۲۰۱۵ یک شرکت امنیتی ژاپنی اعلام کرد که اکثر بیت کوینها به تدریج از سال ۲۰۱۱ به صورت مستقیم از کیف پول آنلاین این شرکت به سرقت رفتهاند. Mt.Gox مدعی بود که این سرقت در نتیجه وجود باگی در بیت کوین انجام شده است. باگی که تا پیش از آن کسی ازش مطلع نبود و از آن استفاده نکرده بود و اکنون به نام چکش خواری تراکنش (Transaction Malleability)های بیت کوین شناخته میشود. در این مقاله قصد داریم به بررسی این باگ نرم افزاری بیت کوین، تبعات و راه حل آن بپردازیم.
برای درک بهتر چکش خواری تراکنش های بیت کوین، ابتدا باید با ساختار تراکنش های بیت کوین آشنا شوید. به این منظور پیشنهاد میشود ابتدا این مقاله را در مورد تراکنش های بیت کوین مطالعه کنید.
چکش خواری تراکنش های بیت کوین چیست؟
در یک تراکنش بیت کوین، تمام اطلاعات موجود در تراکنش از قبیل مقادیر خروجیهای تراکنش (مبلغ تراکنش)، آدرس گیرنده، کلید عمومی فرستنده و … از طریق امضای دیجیتال (Digital Signature) محافظت میشوند و با استفاده از آن، هر کسی میتواند صحت اطلاعات موجود در تراکنش را تایید کند.
یعنی اگر هر کدام از اطلاعات موجود در تراکنش کوچکترین تغییری کنند، دیگر با امضای دیجیتال سازگار نخواهند بود و چون امضای دیجیتال با استفاده از کلید خصوصی فرستنده به وجود آمده است، هر کسی با دیدن یک تراکنش میتواند تایید کند که اطلاعات موجود در آن تراکنش توسط فرستنده آن (کسی که به کلید خصوصی دسترسی داشته) تعیین شدهاند و کسی این اطلاعات را تغییر نداده است.
شناسه تراکنش (Transaction ID)
هر تراکنش بیت کوین یک شناسه منحصر به فرد (Transaction ID) دارد که از هش (Hash) تمام اطلاعات موجود در تراکنش به دست میآید؛ یعنی با کوچکترین تغییر در هر کدام از اجزای تراکنش، هش آن تغییر میکند و در نتیجه Transaction ID عوض میشود.
همانطور که گفتیم، امضای دیجیتال تمام اطلاعات تراکنش را از تغییر مصون نگه میدارد، اما اگر دقیقتر بخواهیم بگوییم، تمام اطلاعات موجود در تراکنش به جز خودش!
میتوان با یک تغییر جزئی در امضای دیجیتال، به نحوی که کارکرد آن تغییر نکند و کماکان با اطلاعات موجود در تراکنش مرتبط باشد، Transaction ID را تغییر داد. برای درک بهتر این موضوع، فرض کنید امضای دیجیتال که در اصل یک رشته طولانی از اعداد و حروف است؛ مثلا عددی مثل ۵ را اگر به ۰۵ تغییر دهیم به لحاظ ریاضی تغییری در آن ایجاد نکردهایم، ولی از آنجا که هش عدد ۵ با ۰۵ متفاوت است، Transaction ID در این دو حالت با هم متفاوت خواهد بود. در صورتی که در هر دو حالت تمام اطلاعات تراکنش با هم یکی است، اما شناسه تراکنشها با هم متفاوت خواهد بود. به این خصلت تراکنشهای بیت کوین، چکش خواری تراکنش های بیت کوین (Transaction Malleability) میگویند.
شناسه تراکنش کاربردهای متفاوتی دارد؛ مثلا با استفاده از آن میتوانید در یک مرورگر بلاک چین بیت کوین (مانند blockchain.info) به جستجوی تراکنش مورد نظر خود بپردازید و تمام اطلاعات مرتبط با آن را مشاهده کنید.
چگونه چکش خواری تراکنش های بیت کوین بلای جان صرافی Mt.Gox شد؟
وقتی شما ارز دیجیتال خود را وارد یک صرافی متمرکز میکنید، در واقع دیگر شما مالک حقیقی آن نیستید، چون در رمز ارزها ملاک مالکیت در اختیار داشتن کلید خصوصی است و شما ارزدیجیتال خود را از آدرسی که کلید خصوصی آن را در اختیار داشتید، به آدرسی که کلید خصوصی آن فقط در اختیار صرافی است منتقل کردهاید، به این امید که آن صرافی متمرکز امانتدار خوبی برای ارزدیجیتال شما باشد.
اما در بسیاری از موارد، خلاف این مطلب به کاربران اثبات شده است. یعنی یا صرافی نتوانسته امنیت کیف پولهای خود را که هدف مطلوبی برای هکرهاست، تامین کند و یا خود صرافی اقدام به مسدود سازی حساب و ضبط داراییهای کاربرانش به دلایلی مثل تحریم بودن کشور کاربر، کرده است. اگرچه در مورد بیت کوینهای به سرقت رفته از صرافی Mt.Gox سناریوهای مختلفی مطرح شده است، اما یکی از اصلیترین دلایلی که با آشکارسازی یک باگ در تراکنشهای بیت کوین همراه بود، استفاده از چکش خواری تراکنش های بیت کوین برای سرقت از این صرافی معرفی شد.
همانطور که توضیح داده شد، در این روش شناسه تراکنش با ایجاد تغییر جزئی در امضای دیجیتال تغییر میکند؛ اما این تغییر جزئی باید با اطلاعات تراکنش همخوانی داشته باشد. پس با استفاده از این روش کسی نمیتواند آدرس گیرنده بیت کوین انتقالی یا مبلغ تراکنش را تغییر دهد. پس چگونه این باگ موجب سرقت از Mt.Gox شد؟!
صرافی Mt.Gox برای ردیابی تراکنشهایش و بررسی این که آیا تراکنشش تایید شده یا خیر، از شناسه تراکنشها استفاده میکرد. یک هکر که به وجود این باگ در تراکنشهای بیت کوین پی برده بود و مقداری بیت کوین را که در اکانت این صرافی داشت، ابتدا درخواست برداشت (Withdraw) موجودی بیت کوینش در صرافی Mt.Gox میداد و صرافی یک تراکنش برای انتقال بیت کوین مورد نظر به آدرس هکر ایجاد می کرد و این تراکنش را در شبکه بیت کوین منتشر میکرد. سپس هکر پیش از تایید تراکنش توسط ماینرها، با استفاده از روش توضیح داده شده، Transaction ID این تراکنش را تغییر میداد. Mt.Gox با استفاده از شناسه تراکنشی که خودش ایجاد کرده بود به انتظار تایید تراکنش مینشست؛ اما چون شناسه تراکنش توسط هکر تغییر کرده بود، از دید صرافی Mt.Gox هیچگاه آن تراکنش تایید نمیشد، در صورتی که تراکنش بعد از مدتی تایید میشده و بیت کوینها به حساب هکر واریز میشده است. Mt.Gox که میدیده تراکنشش تایید نشده، مجدد موجودی بیت کوین در اکانت هکر در صرافی را به حالت قبل از تراکنش بر میگردانده و هکر که در اصل بیت کوینش را دریافت کرده بود، مجدد در خواست برداشت (Withdraw) از حسابش را میداده و این روند را مرتب تکرار کرده است.
به دلیل سوء مدیریت این صرافی و عدم کنترل دقیق حسابها، آنها تنها زمانی متوجه این موضوع میشوند که دیگر کار از کار گذشته بود. البته برخی مطالعات صورت گرفته، حاکی از این هستند که تنها درصد کمی از بیت کوینهای گم شده با استفاده از چکش خواری تراکنش های بیت کوین به سرقت رفتهاند، ولی صحت این امر هنوز کامل مشخص نیست.
آیا هنوز این باگ یک تهدید محسوب میشود؟
این مشکل هرچند که یک خطر بزرگ برای شبکه بیت کوین به حساب نمیآید، ولی در حال حاضر با اعمال تغییراتی در کدهای بیت کوین، تا حد زیادی حل شده است. یکی از اصلیترین راهکارها برای حل این مشکل سافت فورک (Soft Fork) سگویت (Segwit) است.
Segwit با جدا کردن امضای دیجیتال از ساختار تراکنش و جایگزینی آن با Witness یا شاهد، علاوه بر حل مشکل چکش خوای تراکنش های بیت کوین، موجب کاهش حجم تراکنشهای بیت کوین و مقیاس پذیرتر شدن آن شده است و زمینه را برای فناوریهای نوینی همچون شبکه لایتنینگ (Lightening Network)، که به عنوان لایه دوم بر روی بلاک چین بیت کوین فعال شده، فراهم نموده است. همچنین در حال حاضر اکثر صرافیها و کیف پولها از تمهیداتی به منظور جلوگیری از آسیب دیدن توسط این باگ استفاده میکنند.
آخرین به روز رسانی: ۹۹/۰۸/۰۳