بلاک‌چین یا زنجیره بلوک – ققنوسی برخاسته از خاکستر تورنت

این روزا هرجا رو نگاه می‌کنی، از مطبوعات تا تلویزیون تا شبکه‌های مجازی، محاله حداقل با یک تیتر در رابطه با Blockchain (یا نام‌های دیگه‌ی اون یعنی: بلاک‌چین، زنجیره بلوک، زنجیره بلاک) مواجه نشی. یه عده میگن بلاک‌چین مساوی با همون بیت‌کوین(!) و متحول کننده‌ی دنیای اقتصاد و مبادلاتش هست. یه عده میگن زنجیره بلاک آینده‌ای محقق شده از نسل نوی اینترنت هست. یه عده میگن زنجیره‌بلوک بَده و منحرف‌کننده‌ی بشریت از راه راست و باید کلاً از چرخه‌ی هستی محو بشه و … امّا از اونجایی که ذهن جستجوگر من همیشه سرش درد میکنه برای موضوعاتی که این همه حاشیه دور و برش هست و دوست داره از حقیقتشون سر دربیاره، تصمیم گرفتم برم دنبالش و ببینم این بلاک‌چین نهایتاً چیه. اولین جواب رو به سؤال ساده‌ی من در رابطه با این که “بلاک‌چین چیه؟“، ویکی‌پدیا داد:

برداشت آزادی از تعریف بلاک‌چین (Blockchain) در ویکی‌پدیا:

“بلاک‌چین، دفترحساب توزیع‌شده و غیرمتمرکزی عمومی (Public) است که از آن به منظور ثبت معاملات میان چندین کامپیوتر، در ساختاری peer-to-peer استفاده می‌شود.”

نکته: در این مطلب شما بارها و بارها با کلمه‌ی بلاک‌چین یا معادل‌های اون که در پاراگراف اول، داخل پرانتز ذکر شدن، و همینطور بلاک یا همون بلوک، روبه‌رو میشید که دلیلش اینه که تمام این کلمات یکسان هستن و معادل همدیگه و در متون و گفتارهای فارسی از همه‌ی این کلمات استفاده میشه، بنابراین هدف این شد که با استفاده از تمام این کلمات معادل، مخاطبی که این مطلب رو میخونه اگر بعدها چشمش به هرکدوم از این کلمات افتاد بدونه که منظور از همه‌ی این واژه‌ها، همون Blockchain هست.

نگاهی به گذشته: از زیرساخت‌های Server Base تا ایده‌ی شبکه‌های تورنت (Torrent)

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

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

فرض کنین قراره در یک سازمان، دیتابیسی برای ذخیره اطلاعات کارکنان راه‌اندازی بشه؛ مسئول انفورماتیک اون سازمان به عنوان مدیر این دیتابیس تصمیم می‌گیره که چه نوع داده‌هایی در دیتابیس ذخیره بشن، چه کسانی بتونن داده‌ای رو در دیتابیس ذخیره کنن یا تغییر بدن، چه کسانی فقط مجوز خوندن اطلاعات از دیتابیس رو داشته باشن، چه کسانی اصلاً اجازه‌ی دسترسی به دیتابیس رو نداشته باشن و …

خب پس دو تا مشکل دیگه که در رابطه با دیتابیس‌های سنّتی وجود داره عبارت‌اند از: اول این که فقط یک مرجع قدرت وجود داره (به عبارتی یک مدیر/ یک مکان فیزیکی برای دیتابیس اصلی)، و از طرف دیگه همین تک مرجعی بودن قدرت باعث میشه که فقط یک نقطه‌ی شکست وجود داشته باشه (معروف به SPoF یا Single Point of Failure). اگر مرجع اصلی قدرت بنا به هر دلیلی از دست بره، دسترسی و مدیریت دیتابیس هم به گونه‌ای از بین میره یا حداقل بازگردانی‌ش پیچیده و هزینه‌بر خواهد بود.

