بررسی ساختار فنی و امنیت بیت کوین - نسخهی قابل چاپ +- باشگاه کاربران روماک (https://forum.romaak.ir) +-- انجمن: انجمن حقوقی و مالی (https://forum.romaak.ir/forumdisplay.php?fid=148) +--- انجمن: فین تک ها و خدمات مالی (https://forum.romaak.ir/forumdisplay.php?fid=158) +--- موضوع: بررسی ساختار فنی و امنیت بیت کوین (/showthread.php?tid=4884) |
بررسی ساختار فنی و امنیت بیت کوین - saman - ۹۷/۱/۷ رمز موفقیت بیتکوین در القابی که به این واحد پول دیجیتال نسبت داده شده، نهفته است؛ بنیان بیتکوین برپایهی رمزنگاری استوار شده و همین امر علت ماندگاری و پیشرفت روزافزون این سیستم است. در قسمت دوم این مقاله که برای تشریح و بررسی بیتکوین در نظر گرفتهایم، به سراغ ساختار فنی و امنیتی این واحد پولی رفتهایم. همانطور که می دانید پول رمزنگاری شده با انتشار مقالهای با عنوان «Bitcoin: A Peer-to-Peer Electronic Cash System» در تاریخ ۱۰ آبان ۱۳۸۷ متولد شد. ساتوشی ناکاموتو با انتشار مقالهی موردنظر، راهکاری را برای یک سیستم مالی جدید ارائه داده که در آن نیازی به وجود یک نهاد مرکزی به منظور کنترل تمام تراکنشها نیست. ناکاموتو طی این مقاله که در ۱۲ سرفصل تنظیم شده، به توضیح مساله و همچنین راهکار خود با عنوان بیت کوین پرداخته است.
در قسمت دوم این مقاله در رابطه با پول رمزنگاری شده، با مبنا قرار دادن مقالهی ساتوشی ناکوموتو به بررسی بیت کوین از جنبهی فنی خواهیم پرداخت. همچنین امنیت تراکنشهای صورت گرفته با استفاده از پول رمزنگاری شده را از نظر برگشتپذیر بودن و امکان انجام تقلب از نظر خواهیم گذراند. در قسمت اول با نگاهی به نظام پولی کنونی رایج در سراسر جهان به این نکته اشاره کردیم که بیت کوین یا بطور کلی پول رمزنگاری شده نه یک سیستم جایگزین، بلکه یکی از گزینههایی است که در نظر گرفتن آن با اتمام دوران سیستم پولی که بشر مورد استفاده قرار میدهد، اجتناب ناپذیر خواهد بود. بیت کوین تمام ویژگیهای تبدیل شدن به یک سیستم پولی رایج را دارد و ویژگیهای آن، پول رمزنگاری شده را به یک گزینهی ایدهآل برای استفاده در دوران فناوریهای نوین تبدیل کرده است. ناکاموتو در طرح مسالهی خود، دو موضوع را نقطهی ضعف نظام پولی کنونی مورد استفاده در جهان خوانده است. یکی از این موارد، امکان ارسال پول، بصورتی است که کاربر هزینه و عوارضی کمی را از بابت انتقال مبلغ خود پرداخت کند. در این مقاله به این موضوع اشاره شده که عوارض دریافت شده برای میانجی شدن در ارسال پول، باعث افزایش هزینهها شده و در واقع بعضا کم بودن مبلغ مورد نظر برای ارسال، انتقال پول را منطقا توجیه ناپذیر میکند. مشکل دیگری که ناکاموتو از آن اسم برده، انجام تراکنشهایی برگشت پذیر است که این موضوع امکان کلاهبرداری را در سیستم کنونی امکان پذیر میکند. به بیان بهتر کلاهبرداران، سیستم مرکزی را به گونهای مورد سواستفاده قرار میدهند که بدون اینکه پولی از حسابشان کسر شود، اقدام به خرید کالا یا واریز پول کنند. مزیت بیتکوین کاهش هزینه انتقال پول و جلوگیری از کلاهبرداری است ناکاموتو در مقالهی خود بصورت کامل با بیان مشکلات موجود در سیستم پولی کنونی مورد استفاده به بیان راهکار خود پرداخته و سپس با بررسی مشکلاتی که میتواند این سیستم را با اختلال روبرو کند، به ارائهی روشهای مقابله با این مشکلات نیز پرداخته است. برای مثال میتوان به بهرهگیری از مفاهیمی نظیر امضای دیجیتال (Digital Signature)، اثبات کار (Proof of Work)، انگیزه (Incent) و تابع رمزنگاری شده یا هش (Hash Function.HSA-256) اشاره کرد. در ادامه به بررسی هر یک از مفاهیم اشاره شده و کاربرد آن در فرآیند گردش مالی بیت کوین خواهیم پرداخت. در حال حاضر اصلیترین مرجع برای ارسال و دریافت پول در تمامی جوامع بشری، بانکها هستند. همهی تراکنشها و در واقع همهی فعالیتهای انجام شده توسط بانکها بر مبنای یک اصل انجام میشود و این اصل همان اعتماد به بانک است. مشتریان بانکها براساس اعتمادی که به سیستم دارند، اجازه میدهند تا این سیستم بر صحت و سقم پولهای رد و بدل شده نظارت داشته باشند. در واقع بانک مسئول هر گونه کلاهبرداری یا سرقت پول از حسابها است و هیچ یک از افرادی که از این سیستم استفاده میکنند، مسئولیتی در قبال رد و بدل شدن دادهها ندارند. در واقع مشکل اصلی سیستم بانکداری متمرکز این است که در این سیستم امکان ایجاد اخلال در سیستم و انجام تراکنشهای برگشتپذیر (منظور از تراکنشهای برگشتپذیر بازگرداندن پول خرج شده پس از انجام یک خرید یا انتقال پول به حساب دیگران است) وجود دارد، این در حالی است که در سیستم بیت کوین احتمال انجام چنین تراکنشهایی نزدیک به صفر است. در بیت کوین خبری از اعتماد نیست و اصل این سیستم نیز بر پایهی بی اعتمادی بنیان گذاشته شده است. در واقع در شبکهی بیت کوین با افرادی سر و کار داریم که اصلا آنها را نمیشناسیم، از اینرو این سیستم باید به گونهای باشد که نتوان در آن خللی ایجاد کرد، از این رو یک دلیل رمزنگاری شده برای اثبات صحت تراکنشها و جلوگیری از تقلب استفاده شده است. بیت کوین را به زبان ساده باید یک پایگاه دادهی به اشتراک گذاشته از تراکنشها خواند که همهی گرههای شبکه به آن دسترسی دارند. در این شبکهی بزرگ که همهی گرهها به جزئیات تراکنشها دسترسی دارند، چگونه میتوان جلوی تقلب را گرفت؟ در صورتی که گرههای صادق شبکه قدرت پردازشی بیشتری را بر عهده داشته باشند، در اینصورت نمیتوان تقلبی را در شبکه صورت داد. شاید این موضوع هماکنون کمی گیج کننده به نظر برسد، اما در ادامه تمامی مسائل و نکات نامفهوم را تشریح خواهیم کرد. همانطور که اشاره کردیم، بیت کوین مجموعهای از مفاهیم در حوزهی رمزنگاری است که مجموعهی آنها با ترکیب یک سناریوی موفق، بیت کوین را تشکیل داده است. در ادامه به تشریح این مفاهیم براساس سلسله مراتبی خواهیم پرداخت. تراکنش پول رمزنگاری شده، سکهی دیجیتال یا بیتکوین به عنوان دنبالهای از امضاهای دیجیتال تعریف میشود. مالک یک بیتکوین برای ارسال پول خود به دیگری باید کد تراکنش قبلی را به همراه کلید عمومی دریافت کننده هش (رمزنگاری) کرده و سپس کد هش شدهی حاصل را با استفاده از کلید خصوصی خود کدگذاری میکند. امضای دیجیتال اصلیترین مفهوم در تراکنشهای بیتکوین است استفاده از امضای دیجیتال در تراکنشهای بیتکوین به خودی خود از تقلب و کلاهبرداری به روشهای مختلف در این سیستم جلوگیری میکند. برای مثال با استفاده از این روش امکان انجام هیچ گونه تغییری در تراکنش وجود ندارد، چراکه کوچکترین تغییر در محتویات پیام ارسالی، تغییر بزرگی را در نتیجهی کد هش شده ایجاد میکند، از اینرو دریافتکننده قادر نخواهد بود تا با استفاده از کلید عمومی ارسالکننده اقدام به هویتسنجی کرده و در نتیجه صحت تراکنش را تایید کند. از اینرو با استفاده از امضای دیجیتال، بخش بزرگی از مسائل مرتبط با تقلب در ارسال پول به راحتی حل میشود. اما هنوز نمیتوان این سیستم را قابل اطمینان برای استفاده خواند. چه تضمینی وجود دارد که فرستندهی پول این کد یا همان بیت کوین را پیشتر برای کاربر دیگری نفرستاده باشد؟ هرچند با استفاده از این روش کاربر یا کاربران نمیتوانند تغییری در پیام ایجاد کنند، اما تضمینی برای این موضوع وجود ندارد که یک کاربر، مبلغی را برای چند نفر ارسال نکند. در صورتی که راهحلی برای این موضوع نباشد، هر کاربر میتواند یک سکه را برای چندین نفر ارسال کند که این همان تقلب است. ساتوشی ناکاموتا دو راهحل ممکن را برای این مشکل پیشنهاد داده که در ادامه به بررسی آنها خواهیم پرداخت. یکی از راهحلها ایجاد یک ضرابخانهی مرکزی است که بر تمام تراکنشها نظارت میکند. روند کار در این ضرابخانه به این صورت است که تمام تراکنشها توسط یک نهاد مرکزی یا همین ضرابخانه نظارت میشود، بدین ترتیب که در صورت ارسال یک بیت کوین، ابتدا ضرابخانه چک میکند که آیا این سکه پیش از این خرج شده یا نه. پس از پایان تراکنش سکهی مورد نظر به ضرابخانه برگردانده میشود تا از بین رفته و سکهای دیگر برای شخصی که آن را در اختیار دارد، ضرب شود. اما مشکل اینجا است که در این روش دوباره وجود یک نهاد مرکزی برای کنترل فرآیند ارسال و دریافت سکهها شرط اصلی سلامت این سیستم است. البته مشکل دیگری که این سیستم را تهدید میکند، احتمال هک و ایجاد اختلال در کارکرد سیستم مرکزی است. در بیتکوین اشتراکگذاری تراکنشها با کل گرهها جایگزین نهاد مرکزی نظارتی شده است راهحل دیگری نیاز است تا با استفاده از آن دریافت کنندهی بیت کوین از این موضوع اطمینان حاصل کند که آیا پیش از این فرستنده سکهی مورد نظر را برای فرد دیگری ارسال کرده یا خیر؟ در راهحل ارائه شده توسط ناکاموتو، اولین تراکنشی که در سیستم ثبت شود، به عنوان تراکنش مرجع و صحیح در نظر گرفته شده و سایر تراکنشهایی که برای آن سکهی خاص ارسال شود، مورد قبول سیستم نیست. تنها راهی که میتوان در آن وجود یا عدم وجود یک تراکنش را متوجه شد، دسترسی داشتن به تمام تراکنشهایی است که از ابتدای کارکرد سیستم، ثبت شده است. برای دست یافتن به چنین عملکردی در سیستم بدون وجود یک نهاد مرکزی، باید تمام تراکنشها بصورت عمومی در اختیار تمام گرههای شبکه قرار گیرد. در واقع تمام گرههای شبکه روی این موضوع توافق میکنند تا از نسخهی واحدی از تاریخچهی تراکنشها استفاده کنند. سرویس برچسب زنی بر حسب زمان در سیستم بانکداری متمرکز که هماکنون در تمام بانکها مورد استفاده قرار میگیرد، هر شخص با افتتاح حساب، موجودی خاصی دارد. در واقع بانک یک موجودی را به هر شخص نسبت داده و آن را در پایگاه دادهی خود ثبت میکند، اما در بیت کوین خبری از این موضوع نیست. موجودی هر فرد در زنجیرهی کدهایی ثبت شده که طی آن بیت کوینهایی را دریافت و ارسال کرده است. در واقع بیت کوین فاقد جدولی است که در آن آخرین موجودی حساب هر شخص در آن ثبت شده باشد، بلکه زنجیرهی تراکنشهای صورت گرفته، به عنوان مرجعی برای محاسبهی موجودی هر فرد مورد استفاده قرار میگیرد. زمانی که شخصی بیت کوین یا بیت کوینهایی را برای دیگر کاربران ارسال میکند، ابتدا معدنکاوان یا ماینرها با بررسی تراکنشهای پیشین اطمینان حاصل میکنند که آیا فرستنده این میزان از پول را در حساب خود دارد یا خیر. برای مثال زمانی که شخص الف ۵ بیت کوین را برای شخص ب ارسال میکند، در اولین مرحله معدنکاوان ابتدا بررسی میکنند که آیا شخص الف این مقدار بیت کوین را دارد یا خیر؟ این بررسی با مراجعه به سوابق بیتکوینهای دریافت شده توسط شخص الف انجام میپذیرد، بطوریکه افرادی که این بیتکوینها را دریافت کردهاند نیز مورد بررسی قرار میگیرند تا زنجیره به ابتدای ایجاد هر یک از ۵ بیت کوین ختم شود. همانطور که در تصویر پایین نیز مشاهده میکنید، تمام تراکنشهای بیتکوین برای تایید یک تراکنش، مورد بررسی قرار میگیرند. اما این سیستم به تنهایی قادر نیست تا جلوی تقلب در شبکهی بیت کوین را بگیرد. تصور کنید که کاربر الف برای خرید محصولی طی یک تراکنش ۳ بیتکوین را به حساب کاربر ب ارسال میکند. همین کاربر برای تقلب، سریعا تراکنش دیگری را ثبت میکند که همین ۳ بیتکوین موجودی را برای خودش (طبق توضحیات در بخش امضای دیجیتال، هر کاربر میتواند بیش از یک کلید عمومی و خصوصی داشته باشد) ارسال میکند. با توجه به اینکه تراکنشها در شبکه بیتکوین پخش میشوند، از اینرو شماری از گرهها تراکنش اول و شمار دیگری تراکنش دوم را ثبت و تایید میکنند و علاوه بر وقوع کلاهبرداری و تقلب، یکپارچکی و وحدت زنجیرهی تراکنشها نیز در شبکهی بیت کوین زیر سوال میرود. فناوری بلاک چین ضامن جلوگیری از تقلب و کلاهبرداری در شبکه بیتکوین است با توجه به مشکل تشریح شده در بالا، امضای دیجیتال به تنهایی قادر به تصدیق سلامت شبکه نیست. بیتکوین برای حل این مشکل از سیستمی با عنوان بلاکچین بهره میبرد که در واقع بلوکهایی از تراکنشها هستند که بصورت زنجیروار به یکدیگر متصل شدهاند. هیچ یک از کاربران پس از تایید شدن بلوک، مگر با در اختیار داشتن قدرت پردازشی بالا (انگیزه در شبکهی بیت کوین مانع از این میشود که حتی با وجود داشتن قدرت پردازشی بالا، به تقلب پرداخت) نمیتواند زنجیرهی بلوک را تغییر دهد. بلاکچین را باید یک دفتر کل توزیع شده بنامیم که تمام گرههای شبکه به آن دسترسی دارند. بلاکچین یک روش بسیار امن و در عین حال شفاف را بدون نیاز به یک نهاد مرکزی برای نظارت بر گردش کار ایجاد کرده است. بلاکچین یک بستر گردش اطلاعات است که اصلیترین ویژگی آن نه در نوع سرویس ارائه شده، بلکه امنیت و صحتی است که بدون نیاز به یک نهاد نظارتی بین تعداد بیشماری از کاربران پیاده میکند. بلاکچین را نباید یک شبکهی رایانهای در نظر گرفت، بلکه شبکهای است که روی شبکهی رایانهای بصورت توزیع شده سوار شده و پتانسیل شبکههای رایانهای را از نظر انجام سرویسهای مختلف بالا برده است. بلاکچین و معدنکاوان یا ماینرها (Miner) کمک میکنند تا شفاف بودن و امنیت تراکنشها در شبکهی بیتکوین تامین شده و تقریبا امکان انجام هیچ تقلبی وجود نداشته باشد. شبکهی بیتکوین هر لحظه شاهد ثبت شدن تراکنشهای متعددی است که در یک مجموعه یا استخر تراکنشها (Transaction Pool) ذخیره میشوند، حال آنکه این تراکنشها هنوز تایید نشدهاند. ماینرهایی که به دنبال دریافت بیتکوین به عنوان پاداش هستند، تعداد مشخصی از تراکنشها را براساس زمان ثبت از این مجموعه انتخاب کرده و آن را در قالب یک بلوک به شبکهی بیت کوین پیشنهاد میدهند. همانطور که اشاره کردیم، بلاکچین زنجیرهای از بلوکهای به هم متصل شده است که شمارهی بلوک قبلی در بلوک بعدی ثبت شده و امکان تغییر تقریبا غیرممکن است. معدنکاوان در ازای صرف زمان، انرژی و قدرت پردازشی، پاداش دریافت میکنند اطلاعات ثبت شده در یک بلوک جدید شامل تراکنشهای انتخابی توسط ماینر، هدر (Header) یا شمارهی آخرین بلوک تایید شده به همراه یک عدد تصادفی است که در داخل تابع هش قرار گرفته و عدد حاصل از هش با نتیجهی نهایی (Target Value) مقایسه میشود؛ در صورتی که حاصل تابع هش از نتیجهی نهایی بزرگ باشد، ماینر بصورت خودکار عدد تصادفی را یک واحد افزایش داده و دوباره فرایند تکرار میشود تا عدد حاصل تابع هش از نتیجهی نهایی کوچکتر باشد. در صورتی که نتیجهی هش از عدد نهایی کوچکتر باشد، در اینصورت ماینر موفق به ثبت بلوک جدید شده و در ازای صرف منابعی نظیر زمان، انرژی و قدرت پردازشی، بیتکوین یا بخشی از یک بیتکوین را به عنوان پاداش دریافت میکند. فرایند ثبت یک بلوک جدید در بلاکچین با استفاده از مفهومی با عنوان اثبات کار (Proof Of Work) انجام میشود. همانطور که اشاره کردیم، بلاکچین زنجیرهی واحدی از بلوکهای به هم پیوسته است و ساختار درختی ندارد. شاید این سوال مطرح شود که چگونه بیتکوین قادر است تا این ساختار واحد زنجیری را حفظ کند، در حالی که امکان ثبت شدن دو بلوک بصورت همزمان و ایجاد انشقاق در زنجیره، هرچند با احتمال پایین، شدنی است. با توجه به اینکه حل تابع هش کاملا وابسته به انتخاب اعداد بصورت تصادفی است، از اینرو احتمال اینکه دو ماینر بصورت همزمان بتوانند مسالهی ریاضی خود را برای تایید بلوک پیشنهادی حل کنند، بسیار ضعیف است، با این وجود باید این حالت نیز در سیستم بیتکوین در نظر گرفته میشد. در صورتی که یک ماینر یا حتی بیشتر بتوانند مسالهی ریاضی خود را حل کنند و بلوک خود را برای اتصال به سایر گرههای شبکه ارسال کنند، گره بعدی زنجیره را از اولین بلوکی که دریافت کنند، ادامه میدهند. برای مثال در صورتی که ماینرهای B، A و C بصورت همزمان بلوکی را برای اتصال به زنجیره ارسال کرده و ماینر D نیز لحظاتی بعد بلوکی را برای اتصال به زنجیره پیشنهاد دهد، بلوک ماینر D بعد از بلوک مجموعه B، A یا C قرار میگیرد که زودتر دریافت کرده باشد. در صورتی که ماینر D بلوک B را در بلاکچین زودتر از A و C دریافت کرده باشد، بلوک خود را به B متصل میکند، اما دو بلوک دیگر را نیز تا زمانی که یکی از شاخهها بلندتر از دیگری شده و تصمیم نهایی گرفته شود، نگه میدارند. در واقع اگر دو گره در شبکه بصورت همزمان بلوکی را به زنجیره پیشنهاد دهند، گرهها کار را با اولین بلوکی که دریافت کردهاند ادامه داده و سایر بلوکها را تا زمانی که یکی از شاخهها درازتر از بقیه شوند، ادامه میدهند. به محض اینکه یکی از شاخهها درازتر از بقیه شد، سایر بلوکها حذف شده و بلاکچین ساختار تک شاخهای خود را حفظ میکند. مراحل معدنکاوی در یک نگاه بهتر است تا مفاهیم تشریح شده را مرور کنیم تا عملکرد شبکهی بیتکوین را در چند مرحله بصورت خلاصه در نظر داشته باشیم:
بیت کوین در برابر بیت کوین کش؛ علت تقسیم چه بود؟ پس از افزایش استفاده از بیتکوین در سالهای اخیر، متخصصان و افرادی که پس از ساتوشی ناکاموتو توسعهی این سیستم را برعهده دارند، در مورد ظرفیت بلوکهای بلاکچین به اختلاف نظر رسیدند. افزایش تعداد تراکنشها باعث شده بود تا کاربران زمان بیشتری را برای تایید تراکنشهای خود صرف کنند. بیتکوین در هر ثانیه ظرفیت پشتیبانی از هفت تراکنش را دارد و از اینرو شماری از افراد خواستار افزایش ظرفیت بلوکهای بیتکوین برای بالا بردن سرعت تایید تراکنشها و در نتیجه انتقال پول بودند. بیتکوین در حالی از هفت تراکنش در هر ثانیه پشتیبانی میکند که شبکهی مالی نظیر ویزا در هر ثانیه پذیرای بیش از یک هزار تراکنش است. بیتکوین کش را باید نسخهای جدا شده از بیتکوین خواند که ساختاری مشابه بیتکوین دارد با این تفاوت که ظرفیت بلوکها در بیتکوین کش از نظر تعداد تراکنشها بسیار بیشتر است. پس از آنکه بیتکوین کش در اول آگوست سال جاری رسما از بیتکوین جدا شد، تمام کاربران بیتکوین که به هر تعداد از بیتکوین را در اختیار داشتند، به همان اندازه بیتکوین کش دریافت کردند. در واقع افرادی که تا پیش از اول آگوست ۲۰۱۷ بیتکوین در اختیار داشتند، به همان اندازه بیتکوین کش نیز دریافت کردند. مخالفان بیتکوین کش معقدند که افزایش تعداد تراکنشهایی که در هر بلوک قرار میگیرند باعث میشود تا قدرت پردازشی بیشتری برای اثبات کار یا همان مرحلهی PoW صرف شود و از اینرو بیتکوین از فلسفهی توزیع شدهی خود فاصله میگیرد، چراکه تمام کاربران و ماینرها نمیتوانند سختافزار خود را به هر اندازهی مورد نیاز قدرتمند کنند و در نتیجه در بیتکوین کش ماینرهایی حرف اول را خواهند زد که قدرت پردازشی بسیار بالاتری دارند. در حال حاضر بیتکوین کش ۳۱۳ دلار آمریکا ارزش دارد که بسیار کمتر از ارزش بیتکوین است. باید دید که در آینده چه سرنوشتی برای بیتکوین کش رقم خواهد خورد و آیا بیتکوین کش میتواند به اندازهی بیتکوین ارزشمند شود یا خیر؟ امضاء دیجیتال تمام افرادی که در شبکهی بیتکوین حضور دارند حداقل یک جفت کلید دارند که شامل یک کلید عمومی و یک کلید خصوصی است. هر سکهی الکترونیک را باید دنبالهای از امضاهای دیجیتال خواند. هر مالک سکهی بیت کوین برای ارسال یک سکه به دیگری، ترکیبی از کلید عمومی گیرنده را با زنجیرهی کلیدهای دیجیتال پیشین ترکیب میکند. در مرحلهی بعدی این کد هش شده با استفاده از کلید خصوصی فرستنده، کدگذاری میشود. گیرنده قادر است از طریق کلید عمومی فرستنده، پیام مورد نظر را از حالت هش خارج کرده و از این نکته که چه کاربری این سکه را برای وی ارسال کرده، اطمینان حاصل کند. در واقع اگر گیرنده نتواند کد دریافت شده را با کلید عمومی فرستنده که مدعی است بیت کوین را ارسال کرده از حالت هش درآورد، پس این فرد خود را به دروغ فرستندهی بیت کوین معرفی میکند. اما بهتر است به تشریح امضای دیجیتال و نحوهی کدگذاری و فناوری مورد استفاده در امضای دیجیتال بپردازیم. فناوری مورد استفاده در امضای دیجیتال بیت کوین، از نوع کدگذاری غیرمتفارن است. کدگذاری در کل به دو حوزهی کدگذاری متقارن و غیرمتقارن تقسیم میشود. همانطور که اشاره کردیم در بیت کوین و ایجاد امضای دیجیتال از کدگذاری غیرمتفارن استفاده میشود، اما ساز و کار کدگذاری غیرمتفارن چگونه است؟ در این روش دو کلید خصوصی و عمومی مورد استفاده قرار میگیرد. جعبهای را در نظر بگیرید که دو کلید خصوصی و عمومی دارد. کلید خصوصی فقط برای قفل کردن این جعبه مورد استفاده قرار میگیرد، در حالی که کلید عمومی جز در باز کردن قفل جعبه کاربرد دیگری ندارد؛ با استفاده از کلید خصوصی که این جعبه را قفل کرده، نمیتوان قفل جعبه را باز کرد و باید حتما کلید عمومی مورد استفاده قرار گیرد. در صورتی که کاربر A مدعی شود که جعبهای را برای کاربر B ارسال کرده، دریافت کننده باید بتواند با استفاده از کلید عمومی کاربر A این جعبه را باز کند، در غیر اینصورت ادعای کاربر A مبنی بر ارسال جعبه دروغی بیش نبوده و از این رو در استفاده از امضای دیجیتال کاربری که بیت کوین را ارسال میکند، نمیتواند منکر ارسال شده و در نتیجه احتمال تقلب بسیار کاهش پیدا میکند. همچنین در صورت ایجاد تغییر در کد هش شده، دریافت کننده در صورت استفاده از کلید عمومی ارسال کننده نمیتواند به نتیجهی صحیحی برسد و در نتیجه ایجاد تغییر میان راه روی کد هش شده نیز عملا امکان تغییرات در تراکنشها نظیر تغییر مبلغ را غیرممکن میکند. پس تا زمانی که کاربری به کلید خصوصی دیگری دسترسی نداشته باشد، امکان ایجاد اختلال در سیستم را ندارد. در سیستم بیت کوین نیز هر کاربر یک کلید خصوصی و یک کلید عمومی دارد. کلید خصوصی کاربر مخفی بوده و نباید کسی جز خود کاربر از آن اطلاع داشته باشد، اما کلید عمومی همانطور که از اسم آن نیز پیدا است، عمومی بوده و همه کاربران میتوانند به آن دسترسی داشته باشند. هر کاربر در شبکهی بیتکوین میتواند چندین کلید عمومی و کلید خصوصی مربوط به آن را داشته باشد و در واقع کاربران بیتکوین منحصر به یک کلید عمومی و خصوصی نیستند. به بیان بهتر کاربران بیتکوین میتوانند در کیف پول خود چندین کلید عمومی و خصوصی را داشته باشند. با توجه به تعداد بالای آدرسهایی که میتواند تولید شود، اصلا نباید در مورد تکراری بودن آدرسها احساس نگرانی کرد. بیت کوین قادر است تا ۴۵^۱۰ × ۱.۴۶ یا به بیان ساده ۱۶۰^۲ آدرس را تولید کند. شاید در نگاه اول این عدد بسیار کوچک به نظر برسد. برای درک عظمت احتمالات موجود برای تعداد آدرسهایی که میتواند تولید شود، بهتر است بدانید که تعداد دانههای شن موجود روی کرهی زمین نزدیک به ۱۸^۱۰ * ۷.۵ است. حال تصویر کنید که هر از یک این تعداد دانههای شن موجود خود به همین اندازه نیز دانه شن داشته باشد، با این وجود مجموع شنها به رقم ۱۸^۱۰ * ۵۶ میرسد که باز هم کوچکتر از تعداد احتمالات موجود برای آدرسهایی است که بیت کوین میتواند تولید کند. اثبات کار پروتکل اثبات کار یا POW در اصل یک روش برای مقابله با انجام حملاتی نظیر DDoS و مقابله با اسمپینگ است. با استفاده از این روش برای کاربری که به دنبال دریافت یک سرویس از سیستم است، یک وظیفهی پردازشی در نظر گرفته میشود تا از این طریق پردازندهی کاربر متقاضی زمانی را برای حل این وظیفهی پردازشی سپری کرده و ترافیک دریافت سرویس از سیستم شاهد افزایش ترافیک نباشد. اصلیترین ویژگی سیستم اثبات کار باید اینگونه باشد که وظیفهی سپرده شده به کاربر نسبتا سخت اما قابل حل بوده و در مقابل ارائه دهندهی سرویس برای چک کردن صحت انجام کار بار پردازشی زیادی را به دوش نکشد. سیستم اثبات کار را بنابر کاربردهای مختلف میتوان با روشهای مختلفی پیاده کرد. از جملهی روشهایی که در اثبات کار مورد استفاده قرار میگیرد باید به رمزنگاری دنبالهدار (Hash Sequence) و درخت مرکل (Merkle Tree) اشاره کرد که در بیتکوین نیز مورد استفاده قرار میگیرد. اثبات کار در بیتکوین به این ترتیب است که ماینر تعدادی تراکنش را از میان تراکنشهای تایید نشده انتخاب کرده و با دریافت کد هش بلوک قبلی پروسهی اثبات کار را آغاز میکند. پارامترهای مورد استفاده در تابع هش SHA-256 شامل تراکنشهای انتخابی، کد هش بلوک قبلی و یک عدد تصادفی است. سیستم بیتکوین براساس سرعت ایجاد بلوکهای جدید در بیتکوین، سختی کار را از طریق تغییر نتیجهی هدف مورد انتظار برای تابع هش تغییر میدهد. ماینر باید عدد مورد نظر را تا رسیدن به موفقیت که کوچکتر شدن حاصل هش از نتیجهی هدف است، در هر مرحله یک واحد افزایش دهد. پس از رسیدن به نتیجه، بلوک در شبکهی بیت کوین ثبت شده و نتیجهی هش به دست آمده به عنوان شمارهی بلوک تعیین میشود. این شماره در بلوک بعدی ثبت خواهد شد تا زنجیره حفظ شود. اما همانطور که اشاره کردیم نتیجهی هدف پیشبینی شده برای مقایسه با نتیجه تابع هش تغییر میکند. با توجه به اینکه قدرت پردازشی پردازندهها و همچنین تعداد ماینرها روز به روز افزایش پیدا میکند، از اینرو زمان میانگین ۱۰ دقیقهای برای ثبت هر بلوک کاهش مییابد و در نتیجه سیستم برای باقی ماندن زمان میانگین ثبت بلوک روی ۱۰ دقیقه، نتیجه کار را سختتر میکند. سختی کار صورت میانگین با ثبت هر ۲۰۱۶ بلوک از نو تعیین میشود. پاداش معدنکاوی نیز هر ۲۱۰٫۰۰۰ بلوک یکبار نصف میشود. در حال حاضر پاداش معدنکاوی هر بلوک بیتکوین ۱۲.۵ بیتکوین است. این رویه تا استخراج تمام بیتکوینها ادامه خواهد داشت. در حال حاضر بیش از ۱۶.۵ میلیون بیتکوین استخراج شده و تقریبا ۴.۵ میلیون بیتکوین دیگر تا سال ۲۱۴۰ استخراج خواهد شد. در حال حاضر ارزش بازار بیتکوینهای استخراج شده بیش از ۷۴ میلیارد دلار است که افزایش ارزش هر بیت کوین این رقم را تغییر میدهد. تابع رمزنگاری یا هش SHA-2 یا Secure Hash Algorithm 2 مجموعهای از تایعهای رمزنگاری است که توسط آژانس امنیت ملی ایالات متحدهی آمریکا طراحی شدهاند. تابع هش رمزنگاری شده مجموعهای از الگوریتمهای مبتنی بر عملیات ریاضی است که روی دادههای دیجیتال صورت میپذیرد. بزرگترین ویژگی توابع رمزنگاری یا هش این است که هیچگاه امکان ندارد یک تابع هش با ورودهای متفاوت، نتیجهای یکسان را نتیجه بدهد. البته SHA-2 تنها استاندارد موجود برای رمزنگاری نیست و پیش از آن شاهد استفاده از SHA-1 بهعنوان یک روش رمزنگاری بودیم. خانوادهی رمزنگاری به روش SHA-2 متشکل از ۶ تابع است که ۲۲۴، ۲۵۶، ۳۸۴ و ۵۱۲ بیتی هستند. این توابع شامل SHA-224، SHA-256، SHA-384، SHA-512، SHA-512/224 و SHA-512/256 میشوند. انگیزه انگیزه را باید اصلیترین دلیلی خواند که باعث میشود گرههای شبکه سلامت سیستم را حفظ کنند. اولین تراکنش در هر بلوک، اهمیت بسیار زیادی دارد، چراکه اولین تراکنش مربوط به تولید بیتکوین جدیدی است که به عنوان پاداش در اختیار ماینر قرار میگیرد. همین پاداش باعث میشود تا ماینرها نیروی پردازشی خود را در جهت سلامت سیستم مورد استفاده قرار دهند. در واقع به همین دلیل است که گرههای شبکه که در حال تایید بلوکهای جدید هستند، معدنکاو نام گرفتهاند، چراکه این افراد در ایجاد بیتکوینهای جدید نقش اصلی را بر عهده دارند و همچون معدنکاوانی هستند که در معدن طلا رگههای جدیدی از طلا را یافته و به ذخایر اضافه میکنند. افزایش میزان بیتکوینهای در گردش به منابعی بستگی دارد که معدنکاوان اختصاص میدهند. در مورد پول رمزنگاری شده این منابع شامل انرژی الکتریکی، زمان و قدرت پردازشی است. البته باید به این نکته اشاره کنیم که با توجه به محدودیت ۲۱ میلیونی تعداد بیتکوینها، پس از تولید ۲۱ میلیون بیتکوین دیگر شاهد ارائهی پاداش در قالب بیتکوین جدید به ماینرها نخواهیم بود و سیستم درصدی از پول تراکنش انتقالی را به ماینر برای تایید تراکنشها انتقال خواهد داد تا همچنان صحت عملکرد سیستم حفظ شود. البته این درصد که سیستم را تا حدودی شبیه به عوارض بانکی دریافت شده برای انتقال بانکی میکند، بسیار کمتر است و از اینرو بازهم برتری با بیتکوین خواهد بود. پاداش در بیتکوین به نوعی در نظر گرفته شده که علاوه بر تشویق ماینرها برای تایید تراکنشها، چرخهی سالمی را نیز ایجاد میکند. حتی اگر یک گره با نیروی پردازشی بسیار بالا بتواند بر نیروی پردازشی کل سیستم بیتکوین غلبه کند، پاداش به اندازهای خواهد بود که وی قدرت خود را در جهت کلاهبرداری و از میان بردن صحت عملکرد سیستم به کار نگیرد، چراکه بیتکوینهای دریافت شده از طریق معدنکاوی بسیار بیشتر خواهد بود. |