انجمن توسعه قرارداد هوشمند

جلسه دوم : منابع مطالعه بیشتر

منابع مطالعه بیشتر در مورد مقدمات بلاکچین

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

هشینگ یا هش کردن یعنی چه؟

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

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

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

خروجی هشینگ را “هش” یا “مقدار هش” می‌گویند و تابع ریاضی آن‌ به “تابع هش” معروف است.

تابع هش (Hash Function) چیست؟

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

به عبارتی دیگر، می‌توان گفت تابع هش یک رشته کد با طول متناوب را دریافت و تبدیل به یک خروجی با طول ثابت می‌کند.

تابع-هش-چیست_500x350

ویژگی‌های اصلی تابع هش

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

کاربردهای تابع هش

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

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

  • بررسی صحت داده: یکی دیگر از کاربردهای الگوریتم‌‌های هش، تولید چک سام‌ (CheckSum) بر روی فایل‌هاست. چک سام، به کاربران تضمین صحت داده می‌دهد و به آن‌ها کمک می‌کند تا هر تغییری را بر روی فایل‌ها سریعاً متوجه شوند. اما این سیستم در مورد اصالت فایل تضمینی نمی‌دهد و هکرها می‌توانند با تغییر کلی فایل، هش جدید تولید و از این طریق به داده‌‌های فایل دسترسی پیدا کنند. استفاده از چک سام زمانی کاربرد دارد که کاربر در رابطه با اصالت فایل اطمینان داشته باشد.

تابع هش چگونه کار می‌کند؟

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

عملکرد-تابع-هش_500x350

در مثال زیر، کلمه‌ Ircc را با 2 حالت حرف اول بزرگ و حرف اول کوچک در تابع هش بیت کوین همان SHA-256 جای داده‌ایم:

Ircc: 65592d00da56347062e6dc84e8ff978ba021267b288bbe3c7f2cb5c04d797bd4

ircc: 478734e921cc9b571d7ab5fc226dcb2ce59fcab83fb73258ab8082382d86c6ee

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

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

تابع مطرح دیگری که وجود دارد، SHA-1 که مخفف عبارت الگوریتم‌ هش ایمن ‌(Secure Hash Algorithms) است. این عبارت شامل مجموعه‌ای از توابع هش رمزنگاری شده است که عبارتند از: SHA-0 ،SHA-1 ،SHA-2 و SHA-3.

تابع SHA-256 به همراه SHA-512 و انواع دیگر، بخشی از گروه SHA-2 هستند. در حال حاضر، فقط گروه‌های SHA-2 و SHA-3 ایمن در نظر گرفته می‌شوند.

حال اگر مثال بالا را در تابع SHA-1 قرار دهیم؛ مقادیر تابع زیر به‌دست خواهد آمد:

Ircc: a6f9af856be33de008c9f5ffb942e2c4e2d64

ircc: 3ec8e2b221402e786dfa6f0884a0e7f7be11c

این تابع هم مانند همه‌ی توابع از ورودی‌هایی با طول متناوب، مقادیر ثابت تولید می‌کند و در صورت تغییر کد ورودی مقدار هش آن تغییر می‌کند.

تابع هش رمزنگاری چیست؟

تابع هش رمزنگاری همان تابع هش است که تا این‌‌جا ویژگی‌های آن‌را بازگو کردیم. با این تفاوت که این الگوریتم از فرایند رمزنگاری برای افزایش دو‌ چندان امنیت استفاده می‌کند.

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

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

ویژگی‌های تابع هش رمزنگاری

تابع-هش-رمزنگاری_500x350

1. قطعی بودن

تابع هش در ازای یک ورودی مشخص، مقدار هش ثابت ارائه می‌دهد. فرقی نمی‌کند این ورودی چند بار در تابع قرار بگیرد؛ میزان خروجی همیشه ثابت خواهد بود.

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

2. سرعت بالا در محاسبه

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

3. یک‌طرفه بودن

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

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

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

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

4. تغییر خروجی با تغییرات ورودی

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

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

5. متفاوت بودن مقادیر هش برای هر ورودی

هر ورودی در فرایند هشینگ دارای یک مقدار هش مخصوص به خود خواهد بود و ممکن نیست که هش دو مقدار متفاوت ورودی با‌ هم مشابه یا برابر باشند.

می‌توان گفت هیچ‌گاه دو مقدار متفاوت ورودی تحت هیچ شرایطی هش خروجی شبیه به‌هم نخواهند داشت. اگر ورودی A دارای مقدار هش H3 باشد، امکان ندارد که ورودی B نیز همین خروجی را بدهد.

ویژگی_های-تابع-هش_500x350

6. ثابت بودن میزان خروجی

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

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

استفاده از تابع هش در ماینینگ ارزهای دیجیتال

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

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

تابع-هش-در-استخراج_500x350

نرخ هش ریت

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

اگر میزان هش ریت شبکه به‌خاطر افزایش عملیات ماینینگ بالا برود؛ سیستم به‌طور خودکار سختی استخراج را طوری تنظیم می‌کند که میانگین لازم برای استخراج هر بلاک در شبکه بیت کوین همان 10 دقیقه باقی بماند.

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

محاسبه نرخ هش

«هش بر ثانیه» رایج‌‌ترین مقیاس برای اندازه‌گیری نرخ هش است که نشان می‌دهد در هر ثانیه چند هش انجام می‌گیرد.

تعدادی دیگر از مقیاس‌های اندازه‌گیری هش ریت که در واقع تنها عمل تبدیل واحد بر روی آن‌ها صورت گرفته است، عبارتند از:

  • 1 KH/s یا هزار هش بر ثانیه
  • 1 MH/s یا یک میلیون هش بر ثانیه
  • 1 GH/s یا یک میلیارد هش بر ثانیه
  • 1 TH/s یا یک تریلیون هش بر ثانیه
  • 1 PH/s یا یک کوادریلیون هش بر ثانیه
  • 1 EH/s یا یک کوینتیلیون هش بر ثانیه

ارقام بالا به ترتیب کیلوهش، مگاهش، گیگاهش، تراهش، پتاهش و اگزا هش نام‌گذاری می‌شوند.

توابع هش پر کاربرد

1. MD5

تابع هش MD که کوتاه شده‌ی عبارت Message Digest و به معنای خلاصه پیام است؛ شامل توابع هش MD2 ،MD4 ،MD5 و MD6 است. رونالد ریوست در سال 1991 میلادی تابع MD5 را جایگزینی برای نسخه‌ی پیشین آن یعنی MD4 طراحی کرد. MD5 هش 128 بیتی تولید می‌کند و به عنوان هش رمز‌نگاری طراحی شده است که در دوره‌ای بسیار از آن استفاده می‌شد، اما به‌دلیل ایرادهای متعددی که داشت، به‌تدریج از فرایندهای رمزنگاری کنار گذاشته شد. امروزه از تابع هش MD5 برای چک سام استفاده می‌شود.

2. SHA

کمی قبل‌تر اشاره کردیم که SHA الگوریتم هش ایمن است. این تابع هش توسط موسسه ملی استاندارد و فناوری (NIST) آمریکا و سایر سازمان‌‌های امنیتی طراحی شده است. SHA-0 نخستین عضو خانواده SHA در سال 1993 معرفی شد که کمی بعد به‌دلیل مشکلات قابل توجهی که داشت، نسخه‌ی جدیدتری از آن ارائه شد تا نقایص نسخه‌ی پیشین را رفع کند. نام تابع جدید SHA-1 بود.

SHA-1 یک تابع هش 160 بیتی مشابه تابع MD5 بود و با هدف این‌که بخشی از الگوریتم امضای دیجیتال باشد، طراحی شد. سال 2005 در این تابع هش نیز مشکلات امنیتی کشف شد که احتمال داشت هکرها به آن نفوذ پیدا کنند.

