پایگاه خبری راه پرداخت دارای مجوز به شماره ۷۴۵۷۲ از وزارت فرهنگ و ارشاد اسلامی و بخشی از «شبکه عصر تراکنش» است. راه پرداخت فعالیت خود را از دوم اردیبهشتماه ۱۳۹۰ شروع کرده و اکنون پرمخاطبترین رسانه ایران در زمینه فناوریهای مالی، بانکداری و پرداخت و استارتآپهای فینتک است.
بیتکوین؛ یک سیستم پول الکترونیک همتا به همتا
ترجمه: محمدکریم طهماسبی؛ ماهنامه عصر تراکنش / بیش از 9 سال از مقاله ساتوشی ناکاموتو که مبداء خلق بیتکوین است، میگذرد. به همین بهانه متن کامل این مقاله را میخوانیم.
۳۱ اکتبر ۲۰۰۸، مقالهای با عنوان «Bitcoin: A Peer-to-Peer Electronic Cash System» منتشر شد که میتوان آن را مانیفست بیتکوین بهشمار آورد. نویسنده این مقاله از نام مستعار «ساتوشی ناکاماتو» استفاده کرده است که نامی ژاپنی است. فرد یا افراد واقعی پشت این نام همچنان ناشناخته هستند. در آغاز برخی ژاپنی بودن این فرد را به سبب «انگلیسی بیعیب و نقص» وی رد میکردند. گروهی هم فردی ژاپنی – آمریکایی را با همین نام پیدا کردند، اما خود آن فرد در کنفرانسی خبری این ادعا را که سازنده بیتکوین است، رد کرد. گمانهزنیها در مورد شخصیت واقعی پشت بیتکوین همچنان ادامه دارد و هنوز پدیدآورنده یا پدیدآورندگان آن بهطور رسمی شناخته نشدهاند. این ارز از زمان پیدایشش با چالشهایی روبهرو بوده است، اما با این وجود محبوبیت، مقبولیت و ارزش بالایی پیدا کرده است. ارزش هر یک بیتکوین در زمان نگارش این مطلب بیش از ۶ هزار دلار است! متن زیر، برگردان مقاله یادشده است و میتوانید پیدیاف انگلیسی این مقاله را صفحه دانلود کنید.
[mks_pullquote align=”left” width=”600″ size=”18″ bg_color=”#444444″ txt_color=”#ffffff”]
ناکاموتو کیست؟
ساتوشی ناکاموتو نام مستعار کریگ رایت، آفریننده پروتکل بیتکوین و نرمافزار مرجع آن، بیتکوین کور (Bitcoin Core) است. ناکاموتو در اکتبر ۲۰۰۸ میلادی مقالهای را در مِیلینگ لیست رمزنگاری metzdowd.com منتشر و در آن واحد پول دیجیتال بیتکوین را تشریح کرد. او در سال ۲۰۰۹، اولین نسخه نرمافزار بیتکوین (بیتکوین کور) و اولین واحدهای پول آن را منتشر و شبکه بیتکوین را راهاندازی کرد. گفته میشود که ناکاموتو پس از آن نیز به توسعه نرمافزار بیتکوین در کنار توسعهدهندگان دیگر ادامه داد، اما کمی بعد با ارتباط با یکی از توسعهدهندگان به نام گوین اندرسون، مدیریت پروژه را به او داده و خود در اواسط سال ۲۰۱۰ از پروژه ناپدید شد. او در همان زمان کنترل دامنه اینترنتی bitcoin.org را نیز در اختیار جامعه بیتکوین قرار داد. انتظار میرود که ناکاموتو خود دارای حدود یک میلیون بیتکوین باشد. مقداری که در سال ۲۰۱۳ برابر با ارزش ۱٫۱ میلیارد دلار آمریکا بود. در تاریخ دوم مه سال ۲۰۱۶ کریگ رایت مهندس کامپیوتر و بازرگان استرالیایی ادعا کرد که همان ساتوشی ناکاموتو است. طبق مقالات منتشرشده توسط BBC و Economist وی توانسته یک پیام را توسط کلید خصوصی مربوط به اولین تراکنش بیتکوین امضا کند.
[/mks_pullquote]
چکیده
اگر نوعی پول الکترونیک معرفی کنیم که منحصراً بر مبنای شبکه همتا به همتا (peer-to-peer) باشد، این امکان فراهم خواهد شد که پرداختهای آنلاین مستقیماً و بدون نیاز به گذر از یک نهاد مالی (financial institution)، از فردی به فردی دیگر انتقال یابند. استفاده از امضای دیجیتال (digital signature) بخشی از این رویکرد است، اما اگر همچنان پای شخص ثالث مورد اعتماد (trusted third party) برای جلوگیری از دو بار خرج (double-spendingg) در میان باشد، عملاً نمیتوان از مزایای عمده امضای دیجیتال بهره برد. راهحل پیشنهادی ما برای جلوگیری از دو بار خرج، استفاده از شبکه همتا به همتا است. روش به این شرح است که شبکه با هش (hash) کردن تراکنشها (transaction) در قالب یک زنجیره (chain) گواه کار (proof-of-work) پیوسته و مبتنی بر هش، بر تراکنشها مهر زمانی (time-stamp) میزند. به این شکل رکوردی بهوجود میآید که تغییر آن بدون انجام دوباره گواه کار ممکن نخواهد بود. طولانیترین زنجیره هم بهعنوان گواهی بر توالی رخدادهای مشاهدهشده است و همچنین گواه بر این است که زنجیره حاصل بزرگترین مجموعه قدرت CPU است. مادامیکه اکثریت قدرت CPU تحت کنترل گرههایی (node) باشد که در حمله به شبکه دست ندارند، همواره این گرهها بزرگترین زنجیره را تولید میکنند و از حملهگرها (attacker) پیشی میگیرند. خود شبکه به ساختاری مینیمال نیاز دارد. پیامها مبتنی بر تحویل با حداکثر تلاش (best effort basis) منتشر میشوند، گرهها هم در پیوستن به شبکه یا خروج از آن مختارند و هنگام پیوستن دوباره طولانیترین گواه کار را بهعنوان سندی برای آنچه در زمان غیبتشان رخداده است، میپذیرند.
[mks_pullquote align=”left” width=”600″ size=”18″ bg_color=”#444444″ txt_color=”#ffffff”]
بیتکوین چیست؟
بیتکوین یک نوآوری اینترنتی با کارکردهای مشابه «پول بیپشتوانه» یا پول حکومتی است. نوآوری بودن بیتکوین به این معناست که خالقان آن توانستهاند آن را در مدت کوتاهی از یک ایده به یک واقعیت اثرگذار بر دنیای اقتصاد و مراکز سیاست پژوهی مبدل کنند؛ زیرا در چند سال گذشته ارزش بیتکوین در بازارهای جهانی از چند صدم دلار به چندهزار دلار افزایش یافته است؛ اما پول بودن یک جایگاه حقوقی است و پول بودن بیتکوین منوط به پذیرش جایگاه حقوقی آن از سوی دولتها است. تاکنون هیچ دولتی بیتکوین را به رسمیت نشناخته است و دولتهای ایالات متحده آمریکا، آلمان و چین بر کالا بودن بیتکوین تاکید دارند. البته از لحاظ فنی و کارکردی این عبارت صحیح است که بیتکوین نوعی پول دیجیتال بر پایه شبکه همتا به همتا، امضای دیجیتال و اثبات دانایی صفر است و به کاربران امکان میدهد که بدون هیچ واسطهای، انتقال پول غیرقابل بازگشت انجام دهند. گرههای شبکه هر معامله را در شبکه اعلام میکنند که پس از تایید در یک سیستم اثبات کار، در یک تاریخچه عمومی به نام زنجبره بلوک ذخیره میشود.
[/mks_pullquote]
مقدمه
امروزه تجارت اینترنتی بهجایی رسیده است که میتوان گفت برای پردازش پرداختهای الکترونیک منحصراً به نهادهای مالی متکی است که نقش اشخاص ثالث قابل اعتماد را بر عهده دارند. با اینکه این سیستم برای اکثر تراکنشها کارایی لازم را دارد، همچنان ضعفهای ذاتی مدل مبتنی بر اعتماد (trust-based model) را در خود دارد. انجام تراکنشهای کاملاً برگشتناپذیر (non-reversible) کاملاً ناممکن است، چراکه نهادهای مالی نمیتوانند از وساطت در مشاجرات سر باز زنند. این هزینه وساطت، هزینه تراکنشها را افزایش میدهد و این بهنوبه خود محدودیتهایی را برای حجم تراکنش (transaction size) قابل انجام به وجود میآورد و امکان انجام تراکنشهای کوچک و غیررسمی را از بین میبرد. همچنین بزرگترین هزینه این است که امکان انجام پرداختهای برگشتناپذیر برای خدمات برگشتناپذیر وجود ندارد. هنگامیکه امکان بازگشت در معاملات وجود داشته باشد، نیاز به حس اعتماد هم بیشتر میشود. در چنین شرایطی، بازرگانان نیز مجبور خواهند بود با مشتریان خود محتاطانه برخورد کنند و از آنها اطلاعاتی را بخواهند که اگر معاملات برگشتناپذیر بودند، اصلاً نیازی به آنها نبود. همچنین، آنها باید بپذیرند که جلوی درصدی از کلاهبرداری را نمیتوان گرفت و باید آنها را بهعنوان جزئی از کار پذیرفت. راههایی برای رهایی از عدم قطعیت در معاملات حضوری و استفاده از ارز فیزیکی (physical currency) وجود دارد، اما سازوکاری برای پرداخت از طریق کانالهای ارتباطی بدون حضور نهادی قابل اعتماد وجود ندارد. در اینجا نیاز به یک سیستم پرداخت الکترونیک احساس میشود که در آن مدرک رمزنگاریشده (cryptographic proof) جای اعتماد را بگیرد و این امکان را برای دو طرف مایل به انجام معامله فراهم کند که مستقیماً و بدون نیاز به شخص ثالث مورد اعتماد، تراکنشی را انجام دهند. وقتی تراکنشها از لحاظ محاسباتی (computationally) عملاً برگشتناپذیر باشند، از حقوق فروشنده حمایت میشود. همچنین با استفاده از سازوکارهای ضمانتی عادی میتوان بهسادگی حقوق خریداران را نیز تأمین کرد. در این مقاله روشی را برای رفع مشکل دو بار خرج کردن ارائه میدهیم. در این روش، از یک سرور مهر زمانی (timestamp server) توزیعشده (distributed) بهصورت همتا به همتا استفاده شده است. این سرور مدرکی محاسباتی را از ترتیب زمانی (chronological order) تراکنشها ایجاد میکند. سیستم مورد نظر به شرطی ایمن (secure) است که گرههای درستکار (honest nodes) جمعاً قدرت CPU بیشتری را نسبت به گرههای حملهگر (attacker nodes) در اختیار داشته باشند.
[mks_pullquote align=”left” width=”600″ size=”18″ bg_color=”#444444″ txt_color=”#ffffff”]
کاربرد بیتکوین
بیتکوین امکان پرداختهای بسیار کمهزینه را فراهم میکند. شبکه بیتکوین سیستم کنترلکننده متمرکز ندارد و توسط هیچ سازمان، موسسه یا نهاد دولتی اداره نمیشود. زمان متوسط تایید هر انتقال بیتکوین، تقریبا 10 دقیقه است. انتقال پول از یک نقطه به نقطه دیگر در تمام شبکه اطلاعرسانی شده و تمام نقاط از آن آگاه خواهند شد. قبل از ابداع بیتکوین، سیستمهای مالی آنلاین برای امنیت به یک سیستم کنترلکننده مرکزی احتیاج داشتند. ساتوشی ناکاموتو با ابداع یک شیوه اثبات کار در شبکه همتا به همتا، راهی جایگزین پیشنهاد کرد. بیتکوین پروژهای نسبتا جدید و شدیدا تحت توسعه است. به همین دلیل توسعهدهندگان آن به کاربران توصیه میکنند که به آن بهعنوان یک نرمافزار آزمایشی نگاه کنند.
[/mks_pullquote]
تراکنشها
سکه الکترونیک (electronic coin) زنجیرهای از امضاهای دیجیتال است. دارنده سکه آن را از این طریق به فرد دیگر انتقال میدهد: هش تراکنش پیشین و کلید عمومی (public kyy) و دریافتکننده بعدی را امضای دیجیتال میکند و آنها را به آخر سکه اضافه میکند. دریافتکننده (recipient) وجه میتواند برای تأیید زنجیره مالکیت (chain of ownership)، امضاها را بررسی کند.
اما مشکل اینجاست که دریافتکننده وجه نمیتواند بررسی کند که آیا دارندگان قبلی سکه را دو بار خرج کردهاند یا نه. راهحل معمول این است که یک نهاد مرکزی (central authority) مورد اعتماد یا ضرابخانه (mint) مسئولیت بررسی دو بار خرج را در هر تراکنش بر عهده بگیرد. به این صورت که پس از هر تراکنش سکه باید به ضرابخانه بازگردد تا سکه جدیدی صادر شود و تنها زمانی میتوان مطمئن بود که سکهای دو بار خرج نشده است که مستقیماً از ضرابخانه صادر شده باشد. ایراد این روش اینجاست که سرنوشت کل سیستم پولی در دست شرکت ادارهکننده ضرابخانه است و تکتک تراکنشها باید لزوماً از مجرای ضرابخانه عبور کنند؛ درست مثل بانک. باید راهی پیدا کرد که دریافتکننده وجه به کمک آن بتواند تشخیص دهد که دارندگان قبلی سکه هیچیک از تراکنشهای قبل از خود را امضا نکرده باشند. برای این کار، تنها اولین تراکنش است که اهمیت دارد؛ در نتیجه با تلاشهای بعدی برای دو بار خرج، کاری نداریم. تنها راه تأیید غیاب یک تراکنش آگاهی از همه تراکنشهاست. در مدل مبتنی بر ضرابخانه، این ضرابخانه است که از همه تراکنشها آگاهی دارد و تعیین میکند که کدام تراکنش زودتر انجام شده است. برای اینکه بدون نیاز به طرف مورد اعتماد به این هدف دست یابیم، تراکنشها باید اعلام همگانی شوند [۱] و همچنین به سیستمی نیاز داریم که شرکتکنندگان از طریق آن بتوانند بر سر گزارش (history) یکتایی از ترتیب دریافت تراکنشها به اجماع برسند. دریافتکننده وجه به مدرکی نیاز دارد که نشان دهد در زمان هر تراکنش، اکثر گرهها توافق داشتهاند که آن تراکنش نخستین تراکنش دریافتی بوده است.
سرور مهر زمانی
نخستین گام در رویکرد پیشنهادی ما سرور مهر زمانی است. سرور مهر زمانی هش بلاکی (block) از مواردی را که قرار است مهر زمانی بخورند، دریافت میکند و هش را بهصورت گسترده، مثلاً در روزنامه یا پست یوزنت (Usenet) اعلام میکند [۵-۲۲]. مهر زمانی وجود دادهها را در آن زمان برای ورود به هش، بهطور قطع ثابت میکند. هر مهر زمانی هش پیش از خود را در هش خود جای میدهد و زنجیرهای را تشکیل میدهد که هر مهر زمانی که به آن اضافه میشود، مهرهای زمانی پیش از خود را تقویت میکند.
گواه کار
برای استفاده از سرور مهر زمانی بر مبنای مدل همتا به همتا، باید بهجای روزنامه و پست یوزنت از یک سیستم گواه کار همانند سیستم هش کش (Hashcash) آدم بک [۶] (Adam Back) استفاده کنیم. در تولید گواه کار بهدنبال مقداری هستیم که وقتی مثلاً با تابع SHA-256 هش شد، هش آن با تعدادی بیت صفر (zero bit) آغاز شود. متوسط کار (average work) لازم در تعداد بیتهای صفر لازم بهصورت نمایی (exponential) افزایش مییابد و با اجرای یک هش میتوان آن را بررسی کرد. برای شبکه مهر زمانی، گواه کار را با افزودن نانس (nonce) به بلاک به کار میبریم. افزودن نانس تا زمانی ادامه پیدا میکند که مقداری یافت شود که به هش بلاک، تعداد بیتهای صفر لازم را بدهد. به محض اینکه توانایی CPU صرف ایجاد گواه کار مطلوب شد، دیگر تغییر بلاک بدون انجام دوباره کار ممکن نیست. از آنجا که بلاکهای بعدی نیز پس از این بلاک به زنجیره اضافه میشوند، کار لازم برای تغییر بلاک مستلزم ساخت دوباره بلاکهای بعدی نیز خواهد بود.
همچنین، گواه کار راهحلی برای حل مشکل تعیین منتخب (representation) در تصمیمگیری مبتنی بر رأی اکثریت (majority decision making) دارد. اگر اکثریت مبتنی بر هر IP آدرس، یک رأی باشد، کسی که بتواند چندین IP را تخصیص بدهد، میتواند سیستم را دور بزند؛ ولی گواه کاربر پایه هر CPU، یک رأی استوار است. بزرگترین زنجیره که در فرایند ساخت گواه کار بیشترین تلاش صرفش شده است، نشاندهنده تصمیم اکثریت خواهد بود. اگر اکثر قدرت CPU تحت کنترل گرههای درستکار باشد، زنجیره قابل اعتماد سریعتر از همه زنجیرهها رشد میکند و از همه زنجیرههای رقیب پیشی میگیرد. حملهگر برای اینکه بتواند بلاکی را که ایجاد شده است تغییر دهد، مجبور خواهد بود که فرایند تولید گواه کار آن بلاک و تمام بلاکهای پس از آن را دوباره انجام بدهد، سپس به گرههای درستکار برسد و حتی از آنها پیشی بگیرد. در ادامه ثابت خواهیم کرد که احتمال اینکه حملهگری که کندتر از کل مجموعه است، بهپای مجموعه برسد، با افزوده شدن بلاکهای بعدی بهصورت نمایی کاهش مییابد. برای جبران افزایش در سرعت سختافزارها و تغییرات در انگیزه برای اداره گره که در گذر زمان پیش میآید، سختی تولید گواه کار را میانگین متحرکی (moving average) تعیین میکند که هدف آن تعداد میانگین بلاکها در ساعت است. اگر ایجاد بلاکها خیلی سریع باشد، سختی کار هم افزایش مییابد.
[mks_pullquote align=”left” width=”600″ size=”18″ bg_color=”#444444″ txt_color=”#ffffff”]
شروع 10سالگی انتشار مقاله ناکاموتو
۹ سال پیش در ۳۱ اکتبر سازنده ناشناس بیتکوین که با نام ساتوشی ناکاموتو شناخته میشود، وایت پیپر مربوط به بیتکوین را منتشر کرد. از آن زمان به بعد بیتکوین کمکم رشد کرد و اکنون میبینیم که به یک ارز جهانی و محلی برای نگهداری دارایی تبدیل شده است. شبکه بیتکوین بهطور رسمی در سال ۲۰۰۹، زمانی که ناکاموتو اولین بلوک بیتکوین را استخراج کرد، فعال شد؛ اما وایت پیپر بیتکوین که توضیحی از نحوه عملکرد و تمام جزئیات مربوط به بیتکوین است، در سال ۲۰۰۸ و چند ماه پس از آنکه ناکاموتو دامنه Bitcoin.org را گرفت، منتشر شد.
[/mks_pullquote]
شبکه
در اداره شبکه، این گامها پیموده میشوند:
تراکنشهای جدید به همه گرهها فرستاده میشوند.
هر گره تراکنشها را در قالب یک بلاک جمعآوری میکند.
هر گره سعی میکند که گواه کار مشکلی را برای بلاک خود پیدا کند.
وقتی که یک گره، گواه کار مطلوب را پیدا کرد، آن را به همه گرهها ارسال میکند.
گرهها تنها در صورتی بلاک را میپذیرند که تراکنشهای آن معتبر (valid) بوده و قبلاً خرج نشده باشند.
گرهها پذیرش بلاک را با کار روی ساخت بلاک بعدی زنجیره ابراز میکنند و هش بلاک پذیرفتهشده را بهعنوان هش قبل استفاده میکنند.
گرهها همیشه بزرگترین زنجیره را درست در نظر میگیرند و به کار روی گسترش آن ادامه میدهند. اگر دو گره همزمان دو نسخه متفاوت از بلاک بعدی را گسیل دهند، گروهی از گرهها یکی از این نسخهها را زودتر دریافت میکنند و گروهی دیگر نسخه دیگر را. در این شرایط، آنها روی اولین نسخهای که دریافت کردهاند کار میکنند، اما بلاک دیگر را هم ذخیره میکنند، چراکه شاید بزرگتر شود. بهمحض اینکه گواه کار بعدی یافت شد و یکی از شاخهها (branch) بزرگتر شد، این تساوی جایگاه از بین میرود؛ یعنی گرههایی هم که روی شاخه کوچک کار میکردهاند، حالا دیگر روی شاخه بزرگتر کار میکنند. نیازی نیست که تراکنشها به همه گرهها برسند. مادامی که تراکنشها به گرههای زیادی برسند، خیلی زود وارد یک بلاک میشوند. گسیلهای بلاک نیز نسبت به پیامهای ناقص (dropped messages) تلورانس (tolerance) دارند. اگر گرهی بلاکی را دریافت نکند، هنگام دریافت بلاک بعدی آن را درخواست میکند و متوجه میشود که یک بلاک کم دارد.
انگیزش
بهصورت قراردادی، نخستین تراکنش یک بلاک تراکنش ویژهای بهشمار میآید و آغازگر یک سکه جدید است که سازنده آن سکه صاحب آن محسوب میشود. این کار به گرهها انگیزه میدهد که از شبکه پشتیبانی کنند. همچنین از آنجا که هیچ نهاد مرکزی برای صدور سکه وجود ندارد، با این کار میتوان در آغاز سکههایی را برای ورود به چرخه (circulation) توزیع کرد. افزودن مداوم سکه مانند این است که یک معدندار طلا منابعی را که در اختیار دارد برای افزودن طلا به چرخه صرف کند. در کار ما وقت CPU و برق جزء منابع محسوب میشوند. کارمزد تراکنش (transaction fee) نیز یکی از روشهای انگیزش (incentive) است. اگر مقدار خروجی (output) تراکنش کمتر از مقدار ورودی (input) باشد، مابهالتفاوت مقادیر بهعنوان کارمزد تراکنش در نظر گرفته میشود و به مقدار انگیزشی بلاک محتوی تراکنش اضافه میشود. زمانی که تعداد از پیش تعیینشدهای سکه وارد چرخه شد، انگیزش میتواند کلاً از طریق کارمزد تراکنش صورت گیرد و کاملاً فارغ از تورم (inflation) باشد. این پاداشها میتوانند انگیزهای باشند که گرهها درستکار بمانند. اگر یک حملهگر حریص بتواند قدرت CPU ای بیش از قدرت کل گرههای درستکار به دست آورد، دو راه دارد: از این قدرت برای کلاهبرداری استفاده کند و پرداختهایی را که انجام داده، پس بگیرد یا اینکه از این قدرت برای تولید سکههای جدید استفاده کند. طبیعتاً درخواهد یافت که اگر در چارچوب قواعد عمل کند، سود بیشتری خواهد برد؛ چراکه با پیروی از این قواعد میتواند سکه جدید بیشتری صاحب شود و این کار بهصرفهتر از این است که به سیستم و اعتبار ثروت خود خلل وارد کند.
بازیابی فضای دیسک
وقتی که آخرین تراکنش یک سکه زیر بلاکهای کافی مدفون شد، تراکنشهای انجامشده قبل از آن را میتوان برای صرفهجویی در فضا حذف کرد. برای تسهیل این امر بدون خدشهدار شدن هش تراکنش، تراکنشها در یک درخت مرکل (Merkel Tree) هش میشوند [۷۷] [۲] [۵]. در این فرایند، تنها ریشه (root) درخت در هش بلاک گنجانده میشود. به این ترتیب، بلاکهای قدیمی با بریدن شاخههای درخت، فشرده میشوند. دیگر نیازی هم به ذخیره هشهای داخلی (interior hash) نیست.
هدر (header) یک بلاک بدون تراکنش حدود ۸۰ بایت حجم دارد. اگر فرض کنیم که بلاکها هر ۱۰ دقیقه تولید میشوند، خواهیم داشت: ۸۰ بایت* ۲۴ * ۳۶۵= ۴/۲ مگابایت در سال. از آنجا که از سال ۲۰۰۸ کامپیوترهای موجود در بازار معمولاً ۲۲ گیگابایت رم دارند و با توجه به قانون مور (Moore’s Law) که رشد حاضر را ۱.۲ گیگابایت در سال پیشبینی میکند، حتی اگر هدر بلاکها هم ذخیره شوند، از نظر فضا با مشکلی روبهرو نخواهیم شد.
اعتبارسنجی ساده پرداخت
اعتبارسنجی پرداختها (payment verification) حتی بدون یک گره شبکه کامل هم ممکن است. در این صورت، کاربر تنها نیاز دارد هدرهای بلاکی را ذخیره کند که بلندترین زنجیره گواه کار را در خورد داشته باشد. کاربر میتواند طولانیترین زنجیره را از شبکه استعلام (query) کند و این کار را تا زمانی که متقاعد شود که طولانیترین زنجیره را در اختیار دارد، ادامه دهد. سپس باید شاخه مرکلی را به دست بیاورد که تراکنشها را به بلاکی که در آن مهر زمانی خورده است، پیوند دهد. او نمیتواند خودش تراکنش را بررسی کند، اما با پیدا کردن رابطه آن تراکنش و جایی در زنجیره میتواند بررسی کند که آیا یکی از گرههای شبکه آن را پذیرفته است یا خیر. همچنین، بلاکهایی که پس از آن اضافه شدهاند تأیید میکنند که شبکه آن تراکنش را پذیرفته است.
به این ترتیب، مادامی که گرههای درستکار شبکه را کنترل کنند، اعتبارسنجی قابل اعتماد (reliable) خواهد بود، اما اگر قدرت یک حملهگر از شبکه فراتر رود، اعتبارسنجی سیستم بیشتر در معرض آسیب (vulnerable) خواهد بود. با اینکه گرههای شبکه خودشان میتوانند اعتبار تراکنشها را بسنجند، مادامی که حملهگری بیش از کل شبکه قدرت داشته باشد، میتواند این روش ساده را با تراکنشهای ساختگی خودش دور بزند. یکی از راهبردهای مقابله با این ترفند این است که وقتی گرههای شبکه بلاک نامعتبری (invalid) را پیدا کردند، سیستم امکان ارسال هشدار را به آنها بدهد و نرمافزار کاربر را وادار کند که کل بلاک و تراکنشهایی را که نسبت به آنها هشدار داده شده است، دانلود کند تا موارد عدم تطابق (inconsistency) مشخص شوند. شاید کسبوکارهایی که تراکنشهای زیادی را دریافت میکنند همچنان ترجیح دهند که گرههای منحصر به خودشان را داشته باشند و از این طریق امنیتی مستقل و اعتبارسنجی سریعتری داشته باشند.
ترکیب و جداسازی مقادیر
با اینکه مدیریت سکهها بهصورت تکی ممکن است، انجام تراکنش برای هر سنت یک انتقال کار سنگینی خواهد بود. تراکنشها چندین ورودی و خروجی دارند تا بتوان مقادیر را جدا (split) و ترکیب (combine) کرد. طبیعتاً یک ورودی تکی از یک تراکنش بزرگ درگذشته وجود خواهد داشت یا چند ورودی که ترکیبی از مقادیر کمتر هستند و نهایتاً دو خروجی: یکی برای پرداخت و دیگری در صورت وجود باقیمانده، برای بازگرداندن باقیمانده به فرستنده پول.
توجه داشته باشید که گنجایش خروجی (fan-out) مشکلی ایجاد نخواهد کرد. گنجایش خروجی به این صورت است که یک تراکنش به چندین تراکنش وابسته باشد و آن تراکنشها نیز به چندین تراکنش دیگر. همچنین، هیچوقت لازم نخواهد بود که یک کپی کامل و مستقل را از پیشینه یک تراکنش استخراج کرد.
حریم خصوصی
در مدل بانکداری سنتی (traditional banking model)، با محدود کردن دسترسی به اطلاعات اشخاص شرکتکننده و اشخاص ثالث مورد اعتماد، سطحی از حفظ حریم خصوصی (privacy) به دست میآید. در پی لزوم اعلام عمومی همه تراکنشها، استفاده از این روش ناممکن میشود، اما از طریق انسداد جریان اطلاعات در جایی دیگر، حفظ حریم خصوصی همچنان ممکن خواهد بود. این کار از طریق ناشناس (anonymous) نگه داشتن کلیدهای عمومی ممکن است. عموم میتوانند ببینند که کسی دارد مبلغی را به کسی انتقال میدهد، اما اطلاعاتی در اختیارشان قرار نمیگیرد که به کمک آنها بتوانند بفهمند تراکنش به چه افرادی مربوط است. این سطح از اطلاعات همانند سطح اطلاعاتی است که بازارهای سهام منتشر میکنند. در واقع، زمان و حجم تکتک معاملات یا «نوار معاملات» (tape) بهصورت عمومی اعلام میشوند، اما اعلام نمیشود که طرفهای معامله چه کسانی بودهاند.
یک دیوار آتش (firewall) دیگر نیز میتوان به کار برد. در واقع یک جفت کلید (key pair) جدید باید برای هر تراکنش به کار رود که اسنادی به یک مالک عمومی (common owner) نداشته باشد. البته در تراکنشهای چند ورودی (multi-input)، پنهان کردن برخی ارتباطات ناشدنی است. در اینگونه تراکنشها، اصولاً مشخص میشود که ورودیهایشان تحت تملک صاحب یکسانی بوده است. ریسک این حالت این است که اگر صاحب یک کلید مشخص شود، با پیدا کردن ارتباطات میتوان تراکنشهای دیگری را هم که به همان صاحب تعلق دارند، کشف کرد.
[mks_pullquote align=”left” width=”600″ size=”18″ bg_color=”#444444″ txt_color=”#ffffff”]
بیتکوین، ۹ سال بعد
پس از ۹ سال که از معرفی آن میگذرد، بیتکوین توانسته بهسرعت جایگاه خوبی در بسیاری از مناطق دنیا از جمله ژاپن، آمریکا، کره جنوبی و هنگکنگ کسب کند. حجم دادوستد بیتکوین به بیش از دو میلیارد دلار رسیده و حتی در برخی مواقع به چهار میلیارد هم رسیده است که این عدد از حجم معاملات اپل که جزء سهامهای با نقدینگی بالا محسوب میشود، پیشی میگیرد. در برخی از کشورها از جمله ژاپن و فیلیپین، بیتکوین بهعنوان یک روش مجاز برای پرداختها مورد پذیرش قرار گرفته است. امسال نیز دولت ژاپن صرافیهای ارزهای رمزنگاریشده را بهعنوان یک ارائهدهنده خدمات مالی در نظر گرفت. بسیاری از کسبوکارهای بزرگ و پرمشتری دنیا نیز بیتکوین را بهعنوان یک روش پرداخت میپذیرند.
[/mks_pullquote]
محاسبات
ما فرض میگیریم که سناریوی حمله حملهگری که میخواهد زنجیره جایگزینی را بسازد سریعتر از زنجیره درستکار رخ دهد. حتی اگر این کار امکانپذیر باشد، باعث نمیشود که سیستم بازیچه اقدامات خودسرانه شود. مثلاً حملهکننده نمیتواند از هیچ مقداری بسازد یا پولی را که هرگز به وی تعلق نداشته است، تصاحب کند. گرهها تراکنشهای نامعتبر را بهعنوان پرداخت نمیپذیرند و گرههای درستکار به هیچوجه بلاکهایی را که حاوی چنین تراکنشهایی هستند، نمیپذیرند. حملهگر تنها میتواند یکی از تراکنشهای خودش را تغییر دهد تا پولی را که اخیراً خرج کرده است، باز پس گیرد. مسابقه میان زنجیره درستکار و زنجیره حملهگر را میتوان بهعنوان یک گشت تصادفی دوجملهای (binomial random walk) در نظر گرفت. موفقیت زمانی حاصل میشود که زنجیره درستکار یک بلاک گسترش یابد و پیشروی خود را به میزان ۱۱+ افزایش دهد و زمانی شکست رخ میدهد که زنجیره حملهگر یک بلاک گسترش یابد و فاصلهاش از زنجیره درستکار به میزان ۱- کاهش یابد. احتمال همگام شدن حملهگر با یک نقص مفروض مطابق مسئله پاکباختگی قمارباز (Gambler’s Ruin) است. فرض کنید که یک قمارباز با اعتبار (credit) نامحدود، پس از یک باخت، بازی را شروع کند و بهصورت بالقوه این توانایی را دارد که تعداد نامحدودی دور بازی کند تا به نقطهای برسد که سود و ضررش با هم برابر شوند. ما میتوانیم احتمال برابر شدن سود و زیان را برای حملهگر حساب کنیم و همچنین میتوانیم محاسبه کنیم که آیا حملهگر اصلاً میتواند به پای زنجیره درستکار برسد یا خیر. محاسبات به این شرحاند [۸]: p= احتمال اینکه یک گره درستکار بلاک بعدی را پیدا کند، q= احتمال اینکه حملهگر بلاک بعدی را پیدا کند، qz= احتمال اینکه حملهگر وقتی که z بلاک عقب است به گرههای درستکار برسد.
با در نظر گرفتن فرضمان که p>q، با افزایش تعداد بلاکهایی که حملهگر باید به پایشان برسد، احتمال موفقیت حملهگر بهصورت نمایی کاهش مییابد. با توجه به اینکه احتمال متضرر شدنش بیشتر است، اگر خیلی زود تلاش نکند که یک جهش شانسی داشته باشد، هرچه عقب بیفتد، شانس او رفتهرفته به صفر میل میکند. حال باید این مسئله را در نظر بگیریم که دریافتکننده یک تراکنش باید چه مدت صبر کند تا بهاندازه کافی مطمئن شود که فرستنده توانایی تغییر تراکنش را ندارد. فرض را بر این میگذاریم که فرستنده یک حملهگر است و میخواهد کاری کند که دریافتکننده برای مدتی باورش شود که پول را دریافت کرده است، ولی پس از گذشت مدتی سعی کند پولی را که پرداخته است باز پس بستاند. وقتی که چنین اتفاقی افتاد، به دریافتکننده هشدار داده میشود، اما فرستنده بر این امید است که هنگام داده شدن هشدار کار از کار گذشته باشد. دریافتکننده یک جفت کلید جدید تولید میکند و اندکی پیش از امضا، کلید عمومی را به فرستنده میدهد. این کار باعث میشود که فرستنده نتواند زودتر از دیگران زنجیرهای از بلاکها را با کار مداوم روی آن آماده سازد تا زمانی فرا برسد که بهاندازهای شانس با او یار باشد که بهاندازه کافی از گرههای دیگر جلو زده باشد و سپس تراکنش را در آن لحظه اجرا کند. وقتی که تراکنش فرستاده شد، فرستنده متقلب بهصورت مخفیانه تلاش میکند که زنجیرهای موازی را ایجاد کند که حاوی نسخهای بدلی از تراکنش خودش باشد. دریافتکننده تا زمان اضافه شدن یک تراکنش به بلاک صبر میکند و z بلاک پس از آن به بلاک متصل شدهاند. او دقیق نمیداند که حملهگر چه مقدار پیش رفته است، اما با فرض اینکه بلاکهای درستکار زمان متوسط مورد انتظار را به ازای هر بلاک صرف کرده باشند، پیشرفت بالقوه حملهگر مطابق توزیع پواسون (Poisson distribution) با مقداری مورد انتظار خواهد بود:
برای به دست آوردن احتمال اینکه آیا حملهگر میتواند اکنون به پای گرههای درستکار برسد، چگالی پواسون (Poisson density) هر مقدار پیشرفت ممکن حملهگر را در احتمال رسیدن به گرههای درستکار از آن نقطه ضرب میکنیم:
بهمنظور جلوگیری از جمع زدن دم (tail) نامتناهی توزیع، بازآرایی (rearranging) صورت میگیرد:
معادل این معادله در زبان C به این صورت است:
با اجرای چند نتیجه، خواهیم دید که احتمال رسیدن حملهگر به گرههای درستکار، همگام با z بهصورت نمایی کاهش مییابد.
q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012
q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006
حل به ازای p کمتر از ۰/۱ درصد…
P < 0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340
نتیجه
ما سامانهای را برای تراکنشهای الکترونیکی ارائه دادهایم که متکی به اعتماد نیست. ما با چارچوب رایج ساخت سکه از امضای دیجیتال شروع کردیم. از این طریق میتوان مالکیت (ownership) را خیلی خوب کنترل کرد، اما اگر روشی برای جلوگیری از دو بار خرج وجود نداشته باشد، راهکار پیشنهادی ناقص خواهد بود. برای حل این مسئله، شبکه همتا به همتایی را معرفی کردیم که با استفاده از گواه کار پیشینه عمومی تراکنشها را ثبت میکند. در صورتی که گرههای درستکار بیشترینه قدرت CPU را در اختیار داشته باشند، تغییر این گواه کار به دست حملهگر، بهسرعت از لحاظ محاسباتی ناشدنی میگردد. شبکه مورد بحث با سادگی بدون ساختاری (unstructured simplicity) که دارد استوار (robust) است. همه گرهها با هدایتی (coordination) اندک بهصورت همزمان کار میکنند. لازم نیست گرهها شناختهشده باشند؛ چراکه پیامها مقصد خاصی ندارند و کافی است که طبق قاعده تحویل با حداکثر تلاش به گرهها تحویل داده شوند. گرهها در ترک و پیوستن به شبکه مختارند و زنجیره گواه کار را بهعنوان گواهی بر اتفاقات رخداده در زمان غیابشان خواهند پذیرفت. آنها با قدرت CPU ای که دارند، رأی خود را اعلام میکنند و پذیرش بلاکهای معتبر را با کار روی بزرگتر کردن آنها و عدم پذیرش بلاکهای نامعتبر را با امتناع از کار کردن روی آنها ابراز میکنند. هر قاعده ضروری یا پاداشی را میتوان به کمک این سازوکار توافق عام (consensus mechanism) اجرا کرد.