Hashcash مادر پروتکل اجماع اثبات کار در بیت کوین

یکی از مشکلات و تهدیداتی که همواره برای سرویس های عمومی در بستر اینترنت مطرح بوده مسئله حمله Denial of Service است که در آن موجودیت حمله کننده شرایطی را پدید می آورد که سرور مورد حمله قادر به پاسخگویی به کاربران خود نباشد.

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

ظاهر این مشکل از زاویه ای دیگر به اینصورت خواهد بود که حمله مذکور در سطح خفیف تر به قصد سوء استفاده از سرویس ارائه شده انجام می شود و یکی از مصادیق آن استفاده از سرویس ارسال ایمیل برای ارسال انبوه ایمیل های ناخواسته می باشد و معمولاً با عنوان Spam یا Junk Mail از آنها یاد می شود.

تلاش های بسیاری برای رفع این مشکل انجام شده است و یکی از ایده های موثر در این زمینه در سال ۱۹۹۲ توسط Cynthia Dwork  و Moni Naor در مقاله ای با نام Pricing via Processing ارائه شد. در این مقاله شرایط ایجاد هزینه بر اساس پردازش صورت گرفته توسط CPU با در نظر گرفتن سه سطح دشواری مورد بحث قرار گرفته بود. میزان سختی بسته به مورد استفاده از CPU Cost با استفاده از یک Trapdoor قابل تغییر است.

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

به عنوان مثال یک قفل فیزیکی برای بسته شدن نیاز به صرف انرژی زیادی ندارد ولی برای باز کردن نیازمند صرف زمان و انرژی است مگر در صورت حضور کلید یا در مثالی دیگر عدد ۸۸۴,۴۰۶,۰۵۷,۴۲۱ یک عدد تولید شده از ضرب دو عدد اول است که برای پیدا کردن آنها باید عدد حاصل را بر اعداد اول بسیاری تقسیم کرد اما با وجود اطلاعات کمکی و در دست داشتن یکی از آن اعداد یعنی ۹۰۰۰۳۷ به راحتی می توان با انجام عملیات تقسیم ۹۰۰۰۳۷ / ۸۸۴,۴۰۶,۰۵۷,۴۲۱ به عدد بعدی رسید.

در توابع مذکور به این اطلاعات اضافی Shortcut گفته می شود. وجود Shortcut به جهت ایجاد دسترسی آسانتر برای برخی کاربران بسته به شرایط و صلاحدید مورد استفاده قرار می گرفت به عنوان مثال در مورد ارسال ایمیل های انبوه توسط ارگانهای ذیصلاح وجود اطلاعات اضافی به عنوان Shortcut بسیار مفید واقع خواهد شد.

برای اجرای تابع Pricing یا Fs در زمان ارسال ایمیل با متد فوق فاکتور های مقصد d، زمان ارسال t، پیام m و تابع هشینگ h وجود دارد، در زمان ارسال ایمیل فرد ارسال کننده( y=Fs(h(m.t.d) را محاسبه کرده و برای سرویس دهنده ارسال ایمیل می فرستد، سرویس دهنده با محاسبه مجدد اطلاعات ارسالی آن را برای ارائه سرویس بررسی می کند اگر پاسخ صحیح نباشد یا از زمان تولید آن t مدت زیادی گذشته باشد سرویس را ارائه نخواهد کرد. در این مقاله سه تابع هزینه Extracting Square Roots  و Recycling Broken Signature Schemes و Fiat-Shamir Based Scheme  پیشنهاد شد که هر کدام با شرایط متفاوتی این عملیات را به انجام می رسانند و مورد آخر به عنوان انعطاف پذیر ترین مورد توسیه گردید.

موارد مطروحه فوق به مدت پنج سال در مجامع علمی مورد بررسی و مطالعه قرار گرفت تا در سال ۲۰۰۲ مقاله ای با عنوان Hashcash- A Denial of Service Counter-Measure توسط Adam Back ارائه شد. سیستم Hashcash با تولید یک توکن که به صورت تعاملی یا غیر تعاملی قابل ایجاد شدن است از طریق منطق اثبات کار به ارائه سرویس می پردازد.

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

کاربر با محاسبه توکن T توسط تابع Mint() که به دلیل قرابت معنایی با ضرب سکه اینگونه نام گذاری شده است، آن را به سرور s مورد نظر فرستاده و سرور توسط تابع Value() توکن دریافتی را بررسی می نماید و تنها پس از تایید توکن ارسالی اقدام به ارائه سرویس می نماید. توابع تحت استفاده کاربر با میزان کار w انجام شده پارامتر گذاری می شوند و چالش ارسالی توسط سرور c با تابع Chal() تولید می گردد.

پروسه مذکور در روال تعاملی به ترتیب زیر اتفاق می افتد:

  1. سرور چالش C را تولید و برای کاربر ارسال می کندC = Chal (s,w)
  2. کاربر بر اساس چالش دریافتی توکن T را تولید و به سرور ارسال می نماید T = Mint (C)
  3. سرور توکن دریافتی را مورد ارزیابی قرار می دهد V = Value (T)

در شرایط غیر تعاملی کاربر چالش خود را انتخاب می نماید:

  1. با انتخاب چالش توکن را تولید و به سرور ارسال می نماید T = Mint(s , w)
  2. سرور پس از دریافت توکن آن را مورد ارزیابی قرار می دهد V = Value (T)

در این مقاله سه نوع تابع هزینه معرفی شده است، دسته اول که توسط عموم قابل بررسی و صحت سنجی است و Publicly Auditable نامیده می شود. موجودیت های عمومی دسترسی به Trapdoor  و Shortcut نخواهند داشت.

دسته دوم توابع هزینه ثابت نام دارند که همواره برای حل چالش میزان مشخصی کار را انجام خواهند داد و با الگوریتم های معروف به Deterministic Algorithms تولید می شوند. این الگوریتم ها به ازای ورودی ثابت همواره خروجی ثابتی را تولید خواهند کرد و وضعیت بعدی ماشید در آنها از پیش مشخص خواهد بود.

دسته سوم که Probabilistic Cost نامیده می شوند که در آن هزینه انجام پردازش برای کاربر با مدت زمان احتمالی محاسبه می شود به اینصورت که کاربر بسته به نقطه شروع تصادفی ممکن است زودتر به پاسخ چالش دست یابد و زمان انجام چالش در کاربران مختلف متفاوت خواهد بود. در این دسته از توابع اگر پاسخ مورد نظر چالش در محدوده خاصی در نظر گرفته نشود ممکن است طول زمان محاسبه را به صورت تئوریک تا ابد طولانی نماید که به آن Unbounded Probabilistic Cost اطلاق و در مقابل اگر محدوده پاسخ مشخص باشد با نام Bounded Probabilistic Cost نامیده می شود.

استفاده از تابع هزینه Trapdoor-free یا تابع هزینه بدون Trapdoor در این مقاله به عنوان نوع بهینه پیشنهاد شده است چرا که در این گونه در زمان تداخل منفعت کاربران و ارگان ها یا سرور ها هیچکدام برتری خاصی در تولید توکن نخواهند داشت. معروف ترین استفاده این نوع تابع در روال استخراج بیت کوین است که تمامی اعضای شبکه در آن به صورت برابر به رقابت می پردازند.

مجتبی عنایتی