پس توسعه دهندگان الگوریتم جدید و ایمن SHA-2 که متشکل از ۶ تابع هش با مقادیر هش متفاوت 224، 256، 384 و 512 بیتی بود را معرفی کردند. نام‌ این توابع نیز با توجه به مقدار هش تولید شده‌ توسط آن‌‌ها انتخاب شده است؛ SHA-224 ،SHA-256 SHA-384 ،SHA-512 ،SHA-512/224 و SHA-512/256. تفاوت اصلی این الگوریتم‌ها در طول مقدار هش ‌آن‌هاست.

توابع-هش-پرکاربرد_500x350

بالاتر اشاره کردیم که الگوریتم SHA-256 در بلاکچینِ بیت کوین استفاده می‌شود و پرکاربرد‌ترین تابع هش جهان است. همچنین از این الگوریتم در TLS ،SSL ،PGP ،SSH، توسعه چند منظوره پست الکترونیک، اینترنت/امن و IPsec یا همان ایمن‌سازی پروتکل اینترنت استفاده می‌شود.

SHA-3 آخرین عضو از خانواده الگوریتم هش ایمن، در سال 2015 توسط NIST منتشر شد. در سال 2012 در جریان یک مسابقه‌ در رابطه با طراحی الگوریتمی جدید، این تابع به عنوان برترین تابع هش برگزیده شد. SHA-3 در واقع زیرمجموعه‌ای از خانواده گسترده‌تری به نام Keccak است.

3. RIPEMD

RIPEMD کوتاه شده‌ی عبارت «RACE Integrity Primitives Evaluation Message Digest» است. این تابع نیز مانند الگوریتم SHA، مجموعه‌‌ای از توابع هش است که یک گروه تحقیقاتی بلژیکی به نام COSIC در سال ۱۹۹۶ میلادی آن‌را معرفی کردند. در طراحی این تابع از اصول به‌کار رفته در طراحی تابع MD4 و سیستم عملکردی SHA-1 استفاده شده است. توابع این مجموعه دارای مقادیر متفاوت 128، 160، 256 و 320 بیتی هستند و امنیت بالایی دارند.

4. Whirlpool

این الگوریتم یکی دیگر از توابع هش رمزنگاری است که در سال 200 توسط وینسنت ریمن و پائولو بارتو طراحی شد. Whirlpool بر اساس نسخه اصلاح شده‌ی استاندارد رمزنگاری پیشرفته (AES) ساخته شده است. این تابع هر پیامی با طول کمتر از 2256 بایت را دریافت و به مقدار هش 64 بایتی تبدیل می‌کند.

تابع هش ویرپول از سال 2000 تاکنون، 2 بار بازبینی شده است. در بازبینی نخست در سال 2001، S-box را تغییر دادند تا پیاده‌سازی این الگوریتم بر روی سخت‌افزار آسان‌تر شود. در سال 2003 و بازبینی دوم یک مشکل امنیتی در آن کشف شد و سریعاً توسط توسعه دهندگان تابع بر‌طرف شد. الگوریتم اولیه و اصلی را Whirlpool-0، بازبینی اول Whirlpool-T و نسخه نهایی را Whirlpool نام دارند.

5. Blake

تابع هش Blake جزو 5 الگوریتم برتر به انتخاب موسسه ملی استاندارد و فناوری ایالات متحده (NIST) است. این الگوریتم همانند SHA-2، از 2 تابع مختلف تشکیل شده است. یکی از کلمات 32 بیتی استفاده می‌کند و طول هش محاسبه‌شده‌ی آن حداکثر 256 بیت است؛ دیگری از کلمات 64 بیتی استفاده می‌کند با طول هش 512 بیت.

Blake2 در سال 2012 منتشر شد. هدف از طراحی این الگوریتم، معرفی جایگزینی برای الگوریتم‌های پرکاربرد اما آسیب‌پذیر MD5 و SHA-1 در برنامه‌هایی که نیازمند کارایی بالایی بودند، بود. این تابع نیز خود به دو زیرگروه Blake2b و Blake2s تقسیم می‌شود. گفته می‌شود Blake2 از MD5، SHA-1، SHA-2 و SHA-3 سریع‌تر است و از لحاظ امنیت نیز با SHA-3، یعنی آخرین نسخه الگوریتم هش ایمن برابری می‌کند.

صحبت پایانی

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

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

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

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

منبع

https://wallex.ir/blog/تابع-هش-به-زبان-ساده/
منابع بیشتر:

  1. تابع هش رمزنگاری (Hash Function) چیست؟ - میهن بلاکچین
  2. Blockchain Underpinnings: Hashing by ConsenSys Media
  3. How Hash Algorithms Work
  4. Cryptographic hash functions on Wikipedia
  5. Cryptographic hash functions by the Kahn Academy
  6. Video: Hashing Algorithms and Security by Computerphile
10 Likes

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

به گزارش کوین ایران به نقل از بایننس، سیستم های رمزنگاری در حال حاضر به دو دسته عمده رمزنگاری متقارن (Symmetric Cryptography) و رمزنگاری نامتقارن (Asymmetric Cryptography) تقسیم می شوند. در حالی که رمزگذاری متقارن اغلب به عنوان مترادفی برای رمزنگاری متقارن استفاده می شود رمزنگاری نامتقارن شامل دو مورد کاربردی اصلی یعنی رمزگذاری نامتقارن و امضای دیجیتال است. بنابراین می توان گروه های رمزنگاری را به شکل زیر نمایش داد:

  • رمزنگاری کلید متقارن
    • رمزگذاری متقارن (Symmetric Encryption)
  • رمزنگاری نامتقارن (رمزنگاری کلید عمومی)
    • رمزگذاری نامتقارن (Asymmetric Encryption)
    • امضای دیجیتال (می تواند شامل رمزگذاری نباشد)

در ادامه، الگوریتم های رمزگذاری متقارن و نامتقارن با جزییات بیشتری مورد بررسی قرار می گیرند.

رمزگذاری متقارن در برابر رمزگذاری نامتقارن

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

درک کلید های رمزگذاری

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

در حالی که الگوریتم های رمزنگاری متقارن از کلید های یکسانی برای رمزگذاری و رمزگشایی استفاده می کنند، در طرف مقابل، الگوریتم های رمزنگاری نامتقارن از یک کلید برای رمزگذاری و از کلید دیگر برای رمزگشایی داده ها بهره می برند. در سیستم های نامتقارن، کلیدی که برای رمزگذاری مورد استفاده قرار می گیرد کلید عمومی (Public Key) نام دارد و می تواند بدون هیچ مشکلی با دیگران به اشتراک گذاشته شود. در طرف مقابل، کلیدی که برای رمزگشایی مورد استفاده قرار می گیرد کلید خصوصی (Private Key) نامیده می شود و باید به صورت یک راز بماند.

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

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

تأثیر طول کلید در امنیت رمزنگاری

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

در الگوی متقارن، کلید ها به صورت تصادفی انتخاب می شوند و طول آنها با توجه به سطح امنیت مورد نیاز معمولاً برابر 128 یا 256 بیت در نظر گرفته می شود. با این حال، در رمزگذاری نامتقارن، باید یک رابطه ریاضی مابین کلید های عمومی و خصوصی وجود داشته باشد که به معنای وجود یک الگوی ریاضی مابین آنها است. با توجه به اینکه این الگو بالقوه قابل کشف توسط مهاجمان است و می تواند برای باز کردن پیام رمزگذاری شده مورد استفاده قرار گیرد، کلید های نامتقارن برای تأمین سطح برابری از امنیت (نسبت به کلید های متقارن) باید از طول بیشتری برخوردار باشند. برای مثال، این تفاوت در طول کلید به این معنی است که یک کلید متقارن 128 بیتی و یک کلید نامتقارن 2048 بیتی می توانند سطح یکسانی از امنیت را فراهم کنند.

مزایا و معایب روش های رمزنگاری متقارن و نامتقارن

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

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

