پادشاه و پرچمدار لقبی است که به بیتکوین به عنوان اولین ارز رمزنگاری شده در دنیا دادهاند. این ارز که در سال 2008 با یک وایت پیپر به دنیا معرفی شد تاکنون توانست به ارزش زیادی دست پیدا کند و حتی به اوج قیمتی بالای 70 هزار دلار هم برسد. شخصی که این وایت پیپر را نوشت و بیت کوین را به دنیا عرضه کرد هنوز مشخص نیست با این حال نام مستعار ساتوشی ناکاموتو را برای خود انتخاب کرد و با همین نام وایت پیپر این ارز دیجیتال را منتشر نمود.
درک کامل مفهوم وایت پیپر بیتکوین کمی دشوار است و افرادی که مهارت زیادی در شبکه دارند میتوانند به خوبی آن را بفهمند. با این حال در زیر سعی کردیم به زبان ساده وایت پیپر بیتکوین را برایتان بنویسیم تا کمی قابل درک تر باشد. آنچه میخوانید متن ساده شدهای است از آنچه ساتوشی ناکاموتو نوشت.
چکیده
بیتکوین یک پول الکترونیکی همتا به همتا است که طرفین تراکنش را از سازمانهای مالی و واسطهها بینیاز میکند. یک راهکار تعریف شده برای این کار امضاهای دیجیتالی هستند ولی ضعف این راهکار نیاز به یک شخص ثالث برای جلوگیری از Double Spending یا خرج دوباره است. شبکه بیتکوین یک راهکار برای این موضوع است که مشکل خرج دوباره را با هشینگ تراکنشها حل میکند. این هشینگ تراکنشها در زنجیره فعال گواه اثبات کار صورت میگیرد و مبتنی بر هش است. سابقهای که این هشینگ ایجاد میکند را نمیتوان بدون انجام دوباره گواهی اثبات کار انجام داد. زنجیره ای که تحت کنترل CPU نودها است تا زمانی که این پردازنده ها قدرت کافی داشته باشند در برابر حمله مهاجمان ایمن است.
مقدمه
موسسات مالی به عنوان واسط معتمد تاکنون بخش زیادی از پردازش پرداختهای الکترونیکی را در اختیار داشتهاند. این سیستم از آنجایی که بر اساس اعتماد شکل گرفته است دارای نقاط ضعف است اگرچه به خوبی پاسخ خیلی از تراکنشها را میدهد. نمیتوان تراکنشهای قطعی و غیرقابل برگشت داشت به این خاطر که وقتی اختلافی پیش میآید موسسات مالی وظیفه دارند دخالت کنند. همین موضوع باعث افزایش هزینه تراکنشها میشود و تراکنشهای کوچک مرسوم را ناممکن میکند. وقتی انجام تراکنشهای غیرقابل بازگشت در ازای خدمات غیر قابل بازگشت ممکن نباشد نیاز به اعتماد افزایش پیدا میکند و فروشندگان باید احتیاط بیشتری در مقابل مشتریان به کار بگیرند.
کلید حل این مشکل یک سیستم پرداخت الکترونیکی است که بر پایه رمزنگاری بنا شده است. تراکنش مستقیم از طریق این سیستم نیاز به اعتماد به واسطه را از بین میبرد. وقتی تراکنشها برگشت ناپذیر باشند خریدار و فروشنده هر دو در برابر جعل و تقلب محافظت میشوند. راه حل این مساله استفاده از یک سرور برچسب زمان دار توزیع شده فرد به فرد است که از ترتیب زمان تراکنشها به وجود میآید. تا زمانی که نودهای معتبر مجموعا قدرت پردازنده بالاتری نسبت به نودهای مهاجم داشته باشند این سیستم ایمن خواهد ماند.
تراکنش
سکه الکترونیکی در واقع زنجیرهای از امضاهای هوشمند است. کسی که میخواهد یک سکه دیجیتالی را به شخص دیگری منتقل کند هش تراکنش قبلی و کلید عمومی گیرنده را ضمیمه سکه خود میکند. این امضاها تصدیق کننده زنجیره مالکیت برای مالک جدید هستند. برای این که درگیر یک سیستم مثل سیستم بانکی نشویم باید روشی داشته باشیم که تراکنشهای امضا نشده پیشین توسط صاحبان قبلی برای دریافت کننده آشکار باشد.
برای این که به این هدف برسیم آخرین تراکنش را یک تراکنش موفق تصور میکنیم و تلاشهای بعدی برای خرج دوباره پول برای ما از اهمیت ساقط میشود. تنها راهی که میتوان عدم حضور یک تراکنش را تصدیق کرد آگاهی از همه تراکنشهای پیشین است. برای این که در این سیستم واسط معتمد را حذف شود باید تراکنشها به صورت عمومی نشان داده شوند.
سرور برچسب زماندار
نام راه حلی که ارائه شده سرور برچسب زماندار است. کار این سرور این است که به هش بلوکی دادهها برچسب زمانی اضافه کند و هش جدید را به شکل گسترده منتشر میکند. این برچسب زمانی وجود دادههایی که برای محاسبه هش نیاز است را به صورت لحظهای اثبات میکند. هر برچسب زمانی شامل هش برچسب زمانی قبلی خود نیز هست که مجموعا باعث شکلگیری یک زنجیره خواهد شد که در آن هر برچسب زمانی شامل همه برچسبهای زمانی قبلی خود است.
اثبات انجام کار
سیستم اثبات انجام کار جایی است که به جای یادداشتهای روزنامه از آن برای اعمال یک سرور برچسب زماندار توزیع شده استفاده میشود. یک نمونه از این سیستم اثبات انجام کار سیستم هشکش Adam Back است. برای این که سیستم اثبات انجام کار در شبکه برچسب زمان دار اعمال شود یک Nonce به بلاک اضافه خواهد شد تا مقداری را پیدا کند که به هش ریت بلوک مورد نظر به اندازه نیازش بیت های صفری بدهد. وقتی که پردازنده (CPU) مقدار مورد نیاز عمل اثبات انجام کار را پیدا کرد نمیتوان بلاک مذکور را بدون برگرداندن عملی که روی آن انجام شده است تغییر داد.
ویژگی دیگر این سیستم حل مشکل تشخیص نظر غالب در تصمیمگیریهای جمعی است. اگر رایگیری بر اساس تعداد آدرس آیپیها بود کسی که بیش از یک آدرس آیپی داشت میتوانست تصمیم گیری را مختل کند. سیستم اثبات انجام کار هر پردازنده نهایتا یک رای میتواند بدهد و تصمیم اکثریت را بلندترین زنجیره مشخص میکند. در این زنجیره بیشترین اثبات انجام کار صرف شده است. اگر نودهای معتبر غالب قدرت CPU را کنترل کنند زنجیره موثق سریعتر از زنجیره های رقیب رشد میکند. با این تفاسیر احتمال این که یک مهاجم بتواند از تمامی بلوکهای اثبات شده سبقت بگیرد و به نودهای معتبر برسد با اضافه شدن بلوکهای بعدی به صورت نمایی کاهش پیدا میکند. هرچه بلوکها با سرعت بیشتری ایجاد شوند سختی کار مهاجم نیز افزایش پیدا میکند.
شبکه
شبکه را می توان طبق مراحل زیر به اجرا درآورد:
- تراکنشهای جدید به همه نودها ارسال میشوند
- هر نود تراکنشهای جدید را در یک بلاک ذخیره میکند.
- هر نود سعی میکند تا برای اثبات انجام کار بر بلوک خود یک جواب پیدا کند.
- وقتی هر نود جواب اثبات انجام کار را پیدا میکند آن را به همه نودها ارسال میکند.
- نودهای دیگر تنها در صورتی بلوک مذکور را میپذیرند که تمام تراکنشهای آنها صحیح باشند و پیش از آن خرج نشده باشند.
نودهای دیگر برای ایجاد بلوک بعدی با بلوک مد نظر خود موافقت میکنند و به این خاطر هش بلوک پذیرفته شده به عنوان هش قبلی مورد استفاده قرار میگیرد.
نودها به صورت دائمی بلندترین زنجیره را به عنوان زنجیره صحیح تشخیص داده و برای گسترش آن تلاش میکنند. وقتی دو نود دو نسخه متفاوت از بلوک بعدی را همزمان مخابره کنند نودهای مختلف نسخه های متفاوتی از آن بلوک دریافت میکنند. در این شرایط هر نود بر یک شاخه ذخیره میشود و نودها شاخهای که بلندتر شد را ادامه میدهند. لازم نیست که تراکنشهای جدید منتشر شده به همه نودها برسد. اگر یک نود بلوکی را دریافت نکند هر زمان که در حال دریافت بلوک بعدی باشد درخواست بلوک قبلی را نیز خواهد کرد پس پیام از قلم افتادهای باقی نمیماند.
انگیزه
نخستین تراکنشی که در هر بلوک اتفاق میافتد به صورت قراردادی تراکنش خاصی است که سکه جدیدی ایجاد کرده است. مالک این سکه تولید کننده آن بلوک است. این مسئله نودها را برای پشتیبانی از شبکه تشویق میکند. علاوه براین روشی برای به گردش درآوردن و توزیع سکههاست. این روش استخراج به استخراج طلا شباهت دارد که با صرف منابع باعث به گردش درآمدن طلا میشود. برای ما این منابع پردازندهها و برق مصرفی هستند.
یک انگیزه دیگر کارمزد تراکنشهاست. اگر خروجی یک تراکنش از ورودی آن کمتر باشد مابه التفاوت آن یک کارمزد تراکنش خواهد بود. میزان انگیزه بلوک حاوی تراکنش با این مابهالتفاوت افزایش پیدا میکند. این انگیزه نودها را به درستکاری تشویق میکند. اگر یک مهاجم طمعکار بتواند قدرت پردازندهای بیشتر از قدرت پردازنده تمامی نودهای درستکار به دست بیاورد باید بین استخراج سکههای جدید و کلاهبرداری یکی را انتخاب کند که اولین گزینه قطعا بهتر است.
بازیابی فضای دیسک
به محض این که تراکنش پایانی در یک سکه زیر بلوکهای کافی قرار گرفت تراکنشهای خرج شده پیش از آن برای محفوظ ماندن فضای دیسک نادیده گرفته میشوند. برای انجام این کار تراکنشها بدون این که نیاز باشد هش بلوک شکسته شود در یک درخت مرکل هش میشوند. ویژگی این درخت این است که تنها ریشه آن در هش بلوک دخیل است.
سربرگ بلوکی که حاوی تراکنش نیست تقریبا 80 بایت حجم دارد. اگر تولید هر بلاک 10 دقیقه به طول بینجامد، مجموعا 4.2 مگابایت بر سال حجم نیاز داریم. در سال 2008 رم ها عموما 2 گیگابایتی بودند و طبق قانون مور هر سال 1.2 گیگابایت به این رقم اضافه میشود. با احتساب این موضوع نگهداری سربرگهای بلوک در حافظه دردسرساز نخواهد بود.
تایید تسهیل شده پرداخت
بدون اجرای یک نود شبکه کامل نیز میتوان پرداختها را تایید کرد. برای این کار کاربر تنها باید یک کپی از سربرگهای بلاک از طولانیترین زنجیره اثبات انجام کار داشته باشد. این اطلاعات به راحتی از نودهای شبکه قابل دریافت است. کاربر به خودی خود قادر به بررسی تراکنش نیست ولی اگر به مکانی در زنجیره متصل شود قادر خواهد بود پذیرفته شدن آن را توسط نود یک شبکه ببیند. بلوکهایی که بعد از آن اضافه شده تصدیقی است که شبکه آن را پذیرفته است.
با احتساب این موضوع وقتی نودهای معتبر شبکه را کنترل میکنند میتوان به تاییدها اعتماد کرد ولی اگر یک مهاجم قدرت غالب را به دست بگیرد آسیب پذیر خواهد بود. نودهای شبکه قادر به تایید تراکنشها هستند و این مورد به مهاجم برای دستکاری تراکنش ها فرصت میدهد. برای این که از این خطر جلوگیری شود نودهای معتبر باید بتوانند وقتی بلوک نامعتبری مشاهده کردند به شبکه اخطار دهند. کسب و کارهایی که پرداختهای مکرر دارند باید نودهای خود را به اجرا در بیاورند تا امنیت بیشتر و سرعت بالاتری داشته باشند.
مقدار ترکیبی و تفکیکی
سکهها را میتوان به صورت جداگانه مدیریت کرد با این حال اینکه بخواهیم برای انتقال هر سنت یک تراکنش جدا انجام دهیم ناکارامد است. برای این که بتوان هر مقدار را تفکیک و ترکیب کرد. تراکنشها چند ورودی و خروجی دارند تا تفکیک و ترکیب هرمقداری ممکن باشد. ما در برخی موارد دو خروجی خواهیم داشت: یکی برای پرداخت و دیگری برای بازگشت باقی مانده به فرستنده.
ظرفیت خروجی برای این حجم تراکنشها مشکل ساز نخواهد بود چرا که نیازی به استخراج یک کپی کامل مستقل از تاریخچه تراکنشها وجود ندارد.
حریم خصوصی
در روش بانکداری سنتی برای دستیابی به سطحی از حریم خصوصی تنها گروههای دخیل و گروههای واسطه معتمد به اطلاعات دسترسی دارند. وقتی باید تمامی تراکنشها به صورت عمومی منتشر شوند این روال نقض میشود با این حال اگر از جریان اطلاعات به مکانی دیگر جلوگیری شود میتوان همچنان حریم خصوصی را رعایت کرد. برای این منظور کلیدهای خصوصی باید ناشناس نگهداری شوند و عموم تنها قادر خواهند بود ارسال مقداری از یک شخص به شخص دیگر را مشاهده کنند. این سطح از انتشار اطلاعات مانند صرافی های بورس است که معاملات بدون افشای نام افراد عمومی میشوند.
برای این که یک لایه محافظتی اضافه نیز وجود داشته باشد باید برای هر تراکنش یک جفت کلید جدید مورد استفاده قرار بگیرد. وجود تراکنشهایی با چند ورودی اندازهای از قابلیت ارتباط را به صورت ناگزیر به وجود میآورند. اگر صاحب کلید مشخص شود ارتباطش با سایر تراکنشها نشان داده خواهد شد.
محاسبات
در یک سناریو که مهاجم میخواهد زنجیرهای سریعتر از زنجیره معتبر تولید کند به فرض این که این سناریو قابل دستیابی باشد باز هم سیستم به سمت تغییرات دلخواه او حرکت نخواهد کرد. تراکنشهای نامعتبر توسط نودها تایید نمیشود و بلوکهای حاوی این تراکنشها را تایید نمیکنند. محاسبه احتمال این که مهاجم بتواند با وجود کسری به زنجیره معتبر برسد با استفاده از فرمول زیر امکان پذیر است:
در فرض اولیه P بزرگتر از q است. مهاجم برای حمله نیاز دارد تا بلوکهای بیشتری از زنجیره معتبر داشته باشد و با افزایش تعداد بلوکها احتمال این که او بتواند در این کار موفق شود به صورت نمایی کاهش پیدا میکند. در این صورت او کار بسیار سخت و تقریبا غیر ممکنی برای نفوذ دارد.
نوبت به بررسی این موضوع میرسد که دریافت کننده چقدر باید صبر کند تا بتواند از عدم امکان تغییر تراکنش توسط فرستنده اطمینان حاصل کند. اگر فرد مهاجم بخواهد دریافت کننده را برای مدتی فریب دهد و بعد از گذشت مدتی پرداخت را به نفع خود برگشت بزند اگرچه در این حالت گیرنده اخطار دریافت میکند ولی فرستنده امیدوار است کار از کار گذشته باشد.
وقتی گیرنده یک جفت کلید تولید میکند و کلید عمومی را پیش از امضا در اختیار فرستنده میگذارد این کار باعث میشود زنجیرهای از بلوکها پیش از زمان مقرر توسط فرستنده آماده نشوند و او باید برای جلو افتادن از زنجیره بسیار خوش شانس باشد تا بتواند تراکنش را اعمال کند. با ارسال تراکنش مهاجم سعی میکند به طور مخفیانه در زنجیره موازی که حاوی تراکنش جایگزین برای جابهجایی تراکنشها است، تلاش کند.
گیرنده تا زمانی که تراکنش به یک بلوک اضافه شده و تعداد z بلوک به آن متصل شود صبر میکند. او نمیداند که مهاجم چقدر پیشرفت کرده است با این حال تخمین میزند که بلوکهای معتبر، میانگین زمانی که بر حسب هر بلوک لازم است را طی کردند. پتانسیل پیشرفت مهاجم با توزیع پواسون با فرمول زیر مشخص میشود:
اگر بخواهیم احتمال رسیدن مهاجم را تخمین بزنیم باید تراکم پواسون را در هر مقدار پیشرفتی که مهاجم احتمال دارد به آن دست پیدا کند ضرب کنیم:
معادله را برای پیشگیری از جمع بندی انتهای متناهی از توزیع مجدد مرتب میکنیم:
و به زبان C تبدیل می کنیم:
سخن پایانی
ما یک سیستم برای تراکنشهای الکترونیکی پیشنهاد دادیم که در آن نیازی به اعتماد وجود ندارد. چهارچوب معمولی که از امضاهای دیجیتالی سکهها ساخته میشوند بدون روشی برای جلوگیری از خرج دوباره پول روش کاملی نبود. برای حل این مشکل ما یک شبکه فرد به فرد با استفاده از سیستم اثبات انجام کار ارائه کردیم. این سیستم تاریخچه همه تراکنشها را ثبت و ضبط میکند و تا وقتی که قدرت غالب CPU توسط نودهای معتبر کنترل شوند تغییر در این تراکنش ها برای مهاجم غیرممکن خواهد بود. شبکه با سادگی غیرساختاری اش پایدار است. نودها همزمان و هماهنگ کار می کنند و نیازی به شناسایی ندارند. زنجیره اثبات انجام کار به عنوان اثباتی از وقایع رخ داده اجازه میدهند نودها شبکه را ترک کنند یا به آن اضافه شوند. نودها با قدرت پردازندههایشان رای میدهند. با پذیرفتن بلوکهای معتبر رای مثبت و با رد بلوکهای نامعتبر نظر منفی خود را اعلام میکنند. و البته قانون و انگیزههای مختلف توسط مکانیسم توافق جمعی اعمال میشود.