تابع هش وهشینگ چیست؟

  • 23 آذر , 1399
  • مهدی محمدی
  • 126 بازدید
  • بدون دیدگاه
  • دسته بندی : مقالات
  • امتیاز :

    0 / 5. 0

در این مقاله به کمک کارشناسان سایت ارز دیجیتال به بررسی تابع هش وهشینگ بپردازیم.

هش کردن یا هشینگ به فرآیندی گفته می‌شود که در آن یک عملگر ریاضی به نام «تابع هش» (Hash Function)، داده‌های ورودی مانند حروف و اعداد و تصویر و … را به خروجی رمزگذاری شده تبدیل می‌کند. به تابع هش، «تابع درهم‌ساز» نیز گفته می‌شود.

به عنوان مثال یک تابع هش می‌تواند کلمه «سلام» را دریافت کند و به عنوان خروجی این عبارت را تحویل بدهد:

«bda1fa48345336618741fd2c4bc02809eb099c49a9b02fb5056401ab6d4dc3e6»

به خروجیِ تابع هش، «هش» (Hash) می‌گویند و به این عمل یعنی استفاده از تابع هش برای ایجاد هش، هش کردن یا «هشینگ» (Hashing) گفته می‌شود.

حالا بیایید ببینیم فرآیند هش کردن یا به اصطلاح هشینگ چگونه انجام می‌شود.

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

توابع هش معتبر، هر مقدار ورودی را تبدیل به یک رشته متنی با طول ثابت می‌کنند.

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

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

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

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

۱- قطعی و معین بودن

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

مثلا اگر کلمه «سلام» را هزاران بار در تابع هش وارد کنیم باز هم هش این کلمه ثابت است.

۲- محاسبه سریع

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

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

به عبارت دیگر، در یک تابع هش استاندارد، ساخت خروجی از ورودی به راحتی قابل انجام است اما پیدا کردن ورودی از خروجی بسیار دشوار است. دقت داشته باشید از واژه دشوار و غیرعملی به جای واژه «غیرممکن» استفاده شده است. به مثال زیر توجه کنید.

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

اما این سازوکار زمانی امکان‌پذیر است که تعداد داده‌های شما کم باشد. اگر با حجم عظیمی از اعداد سروکار داشته باشید، آنگاه چه خواهید کرد؟

فرض کنید شما با یک هش ۱۲۸ بیتی سر و کار دارید. تنها راه پیدا کردن داده ورودی اصلی استفاده از روش «جستجوی جامع» است. جستجوی جامع که به آن جستجوی خام و بی‌خردانه (brute-force method) نیز گفته می‌شود، اساسا به این معنی است که شما باید همینطور داده‌ها را امتحان کرده و آن را با خروجی مقایسه کنید و این مراحل را تا جایی که هش ورودی و هش هدف با یکدیگر تطابق پیدا کنند، ادامه دهید.

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

  • بهترین حالت ممکن: شما در اولین تلاش خود، جواب را پیدا کنید. برای این‌که این اتفاق بیافتد به معنای واقعی کلمه باید خوش‌شانس‌ترین فرد در تمام هستی باشید. احتمال رخ دادن چنین اتفاقی تقریبا به صفر میل می‌کند.
  • بدترین حالت ممکن: شما پاسخ را در سعی و خطای دفعه (۱-۱۲۸)^۲ام بیابید. در واقع یعنی در آخرین شانس خود جواب را پیدا کنید.
  • حالت میانگین: جواب را جایی در آن وسط‌ها پیدا کنید. بنابراین پس از ۱۲۷^۲ = ۲/(۱۲۸)^۲ بار. برای این‌که درک واضحی از این عدد داشته باشید، باید بدانید که ۱۲۷^۲برابر است با ۳۸^۱۰× ۱.۷ و پیدا کردن عدد از بین این همه احتمال با کامپیوترهای امروزی احتمالا هزاران سال زمان خواهد برد.

بنابراین همان‌طور که پیش‌تر نیز عنوان شد، یافتن پیش‌تصویرِ خروجیِ متناظر با یک ورودیِ تصادفی با استفاده از حدس داده‌ها امکان‌پذیر است اما بسیار بسیار زمان‌بر خواهد بود به طوری که هیچ توجیهی برای این کار وجود ندارد.

اشتراک گذاری مطلب در :

نظری بنویسید

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

مطالب مشابه با این مقاله

مقالات مرتبط با مقاله ای خواندید
آشنایی با بهترین ابزار توسعه اتریوم برای ایجاد برنامه‌های غیرمتمرکز
دسته بندی: مقالات / تاریخ : 1400/05/03

آشنایی با بهترین ابزار توسعه اتریوم برای ایجاد برنامه‌های غیرمتمرکز

اتریوم یک پلت‌فرم ارز رمز پایه و بلاکچینی منبع باز و غیرمتمرکز با قابلیت قرارداد هوشمند است که بعد از …

چگونگی عملکرد پورتفولیو کوین مارکت‌کپ  (CoinMarketCap portfolio)
دسته بندی: مقالات / تاریخ : 1400/05/03

چگونگی عملکرد پورتفولیو کوین مارکت‌کپ (CoinMarketCap portfolio)

پورتفولیو کوین‌مارکت‌کپ (CoinMarketCap portfolio) چیست؟ اگر شما یک سرمایه‌گذاری رمزنگاری دارید، به طور معمول ممکن است ارزهای آن را از …

از چگونگی کارکرد کیف پول Blockchian | بلاکچین چه می‌دانید؟
دسته بندی: مقالات / تاریخ : 1400/04/26

از چگونگی کارکرد کیف پول Blockchian | بلاکچین چه می‌دانید؟

در عصر تکنولوژی ارزهای رمزنگاری شده همانند بیت کوین و اتریوم به دلیل پیشرفت‌های بسیاری که به نسبت ارزهای فیات …

تاریخچه بیت کوین کش
دسته بندی: مقالات / تاریخ : 1400/04/09

تاریخچه بیت کوین کش

راجر ور به مسیح بیت کوین شهرت دارد، از همان اول در جامعه بیت کوین بود و در استارت آپ …