مورد کاربری: رمزگذاری متقارن

روش رمزگذاری متقارن به دلیل سرعت زیاد آن در بسیاری از سیستم های کامپیوتری برای محاظت از اطلاعات به کار می رود. برای مثال، استاندارد رمزگذاری پیشرفته (Advanced Encryption Standard-AES) برای محافظت از داده های دسته بندی شده و اطلاعات حساس توسط دولت آمریکا مورد استفاده قرار می گیرد. استاندارد رمزگذاری پیشرفته جایگزین استاندارد رمزگذاری داده (Data Encryption Standard-DES) شده است که در سال 1970 به عنوان استانداردی برای رمزگذاری متقارن تولید شده بود.

مورد کاربری: رمزگذاری نامتقارن

رمزگذاری نامتقارن در سیستم هایی مورد بهره برداری قرار می گیرد که باید کاربران زیادی نسبت به رمزگذاری و رمزگشایی پیام یا مجموعه از داده ها اقدام کنند به ویژه زمانی که سرعت و قدرت محاسباتی به عنوان مهم ترین دغدغه مدیران سیستم مطرح نمی باشد.

مورد کاربری: سیستم های ترکیبی

روش های رمزگذاری متقارن و نامتقارن در بسیاری از سیستم ها در کنار یکدیگر استفاده می شوند. به عنوان نمونه ای از این سیستم های ترکیبی می توان به پروتکل های رمزنگاری لایه سوکت امنیتی (Security Sockets Layer-SSL) و امنیت لایه انتقال (Transport Layer Security-TLS) اشاره کرد که برای فراهم سازی ارتباطات امن در بستر اینترنت طراحی شده اند. در حال حاضر پروتکل SSL یک پروتکل نا امن در نظر گرفته می شود و استفاده از آن نباید ادامه پیدا کند. در طرف مقابل، پروتکل SSL امن است و به صورت گسترده در بسیاری از مرورگر های اینترنتی به کار می رود.

آیا رمز ارز ها از رمز نگاری استفاده می کنند؟

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

با این وجود، با توجه به این واقعیت که در بیت کوین و دیگر رمز ارز ها از جفت کلید عمومی و خصوصی استفاده می شود، این تصور غلط رایج وجود دارد که سیستم های بلاک چینی از الگوریتم های رمزنگاری نامتقارن استفاده می کنند. ولی همان طور که قبلاً نیز اشاره شد رمزگذاری نامتقارن و امضای دیجیتال به عنوان دو کاربرد اصلی رمزنگاری نامتقارن (Public Key Cryptography) شناخته می شوند.

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

نتیجه گیری

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

منبع:

منابع بیشتر

  1. How are Ethereum addresses generated?
  2. Wikipedia: Public Key Cryptography
3 Likes

درخت مرکل چیست؟

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

توابع هش کریپتوگرافیک

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

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

یک تابع هش کریپتوگرافیک. عکس از ویکی پدیا

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

در زمینه بلاک چین، از الگوریتم‌های هشینگ برای تعیین حالت بلاک چین استفاده می‌شود. بلاک چین ها در حقیقت لیست‌های پیوسته‌ای هستند که در آن‌ها دیتا و اشاره‌گر هش وجود دارد. اشاره‌گر هش (hash pointer) در هر بلاک به بلاک پیشین اشاره دارد و مشخص می‌کند بلاک قبلی چیست. به این ترتیب یک زنجیره از بلاک‌ها به وجود می‌آید که یکی پس از دیگری به هم متصل هستند؛ به همین خاطر به این مجموعه «بلاک چین» یا زنجیره بلاکی گفته می‌شود. به این ترتیب آنچه یک بلاک را به بلاک کنار خود وصل می‌کند یک اشاره‌گر هش است. هر اشاره‌گر هش دارای دو بخش است. یکی آدرس بلاک قبلی و دیگری هش برگرفته از دیتای موجود در بلاک قبلی. در این روش هر هش که خروجی دیتای بلاک قبلی است، بیانگر حالت کل بلاک چین نیز می‌باشد زیرا این هش نتیجه‌‌ تمام دیتاهای هش شده‌ بلاک‌های پیشین است. این هش خروجی (اگر الگوریتم SHA-256 باشد) شبیه چنین چیزی است:

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

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

با این وجود همان‌طور که در ادامه خواهید دید، درختان مرکل خطر ناچیزی برای تمامیت دیتا ایجاد می‌کنند و به کمک اثبات مرکل (Merkle proof) می‌توان دیتا را در سرتاسر درخت نگاشت کرد (نقشه آن را تهیه کرد).

درخت مرکل و اثبات مرکل

نام درخت مرکل برگفته از رالف مرکل (Ralph Merkle) است. دانشمندی که در سال 1979 این مفهوم را معرفی نمود. درخت‌های مرکل در حقیقت ساختارهایی از دیتا به شکل درخت هستند که در آن‌ها، هر گره غیر – برگ، هش گره‌های زیرشاخه‌یخود است. گره‌های برگ، پایین‌ترین ردیف گره در درخت هستند. ممکن است ابتدا درک درخت مرکل دشوار به نظر برسد ولی اگر به تصویر زیر نگاه کنید (که یکی از شکل‌های رایج است) می‌بینید که درک آن ساده است.

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

در شکل بالا مهم است توجه کنید که گره‌های غیر برگ یا همان شاخه‌های سمت چپ (Hash 0-0 و Hash 0-1) هش‌های زیرشاخه خود یعنی L1 و L2 هستند. یک ردیف بالاتر، شاخه Hash 0‌، هش دو زیرشاخه خود یعنی شاخه‌های Hash 0-0 و Hash 0-1 است.

نمونه بالا یک درخت مرکل ساده است. این رایج‌ترین نمونه به نام درخت مرکل باینری (binary) شناخته می‌شود. همان‌طور که می‌بینید یک هش راس وجود دارد که هش همه‌ی درخت است. این هش را با نام روت هش یا هش ریشه می‌شناسند. درخت‌ مرکل یک ساختار دیتا است که می‌تواند n شاخه داشته باشد و همه‌ی آن را با یک هش بیان کند.

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

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

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

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

درخت مرکل در بیت کوین

تابع هش کریپتوگرافیک به کار رفته در بیت کوین را «الگوریتم SHA-256 » می‌نامند. این نام مخفف عبارت «الگوریتم هشینگ امن» (Secure Hashing Algorithm) است که خروجی آن طول ثابتی به اندازه 256 بیت دارد. تابع اصلی درخت مرکل در بیت کوین ابتدا تراکنش‌ها را در بلاک ذخیره کرده و در پایان آن‌ها را از بلاک بیرون می‌کشد.

همان‌طور که پیش‌تر گفتیم، در بلاک چین بلاک‌ها به وسیله‌‌ی هش‌ها به هم متصل هستند و این هش‌ها برگرفته از بلاک قبلی هستند. در بیت کوین، هر بلاک دارای تعدادی تراکنش و یک سربلاک یا بلاک هِدِر (block header) است. سربلاک دارای بخش‌های زیر است:

  • شماره ورژن بلاک
  • هش بلاک پیشین
  • تایم‌استمپ یا برچسب زمانی
  • سختی استخراج مورد نظر
  • نانس
  • روت هش مرکل

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

