
اخیرا بحث های مختلفی در خصوص SegWit2x به وجود آمده است که بیان میکنند این هاردفورک در برابر حملات اجرای مجدد (Replay Attack) محافظت نخواهد شد. در این مقاله به توضیح حمله اجرای مجدد و نحوه تأثیرگذاری آن بر هاردفورک Segwit2x خواهیم پرداخت. برای آنکه متوجه شوید حمله اجرای مجدد (Replay Attack) چیست، ابتدا باید نحوه کار تراکنش های بیت کوین را بشناسیم.
بیت کوین را میتوان به عنوان دفترکل جهانی و تراکنش های بیت کوین را به عنوان چک های بانکی در نظر گرفت. از آنجایی که این دفترکل جهانی، دیجیتال است هر فردی که بخواهد میتواند با دانلود نسخه کامل بلاک چین به حسابرسی آن بپردازد.
این موضوع بدان معنا است که چک ها در واقع در دسترس عموم میباشند. بدین ترتیب، تمام افراد میتوانند تراکنش ها را مشاهده کنند و معتبر بودن امضای دیجیتالی را تایید کنند.
هاردفورک چیست؟
هاردفورک اساسا برای دفترکل جهانی یک ارتقا و به روزرسانی به حساب میآید. اگر تمام افراد این به روزرسانی را انجام دهند، فقط یک دفترکل باقی میماند. در غیر این صورت به جای یک دفترکل جهانی، دو دفترکل وجود خواهد داشت: دفترکل قدیمی یا لگسی و دفترکل فورک زده شده.
تا هنگام ایجاد فورک، دفترکل ها دقیقا مشابه یکدیگر میباشند. بدین ترتیب دارای سابقه تراکنش های یکسانی میباشند. اما پس از ایجاد فورک، با استخراج بلاک های جدید، دفترکل ها دارای تراکنش ها و موجودی های متفاوتی خواهند بود.
برای مثال این مورد برای هاردفورک بیت کوین کش در تاریخ یکم آگوست ۲۰۱۷ رخ داد.
حمله اجرای مجدد (Replay Attack)
اگر قبل از تفکیک دفترکل، مقداری ارز دیجیتال بر روی آن داشته باشید، پس از جداسازی همان مقدار را در هر دو دفترکل خواهید داشت. اگر بخواهید فقط در یک دفترکل پول خود را خرج کنید چه اتفاقی میافتد؟
این موضوع باعث ایجاد مشکل میشود زیرا اگر در یک دفترکل پول خود را خرج کنید، فرد دیگری میتواند همین اقدام را که دارای امضای شما میباشد کپی کند و بر روی دفترکل دیگر ارائه دهد. بدین ترتیب، این افراد میتوانند پول شما را بر روی دفترکل دیگر خرج کنند زیرا امضای شما در هر دو دفترکل معتبر است. گفتنی است که دریافت کننده و مقدار پول ارسال شده دقیقا یکسان هستند اما این موضوع هم چنان یک مشکل ایجاد میکند.
فردی که کپی چک را به دفترکل ارائه میدهد، در حال اجرای مجدد تراکنش است. این موضوع یک مشکل به حساب میآید زیرا شما میخواستید که فقط در یک دفترکل ارسال انجام دهید. به این حالت، حمله اجرای مجدد میگوییم.
بیت کوین مشکل حمله اجرای مجدد را با تغییر تدریجی چک حل کرده است و نشانه مشخصی بر روی چک قرار میدهد که مشخص میکند این چک متعلق به بیت کوین کش بوده است نه دفترکل دیگر.
بنابراین، هر نودی که اکنون در حال حسابرسی بیت کوین میباشد به طور خودکار چک بیت کوین کش را تایید نخواهد کرد زیرا این چک، نشانه مخصوص را دارد. هرکسی که بیت کوین کش را حسابرسی میکند، چک بیت کوین را نخواهد پذیرفت زیرا فاقد نشانه مخصوص است.
به این نشانه مخصوص محافظ اجرای مجدد میگویند زیرا از حمله اجرای مجدد جلوگیری میکند.
محافظ اجرای مجدد و Segwit2x
توسعه دهندگان Segwit2x از افزودن محافظ اجرای مجدد امتناع میکنند و میگویند بیت کوین کور در صورت لزوم باید این محافظ را اضافه کند.
متاسفانه اکثر طرح های محافظ اجرای مجدد، هاردفورک ها میباشند. از آنجایی که هاردفورک ها از نسخه های قبلی دفترکل پشتیبانی نمیکنند و تمام افراد نیز به روزرسانی انجام نمیدهند، این موضوع باعث ایجاد دو دفترکل متفاوت خواهد شد. بسیاری از توسعه دهندگان بیت کوین کور (توسعه دهندگان اصلی بیت کوین) این نگرش را دارند که هاردفورکی که بیش از ۱۲ ماه جلوتر برنامه ریزی نشده باشد باعث این شرایط خواهد شد.
بنابراین اگر بیت کوین کور، محافظ اجرای مجدد را در دوره کوتاه مدت برای هاردفورک Segwit2x اضافه کند، این امر به احتمال زیاد سه دفترکل متفاوت ایجاد خواهد کرد که عبارتند از: Segwit2x، بیت کوین با محافظ اجرای مجدد و بیت کوین لگسی. در این خصوص حتی بیت کوین کش را نیز حساب نکردیم.
این امتناع از جانب بیت کوین کور در امتداد با امتناع از هاردفورک به Segwit2x میباشد. اگر توسعه دهندگان بیت کوین کور با هاردفورک در دوره ۳ ماهه مشکلی نداشتند، ایجاد هاردفورک مشابه با Segwit2x منطقی تر بود. در عوض، از آنجایی که بسیاری از توسعه دهندگان بیت کوین کور احساس میکنند که ۳ ماه برای آماده سازی هاردفورک بسیار کم است، افزودن محافظ اجرای مجدد بر روی بیت کوین کور آغاز نشده است.
راهکارهای جایگزین
اگر شما کاربر بیت کوین هستید و میخواهید از خودتان در مقابل حملات اجرای مجدد و پس از هاردفورک Segwit2x محافظت کنید، باید حساب خود را از دو دفترکل متفاوت بیت کوین کور و Segwit2x جدا کنید.
یکی از روش هایی که کاربران میتوانند حساب های خود را جدا کنند، ترکیب کردن کوین ها میباشد. این امر شامل یافتن تراکنش بر روی یکی از زنجیره ها است که بر روی زنجیره دیگر قابل اجرای مجدد نباشد. شاید فکر کنید چنین تراکنشی وجود ندارد اما حداقل یک دسته از تراکنش ها وجود دارد که قابل اجرای مجدد نمیباشند.
تراکنش های کوین بیس یا پاداشی که ماینر دریافت میکند و پس از فورک ایجاد شده اند، قطعا بر روی دو زنجیره متفاوت خواهند بود. بنابراین تراکنش های کوین بیس قابل اجرای مجدد بر روی دفترکل دیگر نمیباشد. اگر تراکنشی ایجاد میکنید که با هر نوع تراکنش غیر قابل اجرای مجدد ترکیب میشود، نتیجه کار نیز یک تراکنش غیرقابل اجرای مجدد میشود. بنابراین ترکیب هر تراکنش با تراکنش های کوین بیس منجر به تراکنش غیرقابل اجرای مجدد میشود و تراکنشی که با این تراکنش ترکیبی، ترکیب میشود نیز غیرقابل اجرای مجدد است. با استفاده از این روش، بسیاری از تراکنش ها غیرقابل اجرای مجدد خواهند شد و در کل سیستم پخش میشوند.
ممکن است صرافی ها و تاجران بخواهند که سرویس ترکیب برای انجام آسانتر تراکنش ها در هر دو زنجیره ایجاد کنند.
نتیجه گیری
برای کسانی که زیاد تراکنش انجام نمیدهند، اجرای مجدد مشکل بزرگی به حساب نمیآید. پس از هاردفورک Segwit2x، این موضوع بدان معنا خواهد بود که کاربران نمیتوانند و احتمالا نباید تا زمانی راهکار مشخص و در دسترسی برای این مشکل وجود نداشته باشد تراکنش انجام دهند.
اگرچه به نظر میرسد که این موضوع خیلی بدی است، اما با در نظر گرفتن تجربه ای که با بیت کوین کش داشتیم، این موضوع آنقدرها هم فاجعه بار نیست.
آخرین بروزرسانی ۱۳۹۹/۰۷/۲۹