ورود به دنیای بلاکچین - قسمت دوم

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

تابع درهم ساز

هش یک تابع یک طرفه است به این معنی که از مقدار هش شده توسط تابع نمیتوان به داده اصلی رسید. اگر دو سیستم مختلف یک ورودی را دریافت کنند و یک تابع hash یکسان را روی آن اجرا کنند باید مقدار hash یکسانی را بدست آورند. همچنین اگر بلوک های دیتا متفاوت باشند امکان ندارد مقدار هش آن ها با هم یکسان باشد. الگوریتم هایی مثل MD و SHA از انواع الگوریتم های درهم سازی یا Hashing هستند که بیشترین استفاده را دارند. [1]

امضاء دیجیتال

امضاء دیجیتال در واقع مقدار هش پیام شماست که توسط کلید خصوصی شما امضا شده است. در بلاکچین، از طریق امضا کردن متوجه می­‌شویم که دقیقا چه کسی تراکنش را آغاز کرده است.

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

الگوریتم امضای دیجیتال معمول مورد استفاده در بلاکچین، الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA) است. [2] , [3]

درخت مرکل

فرض میکنیم تراکنشی که از طریق آلیس به باب قرار است ارسال شود A نام دارد. این تراکنش همراه تراکنش های دیگری مثلا B، C و D در یک بلاک قرار میگیرد. هریک از تراکنش ها هش میشوند تا مجبور نباشیم جزئیات تراکنش را نگه داری کنیم. نگه داری مقدار چهار هش کار دشواری نیست اما مثلا هر بلاک بیتکوین به طور متوسط، 2000 تراکنش را شامل میشود. از طرفی داریم: [4]

H(A) + H(B) = H(AB) and H(C)+H(D)=H(CD)

اکنون ما تعداد هش ها را به نصف کاهش دادیم. میتوان همین رویه را ادامه داد.

H(AB) + H(CD) = H(ABCD)

در آخر تنها یک مقدار هش برای نگه داری داریم که به آن ریشه درخت مرکل گفته میشود.

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

فرض کنیم میخواهیم وجود تراکنش HD را بررسی کنیم. برای انجام این کار به جای کل بلاکچین تنها ریشه درخت مرکل، HAB، HEFGH و HC را نیاز داریم. [5]

ماینینگ

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

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

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

محتویات یک بلاک شامل هدر بلاک و مقداری داده است. هدر بلاک شامل ریشه درخت مرکل، هش بلاک قبلی و یک مقدار نانس است.

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

گفتیم که هدر بلاک دارای سه مقدار ریشه درخت مرکل، هش تابع قبلی و یک مقدار نانس است، میدانیم که مقدار ریشه درخت مرکل و هش بلاک قبلی در هدر بلاک ثابت هستند و تنها نانس است که دارای یک مقدار متغیر است.

Output = SHA-256( MerkleRoot + SHA-256(PreviousBlock) + Nonce)

هر گره ای که با تغییر دادن مقدار نانس، زودتر به خروجی کمتر از مقدار مشخص شده برسد ماینر آن بلاک خواهد بود و به عنوان جایزه برای ایجاد انگیزه مقداری ارز دیجیتال و همچینین هزینه تراکنش های آن بلاک تعلق میگیرد. برای انجام فرآیند ماینینگ نیاز به سخت افزارهای قدرتمند مانند کارت گرافیکی و cpu با توان پردازشی بالا و دستگاه های اسیک نیاز است که انرژی بسیار زیادی را نیز مصرف میکنند. [4]

استخر استخراج

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

درجه سختی

عددی که خروجی هش هدر بلاک از آن کمتر است یک عدد 256 بیتی خواهد بود که سمت چپ آن، تعدادی صفر وجود دارد. تعداد صفرهای موجود در سمت چپ، معیار درجه سختی سیستم هستند. هرچه تعداد صفرها بیشتر باشد مقدار عدد 256 بیتی کوچکتر خواهد بود و در نتیجه به دست آوردن مقدار نانس سخت تر خواهد بود. [6]

برای جلوگیری از تورم، به طور میانگین هر ده دقیقه یک بلاک در شبکه ماین می شود و بعد از هر 2016 بلاک، درجه سختی مجددا تنظیم میشود.

[1] Jean-Sébastien Coron, Yevgeniy Dodis, Cecile Malinaud, Prashant Puniya, “Merkle-Damgård Revisited: How to Construct a Hash Function”, 2005

[2] Zibin Zheng, Shaoan Xie, Hongning Dai, Xiangping Chen, and Huaimin Wang, “An Overview of Blockchain Technology: Architecture, Consensus, and Future Trends”, 2017

[3] D. Johnson, A. Menezes, and S. Vanstone, “The elliptic curve digital signature algorithm (ecdsa),” International Journal of Information Security, vol. 1, no. 1, pp. 36–63, 2001

[4] WENBO WANG, DINH THAI HOANG, PEIZHAO HU, ZEHUI XIONG, DUSIT NIYATO, PING WANG, YONGGANG WEN, AND DONG IN KIM, “A Survey on Consensus Mechanisms and Mining Strategy Management in Blockchain Networks”, 2018

[5] R. C. Merkle, “A digital signature based on a conventional encryption function,” in Advances in Cryptology - CRYPTO ’87: Conference on the Theory and Applications of Cryptographic Techniques, C. Pomerance, Ed., Santa Barbara, CA, Aug. 1987, pp. 369–378

[6] Mehrdad Salimitari and Mainak Chatterjee Department of Computer Science University of Central Florida Orlando, “A Survey on Consensus Protocols in Blockchain for IoT Networks”, 2019