ابتدا ماینرها، تراکنش‌ها را در بلاک‌ قرار می‌دهند سپس کار درخت مرکل آغاز می‌شود. به این صورت که ابتدا از تراکنش‌ها هش گرفته شده و این روند هش‌گیری در نهایت به ریشه مرکل (Merkle root) یا همان روت هش می‌رسد که در سربلاک ذخیره می‌گردد. این ساختار چند مزیت مهم دارد. نخست اینکه همان‌طور که در وایت پیپر بیت کوین آمده، این ساختار باعث به وجود آمدن گره‌های «تایید پرداخت ساده» (SPV) می‌شود. این گره‌ها به «کلاینت‌های سبک‌وزن» (lightweight clients) مشهورند. کلاینت‌ سبک وزن مجبور نیست همه بلاک چین بیت کوین را دانلود کند؛ تنها کافی است سربلاک‌های بلندترین زنجیره بیت کوین را بگیرد. به این منظور، گره‌های SPV باید در گره‌های همتای خود جستجو کنند تا زمانی که مطمئن شوند سربلاک‌هایی که در اختیار دارند مربوط به بلندترین زنجیره هستند. هر گره SPV می‌تواند وضعیت یک تراکنش را تعیین کند. برای این کار گره با استفاده از اثبات مرکل، تراکنش را در یک درخت مرکل مشخص نگاشت می‌کند. روت هش این درخت مرکل در سربلاکی قرار دارد که بخشی از بلندترین زنجیره است.

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

درخت مرکل در دیگر بلاک چین ها و سیستم‌ها

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

اتریوم که در کنار بیت کوین شناخته‌ شده‌ترین رمز ارز جهان است، بزرگ‌ترین نمونه استفاده از درخت مرکل پس از بیت کوین است. ساختار درخت مرکلی که اتریوم اجرا کرده با نسخه بیت کوین تفاوت دارد. دلیل آن این است که اتریوم یک سیستم تورینگ کامل (turing-complete) است و پلتفرمی برای طراحی کارکردها و اپلیکیشن‌های پیچیده‌تر است. به همین خاطر نسخه درخت مرکل به کار رفته در اتریوم پیچیده‌تر است. این نسخه، درخت مرکل پاتریشیا (Merkle Patricia Tree) نام دارد و در حقیقت 3 درخت مرکل جداگانه است که برای سه کار متفاوت استفاده می‌شوند.

درخت مرکل یکی از اجزای اساسی سیستم‌های کنترل نسخه‌ توزیع شده است و سیستم‌هایی مانندGit و IPFS از آن بهره برده‌اند. توانایی درخت مرکل در تایید بی‌دردسر تمامیت دیتا‌ی مشترک میان کامپیوترها با فرمت P2P آن را به یک ابزار غیرقابل ارزش‌گذاری برای چنین‌ سیستم‌هایی تبدیل کرده است.

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

منبع

منابع بیشتر:

  1. Merkling in Ethereum by Vitalik Buterin
  2. Ever Wonder How Merkle Trees Work? by ConsenSys Media
  3. Patricia Merkle Trees
3 Likes

#ساختار بلاکچین

ساختار بلاک چین چگونه است؟ با بخش های مختلف آن آشنا شوید

مازیار نسیمی3 تیر 1398 - 22:35

03,203 زمان مطالعه 13 دقیقه

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

در این مقاله به ساختار بلاک چین، اجزای سازنده آن و تعامل این اجزا با هم می‌پردازیم که عبارتند از:

  • نودهای شبکه همتا به همتا یا P2P
  • ویژگی های بلاک و بلاک جنسیس
  • تراکنش در دفترکل
  • فرآیند تایید – ماینینگ
  • اجماع داخل معماری بلاک چین
  • گواه اثبات کار

اصطلاح بلاک ‌چین اولین بار در سال ۱۹۹۱ تعریف شد. گروهی از محققان در صدد این بودند که ابزاری برای ثبت دیجیتال اسناد ایجاد کنند تا دیگر کسی نتواند آنها را تغییر دهد. سپس این روش توسط ساتوشی ناکاموتو با اعمال تغییراتی در آن به کار گرفته شد. در سال ۲۰۰۸، ناکاموتو اولین ارز دیجیتال با نام بیت کوین را ایجاد کرد که پروژه مبتنی بر بلاک چین بود.

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

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

ساختار بلاک چین به چه صورت است؟

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

به عبارت ساده‌تر، مفهوم بلاک چین را می‌توان با کاری که با برنامه گوگل داکز (Google Docs) انجام می‌دهد مقایسه کرد. می‌توانید روزهای باقی مانده برای ویرایش سند doc. را به سایر اعضا یادآوری کنید و منتظر ویرایش آنها باشید. با وجود برنامه گوگل داکز می‌توانید همزمان بر روی سایر اسناد نیز کار کنید.

روش بلاک چین امکان این موضوع را ایجاد می‌کند که اطلاعات دیجیتالی به جای کپی شدن، توزیع شوند. این دفترکل توزیع شده باعث ارائه شفافیت، اعتماد و امنیت بیشتر اطلاعات می‌شود.

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

فناوری بلاکچین چیست ؟ بزرگترین اختراع بشر بعد از اینترنت

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

معماری سنتی World Wide Web یا همان WWW، از شبکه کلاینت-سرور استفاده می‌کند. در این مورد، سرور تمام اطلاعات مورد نیاز را در یک مکان نگهداری می‌کند تا به روز رسانی آن آسان شود؛ زیرا سرور یک دیتابیس متمرکز است که توسط تعدادی از مدیران دارای مجوز کنترل می‌شود.

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

به طور خلاصه، بلاک چین دفترکل (عمومی یا خصوصی) توزیع شده و غیرمتمرکزی از انواع مختلف تراکنش‌ها است در شبکه همتا به همتا مرتب شده‌اند. این شبکه شامل تعداد بسیار زیادی رایانه است اما اطلاعات بدون اجماع کل شبکه نمی‌تواند تغییر کند.

بررسی مفهوم بلاک چین عمومی و بلاک چین خصوصی در یک نگاه!

معماری فناوری بلاک چین توسط فهرستی از بلاک‌های دارای تراکنش و به ترتیب خاصی ارائه می‌شود. این فهرست‌ها را می‌توان در فایل متنی (نظیر فایل هایی با فرمت txt.) یا به شکل دیتابیس ساده ذخیره کرد. دو معماری بسیار مهم اطلاعات مورد استفاده در بلاک چین عبارتند از:

  • نشانگرها (Pointer ها): متغیرهایی که اطلاعات مربوط به مکان متغیر دیگر را نگهداری می‌کنند. این متغیر به طور خاص به محل قرارگیری متغیر دیگر اشاره می‌کند.
  • فهرست های متصل به هم: توالی بلاک‌هایی که در آن، هر بلاک دارای اطلاعات خاصی است و با کمک نشانگر به بلاک بعدی متصل است.

بلاک اول دارای نشانگر نیست زیرا اولین بلاک در زنجیره است. بدین ترتیب، آخرین بلاک نیز دارای نشانگر بدون ارزشی خواهد بود.

شکل توالی بلاک چین زیر، فهرست به متصلی از ثبت های انجام شده است:

از ساختار بلاک چین می‌توان برای اهداف سازمانی یا شرکتی زیر استفاده کرد:

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

انواع بلاک چین

تمام ساختارهای بلاک چین در سه دسته جای می‌گیرند که عبارتند از:

  • بلاک چین عمومی

بلاک چین عمومی بدان معنا است که اطلاعات و دسترسی به سیستم برای تمام افرادی که تمایل به شرکت در بلاک چین دارند، امکان پذیر است. بلاک چین های بیت کوین، اتریوم لایت کوین عمومی هستند.

  • بلاک چین خصوصی

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

  • کنسرسیوم بلاک چین

این ساختار بلاک چین می‌تواند شامل چند سازمان باشد. در کنسرسیوم، امور توسط کاربران اولیه مدیریت و کنترل می‌شود.

جدول زیر به مقایسه دقیق این سه نوع بلاک چین می‌پردازد:

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

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

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

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

اجزای اصلی سازنده ساختار بلاک چین و نحوه کار آنها

اجرای اصلی سازنده بلاک چین عبارتند از:

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

بلاک چیست؟

بلاک (Block) مجموعه‌ای از تراکنش‌هاست که به بلاک‌چین اضافه شده‌اند.

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

شکل زیر، نحوه کار بلاک چین و کیف پول دیجیتال را نشان می‌دهد.