امّا همزمان با حضور قدرتمند زیرساخت‌های کلاینت/سروری در دنیای اینترنت، ساختاری خلق شد به اسم تورنت (Torrent). احتمالاً حداقل یک بار با torrent سر و کار داشتین و باهاش کار کردین. امّا به‌جهت یادآوریِ تعریف تورنت و پاسخ ساده‌ای به سوال «تورنت چیست؟»:

“در ساختار تورنت با مجموعه ای از کلاینت‌های peer-to-peer (کلاینت‌هایی که مستقیم به هم متصل و با هم در ارتباط‌ اند) سر و کار داریم که این کلاینت‌ها از طریق پروتکلی که مشهورترینش BitTorrent نام داره، قادرند تا فایل‌هایی رو در بستر اینترنت توزیع کنند.”

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

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

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

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

حالا چی میشه اگر بتونیم به این نظام بی قانون، اندکی نظم و قانون بدیم؟ یعنی بتونیم ساختاری رو ایجاد بکنیم که بر مبنای مزیت‌های زیرساختی ارتباطات peer-to-peer که به نوعی زیرساخت بهتری نسبت به ساختارهای سنّتی ذخیره‌سازی دیتابیس‌ها محسوب میشن، این امکان رو هم داشته باشه که فایل‌ها رو در اون رهگیری کنیم و از طرف دیگه به گونه‌ای فایل‌ها رو امن کنیم که مطمئن باشیم هر فایلی که در این ساختار ردوبدل میشه نسخه‌ی اصل هست و نه نسخه‌ای کپی یا جعلی و تزریق شده به ساختار از جانب یک هکر. در واقع این‌ها سؤالاتی بود که در هنگام تولد ایده‌ی بلاک‌چین مطرح شدند.

بلاک‌چین: مفاهیم پایه

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

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

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

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

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

Cryptography

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

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

یکی از متدهای Cryptography که البته قبلاً هم در پست دیگه‌ای تو بلاگ بهش پرداخته بودیم، Public Key Infrastructure (PKI) هست که در دهه‌ی ۱۹۷۰ میلادی ابداع شد. مبنای عملکردی این روش بر پایه‌ی دوکلید هست: Public Key (یا کلید عمومی) و Private Key (یا کلید خصوصی).

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

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

اولین قدم در محاسبات PKI تولید Private Key هست. Private Key اساساً ترکیبی از حروف A تا F و تعدادی عدد هست. با تولید Private Key، جفت اون یعنی Public Key هم به صورت خودکار تولید میشه. حالا اگر بخوایم شخصی داده‌ای رو به صورت امن برای ما ارسال کنه، اول Public Key خودمون رو در اختیارش میذاریم. اون شخص هم داده‌ رو با اون Public Keyای که از ما گرفته اصطلاحاً lock می‌کنه و برای ما ارسال میکنه. در طول مسیر، این داده به دست هر شخصی بیوفته نمیتونه اون رو باز بکنه، چون که Private Key رو در اختیار نداره.

با این توضیحاتی که داده شد چرا از PKI برای احراز هویت استفاده نکنیم؟ یعنی چی؟ یعنی اگر پیام به دست شخص موردنظرمون رسید اون شخص مطمئن بشه که این پیام از جانب ماست. برای انجام این کار در دنیای دیجیتال از متدی استفاده میشه به اسم: Digital Signature یا امضای دیجیتال. در واقع مبنای اصلی عملکرد امضای دیجیتال بر پایه‌ی کلیدهای Public و Private هست.

Digital Signature
Signature
تصویر برگرفته از وبسایت: colonialwilliamsburg

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

