معرفی الگوریتم های بلاک چین

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

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

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

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

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

 

ساختار ارز های دیجیتال

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

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

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

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

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

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

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

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

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

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

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

انگیزه تحقیق بر اساس سوابق قبلی اولین الگوریتم توافق بر پایه اثبات است که کارایی خود را ثابت کرده است.

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

بر اساس گزینه اثبات سهام , بهره و سود و زیان یک بلوک زمانی که اندازه گیری میشود میتواند فاکتور مهمی در تصمیم گیری جهت افزودن بلوک باشد.

هنگام تعیین الگوریتم برای گره ها , الگوریتم های مبتنی بر pow و pos از محبوب ترین الگوریتم ها هستند که در اپلیکیشن های کاربردی استفاده میشوند.

علاوه بر دو مورد بالا الگوریتم های دیگری نیز همچون اثبات گذشت زمان , اثبات شانس و اثبات فضای کافی نیز دارای محبوبیت هستند.

پس از بررسی های توانایی بلاک چین شرکت ها اشخاصی همچون IBM  و JP Morgan شروع به تحقیق در زمینه این فناوری کردند.

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

در مورد اول صحت و تایید توسط کنسرسیوم های مختلف صورت میپذیرد در حالی که در مورد دوم تنها یک سازمان متمرکز وجود دارد.

با توجه به محدودیت گره های قابل کنترل این نوع از الگئریتم میتواند باعث ایجاد یک الگوریتم اجماع که میتواند شرایط زندگی ئاقعی را شبیه سازی کند شود و تصمیم گیری نهایی بر اساس رای اکثریت باشد.

این دلیل نامگذاری این الگوریتم به نام  ” الگوریتم اجماع بر اساس رای گیری ” است.

در صورتی که یک گره بخواهد بلوکی را اضافه کند شرایط باید رعایت شود شامل :

گره باید اطمینان حاصل کند که حداقل تعدا گره های T توسط بلوک به آن اضافه میشوند. ( T یک آستانه است که بسته سیستم و طراحی آن متفاوت است و باید بیش از 50% تمام گره ها باشد )

 

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

گره هایی که بر اساس الگوریتم توافق بر اساس رای گیری عمل میکنند معمولا دو سیستم محبوب را دنبال میکنند:

  • تحمل دلیل شکست
  • تحمل خطای بیزانس

 

در این مرحله میخواهیم بدانید که الگوریتم توافق بر اساس اثبات برای هردو بلاک چین کنسرسیومی و خصوصی کاربرد دارد.

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

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

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

 

 

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

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

 

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

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

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

هنگام ثبت هر تراکنش توسط کاربر , شخص باید کلید خصوصی خود را جهت ثبت تراکنش استفاده کند.

این فرایند در بلاک چین باعث ایجاد این درک میشود که کلید خصوصی و تراکنش جهت ورود به تابعی خاص امضای مشخصی ایجاد میکنند.

الگوریتم مورد استفاده در بیت کوین جهت ایجاد این امضا, الگوریتم امضای دیجیتال منحنی بیضی است.

سپس معامله با این امضا همراه میشود تا درخواست ایجاد تراکنش را به وجود آورد.

تایید کننده بوسیله کلید عمومی که قابل شناسایی برای همه میباشد میتواند به صحت اینکه این امضا و تراکنش آیا واقعا به این شخص تعلق دارد یا نه پی ببرد.

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

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

از آنجایی هر امضا شامل 256 بیت است اگر کسی قصد جعل امضا را داشته باشد باید 2256 مورد را حدس بزند که غیر ممکن است و این امر امنیت معامله و امضا را تامین میکند.

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

 

معماری بلاک چین

بلاک چین مجموعه ای از بلوک هاست که همانند زنجیر به هم متصل میشوند و هر بلوک شامل تعدا زیادی از معاملات معتبر است.

شکل fig.2 نمونه ای از بلاک چین و محتویان درون هر بلوک را شرح میدهد.

شکل 3 نیز معماری بلاک چین را شرح میدهد که علاوه بر وجود معاملات , هدر بلاک چین شامل چندین فیلد دیگر به شرح زیر میباشد :

 

Prev-hash

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

تمام اطلاعات بلوک قبلی برای بدست آوردن مقدار یک تابع هش وارد میشود سپس این مقدار به prev hash field در بلوک جدید اختصاص داده میشود.