بهتر است نگاهی دقیق تر به بلاک در بلاک چین بیاندازیم. هر بلاک بلاک‌چین شامل موارد زیر است:

  • اطلاعات مشخص
  • هش بلاک
  • هش بلاک قبلی

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

بلاک‌ چیست؟ قطعات سازنده شبکه بلاک چین

هش چیست؟

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

مورد آخر در بلاک، هش بلاک قبلی است که زنجیره بلاک‌ها را ایجاد می‌کند و عنصر اصلی امنیت بلاک چین است. به طور مثال بلاک ۴۵ به بلاک ۴۶ اشاره می‌کند. اولین بلاک در زنجیره مقداری خاص‌تر است و تمام بلاک‌های تایید شده از بلاک جنسیس به وجود می‌آیند.

هر اقدام مخربی باعث تحریک شدن بلاک به ایجاد تغییر است. سپس تمام بلاک‌های بعدی حاوی اطلاعات نادرست هستند و کل سیستم بلاک چین نامعتبر می‌شود.

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

نود چیست؟

به هر مشارکت کننده در شبکه یک کوین نود گفته می‌شود. نود انواع متفاوتی دارد؛ اما هر کدام از آنها دارای ویژگی یکسانی هستند؛ برای میزبانی کردن یک نود و یا اتصال به آن، سخت افزار خاصی مورد نیاز است.

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

گره یا نود بلاک چین؛ راهنمای جامع انواع نودها!

اجماع چیست؟

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

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

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

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

نحوه ایجاد بلاک چین خصوصی

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

به منظور ایجاد بلاک چین خود، توجه به نکات زیر ضروری است:

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

چند راهکار متن باز برای ایجاد بلاک چین خصوصی وجود دارد. محبوب ترین این راهکارها، هایپرلجر از بنیاد لینوکس است. این پروژه هم چنین به طور گسترده توسط IBM و سایر سازمان های فناوری مشهور نیز مورد استفاده قرار می‌گیرد. هایپرلجر کامپوزر (Hyperledger Composer) مجموعه ابزاری را برای ایجاد بلاک چین ارائه می‌دهد.

راهکارهای دیگر برای ایجاد بلاک چین، اتریوم و کوردا (Corda) هستند.

ایجاد شبکه بلاک چین

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

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

طرفین حاضر در این شبکه عبارتند از:

  • تولید کننده الماس
  • سازمان های دولتی
  • حمل و نقل کنندگان الماس
  • فروشندگان الماس

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

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

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

شکل زیر، نمودار هایپرلجر سطح بالایی برای ایجاد بلاک چین است.

ایجاد کد بلاک چین

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

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

مهارت های لازم برای ایجاد بلاک چین

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

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

توسعه دهندگان از لحاظ مهارت‌های کدنویسی مورد نیاز برای توسعه بلاک‌چین باید با چندین زبان برنامه نویسی آشنا باشند. اگر هدف مورد نظر، پیاده سازی سیستم بلاک چین شخصی سازی شده است، زبان های برنامه نویسی نظیر ++C، پایتون، C، جاوا و رابی به انجام این هدف کمک می‌کنند. هم چنین مهارت‌های توسعه وب نظیر HTML، CSS و Node JS نیز می‌توانند مفید باشند.

اگر به نوشتن قراردادهای هوشمند علاقمند هستید استفاده از اتریوم و زبان برنامه نویسی مبتنی بر قرارداد سالیدیتی لازم است.

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

ویژگی‌های کلیدی ساختار بلاک چین

بلاک چین دارای مزایای بسیار زیادی برای کسب و کارها است. در ادامه به چند ویژگی آن می‌پردازیم.

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

بلاک چین خود را ایجاد کنید

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

فناوری بلاک چین به سازمان ها و شرکت ها ویژگی هایی از جمله امکانات زیر ارائه می‌دهد:

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

بلاک چین با مکانیزم‌های شفاف خود و حداکثر شفافسازی ممکن، سرانجام نحوه انجام تراکنش افراد و جوامع را متحول خواهد کرد. جای تعجبی وجود ندارد که بسیاری از پروژه‌ها از بلاک چین استفاده می‌کنند. برای مثال، TenX کاربران را در خرج کردن ارزهای دیجیتال کمک می‌کند، EOS.IO کاربردهایی برای برنامه های غیرمتمرکز ارائه می‌دهد، آگر (Augur) با تحلیل‌های بازار به پیش بینی رویدادهای آینده می‌پردازد.

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

منبع:

منابع بیشتر

  1. A visual demonstration of a blockchain data structure
  2. Bitcoin Wiki - Blockchain
  3. Solidity Documentation Blockchain Basics
  4. Directed Acyclic Graphs - Wikipedia
3 Likes

قرارداد هوشمند چیست؟ (Smart Contract)

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

تاریخ آخرین به‌روزرسانی این مقاله: اسفند ۱۳۹۹

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

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

قرارداد هوشمند چیست؟

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

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

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

پیشنهاد مطالعه: راه‌‌اندازی انجمن توسعه قرارداد هوشمند توسط زنان توانمند ایرانی

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

مخترع قرارداد هوشمند کیست؟

نیک سابو (Nick Szabo) در سال 1994 برای اولین بار این ایده را بازگو کرد که امکان ذخیره‌سازی قراردادها در قالب یک دستور کامپیوتری و سپس فعال‌سازی خودکار آن درصورت برآورده شدن شرایط مشخص در قرارداد، وجود دارد. وی برای آن، نام قرارداد هوشمند را برگزید. نیک سابو در کتاب «قراردادهای هوشمند: سنگ بنای بازارهای آزاد دیجیتال» بیان کرد که این ایده به‌صورت بالقوه، نیاز به وجود طرف واسطه‌ی مورد اعتماد را از میان برمی‌دارد. تنها مسئله این بود که در آن زمان هنوز اختراعی به نام بلاک چین صورت نگرفته بود.

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

قرارداد‌های هوشمند امروزی، ریشه‌ای نیز در قرارداد‌های ریکاردین (Ricardian) دارند؛ مفهومی که توسط یان گریگ (Ian Griegg) و گری هولند (Gary Howland) معرفی شد. قرارداد ریکاردین که به عنوان پلی میان قرارداد‌های مکتوب و دستورهای کامپیوتری شناخته می‌شود، شامل این موارد است: (1) یک قرارداد که توسط صادرکننده به دارنده پیشنهاد شده است. (2) دارای یک حق باارزش برای دارنده است و توسط صادرکننده مدیریت می‌شود. (3) خواندن آن برای مردم آسان است. (4) قابل خواندن توسط برنامه‌های کامپیوتری است. (5) به صورت دیجیتال امضا شده. (6) حامل اطلاعات کلید‌های رمزنگاری و اطلاعات سرور است. (7) به یک شناسه منحصربه‌فرد و امن متصل شده است.

قرارداد هوشمند چه کاری انجام می‌دهد؟

قرارداد‌های هوشمند در کل چند وظیفه دارند:

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

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

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

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

در انجام امور دولت‌ها، قرارداد‌های هوشمند تاکنون در زمینه بهبود سیستم‌های رأی‌دهی استفاده شده است. برنامه FollowMyVote از قرارداد هوشمند بهره می‌گیرد تا فرآیند‌های ثبت و نتایج آرا را به‌صورت قابل ردیابی و شفاف انجام دهد.

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

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

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

قرارداد هوشمند چگونه عمل می‌کند؟

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

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

ویتالیک بوترین (Vitalic Buterin)، بنیان‌گذار شبکه اتریوم گفته بود که از پذیرش نام «قرارداد هوشمند» کاملا پشیمان است! او می‌گوید: «باید آن‌ها را با نامی کسل‌کننده‌تر و فنی‌تر مثل دستورهای همیشگی (Persistent Codes) خطاب می‌کردیم.»

