مقدمه ای بر بلاک چین Blockchain ( قسمت اول )

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

0 234

تابع هش

مقدمه

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

 

یک دفتر حسابداری چه ویژگی‌هایی دارد؟

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

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

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

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

تابع هش:

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

  • ساخت تابع هش از روی داده ورودی باید ساده باشد.
  • کشف داده ورودی از روی هش باید بسیار سخت باشد.

این دو ویژگی باعث می‌شود بگوییم تابع هش نباید معکوس پذیر باشد.

  • تابع هش باید Collision Resistant باشد.

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

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

در عمل تابع‌های مختلفی برای هش وجود دارند که مشخص شده است بعضی از آن‌ها در مورد ویژگی‌های سوم و چهارم نقص دارند و به همین علت استفاده آن‌ها محدود شده یا منسوخ شده اند. از جمله آن‌ها می‌توان به SHA-1 و md5 (J. Black, 2006)) اشاره کرد که اولی منسوخ شده و دومی در مواردی که امنیت کمتری لازم دارند، مانند زمانی که یک فایل را از اینترنت دانلود می‌کنید، مورد استفاده قرار می‌گیرد.

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

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

اما آیا کسی نمی‌تواند تمامی فایل‌ها را تغییر دهد؟

 

[۱] Distributed Ledger Technology

[۲] Database

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.