هش و هشینگ (Hashing) چیست؟

هش چیست

به زبان ساده ، هش به معنای گرفتن یک رشته ورودی از هر طول و دادن یک خروجی با یک طول ثابت است. در زمینه ارزهای رمزنگاری شده مانند بیت کوین ، معاملات به عنوان ورودی در نظر گرفته می شوند و از طریق یک الگوریتم هش (بیت کوین از SHA-256 استفاده می کند) اجرا می شود که دارای خروجی با طول ثابت است.

بیایید ببینیم روند هش کردن چگونه کار می کند. ما قصد داریم ورودی های خاصی را وارد کنیم. برای این تمرین ، ما قصد داریم از SHA-256 (Secure Hashing Algorithm 256) استفاده کنیم.

هش چیست
همانطور که مشاهده می کنید ، در مورد SHA-256 ، مهم نیست که ورودی شما بزرگ یا کوچک باشد ، خروجی همیشه یک طول 256 بیتی ثابت خواهد داشت. این امر وقتی حیاتی می شود که با حجم عظیمی از داده ها و معاملات سر و کار دارید. بنابراین اساساً ، به جای به خاطر سپردن داده های ورودی که می تواند بسیار زیاد باشد ، می توانید هش را به خاطر بسپارید و پیگیری کنید. قبل از ادامه کار ، ابتدا باید ویژگی های مختلف عملکردهای هش و نحوه پیاده سازی آنها در بلاکچین را ببینیم.

توابع هش رمزنگاری

عملکرد هش رمزنگاری یک کلاس خاص از توابع هش است که دارای خواص مختلفی است که آن را برای رمزنگاری ایده آل می کند. ویژگی های خاصی وجود دارد که یک عملکرد هش رمزنگاری برای داشتن امنیت در نظر گرفته می شود. بیایید یکی یکی آنها را بررسی کنیم:

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

ویژگی 2: محاسبه سریع
عملکرد هش باید بتواند هش ورودی را به سرعت برگرداند. اگر روند به اندازه کافی سریع نباشد ، سیستم به راحتی کارآمد نخواهد بود.

ویژگی 3: مقاومت قبل از تصویر
آنچه که مقاومت قبل از تصویر را بیان می کند این است که با توجه به تابع (H (A تعیین A ، در جایی که A ورودی است و(H (A  هش خروجی است ، غیرممکن است. ما از قبل می دانیم که تعیین ورودی اصلی از مقدار هش آن غیرممکن نیست. بیایید یک مثال بزنیم.

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

اما این تنها زمانی کار می کند که مقدار داده شده بسیار کمتر باشد. چه اتفاقی می افتد که مقدار زیادی داده داشته باشید؟ فرض کنید با یک هش 128 بیتی روبرو هستید. تنها روشی که باید برای یافتن ورودی اصلی استفاده کنید ، استفاده از “روش brute-force” است. روش Brute-force در اصل به این معنی است که شما باید ورودی تصادفی را انتخاب کنید ، آن را هش کنید و سپس خروجی را با هش هدف مقایسه کنید و تکرار کنید تا زمانی که مطابقت پیدا کنید.

بنابراین ، اگر از این روش استفاده کنید چه اتفاقی می افتد؟

بهترین حالت: جواب خود را در اولین تلاش خود می گیرید. به طور جدی برای این اتفاق باید خوش شانس ترین فرد جهان باشید. احتمال این اتفاق نجومی است.

بدترین حالت: پس از 2 ^ 128 – 1 بار پاسخ خود را دریافت می کنید. در واقع ، این بدان معناست که شما در پایان همه داده ها پاسخ خود را پیدا خواهید کرد.

سناریوی متوسط: آن را جایی در وسط خواهید یافت بنابراین اساساً بعد از 2 ^ 128/2 = 2 ^ 127 بار. برای بیان این موضوع ، 2 ^ 127 = 1.7 X 10 ^ 38. به عبارت دیگر ، این رقم عظیمی است.

بنابراین ، در حالی که شکستن مقاومت قبل از تصویر از طریق روش brute force امکان پذیر است ، اما آنقدر طول می کشد که اهمیتی ندارد.

ویژگی 4: تغییرات کوچک در ورودی باعث تغییر هش می شود.

حتی اگر یک تغییر کوچک در ورودی خود ایجاد کنید ، تغییراتی که در هش منعکس خواهد شد بسیار زیاد خواهد بود. بیایید با استفاده از SHA-256 آن را آزمایش کنیم:

هش چیست

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

خاصیت 5: مقاومت در برابر برخورد
با توجه به دو ورودی متفاوت A و B که (H (A و (H (B هش مربوطه هستند ، برابر بودن (H (A با(H (B غیرقابل اجرا است. معنای آن این است که در بیشتر قسمت ها ، هر ورودی هش منحصر به فرد خود را دارد. چرا گفتیم “در اکثر موارد”؟ برای درک این موضوع ، باید بدانیم “پارادوکس تولد” چیست.

پارادوکس تولد چیست؟
اگر با هر فرد غریبه ای تصادفی در خیابان ها روبرو شوید ، احتمال تولد هر دو شما بسیار کم است. در حقیقت ، با فرض اینکه همه روزهای سال احتمال تولد یکسان دارند ، احتمال اینکه فرد دیگری تولد شما را به اشتراک بگذارد 1/365 است که 0.27٪ است. به عبارت دیگر ، واقعاً کم است.

با این حال ، گفته است که ، اگر 20-30 نفر را در یک اتاق جمع کنید ، احتمال اینکه دو نفر تولد یکسانی داشته باشند ، به طور نجومی افزایش می یابد بله در واقع ، در این سناریو برای 2 نفر که یک روز تولد دارند ، 50-50 فرصت وجود دارد!

ادامه در پست بعد>>>