یک قرارداد هوشمند با یک آدرس (شناسه 160 بیتی) شناخته می‌شود و دستور آن در بلاک چین موجود است. هر قرارداد از دو قسمت تشکیل می‌شود؛ فضای ذخیره خصوصی (Private Storage) و مقدار کوین‌‎های موجود در آن. دستور قرارداد می‌تواند متغیرها را در کل اکوسیستم تغییر دهد. دستور قرارداد هوشمند اتریوم در یک زبان برنامه‌نویسی سطح پایین موجود است که تحت عنوان ماشین مجازی اتریوم (EVM) شناخته می‌شود. قراردادها با زبان برنامه‌نویسیِ سطح بالایی مثل سالیدیتی (Solidity) نوشته می‌شوند که سپس به صورت کد ماشین مجازی اتریوم اجرا می‌شوند. کاربران با ارسال تراکنش به آدرس قرارداد آن را فراخوانی می‌کنند.

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

سازنده این قرارداد، دستور مربوط به این معما (Puzzle) را به صورت کد ماشین مجازی اتریوم (EVM)، در یک تراکنش تحت عنوان ایجاد قرارداد (Contract Creation) جای داده است. زمانی که این تراکنش در بلاک چین تأیید شود، گره‌های اعتبارسنج به صورت ناشناس آخرین وضعیت بلاکچین را تغییر می‌دهند و وضعیت جدید قرارداد را در سه مرحله به‌روزرسانی می‌کنند:

ابتدا یک آدرس منحصربه‌فرد جدید برای قرارداد درنظر گرفته می‌شود. سپس فضای ذخیره خصوصی قرارداد با اجرای دستور تابع Puzzle (خط 8) تخصیص می‌یابد. در نهایت نیز کد ماشین مجازی قابل اجرا که مطابق با تابع مشخص‌شده (خط 15 به بعد) است، به قرارداد متصل می‌شود. هر تراکنشی که این قرارداد را فراخوانی کند، به صورت پیش‌فرض تابع function را اجرا خواهد کرد. همان‌طور که مشاهده می‌کنید، اطلاعات فرستنده، ارزش (مقدار اتر ارسال شده به آدرس قرارداد) و داده‌های قرارگرفته در تراکنش فراخوانی قرارداد در یک متغیر ورودی پیش‌فرض به نام msg ذخیره شده است. برای مثال فرض کنید صاحب قرارداد متغیر reward را با فراخوانی یک تراکنش T0 با توکن اتر، تغییر می‌دهد. به هرحال قبل از به‌روزرسانی متغیر پاداش، قرارداد مقایری اتر معادل با سطح پاداش فعلی به صاحب قرارداد می‌پردازد. نتیجه تراکنش T0 یک وضعیت جدید برای قرارداد Puzzle است که مقدار reward متفاوتی دارد. همچنین در دستورات خطوط 22 تا 29 مشاهده می‌شود که کاربران می‌توانند پاسخ‌های خود را از طریق یک کانال تراکنش متفاوت با ظرفیت ترابری مجزا ارسال کنند و اگر محاسبات آن‌ها صحیح باشد، پاداش‌ها به آدرس آن‌ها ارسال می‌شود.

برای مثال یک قرارداد هوشمند بیمه تأخیر پرواز به این گونه عمل می‌کند:

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

اگر پرواز تأخیر داشته باشد، قرارداد هوشمند به صورت خودکار مبلغ جبرانی را به کاربر پرداخت می‌کند؛ در غیر این صورت مبلغ حق بیمه را به حساب خود واریز می‌کند.

مزایای قرارداد هوشمند چیست؟

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

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

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

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

چه پلتفرم‌هایی از قرارداد هوشمند استفاده می‌کنند؟

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

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

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

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

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

اتریوم:

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

NEO:

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

مشابه با اتریوم، این پروتکل می‌تواند فراتر از تراکنش‌های مالی رفته و تراکنش‌های پیچیده‌تر را اجرا کند. البته این پلتفرم ویژگی‌های متمایزکننده‌ای نیز دارد.

پیشنهاد مطالعه: معرفی نئو (NEO): یک شبکه باز برای اقتصاد هوشمند (Smart Economy)

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

Cardano:

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

پیشنهاد مطالعه: بررسی سير تکامل نسل های مختلف بلاک چین: از بیت کوین تا کاردانو

NEM:

این پلتفرم بلاک چین فرد به فرد، اواسط سال 2015 راه‌اندازی شد. این پروژه درحال حاضر یکی از اولین انتخاب‌های بسیاری از برنامه‌نویس‌ها است، زیرا دستورات قرارداد هوشمند در آن به وسیله زبان برنامه‌نویسی جاوا نوشته می‌شود. بنا به گفته متخصصان، به‌روز‌رسانی Mijin V2 این پلتفرم را تبدیل به امن‌ترین بستر قرارداد هوشمند کرده است. درحالی‌که شبکه اتریوم 15 تا 20 تراکنش درثانیه انجام می‌دهد، این پلتفرم قادر به انجام 100 تراکنش درثانیه است.

HyperLedger Fabric:

این پلتفرم یک بستر جهانی متن باز است که توسط بنیاد لینوکس پشتیبانی می‌شود. با استفاده از امکانات این پلتفرم می‌توان چارچوب‌های بلاک چین خصوصی را برای تراکنش‌ها در سطح کسب‌وکارهای مختلف توسعه داد. بستر Fabric با هدف ایجاد بلاک چین‌های ائتلافی با سطوح متفاوت و مشخصی از مجوز و دسترسی ساخته شده است.

این پلتفرم یک رویکرد برنامه‌نویسی پیمانه‌ای برای ساختن بلاک‌چین دارد که به شرکت‌ها کمک می‌کند تا بلاک چینی بسازند که مناسب کسب‌وکار آن‌هاست. این پروژه توانسته است توجه شرکت‌های بزرگی چون IBM، JP Morgan، Intel و سامسونگ را به خود جلب کند.

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

پیشنهاد مطالعه: هایپرلجر فابریک – پلتفرمی جامع برای راه حل های دنیای کسب و کار

محدودیت‌های قرارداد هوشمند

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

بلاک چین‌ها نمی‌توانند حجم نامحدود داده را ذخیره کنند. برای مثال بلاک چین بیت کوین داده‌های ورودی و خروجی کوین‌ها و 40 بایت فراداده برای هر تراکنش را ذخیره می‌کند، همین!

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

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

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

وابستگی به ترتیب تراکنش‌ها: زمانی که 2 تراکنش، یک قرارداد را در یک زمان فراخوانی می‌کنند و ترتیب تراکنش‌ها پیامد‌ها را تغییر می‌دهد.

وابستگی به مهر زمانی (timestamp dependencies): زمانی که تغییر دادن مقدار یک مهر زمانی به پیامدهای دلخواه استخراج‌گران می‌انجامد.

استثنائات خرابکار (mishanded exceptions): زمانی که یک قرارداد هوشمند یک قرارداد دیگر را فراخوانی می‌کند اما مقادیر برگشتی را مشخص و یا کنترل نمی‌کند.

نتیجه‌گیری

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

در پایان ملزم به یادآوری است که غیرممکن بودن نوشتن هرگونه احتمالی در یک کد قرارداد هوشمند و همچنین ضرورت راه‌حل‌های رفع اختلاف‌ها ومکانیزم‌های حکم‌رانی خارج از زنجیره (Off-chain Governance)، همگی بحث‌های برجسته‌ای در زمینه سیستم‌های رمز ارز هستند.

