چهارشنبه , ۹ آذر ۱۴۰۱
سپیدنامه بیت‌کوین

ترجمه کامل وایت پیپر بیت کوین

ساتوشی ناکاموتو Satoshi Nakamoto، خالق بیت‌کوین، در سال ۲۰۰۸ مقاله‌ای را در فروم‌های حوزه رمزنگاری منتشر کرد که با نام وایت‌ ‎پیپر بیت‌ کوین شناخته شد. او در این وایت پیپر ضمن معرفی بیت کوین و شبکه بلاک‌چین، نحوه تولید کوین‌های جدید و نقش ماینرها در حفظ امنیت شبکه بلاک‌چین بیت‌کوین را نیز توضیح داده است. در ادامه می‌توانید ترجمه وایت‌پیپر بیت‌کوین را که توسط اسطوره دنیای رمزارزها نوشته شده، مطالعه کنید.

بیت‌کوین: سیستم پرداخت الکترونیک همتابه‌همتا

چکیده

یک مدل کاملا همتابه‌همتای پول نقد الکترونیکی، پرداخت آنلاین و مستقیم از شخصی به شخص دیگر را بدون اینکه یک موسسه مالی را واسطه قرار دهد، ممکن می‌سازد. امضاهای دیجیتال، بخشی از این راه‌حل را تشکیل می‌دهد؛ اما نکته مهم اینجاست که اگر برای جلوگیری از دوبار خرج کردن double-spending نیاز به شخص ثالث معتمدی باشد، این روش مزیت‌های اصلی خود را از دست می‌دهد.

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

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

۱- مقدمه

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

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

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

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

ما در این مقاله (وایت پیپر بیت کوین) راه‌حلی را  برای مشکل تراکنش تکراری (دوبار خرج کردن) یا Double-spending پیشنهاد می‌دهیم که با استفاده از یک سرور با برچسب‌ زمانی تقسیم شده و همتا به همتا، گواه محاسباتی (پردازشی) از ترتیب زمان قرارگیری تراکنش‌ها را ایجاد کنیم. این سیستم تا زمانی ایمن است که نودهای قابل اطمینان به طور کلی اکثر قدرت سی پی یو را در اختیار داشته باشند و این قدرت در اختیار گروه نودهای خرابکار نباشد.

۲- تراکنش‌ها

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

تراکنش‌ها در بیت‌کوین
نحوه انجام تراکنش‌ها در شبکه بیت‌کوین

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

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

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

۳- سرور با برچسب زمانی

روش پیشنهادی ما با سرور برچسب زمانی آغار می‌شود. شیوه کار این سرور به این شکل است که هش، یک بلاک از آیتم‌ها را برچسب زمانی می‌زند و درست مثل انتشار در روزنامه یا یوزنت Usenet، هش را به شکل گسترده‌ای منتشر می‌کند. برچسب زمانی ثابت می‌کند برای اینکه داده‌ها وارد هش شوند باید در زمان تراکنش وجود داشته باشند. هر برچسب زمانی شامل برچسب‌های زمانی قبلی می‌شوند، بنابراین، زنجیره‌ای شکل می‌گیرد و هر برچسب زمانی جدید، برچسب‌های قبل از خود را تأیید می‌کند.

سرور با برپسب زمانی
نحوه کار سرور با برچسب زمانی

۴- اثبات انجام کار

ما برای پیاده‌سازی یک سرور برچسب زمانی توزیع‌شده که مبتنی بر روش همتابه‌همتا فعالیت می‌کند، به جای یادداشت‌های روزانه یا پست‌های یوزنت، باید از یک سیستم اثبات انجام کار مشابه هش‌کش hashcash آدام بک Adam Back استفاده کنیم.

اثبات انجام کار شامل جستجوی مقداری می‌شود که بعد از هش شدن (برای مثال با SHA-256) با مقدار صفر بیت آغاز می‌شود. مقدار متوسط کار لازم با توجه به بیت‌های صفر مورد نیاز، حالت تصاعدی دارد و می‌توان آن را از طریق اجرای یک هش بررسی و تأیید کرد.

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

