رمزنگاری در بلاک چین ( بخش سوم )

0 17

هش بلوک 

  • مقاومت در برابر حملات Preimage: با داشتن یک هش مشخص مانند که خروجی تابع هشی به صورت  است، نباید بتوان رشته  را پیدا کرد. این ویژگی که متضمن یک سویه بودن تابع است به دو نوع اولیه و ثانویه قابل تقسیم است که این انواع بستگی به آن دارند که رشته پیدا شده رشته اصلی باشد یا رشته دیگری باشد که همان هش را به عنوان خروجی نتیجه می‌دهد.
  • مقاومت در برابر Collision یا برخورد: اگر به تعریف تابع هش دقت کنیم (تبدیل هر رشته ورودی با طول دلخواه به یک رشته با طول ثابت) واضح است که غیر ممکن است بتوان تابع هشی که برخورد نداشته باشد ساخت. عدم برخورد به آن معناست که دو رشته متفاوت پیدا شوند که هش یکسان داشته باشند. اگر در نظر بگیریم که خروجی تابع هش به صورت هگزادسیمال[1] بوده و خروجی تابع هش ۶۴ کاراکتر باشد، تنها به تعداد ۶۴ عدد ترکیب ممکن داریم که برابر با  ترکیب می‌شود که رقمی در حدود  است. به عبارتی برای چنین تابعی تنها همینقدر حالت ممکن است و بعد از آن قطعا می‌توان دو رشته با هش یکسان پیدا کرد. این موضوع از اصل لانه کبوتری هم مشخص است که به موجب آن نمی‌توان بی‌نهایت ترکیب متفاوت را به تعداد مشخصی کاراکتر تصویر کرد به گونه‌ای که هیچ دو موردی تصویر یکسان نداشته باشند. اما این ویژگی به ان معناست که باید یافتن این تصادم بسیار سخت بوده و تنها از طریق آزمایش تمام ترکیبات، ممکن شود. مقاومت در برابر تصادم یا برخورد دربرگیرنده مقاومت در برابر حملات Preimage نوع دوم است و شرطی قوی‌تر از این شرط محسوب می‌شود.

ساخت یک هش خروجی مقاوم در برابر تصادم از رشته ورودی با طول دلخواه معمولا توسط الگوریتمی انجام می‌شود که به درخت مرکله-دامگارد[2] مشهور است. (Merkle, 428-446)) روش کار این الگوریتم این است که رشته با طول نامشخص ورودی را به بخش‌هایی تقسیم کرده و بعد از طی برخی مراحل امنیتی[3] هر یک از این بخش‌ها را تبدیل به هش کرده و با وارد کردن هش‌ها به تابع هش، رشته‌های ساده‌تر و کوتاه‌تری را در یک ساختار سلسله‌وار تولید می‌کند تا به هش کل پیام برسد.

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

نگاره 1 : یک بلوک نمونه در بلاک چین بیت کوین. در تصویر اطلاعات مختلفی از جمله شماره بلوک، تعداد کل تراکنش‌های موجود در بلوک، کل کارمزد‌ها، برچسب زمانی، هش بلوک، هش بلوک قبلی و بلوک بعدی و ریشه مرکل را می‌بینید. هش بلوک بعدی در اینجا به دلیل این نوشته شده است که ما برای تهیه این تصویر از یک مرورگر بلوک کمک گرفته‌ایم که اطلاعات دیگری به جز اطلاعات موجود در بلوک را نیز نشان می‌دهد و طبیعتا امکان نوشتن هش بلوک بعدی در یک بلوک در بلاک چین عمومی وجود ندارد. (این کار نیاز به اجماع بیش از ۵۰ درصد کل نودهای شبکه برای تغییر در بلوک دارد که بسیار مشکل است.) منبع (Blockchain Luxembourg S.A, 2019)

البته باید دقت داشت این ویژگی تنها با شرایط گفته شده قابل دسترسی هستند و به طور مثال اگر تعداد نودها کم باشد حمله به این بلاک چین آسان خواهد بود. ضمنا عمق بلوک نیز در غیر قابل تغییر بودن آن موثر است. زیرا ممکن است نودی که در بلاک چین برای دریافت اطلاعات بلوک از آن استفاده می‌کنیم در توافق با سایر نودها نباشد و سایر نودها بر روی بلوکی جز این بلوک توافق کرده باشند که اصطلاحا به این شرایط منشعب شدن یا فورک[5] می‌گوییم. فورک‌ها را می‌توان به طور کلی به دو دسته هارد[6] فورک و سافت[7] فورک طبقه‌بندی کرد.

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

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

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

منابع

Blockchain Luxembourg S.A. (2019). Bitcoin Block explorer. Retrieved from Blockchain: https://www.blockchain.com/explorer

Merkle, R. (428-446). One way hash functions and DES. LNCS, 1989.

Pelzl, J., & Paar, C. (2009). Understanding Cryptography, A Textbook for Students and Practitioners. Springer.

Welchman, G. (1984). The Hut Six Story: Breaking the Enigma Codes. Penguin Books.

 

 

[1] Hexadecimal: مبنای شانزده. اعداد روزمره ما در مقیاس ده و مبنای داده‌ها در کامپیوتر دو هستند که باعث می‌شود در باینری (مبنای دو) تنها دو عدد صفر و یک دارای معنا باشند. در مبنای ده اعداد از صفر تا نه هستند و در مبنای شانزده اعداد از صفر تا f هستند.

[2] Merkle–Damgård

[3] به عنوان مثال می‌توان به Padding اشاره کرد که طی آن رشته اصلی پیام با رشته‌های بدون معنای خاص ترکیب می‌شود تا پیام نسبت به تحلیل‌های زبانی و ساختاری مقاوم‌تر شود. به طور مثال ممکن است رمزشکنان با دانستن اینکه ابتدای هر پیام با «سلام» شروع شده و پایان آن با «خداحافظ»  خاتمه می‌یابد سعی کنند با تعداد خیلی کمتری آزمون و خطا به کلید و متن اصلی دست یابند. مقاوم کردن پیام به این حمله از طریق اضافه کردن کلماتی به ابتدا و انتهای پیام ممکن است که یک نوع خاص از Padding محسوب می‌شود. (Welchman, 1984))

[4] Node

[5] Fork

[6] Hard

[7] Soft

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

ارسال پاسخ

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