در بیت کوین یک تابع هش 256 بیتی برای این مقدار استفاده میشود.

 

 

الگوریتم های اجماع بلاک چین

الگوریتم مبتنی بر اثبات

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

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

الگوریتم های اجماع مبتنی بر pow

اثبات اصلی کار

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

پیش از حل این پاز گره ها باید تمام اطلاعات خود از جمله prev-hash و   timestamp را در یک بلوک قرار دهند. سپس شروع به حل پازل بوسیله حدس مقداری محرمانه میکنند که در nonce قرار گرفته است و در نهایت آن را در بلوک قرار میدهند. در این مرحله تمام اطلاعات موجود در هدر بلوک به تابع هش sha-256 تبدیل میشوند.

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

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

به دلیل تلاش هایی که جهت حدس زدن ارزش مناسب انجام میشود این کار pow نامیده میشود .

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

در عوض آن ها بلوک را جهت بررسی معتبر بودن معاملات بررسی میکنند و اگر بلوک شامل مقدار prev-hash و اعتبار فیلد nonce باشد و تمام تایید ها صحیح باشد گره ها این بلوک را به زنجیره می افزایند و دوباره فرایند حدس زدن را طبق مرحل قبل شروع میکنند.

با این حال یک مورد نادر وجود دارد:

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

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

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

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

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

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

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

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

هنگامی که گراف ایجاد شده به این روش , nonce ها را حدس زد و چرخه ایجاد شد ماینر بلوک را همراه با nonce ها حدس زده شده در آن به گره ها پیشنهاد میدهد.

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

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

 

هنگامی که شخصی این بلوک را ارائه میکند سایر ماینر های این زنجیره آن را بوسیله الگوریتمی به نام Fermat Primality Test بررسی میکنند .

علاوه بر بررسی معاملات این نوع از pow بوسیله ریاضیات اقدام به پیدا کردن توزیه اولیه زنجیره Cunningham prime chain میکند.

یکی دیگر از نقاط ضعف pow مساله ای به نام Double spending attack است که اسکریپت آن در شکل 6 نمایش داده شده.

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

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

بنابراین میتوان آن را حمله 51% نیز نامید.

برای هر گره بسیار دشوار است ک دارای چنین توان محاسباتی باشد.

با این حال به دلیل پیدایش استخرهای اسخراج چنین حملاتی ممکن شده است. در استخر بجای اینکه هر ماینر جداگانه به دنبال nonce بگردد با سایرین گروهی را تشکیل میدهند و به اپراتوری از استخر رای میدهد و مقدار nonce را با هم پیدا میکنند که کار را بسیار ساده تر میکند. پاداش ها در محلی به نام coin-base ذخیره میشوند و پس از پیوستن هر ماینر به استخر , ماینر پاداش خود را به مقدار مساوی با سایرین دریافت میکند.

ولی باید توجه داشت که این کار ریسک حملات 51% را بالا میبرد. هرچند که برای پیشگیری از چنین خطری پیشنهادی ارائه شده است:

1- پیش شروع به یافتن مقدار nonce هر گره باید امضای مخصوص به خود را برای coin-base داشته باشد .

2- سپس باید از این امضا در بلوک های مخصوص خود استفاده کنند.

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

هنگامی که هدر بلوک با مقدار nonce یافت شده اولین درخواست را برآورده میکند مقدار خرئجی تابع هش sha-256 دوباره به این تابع وارد میشود تا سیار درخواست دیگری مانند مورد قبل را با سیار مشکل ها تطبیق دهد.

 

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

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

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

بنابراین نیاز به کاهش تاخیر برای معاملات بسیار ضروری است.

برای این مورد دو راه حل پیشنهاد شده است :

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

Sompolinsky و Zolar پیشنهاد کرده اند برای افزودن بلوک جدید به زنجیره بوسیله مدیریت فورک و کاهش زمان افزوده شدن یک بلوک به زنجیره ریسک حملات دوگانه کاهش داده شود.

این استراتژی که  به اصطلاح Ghost  نامیده میشود تمام بلوک های تکمیل شده را که برای زنجیره اصلی انتخاب نشده اند نگه میدارد سپس به جای انتخاب طولانی ترین فورک , فورکی که بیشترین pow را دارد انتخاب میشود.

شکل 7 این استراتژی را توصیف میکند.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *