منظور از دوبار خرج کردن (Double Spending) چیست؟

منظور از دوبار خرج کردن (Double Spending) چیست؟

دوبار خرج کردن (Double-spending) یکی از مشکلات بالقوه سیستم‌های نقدی دیجیتال است که در آن مبلغ به طور همزمان برای دو نفر واریز می‌شود.

در صورتی که اقدامات لازم برای برطرف کردن این مشکل انجام نشود، پروتکل مربوطه تضعیف شده و به هیچ عنوان نمی‌توان تشخیص داد که وجه دریافت شده در دو معامله خرج نشده باشد.

هنگامی که در مورد پرداخت‌های نقدی دیجیتال صحبت می‌کنیم، اطمینان از این مشکل اهمیت بالایی دارد. به عنوان مثال، اگر فردی 10 واحد داشته باشد و ده مرتبه از روی آن کپی بگیرد، مالک 100 واحد خواهد شد. همچنین، اگر این فرد بخواهد 10 واحد را به طور همزمان برای دو شخص متفاوت ارسال کند، نیز موردی مشابه این رخ خواهد داد.

بنابراین، برای اینکه پول دیجیتال عملکرد مطلوبی داشته باشد، باید مکانیسم‌هایی برای جلوگیری از وقوع این قبیل وقایع در نظر گرفت.


چطور از دوبار خرج کردن جلوگیری کنیم؟


  • رویکرد متمرکز

برای مقابله با این مشکل رویکردهای متمرکز از رویکردهای غیرمتمرکز کارآمدترند. در رویکرد متمرکز نهاد مربوطه بر صدور معاملات و اجرا شدن آن‌ها نظارت دارد. یکی از راهکارهای متمرکز برای حل مشکل دوبار خرج کردن راهکار پول الکترونیکی دیوید چائوم (David Chaum’s eCash) است.

در سال 1982، یکی از اساتید علم رمزنگاری، دیوید چائوم (David Chaum)، در مقاله‌ای تحت عنوان امضاهای کور برای دارایی‌های غیر قابل ردیابی، راه حلی برای این موضوع بیان می‌کند. به نظر وی بانک‌ها می‌توانند از امضاهای کور (blind signatures) استفاده کنند. 

به عنوان مثال، در چنین شرایطی، اگر کاربری بخواهد 100 دلار پول نقد دیجیتال دریافت کند، اول باید به بانک اطلاع دهد. در صورتی که حساب او موجودی کافی داشته باشد، با یک عدد تصادفی برای برداشت مبلغ اقدام می‌کند (برای چند برداشت چند عدد تصادفی انتخاب می‌کند). فرض می‌کنیم که آن فرد با 5 رقم هر کدام به ارزش 20 دلار اقدام می‌کند. برای آنکه بانک نتواند هر کدام از برداشت‌های مشخص را ردیابی کند، آن فرد می‌بایست هر کدام از آنها را با اضافه کردن یک عامل کور پنهان نماید.

سپس، کاربر داده‌ها را به بانک ارسال کرده که از موجودی 100 دلار وی کسر می‌شود. کاربر با امضای هر کدام از پیام‌ها مشخص می‌کند که هرکدام از آنها برای برداشت‌های 20 دلاری هستند. به این ترتیب کاربر می‌تواند موجودی حساب خود را خرج کند. 

در این هنگام کاربر می‌تواند عامل کور کردن را حذف کرده و عدد تصادفی مربوط به هر برداشت دیجیتالی (قبض) را در اختیار دریافت‌کننده قرار می‌دهد. این رقم تصادفی در حقیقت مانند یک شناسه منحصر به فرد یا همان شماره سریال است. به عنوان مثال، اگر آن فرد به رستورانی برود و غذای 40 دلاری سفارش دهد، برای پرداخت می‌بایست دو مورد از اعداد تصادفی را برای تکمیل پرداخت خود استفاده کند. برای آنکه این مبلغ مجددا توسط آن فرد خرج نشود، صاحب رستوران نیز باید فورا این رقم را به بانک اعلام و برای آزاد کردن آن اقدام کند. 

بانک اعداد را شناسایی کرده و آن‌ها را باطل می‌کند. 

ساز و کار  پول الکترونیکی چائوم در مورد نقل و انتقالات شخصی نیز معتبر است. اگر بانک که نقطه مرکزی برای تائید این قبیل برداشت‌هاست اعتبار خود را از دست بدهد، قبض‌های پرداختی نیز به خودی خود اعتباری نخواهند داشت. در حقیقت در این تبادلات مشتری و فروشنده به امانت‌داری بانک متکی هستند. همین اتکا به نهاد یا شخص سوم دقیقا از عاملی است که ارزهای دیجیتال در نظر داشتند از میان بردارند.

  • رویکرد غیرمتمرکز

اطمینان از خرج نشدن مجدد یک دارایی بدون نظارت نهاد شخص سوم امری چالش برانگیز است. بنابراین، در این اکوسیستم اعضایی با قدرت یکسان باید قوانین مشخصی را برای جلوگیری از این رخداد اتخاذ کنند.

بزرگترین راهکار نوینی که در وایت پیپر (white paper) بیت کوین آمده است، ارائه راهکاری کارآمد برای جلوگیری از مشکل «دوبار خرج کردن در شبکه» است. ساتوشی ناکاماتو برای حل این معضل ساختاری از داده‌ها که امروزه تحت عنوان «بلاکچین» شناخته می‌شود را ارائه می‌دهد، اگر چه که این راهکار تنها به این مشکل اختصاص ندارد.

در حقیقت، بلاکچین (Blockchain) یک بانک داده با ویژگی‌های منحصربفرد است. اعضای شبکه که اصطلاحا نود (گره) نامیده می‌شوند با کپی کردن نرم‌افزار خاصی، داده‌های خود را با نودهای متناظر این شبکه به اشتراک می‌گذارند. در نتیجه، کل شبکه تاریخچه‌ای از تمام تراکنش‌ها را از همان ابتدا (جنسیس بلاک) دارند. به کمک این بانک داده‌ی عمومی تراکنش‌های نامعتبر همچون دو بار خرج کردن یک دارایی شناسایی می‌شوند. 

زمانی که کاربری تراکنشی را منتشر می‌کند، این تراکنش فورا بر روی شبکه‌ی بلاک چین قرار نمی‌گیرد. بلکه ابتدا باید از طریق فرآیندی تحت عنوان استخراج (mining) در بلاک مشخص اضافه شود. بنابراین، تنها تراکنشی معتبر است که بلاک آن به زنجیره اضافه شده باشد. در غیر این صورت این امکان وجود دارد که کاربر مبلغ را در تراکنش دیگری نیز خرج کرده باشد.

به محض اینکه تراکنشی تائید می‌شود، مبلغ خرج شده در آن از حساب فرد خارج شده و عملا امکان خرج کردن مجدد آن وجود ندارد؛ کل شبکه نیز می‌توانند صحت این مبادله را تائید کنند. به همین خاطر اکیدا به کاربران توصیه می‌شود که قبل از تائید شدن پرداخت مبلغ مشخص منتظر دریافت چندین تائیدیه از جانب شبکه بمانند. بلاک‌هایی که بعد از بلاک تراکنش مشخص قرار می‌گیرند امکان حذف و یا دستکاری در آن تراکنش را به شدت دشوار می‌کنند (به طوری که امکان تغییر این بلاک تنها با حمله 51% ممکن است).

حالا در نظر بگیرید فردی می‌خواهد در رستوران هزینه غذای خود را با بیت کوین (BTC) بپردازد. در این روش، بدون نیاز به مجوز، دریافت امضا و شماره سریال مشخص از جانب بانک می‌تواند مبلغ را به آدرس عمومی رستوران واریز کند. تمام افراد شبکه نیز اعتبار این تراکنش را تائید خواهند کرد.

همانطور که گفتیم تراکنش تنها در صورتی معتبر است که بلاک متناظر با آن در شبکه تائید شود. در صورتی که تراکنش تأیید نشده‌ای را بپذیرید، انگار 40 دلار پول الکترونیکی مثال قبل را فورا از طریق بانک نقد کرده‌اید. این امر باعث می‌شود که فرد پرداخت کننده بتواند آن مبلغ را بلافاصله در جای دیگری خرج کند. بنابراین، توصیه می‌شود که دریافت‌کننده قبل از قبول پرداخت، منتظر حداقل 6 تأیید برای بلوک (تقریباً یک ساعت) بماند.


معذل دوبار خرج کردن در بیت کوین


اگر پروتکل بیت کوین مطابق قوانینی که برای آن وضع شده به کار گرفته شود، می‌توان اطمینان داشت که این پروتکل به نحوی طراحی شده است که در برابر حملات دوبار خرج کردن ایمن می‌باشد. به عبارت دیگر، اگر گیرنده به اندازه کافی منتظر بماند تا تراکنش از جانب شبکه تائید شود، فرستنده به راحتی قادر نخواهد بود آن تراکنش را لغو یا دستکاری کند. مگر اینکه بخش اعظم قدرت هش شبکه را در اختیار داشته باشد.

با این وجود، تعداد انگشت‌شماری از حملات دوبار خرج کردن وجود دارند. این امر در صورتی رخ می‌دهد که کاربران معاملات تایید نشده را می‌پذیرند. مثلا گیرنده عموما برای پرداخت‌های با مبلغ ناچیز منتظر تایید کامل تراکنش از جانب شبکه نمی‌ماند. یک رستوران فست‌فود شلوغ را در نظر بگیرید. این رستوران فرصت انتظار برای تایید شدن تراکنش‌ها از طرف شبکه را ندارد. بنابراین، اگر پرداخت‌ها به صورت لحظه‌ای پذیرفته شوند، امکان خرج کردن در مورد آن‌ها وجود دارد. ممکن است کاربری یک همبرگر در رستوران سفارش دهد و هزینه‌ی آن را هم با بیت کوین پرداخت کند و از طرف دیگر فورا همان ارز را در یک تراکنش دیگر به آدرس والت خود با کارمزد بالاتر انتقال دهد. هر چه کارمزد بیشتری برای تراکنش‌ها در نظر گرفته شود تراکنش‌ها سریع‌تر تائید می‌شوند.

بد نیست به این مطلب اشاره کنیم که سه روش عمده برای کلاهبرداری از طریق دوبار خرج کردن وجود دارد:

1- حمله 51%:

زمانی رخ می‌دهد که فرد یا نهاد مشخص کنترل بیش از 50 درصد نرخ هش شبکه را در اختیار داشته باشد. به این ترتیب، کاربر می‌تواند در تراکنش‌ها دخل و تصرف داشته باشد. امکان حمله 51% در شبکه بیت کوین بسیار کم است، اما ممکن است در شبکه‌های دیگر رخ دهد.

2- حملات مسابقه‌ای (Race attacks):

خرج کردن مبلغ یکسان در دو معامله مستقل، در حالی که تنها یکی از آن‌ها تائید می‌شود. در این حملات هدف مهاجم این است که با تائید تراکنشی که به نفع اوست تراکنش دیگر را نامعتبر کند. (ارسال دارایی یکسان به آدرسی که در نظر دارد) برای این حملات گیرنده باید تراکنشی که از جانب شبکه تائید نشده را تائید شده انگار کند.

3- حملات فینی (Finney attacks):

در این حملات مهاجم تراکنش از پیش استخراج شده‌ای را در یک بلاک قرار می‌دهد بدون اینکه آن را فورا بر روی شبکه منتشر کند. در عوض همان مقدار کوین را در تراکنش دیگر خرج می‌کند و بعد بلاک از پیش استخراج شده خود را بر روی شبکه منتشر می‌کند، که ممکن است پرداخت را فاقد اعتبار کند. درحملات فینی تراکنش‌ها باید با توالی مشخصی انجام شوند و همچنین منوط به پذیرش معاملات تأیید نشده از جانب گیرنده هستند.

همانطور که در نمونه‌های بالا بیان شد، منتظر ماندن برای تائید بلاک از جانب شبکه می‌تواند تا حد زیادی احتمال اینکه قربانی «دوبار خرج  کردن» شوید را کاهش دهد.


نتیجه‌گیری: دوبار خرج کردن


مکانیسم دوبار خرج کردن یکی از ضعف‌های سیستم‌های پرداخت الکترونیکی است که به کلاهبرداران امکان می‌دهد یک مبلغ را در چندین معامله خرج کنند. در اغلب شبکه‌های سنتی هنوز راهکار کارآمدی برای مقابله با این معضل وجود ندارد.

در عین حال، استفاده از امضاهای کور در سیستم‌های مالی متمرکز خوشبختانه توانسته است تا حد زیادی این معضل را برطرف کند. از طرفی الگوریتم اثبات کار (PoW) و ظهور بلاکچین بیت کوین که نمونه بارز و قدرتمندی از دارایی غیرمتمرکز است نیز  به خوبی توانسته است این معضل را مهار کند. این سیستم می‌تواند الگوی مناسبی برای سایر پروژه‌های ارزهای دیجیتال باشد.

ترجمه و جمع‌آوری: تیم خرید و فروش بیت کوین صرافی ارز دیجیتال همتا پی

اشتراک گذاری

پیام شما

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. خوشبختانه تاالان مورد دوبار خرج کردن برام پیش نیومده . اما ممنونم از شما بابت اطلاعاتیکه در اختیارمون میزارید