اثبات کار در بیت‌کوین
الگوریتم اجماع اثبات کار در بیت‌کوین

اثبات انجام کار در اینجا مشکل موجود در تصمیم‌گیری مبتنی بر اکثریت را نیز حل می‌کند. اگر اکثریت بر اساس مدل «هر آدرس IP یک حق رای» باشد، امکان دارد که شخصی با در اختیار داشتن چندین آی‌پی از این شرایط سو استفاده کند. اساساً اثبات انجام کار مبتنی بر  مدل «هر CPU یک حق رای» است. طولانی‌ترین زنجیره‌ تصمیم اکثریت را مشخص می‌کند؛ زنجیره‌ای که بیشترین تلاش را برای اثبات کار انجام داده است. اگر اکثریت قدرت CPU تحت کنترل نودهای سالم و قابل اطمینان باشد، زنجیره سالم با بالاترین سرعت رشد خواهد کرد و از زنجیره‌های رقیب پیشی می‌گیرد.

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

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

۵- شبکه

مراحل اجرای شبکه به این ترتیب خواهد بود:

۱- تراکنش‌های جدید به تمام نودها مخابره می‌شود.

۲- هر نود، تراکنش‌های جدید را در یک بلاک جمع‌آوری می‌کند.

۳- هر نود روی یافتن اثبات کار دشوار برای بلاک خود کار می‌کند. 

۴- زمانی که یک نود، اثبات انجام کار مدنظر خود را پیدا می‌کند، آن بلاک را به تمام نودها مخابره می‌کند.

۵- نودها فقط در صورتی بلاک مذکور را می‌پذیرند که تراکنش‌های موجود در آن معتبر باشند و قبل از آن خرج نشده باشند.

۶- نودها با کار روی ایجاد بلاک بعدی در زنجیره، موافقت خود را در خصوص پذیرش بلاک اعلام می‌کنند و از هش بلاک پذیرفته‌شده به عنوان هش بلاک قبلی استفاده می‌کنند.

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

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

۶- عامل محرک

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

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

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

۷- بازیابی فضای ذخیره‌سازی

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

بازپس‌گیری فضای ذخیره‌سازی در بیت‌کوین
تراکنش‌های هش‌شده در بلاک‌چین بیت‌کوین – درخت مرکل

حجم هدر بلاک بدون تراکنش تقریبا ۸۰ بایت است. اگر فرض کنیم که هر ۱۰ دقیقه یک بلاک تولید می‌شود، سالانه ۴.۲ مگابایت فضا برای ذخیره‌سازی نیاز است (.۸۰ بایت * ۶ * ۲۴ * ۳۶۵ = ۴.۲ مگابایت)

با توجه به اینکه سیستم‌های رایانه‌ای فروخته شده در سال ۲۰۰۸ معمولا دارای ۲ گیگابایت رم هستند و قانون مور (Moore’s Law) رشد کنونی ۱.۲ گیگابایت در سال را پیش‌بینی می‌کند، حتی اگر نیاز به نگهداری هدرهای بلاک در حافظه باشد، قاعدتاً نباید با مشکلی از بابت فضای ذخیره‌سازی مواجه شویم.

۸- تاییدیه ساده پرداخت‌ها

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

تایید پرداخت‌ها طبق وایت‌پیپر بیت‌کوین
طولانی‌ترین زنجیره الگوریتم گواه اثبات کار

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

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

۹- ترکیب و جداسازی مقادیر

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

ترکیب و جداسازی مقادیر در بیت‌کوین
ورودی و خروجی‌های تراکنش‌ها در بیت‌کوین

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

۱۰- حریم خصوصی

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

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

حریم خصوصی در وایت‌پیپر بیت‌کوین
حریم خصوصی در شبکه بلاک‌چین بیت‌کوین

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

۱۱- محاسبات

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

رقابت زنجیره سالم و زنجیره متعلق به حمله‌کننده را می‌توان به عنوان گام تصادفی دو جمله‌ای (Binomial Random Walk) در نظر گرفت. موفقیت زمانی اتفاق می‌افتد که زنجیره سالم توسط یک بلاک گسترش یابد. فاصله زنجیره سالم از زنجیره مهاجم، باید یک بلاک بیشتر باشد. شکست زمانی اتفاق می‌افتد که زنجیره مهاجم، یک بلاک نسبت به زنجیره سالم بیشتر باشد.

