Hashcash چیست؟
Hashcash نوعی سیستم اثبات کار است که برای محدود کردن ایمیلهای اسپم و حملات انکار سرویس یا DoS به کار گرفته میشود. Hashcash اخیرا به header بخشی از الگوریتم استخراج بیت کوین نیز شهرت بیشتری به دست آورده است. این سیستم در سال ۱۹۹۷ توسط آدام بک (Adam Back) مطرح شد و بعدها در مقالهای به نام “Hashcash ، مقیاس ضد ” DoS به طور رسمی و با جزییات بیشتری معرفی شد.
ایده مشابه سیستم Hashcash در سال ۱۹۹۲ توسط سینتیا وورک (Cynthia Dwork) و مونی نائور (Moni Naor) طی مقاله “قیمتگذاری از طریق پردازش یا مبارزه با ایمیلهای ناخواسته” عرضه شد اما به دلیل استفاده از چارچوبهای امضای ضعیف بهجای سیستم هش قدرتمندتر که در Hashcash موجود بود، با شکست روبرو شد. Hashcash به نوعی کشف دوباره مفهوم اثبات کار بود.
نحوه عملکرد Hashcash
Hashcash یک نوع الگوریتم اثبات کار رمز ارز است که نیاز به مقادیر زیادی کار محاسبه دارد اما تایید اثبات به صورت کارآمد انجام میشود. اگر بخواهیم Hashcash را در ایمیل استفاده کنیم، برچسب کد شده Hashcash در header ایمیل باید اثبات کند که ماکزیمم زمان پردازنده محاسبهشده بر زمان ایمیل اولویت داشته باشد. به معنای دیگر، اگر فرستنده زمان زیادی برای ساخت برچسب در زمان ارسال ایمیل مصرف کند، بنابراین میتوان ایمیل ارسالی شخص را به header اسپم در نظر گرفت. دریافتکننده ایمیل نیز میتواند در یک زمان بسیار ناچیز برچسب را تایید کند. بااینحال تنها راه شناسایی header ایمیل و اطلاعات مهم آن استفاده از Brute Force و مقادیر تصادفی است تا بتوان گزینه هدف را پیدا کرد. اگرچه تست کردن یک رشته مشخص راحتتر خواهد بود، پاسخهای رضایتبخش آنقدر خاص و کمیاب هستند که بتوان از میان آنها عدد موردنظر را پیدا کرد.
فرضیه اسپمرهایی که مدل کسبوکارشان رابطه مستقیمی با توانایی آنها در ارسال تعداد زیاد ایمیل با هزینه پایین دارد، باوجود مقادیر بسیار اندک هزینه برای هر اسپم نیز میزان سودآوری خود را از دست خواهد داد. دریافتکننده ایمیل میتواند با محاسبه میزان هزینه انجامشده روی هر ایمیل ارسالی، آن را فیلتر کند.
مشخصات فنی
header هر ایمیل میتواند به شکل زیر باشد:
X-Hashcash: 1:20:1303030600:[email protected]::McMybZIhxKXu57jd:ckvi
این header شامل:
- ver : نسخه ساختار Hashcash ، ۱ ( که جایگزین نسخه ۰ میشود )
- bits : میزان بیتهای پیش تصویر موجود در هر هش کد
- date : زمان ارسال پیام در ساختار [[YYMMDD[hhmm[ss
- Resource: دادههای منبع که میتواند به صورت رشته ، آدرس IP یا آدرس ایمیل منتقل شود.
- ext : افزونه (دلخواه است و در نسخه ۱ کنار گذاشتهشده)
- rand : رشتهای از کاراکترهای تصادفی که در ساختار base-64 کد شدهاند.
- counter : شمارنده دودویی که در ساختار base-64 کد شده است.
header شامل ایمیل ارسالکننده، تاریخ ارسال پیام و اطلاعات تایید کننده انجام محاسبات میشود. وجود آدرس ایمیل فرستنده در header، نشاندهنده این مساله است که برای هر header باید محاسبات جداگانهای صورت بگیرد. تاریخ به دریافتکننده اجازه میدهد تا headerهای دریافتی را دستهبندی کند و از یکتا بودن آن نیز اطمینان پیدا کند.
فرستنده
فرستنده یک header درست میکند و شمارنده تصادفی را به آن میافزاید. سپس میزان SHA-1 کد ۱۶۰ بیتی هش header محاسبه میشود ، اگر ۲۰ بیت اول آن ۰ باشد ، این header قابلقبول است، اگر اینچنین نباشد، فرستنده شمارنده را زیاد میکند و مجددا هش را انجام میدهد. بیش از ۲ به توان ۱۶۰ هش متفاوت را میتوان در این روش ساخت که ۲ به توان ۱۴۰ هش موجود قابلپذیرش است. بنابراین میزان شانس تصادفی یک header که ۲۰ عدد صفر در ابتدای خود داشته باشد ۱ در ۲ به توان ۲۰ یا ۱ در ۱۰ به توان ۶ (۱ میلیون) است. میزان زمانی که فرستنده برای به دست آوردن هش موردنظر نیاز دارد باید از مدل توزیع ژئومتریک تبعیت کند. اگر بخواهیم عددی را برای یافتن هش موردنظر در نظر بگیریم، چیزی نزدیک به ۱ ثانیه طول میکشد. تاکنون مدل سریعتری برای یافتن هش مد نظر توسعه داده نشده است.
یک کاربر عادی با سیستم خانگی نمیتواند بهراحتی رشته Hashcash را در زمان مد نظر به دست بیاورد، بااینحال اسپمرها برای ارسال میزان زیاد ایمیل، متحمل سربار زمانی بسیار زیاد خواهند شد.
دریافت کننده
به طور فنی ، پیادهسازی سیستم سمت دریافتکننده به شکل زیر خواهد بود:
- سیستم دریافتکننده ابتدا SHA-1 کد ۱۶۰ بیت هش رشته اصلی را محاسبه میکند. با یک سیستم پردازنده ۱ گیگاهرتزی این عمل در ۲ میکروثانیه انجام میشود که زمانی کمتر از دریافت کل ایمیل ارسالی است. اگر ۲۰ بیت اولی صفر نباشد بنابراین هش موردنظر غیرقابلقبول است. (نسخههای بعد صفرهای بیشتری را برای افزایش سرعت پردازش نیاز خواهند داشت.)
- کامپیوتر دریافتکننده تاریخ را در header بررسی میکند مثلا “”۰۶۰۴۰۸” که به معنی ۸ فوریه سال ۲۰۰۶ است ) اگر تاریخ ارسالی محدودهای بیش از ۲ روز داشته باشد ، غیرقابلقبول است. (میزان زمان ۲ روز، فاصله زمانی و تاخیر زمانی بین سیستم ارسالی و دریافتی را تنظیم میکند.)
- کامپیوتر دریافتکننده آدرس ایمیل ارسالی را که از طریق رشته هش به دست رسیده و با آدرسهای ثبت شده مطابقت دارد بررسی میکند، اگر به عدم تطابق رسید، هش غیرقابلقبول است.
- کامپیوتر دریافتکننده رشته هش ارسالی را درون یک پایگاه داده ذخیره میکند، اگر این هش در پایگاه داده موجود بود (نشاندهنده استفاده مجدد از هش ) ، کد ارسالی غیرقابلقبول است.
اگر هش ارسالی تمامی موارد بالا را با موفقیت پشت سر گذاشت ، یک هش صحیح است. تمامی این تستها در کسری از ثانیه انجام میشود.
عملیات مورد نیاز
زمان مورد نیاز برای محاسبه هش یک تابع نمایی از تعداد بیتهای صفر است. بنابراین میتوان تا جایی بیت صفر اضافه کرد تا میزان هزینه هش موردنظر برای اسپمرها زیاد شود و نتوانند ایمیل اسپم ارسال کنند.
میزان زمان مورداستفاده برای تایید header بدون در نظر گرفتن تعداد بیتهای صفر به خاطر داشتن حداقل یک عملیات هش، همواره یک عدد مشخص است.
مزایا و معایب
سیستم Hashcash نسبت به ریزپرداختهای پیشنهادی روی ایمیلهایی که دارای هزینه واقعی نیستند، مزیتهای زیادی دارد. نه فرستنده و نه دریافتکننده احتیاج به پرداخت هزینه ندارند، بنابراین مشکلات موجود مدیریتی در ریزپرداختهای و مشکلات داخلی شارژ ایمیلها بهطورکلی حذف خواهند شد.
در سوی دیگر Hashcash به میزان قابلتوجهی از منابع حیاتی سیستم برای ارسال ایمیل استفاده میکند، بنابراین تنظیم میزان زمان ارسالی هر ایمیل بسیار سخت میشود. بنابراین سیستمهای قدیمیتر و آن دسته از سیستمهایی که قدرت پردازش پایینی دارند، نمیتوانند چنین گزینهای را برای جلوگیری از دریافت ایمیل اسپم به کار بگیرند.
Hashcash به نوعی یک سیستم بسیار ساده برای پیادهسازی به شمار میرود. هیچ نوع سرور مرکزی نیاز نیست و میتواند به صورت مرحله به مرحله گسترش پیدا کند و حتی میزان اضافی header نیز زمانی که کاربر آن را نتواند پردازش کند، در نظر گرفته نمیشود.
یکی از تحلیلهای محتمل این است که تنها یکی از راههای زیر اتفاق خواهد افتاد: یا ایمیل غیر اسپم به دلیل عدم توانایی زیاد سیستم فرستنده، ارسال نمیشود یا ایمیل اسپم برچسب عدم تایید دریافت میکند و ارسال نمیشود. به طور مثال مراکز ارسال ایمیل بزرگ، زمانی که سرور قصد ارسال تعداد زیادی ایمیل معتبر دارد و یا زمانی که اسپمر ها میخواهند قدرت پردازش بات نت ها و کلاسترها (Clusters) را به صورت ناگهانی افزایش دهند.
بات نت ها اکثرا سریعتر منقضی میشوند چرا که پردازنده را به سرعت درگیر کرده و کاربر متوجه وجود آنها میشود، اما درهرصورت مشکلات و موانع بسیاری را برای توسعه Hashcash به وجود میآورند.
مشکل به وجود آمده دیگر این است که کامپیوترها بر اساس قانون مور هر روز سریعتر میشوند. بنابراین سختی محاسبات نیز باید افزایش پیدا کند. اگرچه حتی کشورهای درحالتوسعه نیز از سختافزارهای قدیمی استفاده میکنند و نمیتوانند به سرعت با این مساله همگام شوند. البته در کشورهای درحالتوسعه، کاربرانی نیز وجود دارند که هزینه خرید سیستمهای قدرتمندتر را ندارند.
همچون Hashcash ، رمز ارزها نیز برای اثبات کار از عملیات هش استفاده میکنند. رشد رمز ارزها تقاضای دستگاه های ماینر ASIC را افزایش داده است، با این که اکثر رمز ارزها از الگوریتم های SHA 256 بهره میبرند، دستگاه مشابه ماینر ASIC باید Hashcashی را بسازند تا بتواند سه مرتبه سریعتر از یک سیستم کاربری معمولی کار کرده و میزان محاسبات را برای اسپمرها سخت تر کند.
اپلیکیشن ها
استخراج بیت کوین
بر خلاف روال Hashcash در ارسال ایمیلها که نیاز به تنظیم شدن به صورت دستی داشتند تا از ورود اسپمر جلوگیری کنند، شبکه بیت کوین از سیستمهای متفاوت بر پایه هش بهره می برد تا یک نوع ماینینگ رقابتی را شکل دهد. هر ماینر بیت کوین برنامهای است که تراکنش های تایید نشده را از معاملات رمز ارز در شبکه جمع آوری میکند و این اطلاعات به همراه یک سری دیگر از دادهها میتواند پاداشی را به ماینر برگرداند اما بلاک زمانی توسط شبکه تایید میشود که ماینر بتواند عدد موردنظر را با احتساب بیتهای صفر روی بلاک و بر اساس سختی هدف، پیدا کرده باشد. بلاک ها روی شبکه بلاک چین به دست ماینرها میرسد و این روند با ساخته شدن و معامله هر بیت کوین مجددا شکل میگیرد.
در حالی که Hashcash از الگوریتم SHA-1 استفاده میکند و به ۲۰ بین از ۱۶۰ بیت هش (به header بیت ۰) نیاز دارد، اثبات کار بیت کوین از دو هش SHA-256 بهره می برد و حد اقل به ۳۲ بیت ابتدایی از ۲۵۶ بیت هش (به header بیت ۰) نیاز خواهد داشت. بااینحال شبکه بلاک چین به صورت دورهای سختی استخراج را افزایش میدهد تا میانگین نرخ ساخته شدن هر بلوک را روی ۶ ساعت نگه دارد. در ابتدای سال ۲۰۱۹ تعداد ۵۵۶۶۷۸ بلاک موجود بیت کوین روی شبکه نیاز به یک سیستم قدرتمند برای حل داشتند، به صورتی که سختی آن به ۷۴ بیت صفر در ۲۵۶ بیت می رسید.
فیلتر کردن اسپم ها
Hashcash از یک راه حل جامع برای انجام روش های صحیح و خطا در فیلترگذاری اسپم استفاده میکند و این در حالی است که کاربرانی که سیستمهای قدرتمند ندارند، نمیتوانند این روش را به صورت عملی پیاده کنند. برنامه SpamAssassin از نسخه ۲۷ میتواند برچسبهای Hashcash را شناسایی کرده و یک نوع امتیاز منفی به هر برچسب ارسالی اختصاص دهد. بااینحال اگرچه افزونه Hashcash در ابتدا به صورت خودکار فعال نیست اما برای انجام کار نیاز به یک سری آدرسهای الگو بر اساس منابع خود خواهد داشت.
کاربران ایمیل
پروژه Penny Post که در SourceForge منتشر شد، Hashcash را در ایمیل موزیلا (Thunderbird) پیادهسازی میکند. این پروژه بر اساس این مساله که برای هر کاربری که بخواهد ایمیل ارسال کند فقط باید یک پنی بپردازد، پایهگذاری شده است.
ایمیل پست مارک (Email Postmark)
از سوی دیگر مایکروسافت یک نرم افزار (منسوخ شده) متن باز و مشابه Hashcash به نام ایمیل پست مارک را به header بخشی از سیستم CSRI (طرح هماهنگ شده کاهش اسپم) معرفی کرده بود. ایمیل پست مارک بر اساس ساختار ایمیلهای مایکروسافت مثل Exchange ،Outlook و Hotmail ساخته شد. تفاوت ساختاری بین ایمیل پست مارک و Hashcash این است که ایمیل پست مارک بدنه ایمیل را نیز هش خواهد کرد و از الگوریتم اصلاح شده SHA-1 و همچنین زیر ساخت های دیگر برای کاهش متغیر اثبات کار استفاده میکند.
بلاگ ها
درست همانند ایمیل، بلاگ ها نیز گاها دچار اسپم میشوند. برخی از بلاگرها اسکریپت هایی را به زبان جاوا اسکریپت می نویسند تا بتوانند جلوی اسپمرها را بگیرند. برخی از اسکریپت ها مثل wp-hashcash نیز خود Hashcash را پیاده میکنند اما در عوض برای ساخت کلید مرتبط از یک آبفیوزکیت (obfuscation) جاوااسکریپت بهره میبرند. این روال از الگوریتم های Hashcash یا برچسب Hashcash استفاده نخواهد کرد ولی به پردازش بسیار سنگینی نیاز دارد.
مالکیت معنوی
Hashcash یک نوع اختراع ثبت شده نیست و یا مرجع پیادهسازی ندارد و همچنین این که سایر پیادهسازیها نیز نرم افزارهای متن باز هستند. این نرم افزار روی بسیاری از نسخههای لینوکس به صورت پیشفرض پیاده شده است.
کلید خصوصی RSA نوعی مالکیت معنوی را در سازمان IETF در مورد مشکلات استانداردهای موجود RFC برای مشتریان به ثبت رسانده است. اسناندارد RFC در header و متن از Hashcash استفاده کرده اما مکانیزم مورد استفاده روی آن بیشتر یک نوع چالش فعال برای مشکلات مشتریان خواهد بود. Hashcash به نوعی یک سیستم غیر تعاملی است بنابراین نمیتوان با این راهکارها آن را هماهنگ کرد. در هر حال، سیستم مالکیت معنوی RSA نمیتواند روی Hashcash پیاده شود چرا که این سیستم قبل از ثبت اختراع client-puzzles راه اندازی شده بود.