آنچه در این مقاله میخوانید
آیا شما هم تا به حال به دوباره خرج کردن پولتان فکر کردهاید؟ یعنی با خود گمان کنید که ای کاش میشد پولی که برای خرید یک چیز صرف کردهاید دوباره برای خرید چیز دیگری از آن استفاده کنید؟ در دنیای واقعی و با استفاده از سیستم بانکداری امروزه که یک ناظر بر وضعیت مالی همه حسابها نظارت میکند این امر ممکن نیست؛ اما بازارهای مالی مخصوصا بازار ارز دیجیتال جایی است که این مسئله چندان هم ناممکن و دور از ذهن نیست. در فضای کریپتوکارنسی، افراد سودجو و کلاهبردار میتوانند با استفاده از روشهای خاصی توکنهای یک رمزارز را بارها خرج کنند.
این افراد با کپی کردن پول، آن را به صورت غیر قانونی برای کاربران مختلف ارسال میکنند و با دور زدن قوانین بلاکچین، مرتکب حمله دوباره خرج کردن میشوند. حمله دوباره خرج کردن انواع متفاوتی دارد و تا حدی هم با راه اندازی پروتکلهای خاص امینتی در سالهای اخیر از آن جلوگیری شده است؛ اما کسب آشنایی با مفهوم آن میتواند برای فعالان حوزه ارزهای دیجیتال بسیار مفید باشد. با درک سازوکار حمله دوباره خرج کردن شما میتوانید تا حد زیادی از قرارگیری در معرض چنین خطراتی جلوگیری کنید. به این ترتیب اگر مشتاقید که درباره مفهوم حمله دوباره خرج کردن بیشتر بدانید و با راههای جلوگیری از آن و جزییاتش آشنا شوید با این مقاله از وبسایت کریپتوباز همراه باشید.
حمله دوباره خرج کردن یعنی چه؟
حمله دوباره خرج کردن یکی از اصلیترین مشکلاتی است که در دنیای رمزارزها اتفاق میافتد. درواقع در این حمله یک فرد میتواند اطلاعات یک تراکنش و رمزارز را کپی کرده و از آن دوباره استفاده کند؛ به صورتیکه با استفاده از یک میزان پول مشخص چند برابر استفاده ببرد. البته این مسئله قطعا جرم محسوب میشود و بسیار از بلاکچین ها در حال تلاش برای پیاده سازی قوانین و پروتکلهایی هستند که از این کار جلوگیری کنند.
در دنیای واقعی به علت فیزیکی بودن پولی که میپردازید و به علت وجود یک ناظر مانند بانک این کار قابل انجام نیست؛ اما در شبکه بلاکچین که همه چیز به صورت یک سیستم غیرمتمرکز رهبری میشود و نودها وظیفه دارند تراکنشها را تایید کنند، ممکن است در مواردی چنین اتفاقاتی بیفتد. در اصل روند Double Spending زمانی اتفاق میافتد که یک منبع مالی یکسان برای دو گیرنده متفاوت پول مشابهی را ارسال کند. به همین دلیل بسیاری از کاربران از این موضوع ابراز نگرانی میکنند؛ چرا که مشخص نیست پولی که دریافت کردهاند قبلا در جای دیگری خرج شده است یا نه!
دوباره خرج کردن چگونه اتفاق میافتد؟
وقتی تراکنش به عنوان یک درخواست برای شبکهای از نودها ارسال میشود، یک عدد هش به آن تعلق میگیرد که همراه با اطلاعات اضافی پرداخت نظیر برچسب زمانی و دادههای مرتبط با تراکنش و همچنین اطلاعات بلاک قبلی ثبت میشود. این اطلاعات توسط الگوریتمهای پیچیده بلاکچین رمزنگاری میشوند و در نهایت بعد از اینکه نودها یا ماینرها بلاک را بررسی کردند تایید میشود. این کار زمان مختص به خودش را نیاز دارد.
در این زمان، حمله دوباره خرج کردن اتفاق میافتد. اگر کسی بخواهد یک رمزارز را دوباره خرج کند باید قبل از اینکه یک تراکنش توسط شبکه تایید شود تراکنش دیگری را وارد صف کرده و آن را به زنجیره معرفی کند. در این شرایط اعضای بلاکچین آن را به عنوان آخرین تراکنش به حساب میآورند و سعی میکنند با تایید آن، آن را به زنجیره اضافه کنند. در اصل روند Double Spending اینگونه طی میشود که وقتی یک تراکنش در حال تایید شدن از سمت شبکه و مقصد است، کاربر میتواند اطلاعات پول را کپی کرده و در همان زمان تراکنش دیگری را با این پول شروع کند و در نهایت با تایید هر دو تراکنش دوبار خرج کردن اتفاق میافتد.
چگونه میتوان از حمله دوباره خرج کردن جلوگیری کرد؟
اصولا جلوگیری از حمله دوباره خرج کردن نشدنی نیست و بسیاری از پلتفرمهای معاملات آنلاین امروزه توانستهاند از راههای گوناگون از این مسئله جلوگیری کنند. همچنین به ندرت پیش میآید که کسی با وجود نودهای شبکه بتواند تایید لازم برای تراکنش تقلبی را به دست آورد. به هرحال امروزه از راههای گوناگونی میشود از حمله دوباره خرج کردن جلوگیری کرد:
• وجود یک الگوریتم اجماع قوی: اگر یک شبکه به خوبی نودهای خودش را در مستقر کند و هر یک از این نودها به دقت کار خود را انجام دهند و علاوه بر آن از الگوریتم مناسبی برای تایید تراکنشها استفاده ببرند، حمله دوباره خرج کردن دور از انتظار میشود.
• استفاده از روش بازبینی کد یا Audit: زمانی که یک قرارداد هوشمند توسعه مییابد ممکن است عمدی یا سهوی در آن اشکالاتی وجود داشته باشد که به کاربران شبکه اجازه ترید و معاملات صحیح را ندهد. برای جلوگیری از این نتایج عموما از روش بازبینی کد یا آدیت استفاده میکنند که در آن یک نهاد خارج از سازمان به صورت بی طرفانه درباره کد قرارداد تصمیم گیری و آن را تصحیح میکند. چنین کاری باعث میشود ضعف ساختاری که در نهایت باعث قدرت گرفتن کلاهبرداران میشود کاهش یابد.
• استفاده از عدد نانس (Nonce): عدد نانس یکی از اجزای مهم بلاکچین است که به امنیت هش شدن بلاک و همچنین ثبت ان در شبکه کمک بسیاری میکند. این عدد تنها یک بار قابل استفاده است و همین باعث میشود که جلوی حمله دوباره خرج کردن یک پول با کپی کردن آن گرفته شود.
• استفاده از برچسب زمانی: برچسب زمانی نیز یکی دیگر از پارامترهای کمک کننده به حفظ امنیت شبکه در برابر حمله دوباره خرج کردن است؛ به این ترتیب که با اضافه شدن به یک بلاک، به ما نشان میدهد که اطلاعات مربوطه در چه زمانی به زنجیره اضافه شده و به همین ترتیب اجازه بهم ریختگی ترتیب ثبت بلوکها را نمیدهد.
انواع حمله دوباره خرج کردن
حمله دوباره خرج کردن شامل انواع متفاوتی میشود. کلاهبرداران از سه روش عمده و متفاوت برای رسیدن به هدف دوباره خرج کردن یک پول استفاده میکنند که شامل حمله فینی، حمله ریس یا سرعتی، حمله 51 درصد و همچنین حمله تراکنشهای تایید نشده میشود. ممکن است درک تفاوت این حملات کمی برای شما دشوار باشد؛ اما به هرحال در ادامه توضیحات مختصری درباره هرکدام به شما ارائه میشود:
حمله سرعتی (Race Attack)
همان طور که از نام این حمله مشخص است، حمله سرعتی زمانی اتفاق میافتد که فرد سودجو به صورت سریع و پشت سر هم دو تراکنش را روی شبکه ارسال میکند. روش این حمله به این صورت است که ابتدا یک تراکنش که در شبکه تایید نشده برای فرد قربانی یا همان گیرنده فرستاده میشود. سپس بدون اتلاف وقت به منظور دوباره خرج کردن پولی که ارسال شده، فرد سودجو یک تراکنش دیگر را روی شبکه منتشر میکند. این تراکنش میتواند یک خرید دیگر باشد یا اینکه پول را بخواهد به حساب خودش در جای دیگری واریز کند. سپس از آنجایی که فرد قربانی سریعتر تراکنش دریافت پول را دیده، فکر میکند که شبکه این را تایید کرده و او نیز تراکنش را تایید میکند؛ درحالی که در آن سمت شبکه نود تراکنش دوم را به عنوان تراکنش آخر میبینند و سعی میکنند آن را تایید و به شبکه اضافه کنند. در نهایت حمله دوباره خرج کردن اتفاق میافتد.
حمله فینی (Finney Attack)
در حمله فینی، شبکه از درون ضربه میخورد و حمله کننده خود شخص ماینر است. ممکن است این حمله مشابه با حمله دوباره خرج کردن سرعتی اشتباه شود که تفاوتهایی دارند. در این حمله مانند حمله قبلی ابتدا فرد سودجو یک تراکنش را در بلوکی که قبلا به ثبت رسیده جای میدهد. سپس در حالی که گیرنده هنوز شبکه تراکنش را مشاهده نکرده، نیاز است که زودتر از موعد مانند روش قبلی تراکنش را تایید کند. در این فرصت فرد سودجو همان دارایی که در یک بلوک از پیش ثبت شده ارسال کرده را به حساب دیگری که مال خودش است واریز میکند و سپس همان بلوک قبلی را به شبکه به عنوان یک تراکنش جدید معرفی میکند.
ممکن است نودهای شبکه این تراکنش دوم را تایید نکنند؛ اما به هرحال این موضوع زمان میبرد و در این مدت حتما فرد گیرنده تراکنش قلابی خودش را تایید کرده و بدون دریافت پول تراکنش به پایان رسیده است. در حمله دوباره خرج کردن فینی توالی انجام کارها بسیار مهم است و همچنین برای جلوگیری از طعمه شدن در این سناریو پیشنهاد میشود که کاربران بازار سرمایه کریپتوکارنسی به اندازه 6 تایید بلوک توسط شبکه صبر کنند و سپس تراکنشهای خود را تایید کنند.
حمله ۵۱ درصد (51% Attack)
حمله 51 درصد در دوباره خرج کردن یکی از دور از انتظارترین حملات است. زمانی که یک سازمان بیش از 50 درصد نودهای یک شبکه را تحت کنترل خودش بگیرد، میتواند حمله دوباره خرج کردن 51 درصد را فعال کند. این سازمان میتواند علاوه بر به هم ریختن ترتیب تراکنشها و ایجاد زنجیرههای جدید، یک سری تراکنشهای فیک و تقلبی را وارد شبکه کنند و از آنجایی که قدرت نودها در دست خودشان است، آنها را به راحتی تایید کنند. در این حمله قدرت هش ریت به دست گرفته میشود، اما عموما این کار شدنی نیست؛ چرا که هزینه بسیار زیادی را میطلبد.
حملات تراکنشهای تاییدنشده (Unconfirmed Transaction Attacks)
این نوع حملات ممکن است مشابه حمله دوباره خرج کردن سریع به نظر برسند و تا حدی هم همینطور است؛ اما هدف اصلی حملات تراکنشهای تایید نشده دقیقا افراد و کسب و کارهایی هستند که بخاطر کمبود وقت یا کمبود مهارت، همواره در تله زود تایید کردن تراکنشهای ثبت نشده میافتند. در این سری حملات فرد سعی میکند با این افراد وارد معامله شود و سریعتر از شبکه او را متقاعد به تایید کند و در نهایت با انجام یک سری از کارها حمله دوباره خرج کردن اتفاق میافتد.
انواع راه حلهای ارائه شده برای مقابله با حمله دوباره خرج کردن
به صورت کلی و بدون در نظر گرفتن اقدامات خود بلاکچینها به صورت شخصی، روشهایی برای جلوگیری از حمله دوباره خرج کردن از سمت توسعه دهندگان مختلف ارائه شده است. این رویکردها به دو دسته متمرکز و غیر متمرکز تقسیم میشوند.
رویکرد متمرکز
رویکرد متمرکزی که برای جلوگیری از حمله دوباره خرج کردن پیشنهاد شده، سختتر از روش غیرمتمرکز است و در اصل شیوهای نمادین و برگرفته از سیستم چکها در بانکداری به حساب میآید. این روش که با نام eCash شناخته میشود، توسط آقای دیوید چائوم (David Chaum) که یک دانشمند آمریکایی الاصل و متخصص در زمینه علوم کامپیوتری و رمزنگاری است در سال 1982 پیشنهاد شد. او در مقالهای که در این سال با نام Blinds Signatures for Untraceable Payments و ترجمه امضاهای کور برای پرداختهای غیر قابل ردیابی بیان میکند که میتوان بانکها را به عنوان یک ناظر متمرکز برای بررسی پرداختهای داراییهای دیجیتال به کار گرفت. او میگوید برای پولهای الکترونیکی که بی نشانی و نظیر به نظیر و غیر قابل شناسایی هستند میتوان مانند پولهای عادی و فیزیکی یک سری فاکتور با امضاهای کور ایجاد کرد.
در توضیحات بیشتر او میگویند برای مثال اگر کسی بخواهد 50 دلار از حسابش دارایی دیجیتالی برداشت کند و با آن چیزی بخرد، میتواند به شرط داشتن آن موجودی در حسابش، دو فاکتور به ارزش 25 دلار تولید کند و آنها را با یک سری اعداد رمزنگاری کند که به آنها امضا گفته میشود. دلیل نامگذاری این اعداد به عنوان امضای کور این است که این اعداد برای بانک آشکار نیستند؛ به این ترتیب خود بانک نمیتواند آنها را رهگیری کند و تنها در سیستم ذخیره میشوند. این فاکتورها با امضاهای کور شده با تایید و امضای بانک صادر میشوند. سپس اگر فرد برای مثال برای خرید یک لباس به فروشگاهی برود و بخواهد 50 دلار هزینه کند، آنگاه دو فاکتور با امضاهای کور به متصدی صندوق ارائه میکند. متصدی نیز از طریق سیستم آنلاین مالی با بانک ارتباط میگیرد و اطلاعات فیشها را برای بانک ارسال میکند.
در این زمان بانک تنها مطلع میشود که فرد قصد برداشت 50 دلار از حسابش را دارد؛ به این ترتیب با چک کردن اطلاعات و درست بودن آنها، قبضها را میسوزاند و حساب فروشگاه را به ازای 50 دلار شارژ میکند. این فرآیند دقیقا باعث میشود که بانک دیگر نتواند به جزییات پرداختهای شما دسترسی داشته باشد و تنها حواسش به این مسئله هست که حمله دوباره خرج کردن اتفاق نیفتد. از طرفی، چون بانک به عنوان یک اهرم در وسط عمل میکند و فاکتور به خودی خود ارزشی ندارد مگر اینکه بانک آن را تایید کند، پس بسیاری از کاربران به دنبال رفع تسلط بانک بر روی خساب افراد هستند همچنان که میخواهند از حمله دوباره خرج کردن جلوگیری کنند.
رویکرد غیر متمرکز
همان طور که در بخش قبلی گفته شده، از ایرادات روش متمرکز این است که فرد باید به بانک اعتماد کامل داشته باشد و این بانک است که تراکنشها را تایید میکند؛ اما در رویکرد غیرمتمرکز که برای جلوگیری از حمله دوباره خرج کردن ارائه شده بازی به صورت دیگری انجام میگیرد. مسلما در محیطی که هیچ واحد نظارتی مانند بانک وجود ندارد و همه اعضای شبکه از قدرت یکسانی برای بررسی و تصمیم گیری برخوردارند سخت است یک توازن نسبتا خوب ایجاد کرد؛ اما این کار توسط ساتوشی ناکاماتو، بنیانگذار بیت کوین انجام شد. او در طرحی که برای مبارزه با حمله دوباره خرج کردن ارائه داده میگوید با تغییرات جدیدی که در بلاکچین بیت کوین ایجاد کرده میتوان به یک شبکه با قابلیت مشاهده تمامی تاریخچهها دسترسی پیدا کرد.
به عبارت دیگر، در این شبکه شما میتوانید تمامی تراکنشهای ثبت شده از اولین بلوک که به بلوک Genesis Block معروف است تا آخرین بلوک که شامل اطلاعات آخرین تراکنش است ببینید. همچنین این مشاهده علاوه بر ماینرها به عنوان نود، برای اعضای دیگر شبکه یعنی کاربرها هم قابل انجام است. همچنین نودها میتوانند با استفاده از یک قابلیت خاص، پایگاه داده تاییدات خود و بررسیهای مختلفی که روی تراکنشهای مختلف در بلوکها انجام دادهاند با یکدیگر به اشتراک بگذارند. این اطلاعات به صورت نظیر به نظیر بین نودها به اشتراک گذاشته میشود و همچنین با استفاده از رمزنگاری کلید عمومی از آن محافظت میشود. این فناوری درواقع در وایت پیپر بیت کوین معرفی شده است و به اعضای شبکه این قابلیت را میدهد که با نظارت بیشتر هرگونه فعالیت مجرمانه را شناسایی کنند.
بلاکچین بیت کوین چگونه از حمله دوباره خرج کردن جلوگیری میکند؟
بلاکچین بیت کوین برای اینکه از حمله دوباره خرج کردن جلوگیری کند از یک پروتکلی استفاده میکند که طبق آن وقتی یک تریدر میخواهد با میزان پول مشخصی یک تراکنش را انجام دهد، درخواست آن در شبکه ثبت میشود و تا زمانی که این تراکنش تایید نشود عملیات اجازه برگشت ندارد؛ یعنی شما دیگر نمیتوانید آن تراکنش را لغو کنید. این مسئله با استفاده از هش ریتهای نجومی برای برگشت پذیر کردن تراکنشها ممکن شده است؛ چرا که هیچ سازمان و تریدری توانایی فراهم کردن چنین هش ریتی را در زنجیره بلاکچینی ندارد.
در واقع خریدار و فروشنده هر دو باید منتظر بمانند تا درخواست توسط شبکه بررسی و ثبت شود و به شکل یه بلوک به زنجیره اضافه شود تا به ادامه روند خرید و فروش بپردازند. این کار با توجه به سازوکار حمله دوباره خرج کردن باعث میشود که فرد کلاهبردار نتواند از بازه زمانی انتظار برای تایید تراکنش به صورت سودجویانه استفاده کند و فرد گیرنده نیز نتواند پیش از تایید شبکه، تراکنش را تایید کند و پول غیر واقعی در حسابش دریافت کند. به این ترتیب بیت کوین نیز دو راه حل اساسی را برای جلوگیری از حمله دوباره خرج کردن ارائه داده است:
• ایجاد یک دفتر کل توزیع شده یا DLT(Distributed ledger technology): با این کار همه اعضای شبکه و نودها میتوانند تراکنشها را ببینند و همچنین هر نود قادر است که تاریخچه تراکنشهای شبکه را برای خود ذخیره کند؛ به این ترتیب با بررسی دقیق خواهد فهمید که کدام کوین در مسیر دوباره خرج شدن قرار دارد.
• برچسب زمانی (Time Stamp): بلاکچین بیت کوین با اضافه کردن این عامل به قرارداد هوشمند خود باعث شده هر تراکنش یک سری اطلاعات اضافه که نشان میدهد در چه زمانی برای ثبت شدن وارد شبکه شده را با خود حمل کند. به این ترتیب نودها میتوانند در صورت مشاهده تراکنشهای تکراری که قصد دوباره خرج کردن یک پول را دارند تشخیص دهند و بدانند که کدام یکی معتبر و دیگری نامعتبر است؟
آیا باید نگران حمله دوباره خرج کردن باشیم؟
گفتیم که حمله دوباره خرج کردن تنها در بازارهای مالی که از پولهای الکترونیکی بهره میبرند اتفاق میافتد که البته بسیاری از بلاکچین های پرقدرت و بزرگ مانند بیت کوین توانستهاند تا حد زیادی از آن جلوگیری کنند؛ اما همچنان ما مشاهده میکنیم که گاهی در بلاکچینهای کوچکتر این اتفاق باعث بهم ریختن امنیت شبکه میگردد. باید گفت که پیشتر با پیشرفت اندک بازارهای مالی سنتی و بانکداریهای ضعیف هم چنین اتفاقاتی رخ میداد؛ اما امروزه شاهدیم که چنین حملاتی در دنیای معاملات فیزیکی رخ نمیدهد. به همین ترتیب امیدوار میتوان بود که روزی حمله دوباره خرج کردن در بازارهای مالی آنلاین هم اتفاق نیفتد. البته باید گفت که در بلاکچین بیت کوین از آنجایی که هش ریت و هزینهاش سرسام آور است، چنین مواردی دور از انتظار هستند؛ پس کاربران با ریسک کمتری مواجهاند. در هر صورت به تریدرها پیشنهاد میکنیم که همواره حواستان به اتفاقات احتمالی باشد.
دوباره خرج کردن سرمایه؛ حقه هوشمندانه کلاهبرداران بازار سرمایه
دوباره خرج کردن یک پول یکی از مسائلی است که ما آرزو داریم بتوانیم در دنیای واقعی آن را عملی کنیم تا از آن به اندازه دلخواه سود ببریم؛ اما باید گفت که در دنیای معاملات آنلاین این مسئله امکان پذیر است و در اصل یکی از اصلیترین ضعفهای این اکوسیستم به حساب میآید. حمله دوباره خرج کردن زمانی اتفاق میافتد که یک فرد سود جو، اطلاعات یک تراکنش و یک پول را کپی کرده و از آن در معاملات مختلف استفاده کند.
امروزه حملههای متفاوتی از دوباره خرج کردن در این نوع بازارها معرفی شده است ولی باید گفت که خوشبختانه اقداماتی هم در برابر این رفتارهای سودجویانه در حال انجام است. این روشها عموما متمرکز و غیر متمرکز هستند و هر بلاکچین سعی میکند با استفاده از نوآوری خاص به نوعی جلوی این نوع حملات را بگیرد. در حالت کلی پیشنهاد میشود هرچقدر هم که احتمال رخ دادن چنین اتفاقاتی کم باشد، باز هم شما به عنوان یک فعال بازار سرمایه با دقت و مهارت بیشتری در مسیر کسب درآمد گام بردارید. چنانچه هنوز سوالاتی در ذهن شما در خصوص حمله دوباره خرج کردن وجود دارد میتوانید آن را در قسمت کامنتهای وبسایت کریپتوباز با ما به اشتراک بگذارید.