قبل از خوندن این مطالب جمع اوری شده از مقالات مختلف به این موضوع دقت کنید که مبحث بلاک چین بسیار وسیع و گسترده است و برای درک عمیق آن باید مطالعات زیادی انجام داد :)
تاریخچه بلاک چین
ایده فن آوری بلاک چین در اوایل سال 1991 توسط استوارت هابر و اسکات استورنتا معرفی شد.
در آن زمان آن ها یک راه حل محاسباتی را برای اسناد دیجیتالی ارائه داده بودند تا از این طریق داده های آن را نتوان دستکاری کرد.
در سال 1992 هابر و استورنتا درخت مرکل را به طراحی شان متصل کردند که اجازه می داد چندین اسناد در یک بلوک جمع آوری شوند. با این حال ، این فناوری بلا استفاده بود و ثبت اختراع آن در سال 2004 به پایان رسید دقیقا چهار سال قبل از آغاز بیت کوین.
بلاک چین چیست؟
همان طور که می دانید در سیستم سنتی و اینترنت رایج، تمام اطلاعات به طور متمرکز در یک سرور اصلی ذخیره میشوند و هکر ها می توانند به راحتی به آن دسترسی پیدا کنند که در این صورت تمام اطلاعات در اختیار آن ها قرار می گیرد ; این سیستم ها امنیت بالایی ندارند و حفاظت از داده ها در این شبکه ها همواره جزو چالش های مورد بحث بوده است.
بلاک چین نوع جدیدی از شبکه اینترنت است که در آن اطلاعات در یک سری بلوک طبقه بندی می شوند . ویژگی مهم این شبکه غیر متمرکز بودن آن است یعنی می تواند یک تراکنش را بدون دخالت یک شخص ثالث تایید کند و هیچ قدرتی بر کنترل آن نداشته باشد.
به عبارت دیگر می توان گفت بلاکچین یک پایگاه توزیع داده مبتنی بر اجتماع میلیونها نقطه اشتراک است که همه اعضای آن دارای یک کپی مشابه از پایگاه داده هستند و همه ی آن ها موافق هستند که از یک سری قوانین برای جمع آوری، تایید و اضافه کردن داده های جدید پیروی کنند اما توان ویرایش یا حذف آن ها را نداشته باشند. این فناوری ضمن ارتباط دادن کاربران به یکدیگر که میتوانند با بهره گیری از آن ، آزاد و در عین حال پیچیده به تبادلات مالی، علمی و اطلاعاتی بپردازند; امنیت بالایی دارد، سریع است و دستکم تا امروز هیچ راهی برای هک کردن آن پیدا نشده است.
نحوه معماری بلاک چین برای حل مشکلات سیستم های متمرکز
به عنوان مثال به پیگیری مالکیت بر روی یک بلاک چین می پردازیم.
یک تراکنش را مانند یک فایل متن با اطلاعات رسیدش در نظر بگیرید. این فایل، خریدار و فروشنده و مقدار دست به دست شده را لیست می کند و وقتی که تراکنش عملی شد، یک برچسب زمانی ایجاد می شود.
داده های تراکنش برای تراکنش های متعدد به صورت یک بلوک بسته بندی می شوند و این بلوک به عنوان یک پیام به هر کامپیوتر در شبکه فرستاده می شود. هر کامپیوتر یا نود (node)در شبکه، از قوانین تعریف شده ای از پروتکل بلاک چین تبعیت می کند و اعتبار بلاک جدید را تایید می کند.
اگر این بلاک معتبر تلقی شود، به بلاک چین اضافه خواهد شد که این مجموعه یک لیست مرتبط دائما در حال رشد از داده های تراکنش را ایجاد می کند و نشان دهنده کل تاریخ تراکنش ها برای دارایی خاصی است که مورد پیگیری قرار گرفته است.
از آنجا که هر نود یک کپی از بلاک چین را نگه می دارد، در عمل یک اجماع یا توافق در مورد تاریخچه تراکنش ها موجود است. هر نود به عنوان یک شاهد مستقل عمل می کند و واقعیت تمام تاریخچه تراکنش را گواهی می دهد. زمانی که اکثر نود ها در مورد کپی صحیح بلاک چین توافق داشته باشند، می توان آن را معتبر دانست و به عنوان یک دفتر کل قانونی و قابل اعتماد پذیرفت.
آنچه که ما در بالا در موردش صحبت کردیم مدل بلاک چین عمومی می باشد اما این تنها روش برای ایجاد یک بلاک چین نیست و یک مدل خصوصی هم در این زمینه وجود دارد. در مدل عمومی همه می توانند داده ها را بر روی بلاک چین بخوانند و بنویسند. در مدل خصوصی تنها افراد مجاز، می توانند به شبکه دسترسی داشته باشند، بنابراین یک لایه که دسترسی به افراد مختلف را کنترل می کند ساخته شده و در داخل پروتکل موجود است.
هشینگ رمزنگاری و درخت مرکل
رمزنگاری یا کریپتوگرافی، علمیست که برای ایجاد روش هایی امن جهت ذخیره و انتقال اطلاعات بکار گرفته می شود. روش کار این علم به این گونه است که اطلاعات را طبق یک الگوریتم ریاضی، به رشته هایی از کارکترها و اعداد تبدیل می کند که رمزگشایی آنها تنها توسط کسانی که از الگوریتم رمز ، آگاهی داشته و کلید رمز را در اختیار داشته باشند امکان پذیر باشد. در دانش رمزنگاری، وجود اطلاعات یا انتقال آن ، از چشم دیگران مخفی نمی ماند؛ اما هیچگاه محتوای اصلی اطلاعات ذخیره شده یا در حال ارسال، برای افراد متفرقه به نمایش در نمی آید.
یکی از توابع و مکانیزم هایی که در سیستم های رمزنگاری اطلاعات در کاربردهای مختلف بسیار با اهمیت است، توابع درهم سازی یا Hashing است. در واقع هش یکی از عناصر اصلی تشکیل دهنده سیستم ها و پروتکل های رمزنگاری است. هر مقدار از داده ها از یک حرف خاص گرفته تا یک دایرکتوری از فایل ها ، را می توان به عنوان یک ورودی تابع هش مورد استفاده قرار داد و خروجی هم یک هش خواهد بود که از آن به عنوان یک اثر انگشت دیجیتال می توان استفاده کرد که به طور خاصی آن مجموعه داده را نمایش می دهد. خروجی همیشه برای هر مجموعه مشابه از داده یکسان است اما حتی یک تغییر مانند یک حرف یا عدد متفاوت، علامت گذاری یا یک فضای اضافی منجر به هش کاملا متفاوتی خواهد شد و به ما یک اثر انگشت دیجیتال منحصر به فرد و متفاوت می دهد.
و بخش خیلی مهمی از نحوه عملکرد الگوریتم این است که اساسا پیش بینی این که چگونه یک تغییر در ورودی، خروجی را تحت تاثیر قرار خواهد داد، غیر ممکن است. بنابراین هر تراکنشی که بر روی بلاک چین ثبت شده از طریق یک تابع هش اجرا می شود و سپس می تواند توسط آن هش شناسایی شود.
دارایی های مورد پیگیری ما به تعداد زیاد در روز توسط افراد مختلف معامله می شود، بنابراین ما می خواهیم تراکنش های متعددی را در داخل یک بلاک خاص بسته بندی کنیم تا کارآمد باشد.
ما میتوانیم هش هر مجموعه داده را داشته باشیم مثلا دو رشته هش که ارائه دهنده ی تراکنش های مختلف هستند و اجرای آن ها از طریق الگوریتم های هش امکان پذیر است. پس ما هش هر تراکنش فردی را داریم، که می توانیم از آنها استفاده کنیم و گروه هایی را تشکیل دهیم.
آنچه که ما در حال ایجاد کردنش هستیم یک ساختار داده است که به عنوان درخت مرکل (Merkle) شناخته می شود. درخت مرکل یک نوع درخت باینری است که با اشاره گر های هش ساخته شده و ساختار خیلی مفیدی برای گروه بندی قطعات مجزا از داده دارد و این امکان را به ما می دهد که آن ها را از طریق یک ارجاع هش خاص در دسترس ما قرار دهد . آن هش نهایی که ارائه دهنده ی همه تراکنش هاست، هش ریشه ما می باشد (Merkle root ) که ارائه دهنده همه تراکنش هایی است که به طرف آن جذب می شود.
هر بلاک در بلاک چین ما یک مجموعه از تراکنش ها را در بردارد که با یک هش ریشه ارائه داده می شود. هدر بلاک جایی است که متاداده های بلاک ما در آن قرار دارند، بنابراین ما هش ریشه را در هدر بلاک خود همراه با یک برچسب زمانی(time stamp) که نشان دهنده زمان ایجاد بلوک است، می گذاریم.
و ما چیزی به نام nonce داریم که یک ارزش عددی است و بعدا کمی در مورد آن صحبت خواهیم کرد.
همان طور که گفتیم بلاک چین یک زنجیره مرتبط از هش بلاک هاست. نحوه مرتبط شدن بلاک ها با یکدیگر از طریق وارد کردن مرجع هش بلوک قبلی در زنجیره هر بلاک جدید صورت می گیرد. از آنجا که هر بلوک در نهایت مقداری داده خواهد بود، می توانیم آن را از طریق الگوریتم هش اجرا کنیم و به هشی دست یابیم که ارائه دهنده کل بلوک می باشد. برای مرتبط کردن بلاک خود به زنجیره، ما مرجع هش بلاک قبلی را به عنوان اشاره کننده به آن وارد میکنیم. بلاک بعدی که بعد از بلاک ما ایجاد می شود یک اشاره گر مرجع را به بلاک ما اضافه می کند. و به این ترتیب در نهایت یک زنجیره مرتبط هش از بلوک ها ایجاد می شود.
اکنون با سوال های زیر به توضیح عملکرد بلاک چین می پردازیم.
ما می دانیم که حتی تغییر یک کارکتر خاص در مجموعه داده ها کاملا اثر انگشت دیجیتال را تغییر می دهد که این به ما این اطمینان را می دهد که اگر یک عدد یا نام در سابقه تراکنش تغییر کند، هش آن تراکنش کاملا تغییر می کند.
و طبق درخت مرکل هش ها در همه مسیر تا ریشه تغییر می کنند. اگر هش ریشه ما متفاوت باشد، هش بلوک تغییر می کند که این کل بلوک را بی اعتبار خواهد ساخت. اگر هش بلوک ما تغییر کند، اشاره گر مرجع از بلاک بعدی در زنجیره می شکند و این مرجع ها را در همه مسیر تا به زنجیره می شکند.
اگر فردی قصد تغییر تراکنشی را داشته باشد بسته به آنکه تاریخ آن چقدر دور باشد، می تواند تمامی زنجیره را در حد قابل توجهی متلاشی کند.
حال حتی اگر این فرد بدخواهانه برای تغییر همه هش های شکسته شده و اشاره گران مرجع در درختان مرکل و هدر بلاک ها کار کند و در نهایت هم موفق شود ، او تنها قادر به تغییر کپی بلاک چین خود ، بر روی کامپیوتر خود می باشد و این منجر به یک تاریخچه بلاک چین می شود که با نسخه ای که دیگر نود ها دارند و همگی تایید کرده و بر آن اجماع دارند، متفاوت خواهد بود.(به یاد داشته باشید که ما در مورد شبکه ای از کامپیوتر ها صحبت می کنیم که همگی یک کپی از زنجیره را دارند).
رمزنگاری کلید عمومی، یک فناوری بلاک چین اساسی دیگر است که تضمین می کند طرف مقابل ما در تراکنش همان کسی است که ادعا می کند و این که فقط آن ها مالک قانونی هستند و به دارایی ها برای خرج کردن و فروش دسترسی دارند.
رمزنگاری اطلاعات در بلاکچین، با استفاده از شیوه رمزنگاری کلید نامتقارن انجام می شود. اما کلید نامتقارن به چه معناست؟
در رمزنگاری کلید متقارن یا تک کلیدی، هر دو طرف گیرنده و فرستنده پیام، برای رمزنگاری و رمزگشایی اطلاعات از یک کلید مشترک استفاده می کنند. در این شیوه رمزنگاری، چون هر دو طرف برای گشودن رمز اطلاعات از کلید واژه ثابت (تک کلید) استفاده می کنند، همواره امنیت حفاظت اطلاعات در معرض خطر قرار خواهد داشت؛ چرا که ممکن است کلید مورد نظر به دست سایر افراد بیفتد و امکان سوء استفاده از اطلاعات را برای آنان ایجاد کند.
ولی در رمزنگاری کلید نامتقارن که با هدف حل مشکل انتقال کلید در روش متقارن پیشنهاد شد، به جای یک کلید مشترک، از یک زوج کلید به نامهای کلید عمومی و خصوصی استفاده میشود.
کلید خصوصی تنها در اختیار دارنده آن قرار دارد و امنیت رمزنگاری به محرمانه بودن کلید خصوصی بستگی دارد. کلید عمومی در اختیار کلیه ی کسانی که با دارنده آن در ارتباط هستند قرار داده میشود.
کلید خصوصی را می توان به عنوان ورودی برای تابعی که داده ها را رمزگذاری می کند (به عنوان مثال داده های تراکنش ما) مورد استفاده قرار داد. خروجی این تابع به متن رمز اشاره می کند و توسط انسان و کامپیوتر غیر قابل خواندن است و تنها توسط کلید خصوصی می تواند متن رمز را رمزگشایی کند و به داده های اصلی دسترسی پیدا کرد.
روش کار به این صورت است که فروشنده در یک تراکنش از کلید خصوصی خود برای رمزگذاری داده های تراکنش استفاده می کند و متن رمز بدست آمده را به تراکنش به عنوان یک نوع امضای دیجیتال اضافه می کنند(یعنی هم اکنون ما یک تراکنش امضا شده داریم) و سپس کلید عمومی فروشنده هم در تراکنش داخل می شود.
خریدار از کلید عمومی فروشنده برای رمزگشایی تراکنش امضا شده استفاده می کند. اگر رمزگشایی موفقیت آمیز باشد، طرفین می توانند مطمئن شوند که این واقعا همان فروشنده مورد نظر بوده که تراکنش را آغاز و مجاز کرده است.
تا زمانی که کلید های خصوصی دزدیده نشده باشند یا به خطر نیافتاده باشند، روش مذکور شیوه ای قابل اعتماد برای تضمین این است که فروشندگان در تراکنش ها همان افرادی هستند که ادعا می کنند.
یکی از مزایای یک سیستم نرم افزاری متمرکز این است که به طور عمومی تعداد قابل مدیریتی از نود ها که لازم است ایمن باشند و تعداد قابل مدیریتی از اعضای مورد اعتماد شبکه موجود هستند. برعکس، این یعنی یکی از معایب سیستم غیر متمرکز توزیع شده با تعداد بسیار بیشتری نود این است که احتمال بیشتری وجود دارد که تعدادی از آن نود ها غیر قابل اعتماد باشند.
از آنجا که مزایای یک سیستم غیر متمرکز بلاک چین را در همان وهله اول یک ایده پایدار می کند، مشکل نحوه رسیدن به اعتماد و حفظ آن در یک سیستم غیر متمرکز یکی از بزرگترین مشکلاتی است که لازم است حل شود تا این فناوری پایدار بماند. این کار با استفاده از مفهوم گواه اثبات کار (Proof of Work) انجام می شود.
گواه اثبات کار اصطلاحی است که به مجموعه ای داده اشاره می کند که تولید آنها خیلی مشکل است (یعنی از لحاظ محاسباتی گران و وقت گیر هستند و وظیفه ای بسیار سنگین می باشد)، اما برای دیگران تایید آن خیلی آسان است. این ایده به این صورت است که به منظور اینکه یک نود در شبکه قادر باشد که به طور موفقیت آمیز یک بلاک معتبر از داده های تراکنش ایجاد کند، آنها باید قبل از اینکه بلاک بتواند پذیرفته شود و به تاریخچه بلاک چین اضافه گردد، نیازمندی های گواه اثبات کار را برآورد کنند. و در عمل، گواه اثبات کار به صورت یک پازل هش پیاده سازی و اعمال می شود.
حال به تراکنشمان برگردیم، پروتکل بلاک چین اظهار می دارد که هر بلاک جدید برای رسیدن به یک سطح سختی خاص نیازمندی هایی را ایجاد کرده که باید محقق شوند. این سطح سختی به این معنی است که هش ارائه دهنده بلاک نیازمند رسیدن به یک هدف هش می باشد و آن باید شکل خاصی داشته باشد.
به عنوان مثال، ممکن است لازم باشد که این هش با یک رشته از چهار صفر شروع شود.
ما می دانیم پیش بینی یک رشته هش خروجی غیر ممکن است پس می توانیم یک پازلی درست کنیم که شامل اضافه کردن یک رقم به داده های بلاک باشد که بعد از آن هشینگ بلاک صورت بگیرد و در آخر هم بررسی می کنیم که آیا به هدف هش که در این جا رشته ای است که با 4 صفر شروع می شود می رسیم یا نه که اگر نرسیدیم همه ی این مراحل را آنقدر تکرار می کنیم تا عددی که ما در حال اضافه کردن آن هستیم یعنی نانس(nonce)، به ما هشی بدهد که به هدف هش برسد.
به عنوان مثال، اگر ما با رشته “Hello, world” کار کنیم و یک صفر را به آن اضافه کنیم، ما یک هش دریافت می کنیم که با 1312af شروع می شود. اگر ما آن را به۱ تغییر دهیم، کاملا متفاوت خواهد شد. اگر ما آن را به ۲ تغییر دهیم، دوباره کاملا متفاوت خواهد شد اما هنوز صفری وجود ندارد. اگر ما به افزایش دادن ادامه دهیم می بینیم که با افزودن ۴۲۵۰ هشی که با چهار صفر شروع شود (0000c3) را دریافت می کنیم
پس همان طور که دیدید این تنها مثل یک بازی حدس زدن بزرگ برای کامپیوتر خواهد بود. تنها روش برای پیدا کردن nonce درست و حل کردن پازل، آزمون و خطا می باشد و اینکه یکی یکی عدد تست شود.
حالا از این ایده برای تراکنش هایمان استفاده میکنیم در این جا یک تراکنش با نانس صفر داریم و یک هش که با BA49شروع می شود و هدف هش ما که باید چهار صفر در ابتدای آن باشد را برآورد نمی کند.
افزایش عدد به ۱ کار نمی کند و افزایش آن به ۲ هم کار نمی کند.
در اینجا زمان زیادی طول می کشد تا عدد تصادفی متناسب با هدف هش ما پیدا شود.
این کار از لحاظ محاسباتی خیلی گران است، مخصوصا در سطوح سطحی بالاتر که از کامپیوتر زمان زیادی برای محاسبه می گیرد. کامپیوتر برای محاسبه نیازمند انرژی است و انرژی برای کاربر آن کامپیوتر پول واقعی را هزینه می کند. بنابراین مفهوم گواه اثبات کار نقش خیلی مهمی در پیاده سازی بلاک چین بازی می کند زیرا آن به معنی تایید تراکنش ها و اضافه کردن بلاک جدید به زنجیره است که این اقدام از لحاظ محاسباتی گران است. آن مقداری ریسک را به کاربر تحمیل می کند و انرژی واقعی و پول را باید هزینه کنند. و اگر ما به نودی که معما را اول حل می کند با انگیزه اقتصادی پاداش دهیم، این یک اقدام بازدارنده قوی می باشد و نود را از سعی برای تغییر یک تراکنش یا یک بلاک باز می دارد. پس در اینجا بازی بر طبق قوانین و باقی ماندن به عنوان یک عضو قابل اعتماد در سیستم، دلیل خاص خود را دارد که این به اجرای درست شبکه همتا به همتای توزیع شده کمک می کند.
منابع :
https://mihanblockchain.com/breaking-down-the-blockchain/
https://medium.com/capital-one-tech/breaking-down-the-blockchain-f4b87422481b
https://academy.binance.com/en/articles/history-of-blockchain
.