اگر به فلسفه و نیاز یک پول واقعی برای غیر قابل ردیابی بودن آگاهید و علاقه مندید بدانید که تامبلبیت (TumbleBit) چطور این مشکل را بر روی بستر بیتکوین حل میکند این پیشگفتار را جا بگذارید و به مطلب بعدی بروید که توضیح الگوریتم پیاده سازی این روش به زبان فارسی است.
فلسفه جایگزین پذیری:
شما یک چک از یک فرد معتبر را با یک چک از فردی غیر معتبر با همان مبلغ عوض نمی کنید. یک خودرو پراید را با یک خودرو پراید دیگر به راحتی عوض نمیکنید. اما یک ۱۰۰۰ تومانی را با یک هزارتومانی دیگر عوض میکنید هر چند که یکی قدیمی و یکی جدید و حتی با شماره سریال های متفاوتند.
جایگزین پذیری پول یکی از مهمترین خواص پول است که به همه اعتماد به ارزش را میدهد. هیچکس نگران این نیست که وقتی یک اسکناس هزارتومانی میگیرد این اسکناس قبلا کجا بوده و چه شرایطی داشته، ارزشش برای همه یکی است. اما اگر این امکان وجود داشت که اسکناس به فرد متصل شود و اسکناس ها با هم تفاوت داشته باشند به رغم انجام یک کار ثابت، یک اسکناس میتوانست کم ارزش تر از دیگری شود. مثلا اسکناس ۱۰۰۰ تومانی را اگر بدانیم که از طریق قاچاق کودکان بدست آمده، ترجیح میدهیم آن را نداشته باشیم. اینجاست که به علت نبود تقاضا برای این اسکناس با وجود اینکه رویش عدد ۱۰۰۰ نوشته شده ارزشش کمتر از ۱۰۰۰ تومان است. اما در دنیای واقعی یک هزارتومانی که روی زمین پیدا کرده ایم به اندازه همه ۱۰۰۰ تومانی های دیگر ارزش دارد.
وقتی در باره بیتکوین و دفتر کل حرف میزنیم، میدانیم که همه میتوانند رد هر یک ساتوشی را تا روز اول بگیرند. این موضوع سه خطر ایجاد میکند.
۱- جایگذین پذیری را به خطر می اندزد.
۲- امکان سانسور را فراهم می کند. یعنی دولت ها میتوانند هر کس را که می خواهند از معامله منع کنند و روی افراد مختلف تحریم بگذارند.
۳- امکان انجام معاملات ناشناس ممکن نیست.
معامله به صورت ناشناس جزو آزادی های فردی است و فقط مربوط به استفاده های نا درست و غیر قانونی نمی شود. مثلا من اگر بخواهم یک دستگاه برای کار خاصی بخرم، دوست ندارم که همه دنیا بدانند که من پولی به فلان شرکت پرداخت کرده ام. نمونه های مهمتر مثل پرداخت پول به فعالان آزادیخواه تحت تعقیب مثل ادوارد اسنودن یا سازمانهای تحت تحریم مثل ویکی لیکس و … فراوان هستند
اینجاست که ما نیاز داریم که بیتکوین به سمت ناشناسی نزدیک شود. پس صورت مسئله این است.
چطور فردی به فرد دیگر پولی بدهد بدون اینکه هیچ کس به جز خودشان اگاه به این امر نباشند. اگر آذرA بخواهد از طریق شخص ثالث C برای بابک B پول بفرستد چه میکند؟ در دنیای متمرکز با فرض اعتماد
آذر به بانک خودش، به آن بانک پول می دهد و بانک نیز به بابک پول را پرداخت می کند.
پیاده سازی این روش در بلاکچین کنونی به این صورت است:
۱-آذر یک تراکنش سپرده دو امضایی برای ارسال به سپرده ی ۱ می سازد با باز پرداخت یک ماهه به آذر
۲- گرداننده یک تراکنش سپرده دو امضایی برای ارسال به سپرده ی ۲ میسازد. بازپرداخت یک ماهه به گردانند
۳- گرداننده یک تراکنش دو امضایی برداشت از سپرده یک برای خودش میسازد
۴- بابک یک تراکنش دو امضایی برداشت از سپرده دو برای خودش میسازد
۵- آذر تراکنش برداشت ۱ را امضا میکند (با امضای گرداننده یک سکه به گرداننده میرسد)
۶- گرداننده تراکنش برداشت ۲ را امضا میکند ( با امضای بابک یک سکه به بابک میرسد)
مشکل؟
گرداننده بعد از گام ۵ گام ۶ را انجام نمی‌دهد و سکه را برای خود نگه می‌دارد راه حل؟ برداشت ۱ و ۲ را همزمان کنیم طوری که یا هر دو اتفاق بیفتند یا هر دو اتفاق نیفتند.
اگر تراکنش برداشت۲ و یک به جز امضای B و C نیازمند یک رمز با مقدار X باشد به گونه ای که H(x) =y
باشد بنابر این حتی اگر گرداننده برداشت دو را امضا هم کرده باشد بابک نمی‌تواند پول را برداشت کند آذر دقیقا از همین فرمول رمز برای ایجاد تراکنش برداشت ۱ استفاده می کند و آن را امضا می کند .
حالا اگر گرداننده برداشت ۱ را بخواهد نقد کند باید رمز X را در آن وارد کند. آذر رمز را به بابک میگوید و بابک رمز را در تراکنش برداشت ۲ وارد میکند و جابجایی اتفاق می‌افتد بدون اینکه امکان دزدی توسط گرداننده وجود داشته باشد.
مشکل این روش این است که در در صورتی که تعدادی فرد (مثل آذر) بخواهند مبالغی به تعداد دیگری از افراد (مثل بابک) منتقل کنند دچار این خطر خواهیم بود: چون گرداننده رمز های x را برای همه میسازد همه رمزهای x یکم تا x آخر را میداند
زیرا گرداننده رمزها را به پرداخت کننده‌ها می دهد و می داند که کدام رمز را به چه کسی داده است. چون گرداننده، تراکنش های برداشت از پول خودش را می بیند می تواند ببیند که چه کسی کدام رمز را وارد کرده است در نتیجه گرداننده می تواند بین افرادی که پول را منتقل کرده اند رابطه برقرار کند و در نتیجه او آگاه است و ما به او اعتماد می کنیم که این اطلاعات را منتشر نکند.
معمای RSA
یک گرداننده می تواند معماهایی بسازد که فقط خودش می تواند آن را حل کند. این معماها امکان مخفی سازی دارند به این معنا که معما را طوری (با استفاده از رمزی)‌تغییر می دهیم که قابل تشخیص یا ردیابی به معمای اول نیست، اما کسی که می تواند معمای اول را حل کند می تواند این معمای مخفی شده را نیز حل کند. حالا که معمای مخفی شده ای داریم و آن را به حل کننده داده ایم و پاسخ را دریافت کرده ایم می توانیم با استفاده از رمزی که برای مخفی کردن معما استفاده کرده بودیم، جواب را آشکار کنیم و جواب درست برای معمای مخفی نشده را بدست آوریم.
برای روشن تر شدن این مفهوم به جدول سودوکو فکر کنید. اگر بگوییم که به جای ۱ ها در جدول ۵ میگذاریم و به جای ۲ ها ۷ و غیره و جدول را با مقادیر از پیش روشن شده اش به کسی بدهیم تا او آن را حل کند می توانیم با برگداندن ۵ ها به ۱ و ۷ ها به ۲ جواب مسله خودمان را نیز پیدا کنیم بدون اینکه مسله اصلی را به او داده باشیم.
با استفاده از معماهای مخفی شده نحوه انجام تراکنش بالا به این شکل تغییر می کند:
۱- گرداننده به بابک می گوید در ازای حل یک معما به او یک واحد پول می دهد
۲- گرداننده به آذر می گوید در ازای یک واحد پول و هزینه جابجایی حاضر است برای او یک معما را حل کند
۳- بابک معما را مخفی کرده و از آذر میخواهد که جواب را برای او بگیرد
۴- آذر معمای مخفی شده را به گرداننده می دهد و با پرداخت پول و هزینه جواب را (به صورت منصفانه) از گرداننده می گیرد
۵- آذر معما را به بابک می دهد. بابک معما را آشکار کرده و از آن جواب نهایی را بدست می‌آورد و با گذاشتن جواب در تراکنش، یک واحد پول بدست می‌آورد بدون اینکه قابل ردیابی باشد.
پروتکل منصفانه برای دریافت یک پاسخ صحیح برای یک معما
آذر یک معما دارد که پاسخ آن را میخواهد. چون آذر کلید عمومی گرداننده را می داند می تواند معماهایی با استفاده از آن بسازد که حلشان فقط برای گرداننده ممکن است. آذر تعدادی معما می سازد.
معماهای راستین: نسخه های مخفی شده متفاوت از معمای اصلی (چون بابک این معما را مخفی کرده بود معما دوبار مخفی شده است)
معماهای دروغین: معماهایی که خود آذر با استفاده از کلید عمومی گرداننده ساخته است آذر این معماها را به گرداننده می فرستد. گرداننده نمی‌داند کدام معما راستین یا دروغین هستند اما می تواند همه را حل کند. پس همه را حل می کند.
حالا اگر گرداننده جواب‌ها را برای آذر بفرستد آذر می تواند جواب را به بابک بدهد تا بابک پول را بردارد. برای اینکه آذر نتواند با جواب گرفته شده و بدون پرداخت پول از تراکنش خارج شود، گرداننده جوابهایی که دارد را قبل از دادن به آذر با کلیدهایی رمزگذاری می کند. آذر تعدادی جواب رمز گذاری شده دارد و می داند که بعضی از این جواب ها جواب معماهای دروغینی هستند که خودش ساخته است، پس از گرداننده می خواهد که جواب‌های معماهای دروغین را به او بدهد. گرداننده کلیدهای جواب‌های این معماها را برای آذر میفرستد.
آذر با استفاده از این کلیدها می تواند مطمئن شود که جواب‌های ارسال شده برای معماها جواب‌های درستی هستند و اگر کلید جواب‌های دیگر را بدست آورد، جواب معماهای راستین را خواهد داشت. او اکنون باید جواب معمای راستین را از گرداننده بخواهد.
گرداننده برای اینکه اطمینان حاصل کند فقط جواب یک معما را به آذر داده و از آذر می خواهد که با تمام مقادیری که برای مخفی شدن معمای راستین استفاده شده است را به او بدهد تا بداند که همه معماهای راستین اگر آشکار شوند فقط به یک معما میرسیم.
حالا آذر یک تراکنش برداشت از سپرده دو امضایی با یک رمز که رمز معمای راستین است می سازد. گرداننده تراکنش را امضا کرده و رمز را در آن قرار می دهد و پول را برداشت می کند. آذر رمز را دیده و با استفاده از آن معمای مخفی خود را حل کرده و جواب را به بابک می دهد. بابک رمز را دیده و با استفاده از آن معمای مخفی خود را حل کرده و پاسخ را آشکار می کند و رمز بدست آمده را در مکان تراکنش بعدی قرار می دهد و پول را برداشت می کند.



دیدگاه هایی که در این مقاله ارائه شده اند، متعلق به نویسنده می باشند و لزوماً مربوط به Coiniran نمی باشد و نباید به آن نسبت داده شود.


نویسنده : محمد بنی اسد

https://coiniran.com/%d9%85%d9%82%d8...%db%8c-%d8%a8/