هش کردن چیست؟ – قسمت اول

مترجم: احمد رجعتی

دانستن این که استفاده از هش در بلاک‌چین چگونه است، بسیار مهم است. با این حال، برای انجام این کار ابتدا باید یکی از اصول اصلی ایجاد بلاک‌چین را درک کنیم. فن آوری بلاک‌چین یکی از نوآورانه‎ترین فناوری­‌ها در قرن گذشته است.  برای درک چگونگی عملکرد ارزهای رمزنگاری‌شده مختلف مانند عملکرد اتریوم و بیت‌کوین نیز لازم است با هش (Hash) آشنا شویم.

هش کردن چیست؟

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

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

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

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

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

ویژگی 1: تعیین‌کننده (Deterministic)

این ویژگی بدان معنی است که مهم نیست چند بار تابع هش را بر روی یک ورودی اجرا (parse)  می­‌کنید، شما هر بار خروجی مشابهی دریافت می­‌کنید. این ویژگی، بسیار مهم است زیرا اگر هش­‌های متفاوتی را در هر بار دریافت کنید، رهگیری ورودی­‌ها غیرممکن می‌شود.

ویژگی 2: محاسبه سریع (Quick Computation)

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

ویژگی 3: Pre-Image Resistance

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

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

اما این شرایط تنها زمانی ممکن است که مقدار داده بسیار کم است. اگر مقدار داده‌ها بسیار زیاد باشد چه اتفاقی می‌­افتد؟ فرض کنید با یک هش 128 بیتی برخورد می‌کنید. تنها روشی که با کمک آن می‌­توانید ورودی اصلی را پیدا کنید، «روش brute-force» است. این روش به این معنی است که باید یک ورودی تصادفی را انتخاب کنید، هش آن را محاسبه کنید و سپس خروجی را با هش هدف مقایسه کنید و تا زمانی که به نتیجه نرسیده‌اید، این کار را تکرار کنید.

منبع: blockgeeks

1 پاسخ

دیدگاه خود را ثبت کنید

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

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