بنابر قانون آمارا (Amara’s Law)، ما تمایل داریم که درباره‌ی یک فناوری جدید در کوتاه‌مدت بیش‌ ازحد خوش‌بین باشیم و در بلند‌مدت آن را دست‌کم بگیریم. گرچه قراردادهای هوشمند قبل از استفاده‌ی گسترده در روابط پیچیده تجاری باید کامل‌تر شوند، اما آن‌ها قادر هستند ساختار انگیزه و پاداش را به گونه‌ای متحول کنند که تعاملات و قراردادهای افراد و سازمان‌‌ها بهبود یابد. از همین جهت بهتر است به یاد داشته باشیم که انقلاب واقعی قراردادهای هوشمند از پارادایم‌های تازه‌ای نشأت می‌گیرد که هنوز به درستی درک نکرده‌ایم.

منبع:

منابع بیشتر:

  1. Introduction to Smart Contracts
  2. What is a smart contract?
4 Likes

انواع گره ها در شبکه اتریوم

  1. Fast vs Full Sync
  2. Nodes and clients | ethereum.org
3 Likes

فورک و انواع آن

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

حرف زدن از بلاکچین کسالت آور است؟

بدیهی است درک این تکنولوژی برای خیلی ها آسان نیست. همان طور که اگر کسی بگوید بلاکچین را کشف کرده، خنده دار خواهد بود. مطلب دیگری که لازم است گفته شود این است که نام بیتکوین با کلمه بلاکچین عجین شده و نمی­توان این را نادیده گرفت. در کنفرانسی شرکت داشتم و سخنزان ۴۵ دقیقه درباره بلاکچین صحبت کرد بدون اینکه حتی اشاره ای به بیتکوین داشته باشد! ممکن است شما دوستانی داشته باشید که در دوسال گذشته در این حوزه کار کرده اند و فقط بلدند درباره این موضوعات صحبت کنند تا جایی که اطرافیانشان از این وضعیت دلخور می­شوند. من یکی از این افراد هستم که صحبت هایم برای دوستانم کسل کننده بود تا اینکه بالاخره قیمت بیتکوین بالا رفت و موضوع برایشان جذاب شد.

بمباران واژه ها

اگر شما با این موضوعات تاکنون آشنایی نداشتید و تازه شروع کرده اید به خواندن درباره این مفاهیم، با بمباران واژه ها در این حوزه روبرو می­شوید: استخراج، بلاکچین، آدرس عمومی، آدرس خصوصی و … که همگی برایتان تازگی دارد و در ابتدا به قدری گیج می­شوید که با خود خواهید گفت: “آه اینها دیگر چه مزخرفاتی هستند.”

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

یکی می­گوید فورک نرم و دیگری می­گوید فورک سخت. شما هم که در تمام زندگی تان فقط با فورک (چنگال!) سخت سرو کار داشته اید با خود می­گویید آیا فورک نرم، منظور نوعی چنگال! نرم است!؟ (خنده حاضرین) و باز هم بیشتر گیج می­شوید. می­خواهم به شما کمک کنم موضوع را درک کنید.

فورک

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

حل اختلاف

برای حل اختلاف و مشخص شدن اینکه کدام بلاک معتبر است به چه مرجعی مراجعه کنیم؟ اینجا که مرجع واحدی برای اعلام نظر نداریم. اینجا یک سیستم غیر متمرکز است که هر کس یعنی هر نود روی شبکه خودش با استفاده از اطلاعات و کد برنامه ای که دارد، راسا تصمیم می­گیرد. خوب این یعنی چه؟

هر دو بلاک تولید شده از زاویه ای هردو معتبر هستند چون از روی بلاک نوک زنجیره (بلاک قله) که خودش معتبر بوده، ساخته شده اند. تا اینجای کار عادلانه است. اما!

یک فاکتور مهم دیگر هم در این شبکه وجود دارد و آن زمان است. حل این مشکل نباید بیشتر از ۱۰ دقیقه طول بکشد. باز پیچیده شده تر شد! خب هر طرف شبکه که بلاک را دریافت کرده یعنی همان بلاک هایی که محل بحث بودند، هر طرف خودش شروع می­کند به استخراج بلاک بعدی یعنی حل مسئله ریاضی و پیدا کردن جواب و قرار دادن بلاک جدید به انتهای زنجیره. در این حالت یکی از زنجیره ها بلند تر است و باز طی همان ۱۰ دقیقه بلاک دیگری پیدا می­شود حال اگر یک نفر در شبکه بخواهد بلاک جدید را به انتهای زنجیره اضافه کند متوجه می­شود که این بلاک، بالاسری (والد) متفاوتی دارد و با آدرس آخرین بلاک (نوک زنجیره) متفاوت است. در نتیجه این بلاک را نامعتبر تشخیص داده و آن را دور می­ریزد.

آنقدر این وضعیت در طول ۱۰ دقیقه تکرار می­شود تا زمانی که ۹۵% بلاکی که دست همه است آدرس بالاسری اش معتبر باشد و در نهایت آن بلاک پذیرفته می­شود. این اتفاقی است که هر هفته ۲ یا ۳ بار رخ می­دهد.

توافق جمعی (Consensus)

پس چیزی که تاکنون گفته شد یک فورک طبیعی بود که در اثر تاخیر انتشار بلاک در شبکه رخ داده بود و با اجماع یا توافق نودها مشکل حل شده و زنجیره ادامه پیدا می­کند. اما شکل های دیگری هم از فورک وجود دارد. مثلا یک قسمت از شبکه تصمیم می­گیرد که قانون را عوض کند و با عوض شدن قانون، برای بخش دیگر شبکه سازگاری وجود نخواهد داشت. اگر ۵۱% تصمیم به این کار بگیرند یعنی ۵۱% از استخراج کنندگان و کسانی که توان محاسباتی (برای حل مسئله ریاضی) دارند به این وضعیت، حمله ۵۱ درصدی گفته می­شود چون می­توانند بدون اعتنا به ۴۹ درصد باقیمانده قوانین (کد برنامه) را تغییر بدهند.

انواع شاخه ها (فورک)

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

(بلوک های جدا شده و یا یتیم بلوک های معتبری هستند که دیگر قسمتی از زنجیره اصلی نیستند)

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

هارد فورک ناسازگار

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

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

هارد فورک نیمه سازگار

هارد فورک نیمه سازگار (Semi-Compatible Hard Forks) زمانی اتفاق می افتد که مجموعه قوانین تقسیم شود (در نتیجه قوانینی مشترک بین دو زنجیره به وجود می آید)، اما همچنان بلاک هایی وجود خواهند داشت که تنها روی یکی از زنجیره ها معتبر هستند.

در این موارد استخراج کنندگان می توانند از انشعاب زنجیره از این طریق که فقط بلوک هایی با قانون نارنجی را استخراج کنند جلوگیری کنند. هرچند زمانی که استخراج کننده ای یک بلاک زرد یا قرمز را استخراج کند، زنجیره دچار انشعاب می شود. امکان همگرا شدن زنجیره ها در صورتی که استخراج کنندگان در نهایت یک زنجیره ی انحصارا نارنجی را بسازند وجود دارد و این کار را از همان زمانی انجام دهند که کاربران، قوانین زرد را (که از کل کار هر دو زنجیره ی دیگر جلو زده است) پذیرفته اند. اگر این کار را انجام دهند، هر دوی زنجیره های قرمز/نارنجی و زرد/نارنجی توسط مشتریان (clients) زرد یا قرمز یتیم خواهند شد و آنها تنها یک زنجیره واحد را خواهند دید. تا جایی که از آن اطلاع داریم شاخه ای از این مدل وجود ندارد. بهترین شرط (bet)برای استخراج کنندگان در این حالت (بسته به ویژگی ها) به طور معمول این خواهد بود که تنها بلاک های نارنجی را استخراج کنند و با این کار از انشعاب زنجیره جلوگیری کنند. با انجام این کار استخراج کنندگان به طور موثر یک فورک نیمه سازگار (Semi-compatible fork) را به یک سافت فورک تبدیل می کنند.

هارد فورک سازگار

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