روش کار امضای دیجیتال به این صورت هست که، زمان ارسال یک پیام دیجیتال از جانب ما، پیام با استفاده از Private Key، اصطلاحاً sign میشه. به همراه پیام sign شده، Public Key هم برای شخص مورد نظر ارسال میشه. اگر اون شخص بتونه با Public Key ای که دریافت کرده، پیام sign شده رو decrypt بکنه یا به عبارتی با Public Key بتونه Private Key رو احراز هویت بکنه، یعنی پیام در مسیر رسیدن به دست اون تغییری نکرده و قطعاً از جانب ما بوده. امّا اگر نتونه با Public Key، پیام sign شده رو decrypt بکنه یعنی پیام قطعاً در طول مسیر رسیدن به دست اون شخص، دستکاری شده.

تمام معاملاتی که در سطح زنجیره‌ی بلوکی صورت می‌گیرن بر مبنای Digital Signature هستن. امّا یادمون باشه ما با cryptography تنها می‌تونیم داده‌ها رو encrypt (رمزنگاری) بکنیم. یعنی اگر شخص ثالثی بتونه به هردو کلید دسترسی پیدا کنه (حالا به هر طریقی)، میتونه به راحتی پیام encrypt شده رو رمزگشایی کنه و به محتواش دست پیدا بکنه. خب پس یعنی راهی وجود نداره که بشه کاری کرد که حتی اگر داده‌ها در مسیر رسیدن به مقصد به هر طریقی decrypt شدن و تغییر داده شدن، از این تغییر آگاه بشیم و بفهمیم که این داده‌ها همون داده‌های اصل نیستن؟

جواب: چرا؛ اضافه کردن یک لایه‌ی امنیتی بیشتر با استفاده از توابع Hash.

Hashing یا درهم‌سازی

Hash یک تابع ریاضی هست که داده‌ها با هر سایزی رو دریافت می‌کنه، عملیاتی رو بر روی این داده‌ها انجام میده و نهایتاً در خروجی، رشته‌ای متشکل از اعداد و حروف با طول ثابت رو به ما تحویل میده که به این خروجی میگن hash. منظورمون از طول ثابت چی هست؟ یعنی فرقی نمیکنه شما به یک تابع هش یک کلمه بدید یا یک جمله یا یک داستان، به ازای تمام این ورودی‌ها، تابع هش خروجی‌های مختلف ولی همه با طولی یکسان (مثلاً رشته‌هایی ۲۵۶ بیتی)، تولید میکنه (برای تستش می‌تونید از ابزارهای آنلاین مختلفی مثل این لینک استفاده کنید و خروجی رشته‌های مختلفی که به عنوان ورودی به تابع میدید رو با هم مقایسه کنید).

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

دوباره برگردیم سراغ Digital Signature. گفتیم داده‌ی ما با Private Key، رمز می‌شد. امّا یک مرحله برگردیم عقب، قبل از این که پیاممون رو با Private Key اصطلاحاً sign کنیم، اول داده رو به یک تابع هش میدیم و تابع هش هم در خروجی، یک هش با طول ثابت رو به ما تحویل میده. حالا این هش تولید شده به علاوه‌ی محتوای اصلی داده، توسط Private Key، اصطلاحاً sign میشن و همراه با Public Key برای شخص موردنظرمون ارسال میشن. شخصی که پیام رو دریافت میکنه اول با Public Key که از ما دریافت کرده، پیام رو decrypt میکنه (با فرض این که کلیدها درستن و دستکاری نشدن)، بعد داده‌های اصلی رو به یک تابع هش میده، اگر خروجی تابع هش، با هشی که از سمت ما به همراه پیام ارسال شد، یکسان باشه، یعنی داده‌ها اصل هستن و کسی اون‌ها رو تغییر نداده.

امضای دیجیتال
تصویر برگرفته از وبسایت: docusign