احتمال این که حمله‌کننده از زنجیره سالم پیشی بگیرد، همانند مشکل پاکباختگی قمارباز (Gambler’s Ruin) است. قماربازی با اعتبار نامحدود را در نظر بگیرید که از چند دست عقب‌تر بازی‌ را شروع می‌کند و تعداد نامحدودی دست بازی می‌کند تا به شرایط برابر دست یابد. ما می‌توانیم احتمال رسیدن به شرایط برابر را محاسبه کنیم که همان احتمال رسیدن مهاجم به زنجیره سالم است. فرمول محاسبه این موضوع به شرح زیر است:

  • احتمال یافتن بلاک بعدی توسط نود درستکار برابر است با p
  • احتمال یافتن بلاک بعدی توسط مهاجم برابر است با q
  • احتمال رسیدن مهاجم به نود درستکار از z بلاک قبل، برابر است با qz
محاسبات در شبکه بیت‌کوین
منبع: وایت پیپر بیت کوین

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

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

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

دریافت‌کننده صبر می‌کند تا تراکنش به بلاک افزوده شود و به تعداد z بلاک پس از آن پیوند بخورد. دریافت‌کننده نمی‌داند که مهاجم تا چه حد پیشروی کرده؛ اما با فرض بر اینکه همان میانگین زمان مورد انتظار نیاز است تا بلاک‌های سالم و درستکار ایجاد شوند، پیشروی حمله‌کننده برابر با توزیع پواسون (Poisson distribution) با مقدار مورد انتظار است.

محاسبات شبکه بیت‌کوین

برای به دست آوردن این احتمال که مهاجم هنوز می‌تواند به نود درستکار برسد، ما تراکم پواسون برای هر مقدار از پیشروی حمله‌کننده را در احتمال رسیدن به نود درستکار از همان نقطه ضرب می‌کنیم:

10

فرمول را تغییر می‌دهیم تا از مجموع دنباله بی‌نهایت توزیع اجتناب شود:

نحوه محاسبه در شبکه بیت‌کوین

سپس به کد C تبدیل می‌کنیم:

کد محاسبات در شبکه بیت‌کوین

با اجرای چند مورد از نتایج، می‌توانیم مشاهده کنیم که احتمال مذکور با z به طور تصاعدی کاهش می‌یابد. 

محاسبات در وایت‌پیپر بیت‌کوین

برای مقادیر P کمتر از ۰.۱٪ محاسبه می‌کنیم.

محاسبات در وایت‌پیپر بیت کوین

۱۲- نتیجه‌گیری

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

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

نودها با توان پردازشی خود رای می‌دهند و با تلاش برای گسترش بلاک‌ها، پذیرش بلاک‌های معتبر را اعلام می‌کنند و با عدم کار روی بلاک‌های نامعتبر، این نوع بلاک‌ها را رد می‌کنند؛ با این مکانیزم اجماع، می‌توان هرگونه مشوق یا قانون ضروری را اعمال کرد.


منابع

  • W. Dai, “b-money,” http://www.weidai.com/bmoney.txt, ۱۹۹۸.
  • H. Massias, X.S. Avila, and J.-J. Quisquater, “Design of a secure timestamping service with minimal trust requirements,” In ۲۰th Symposium on Information Theory in the Benelux, May 1999.
  • S. Haber, W.S. Stornetta, “How to time-stamp a digital document,” In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
  • D. Bayer, S. Haber, W.S. Stornetta, “Improving the efficiency and reliability of digital time-stamping,” In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
  • S. Haber, W.S. Stornetta, “Secure names for bit-strings,” In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.
  • A. Back, “Hashcash – a denial of service counter-measure,” http://www.hashcash.org/papers/hashcash.pdf, ۲۰۰۲.
  • R.C. Merkle, “Protocols for public key cryptosystems,” In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
  • W. Feller, “An introduction to probability theory and its applications,” 1957.

یک دیدگاه

  1. آفرین… آفرین