زمانی که قوانین گسترش پیدا می کند، به محض اینکه یک استخراج کننده بلاکی را با قوانین زرد استخراج کند، زنجیره منشعب می شود. این مدل از انشعاب تا زمانی که زنجیره زرد شامل کار بیشتری نسبت به زنجیره نارنجی شود منشعب باقی خواهد ماند. خطری که در این مدل از انشعاب وجود دارد این است که اگر زنجیره نارنجی شامل کار بیشتری شود، زنجیره زرد یتیم خواهد شد. کاربران زنجیره زرد نه تنها باید مطمئن باشند که قریب به اتفاق قدرت هش از ابتدا در این زنجیره بوده، بلکه همچنان تا ابد نیز در این زنجیره خواهد بود. نمونه هایی از این مدل شاخه (فورک) Bitcoin XT، Bitcoin Classic و Bitcoin Unlimited هستند.

سافت فورک

سافت فورک (Soft-fotk) زمانی است که مجموعه قوانین محکم شده است و قوانین زرد کاملا توسط قوانین قرمز پوشانده می شوند. این مدل برای اجرایی شدن قوانین تنها نیاز به ارتقای اکثریت استخراج کنندگان دارد.

انشعاب زمانی می تواند اتفاق بیافتد که استخراج کننده ای یک بلاک قرمز تولید کند. کاربرانی که از مجموعه قوانین قرمز استفاده می کنند آن زنجیره را دنبال خواهند کرد و کاربرانی که از مجموعه قوانین زرد استفاده می کنند، زنجیره نارنجی را دنبال خواهند کرد. در این حالت اگر اکثریت قدرت هش شروع به اجرای قوانین نارنجی کند، زنجیره قرمز یتیم خواهد شد. این مدل از شاخه (فورک) قبلا بارها در تاریخچه بیت کوین با تغییراتی مثل BIP666، CSV، CLTV و همچنین سافت فورک پیشنهادی سگویت اتفاق افتاده است.

خطر سازماندهی مجدد و خطرات انشعاب

هر دو مورد سازماندهی های مجدد بزرگ (reorganizations) و انشعاب می توانند خطراتی را برای استخراج کنندگان و کاربران داشته باشند. سازماندهی مجدد بزرگ (روند تغییر مسیری که در آن بلاک چین سازمان یافته است) می تواند باعث این بشود که تراکنش های تایید شده قبلی ناپدید شوند که این موضوع باعث از دست رفتن پول بسیاری از مردم می شود. برای مثال امکان دارد که یک سال گذشته شما برای ماشین خود 10بیت کوین پرداخت کرده باشید و سال بعد این تراکنش کاملا از دفتر کل پاک شده باشد. در نتیجه شما نه بیت کوینی دارید و نه ماشینی. این حالت از رفتار می تواند باعث از دست رفتن اعتماد مردم به دیجی ارزها بشود. با توجه به نوع انشعاب، یک سازماندهی مجدد بزرگ تنها می تواند روی کاربران مجموعه قوانینِ بازنده تاثیرگذار باشد و کاربران مجموعه قوانین قوی تر دچار سازماندهی مجدد نمی شوند.

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

کاهش خطرها

در بسیاری از موارد ریسک یا خطر برای بسیاری از این شاخه ها می تواند توسط کاربران و استخراج کنندگان کاهش پیدا کند.

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

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

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

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

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

خاتمه

بسیاری از افراد سوظن هایی نسبت به سافت فورک دارند چرا که به کاربران اجازه انتخاب نمی دهد. ذات بیت کوین و کلیه بلاک چین هایی که بر پایه proof-of-work هستند این است که استخراج کنندگان قدرت ایجاد قوانین محدودکننده تری بیش آنچه کاربران با آن توافق کرده اند را دارند. هرچند که در واقع کاربران نیز (با استناد به هاردفورک ناسازگار) دارای قدرت هستند. در این حالت کاربران زنجیره را با معرفی کردن مجموعه قوانین جدید مجبور به تقسیم شدن می کنند. این موضوع تضمین می کند که کاربران همیشه راه فراری از مجموعه قوانین تحمیل شده توسط استخراج کنندگان را دارند. به این ترتیب اگر اقتصاد و کاربران تغییر قانون یک سافت فورک را رد کنند، همیشه توان درخواست قوانینی مطابق با خواسته هایشان را خواهند داشت. این امر ممکن است ناخوشایند باشد اما این موضوع در رابطه با هر حمله ای از طرف استخراج کنندگان به کاربران نیز صدق می کند.

منبع:

منابع بیشتر:

  1. Hard Forks, Soft Forks, Defaults and Coercion by Vitalik Buterin
  2. Short guide to bitcoin forks - Coindesk
  3. Map of coins: Visualized history of Bitcoin forks and altcoins
3 Likes
4 Likes

ترجمه چقدر غلط داره ! :frowning:

1 Likes

متاسفانه این ضعف در بعضی از متون ترجمه شده وجود داره
همیشه بهترین گزینه مطالعه منابع از سایت های مرجع و به زبان اصلی هست
اما به هر حال برای کسانی که مشکل در مطالعه به زبان انگلیسی دارند چند منبع فارسی میتونه تا حد زیادی مفید باشه

4 Likes

برای دانستن اطلاعات بیشتر در مورد هش (Hash) یک مقاله آموزشی به نام “هش به زبان ساده” روی وب سابت کوین ایران به آدرس زیر قرار دارد. خواندن آن را به فراگیران عزیز توصیه میکنم.

3 Likes

سلام عرض ادب
امیدوارم که انرژی مثبت زیادی داشته باشین :heart_eyes:
در مورد رمز گذاری نامتقارن یه سوال داشتم
توی عکس مربوط به این موضوع بالای Encryption algorithm نوشته Secret key shared bu sender and recipient
این یعنی چی دقیقا؟
سوال دیگه هم اینه که سمت راست پایین نوشته (Decryption algorithm (reverse of encryption
این یعنی الگوریتم رمزگشایی برعکس اتفاق میفته؟یعنی چی؟
سپاسگزارم از زحماتتون

1 Likes

سلام ممنون شما هم همینطور
در رمزنگاری متقارن یک کلید وجود داره که بهش secret key گفته میشه، داده با همون کلید رمزگذاری میشه و با همون کلید هم رمز گشایی میشه، به همین دلیل این کلید باید بین فرستنده و گیرنده به اشتراک گذاشته بشه
هر الگوریتم رمزگذاری یک الگوریتم رمزگشایی متناظر با خودش داره
اینم یه مثال خیلی ساده

Pre-Shared Key:

In cryptography, a pre-shared key (PSK) is a shared secret which was earlier shared between the two parties using a secure channel before it is used.

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

2 Likes

خداییش کسالت اور نیس :slightly_smiling_face:

حیف نفهمیدم چی گفت این کلیپ رو …

و
مرسی بابت دوره و دیتاهای عالیتون

این قسمت فکر کنم مشکل داره ، جفتشون رو SSL نوشتین .

1 Likes

شرمنده اگر تعداد برگ های درخت به صورت فرد باشن اون موقع درخت مرکل به چه صورت در میاد ؟؟
مثلا اگر توی همون عکسی که گذاشتید یدونه L5 هم داشته باشیم، در اون صورت هش L1 و L2 با هم محاسبه می شه و هشه L3 و L4 و L5 هم با هم محاسبه می شه ؟ یا جوره دیگه ای می شه ؟؟

سلام و احترام . @firko فکر کنم یک راه حلش این باشه که نود تک با خودش هش شه

1 Likes

ممنون از جوابتون . اینجوری به خصوص اگر دیتا زیاد باشه احساس می کنم که زیاد بهینه نمی شه . برای همین می خوام بدونم دقیقا در این مواقع چجور کار می کنه . شاید بشه برگ فرد رو با دو تا برگ قبل از خودش حساب کرد . مثلا در اینجا هش L1 و L2 رو باهم حساب کنیم و هش L3 و L4 و L5 v رو هم با هم حساب کنیم .


منظورم اینجوریه .

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