درک عملکرد PKI و Hashing در Blockchain یک امر ضروری محسوب میشه چراکه تمام تراکنش‌هایی که در زنجیره بلوک صورت می‌گیرن، بر مبنای این دو مفهوم استوارن. با استفاده از این دو مفهوم که در کنارِ هم Digital Signature رو به وجود میارن، میشه مطمئن شد که هر داده‌ای که منتقل میشه از جانب چه کسی هست و آیا این داده اصل هست و یا تغییر داده شده.

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

امّا قسمت بعدی که باید باهاش آشنا بشیم ساختار بلاک‌چین هست.

Linked List یا لیست پیوندی

لیست پیوندی یا همون Linked list به زبون خیلی ساده میشه: “یک ساختار خطی از یکسری از عناصر، که هر عنصر از طریق یک اشاره‌گر به عنصر بعد/قبل از خودش اشاره میکنه.”

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

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

اینکه در بلاک‌ها قراره چه داده‌ای قرار بگیره، بستگی به هدف استفاده از بلاک‌چین داره. تو این بلاک‌ها میتونه فقط یک string ساده (رشته‌ای از کاراکترها مثلاً یک جمله) باشه، یا این که هر بلاکی حاوی هزاران تراکنش، اطلاعات و … باشه.

باز هم بسته به هدف استفاده از بلاک‌چین، نیازه تا به بلاک‌ها یکسری Metadata (متادیتا یا به زبون ساده یکسری داده که اطلاعاتی رو در رابطه با یکسری داده‌های دیگه در اختیار میذارن) اضافه بشه.

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

بلاک‌چین ساده

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

نکته‌ی بعدی اینه که باز هم همونطور که قبلاً اشاره شد، کل محتوای بلاک هش میشه. یعنی چی؟ مثلاً در همین مثال ساده، بلاک اول حاوی یک string ساده هست. اون چیزی که به عنوان هش در بلاک ۲ قرار میگیره، فقط هش این String نیست بلکه تمام محتوای بلاک، یعنی: string، شماره بلاک، هشی که در بلاک وجود داره و هرچیز دیگه‌ای در بلاک در صورت وجود، هش میشه و این هش هست که در بلاک ۲ قرار میگیره.

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

مخاطرات زنجیره بلوک

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

نتیجه

به صورت خلاصه می‌تونیم بگیم تکنولوژی بلا‌ک‌چین که از اون با نام Distributed Ledger Technology (DLT) هم یاد میشه می‌تونه:

  • تکنولوژی‌ای جدید برای مدیریت و ذخیره‌سازی داده‌ها در اینترنت باشه
  • پایه و اساسی برای نسل جدیدی از نرم‌افزارها باشه که بتونن با استفاده از کدهای توزیع شده بین دستگاه‌های جداگانه عمل کنن و نیاز به زیرساخت‌های Server base نداشته باشن و پیچیدگی‌های مربوط به اون‌ها رو از بین ببرن
  • یک پلتفرم محاسباتی جدید در دنیای اینترنت باشه
  • ایجادکننده‌ی توپولوژی کاملاً flat در دنیای اینترنت و به دور از پیچیدگی‌های ساختارهای سلسله مراتبی باشه (بلاک‌چین ساختاری Peer-to-Peer هست و همه ی کسانی که از این ساختار استفاده کنن در سطح یکسانی قرار دارن)
  • و نهایتاً بستری امن (البته که می‌دونیم امنیت صددرصدی محاله و Blockchain هم مخاطرات امنیتی خاص خودش رو داره) و بر پایه‌ی اعتماد (یا Trust) و بدون حضور هیچ واسطی در تبادل اطلاعات باشه. حالا این اطلاعات می‌تونن: ارزهای دیجیتال، کتاب، موسیقی، فیلم، پیام و … باشن.

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

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

نویسنده: مینا رضائی

محقق و همیشه در حال یادگیری، عاشق نقاشی، گاهی هم نویسندگی یا تألیف کتابای بزرگ :) (مسئولیت و صحت و سقم کلیه ی مطالب منتشر شده از جانب من تنها بر عهده ی خودم می باشد)

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

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.