هشینگ یا هش کردن (Hashing) به فرآیند ایجاد یک خروجی با سایز ثابت از یک ورودی با سایزهای متغیر گفته میشود. این کار از طریق فرمولهای ریاضی معروف به توابع هش انجام میشود. (که به عنوان الگوریتمهای هشینگ پیاده سازی میشوند.)
اگرچه همه توافع هش برای رمزنگاری قابل استفاده نیستند، توابع معروف به توابع هش رمزنگاری در هسته ارزهای دیجیتال قرار میگیرند. به کمک این توابع، بلاکچینها و سایر سیستمهای توزیع شده میتوانند به سطح قابل توجهی از یکپارچگی و امنیت دادهها دست پیدا کنند.
هر دو توابع مرسوم هش و رمزنگاری، قطعی هستند. قطعی بودن به معنای آن است تا زمانی که ورودی تغییری نکند، الگوریتم هشینگ همان خروجی را تولید میکند (به عنوان digest یا هش هم شناخته میشود.)
به طور معمول الگوریتمهای هش ارز دیجیتال به عنوان توابع یک طرفه طراحی میشوند، به این معنی که نمیتوان بدون منابع و زمان محاسباتی زیاد آنها را برگرداند. به عبارت دیگر، تولید خروجی ازب ورودی کار تقریبا راحتی است، اما حرکت در مسیر برعکس (یعنی تولید ورودی از خروجی به تنهایی) کار بسیار مشکلی است. عموماً هرچه یافتن ورودی سخت تر باشد، الگوریتم هشینگ (Hashing) ایمن تر تلقی میشود.
یک تابع هش چگونه عمل میکند؟
توابع متفاوت هش، خروجیهایی با اندازههای مختلف تولید میکنند، اما اندازه خروجی ممکن برای هر یک از توابع هش، همواره ثابت است. به عنوان مثال، الگوریتم SHA-256 فقط میتواند خروجیهای 256 بیتی را تولید کند، درحالی که الگوریتم SHA-1 میتواند همیشه یک خلاصه 160 بیتی تولید کند.
برای توضیح بهتر، کلمه های «Binance» و «binance» را از طریق الگوریتم هش SHA-256 (مورد استفاده بیت کوین است) اجرا میکنیم.
ورودی | خروجی (256 بیتی) |
Binance | f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191 |
binance | 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2 |
توجه داشته باشید که یک تغییر کوچک (حرف اول) منجر به خروجی هش کاملا متفاوتی شده است. اما از آنجا که ما از الگوریتم SHA-256 استفاده میکنیم، خروجی همواره بدون توجه به اندازه ورودی سایز ثابت 256 بیتی (یا 64 کاراکتری) دارد. مهم نیست که چند بار این دو کلمه را از طریق این الگوریتم اجرا کنید، خروجی این دو همواره ثابت خواهد بود.
بر عکس، اگر ما بخواهیم این ورودیها را به الگوریتم هش SHA-1 بدهیم، نتایج زیر را خواهیم دید:
ورودی | خروجی (160 بیتی) |
Binance | 7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1 |
binance | e58605c14a76ff98679322cca0eae7b3c4e08936 |
شایان ذکر است که SHA مخفف عبارت (Secure Hash Algorithms) به معنای الگوریتمهای ایمن هش است که به مجموعه ای از توابع هش رمزنگاری شده که شامل SHA-0 و SHA-1 به همراه گروههای SHA-2 و SHA-3 میشود. الگوریتم SHA-256 و SHA-512 و سایر انواع آن از گروه الگوریتمهای SHA-2 محسوب میشود. در حال حاضر فقط الگوریتمهای SHA-2 و SHA-3 الگوریتمهای ایمنی تلقی میشوند.
چرا هشینگ اهمیت دارد؟
توابع هش معمولی موارد استفاده گسترده ای از جمله جستجوی پایگاه داده، تجزیه و تحلیل دادههای بزرگ و مدیریت داده دارند. از طرف دیگر، توابع هش رمزنگاری به طور گسترده ای در برنامههای کاربردی امنیت اطلاعات مانند احراز هویت و اثر انگشت دیجیتال استفاده دارند. وقتی صحبت از بیت کوین به میان میآید، توابع هش رمزنگاری بخشی ضروری از فرآیند ماینینگ (استخراج) هستند و میتوانند نقشی را در تولید آدرسها و کلیدهای جدید ایفا کنند.
قدرت واقعی هشینگ زمانی که با حجم زیادی از اطلاعات سر و کار دارید نمایان میشود. به عنوان مثال میتوان یک مجموعه از داده و یا یک کفایل بزرگ را با استفاده از توابع هش اجرا کرد و سپس از خروجی برای تأیید دقت و یکپارچگی دادهها استفاده کرد. این امر به خاطر ماهیت قطعی بودن توابع هش وجود دارد: ورودی همیشه منجر به یک خروجی (هش) ساده و فشرده میشود. چنین تکنیکی نیاز به ذخیره و «به خاطر سپاری» مقادیر زیاد داده را برطرف میکند.
هشینگ به ویژه در زمینه فناوری بلاکچین مفید است. بلاکچین بیت کوین چندین عملیات دارد که شامل هشینگ میشود و اکثر این عملیاتها در فرآیند ماینینگ انجام میشود. در حقیقت، تقریبا تمام پروتکلهای ارزهای دیجیتال برای پیوند دادن و متراکم کردن گروههایی از تراکنشها به داخل بلاکها به هش کردن متکی هستند.
توابع هش رمزنگاری
یک تابع هش که میتواند تکنیکهای رمزنگاری را به کار گیرد به عنوان یک تابع هش رمزنگاری تعریف میشود. به طور کلی، شکستن یک تابع هش رمزنگاری نیاز به تعداد بی شماری حمله جستجوی فراگیر (brute-force) نیاز دارد. برای اینکه شخصی بتواند یک تابع هش رمزنگاری را بازگردانی کند باید ورودی را با آزمون و خطا حدس بزند تا بتواند خروجی مدنظر را تولید کند. با این حال، این احتمال وجود دارد که ورودیهای مختلف دقیقاً همان خروجی را تولید کنند که در این صورت یک برخورد یا Collision رخ میدهد.
از نظر فنی، یک تابع هش رمزنگاری باید سه ویژگی را داشته باشد تا بتوان آن را ایمن تلقی کرد. این سه ویژگی شامل مقاومت در برابر برخورد، مقاومت در برابر پیش تصویر، مقاومت در برابر پیش تصویر دوم میشوند.
قبل از اینکه درباره هر کدام از این ویژگیها صحبت کنیم، منطق آنها را در این سه جمله خلاصه میکنیم.
- مقاومت برخورد: یافتن دور ورودی مجزا که یک خروجی هش یکسان تولید کنند غیرممکن است.
- مقاومت پیش تصویر: برگرداندن تابع هش غیرممکن است (اینکه بتوانیم از روی خروجی، ورودی را پیدا کنیم)
- مقاومت پیش تصویر دوم: یافتن هر ورودی دومی که با ورودی مشخص شده برخورد داشته باشد، غیرممکن است.
مقاومت برخورد
همانطور که گفته شد، یک برخورد زمانی رخ میدهد که ورودیهای متفاوت دقیقا هش یکسانی تولید کنند. بنابراین، یک تابع هش در برابر برخورد مقاوم است تا زمانی که کسی بتواند برخوردی را پیدا کند. باید به این نکته توجه داشت که برخورد برای تمام توابع هش وجود خواهد داشت، چراکه تعداد ورودیها ممکن است بی نهایت باشد ولی تعداد خروجیها احتمالا محدود است.
به بیان دیگر یک تابع هش زمانی در برابر برخورد مقاوم است که احتمال پیدا کردن برخورد بسیار پایین باشد و نیاز به میلیونها سال محاسبه داشته باشد. پس علی رغم این حقیقت که هیچ تابع هش بدون برخوردی وجود ندارد، برخی از آنها به اندازه کافی قدرتمند هستند که بتوان آنها را در برابر برخورد مقاوم تلقی کرد. (مانند الگوریتم SHA-256)
در میان انواع مختلف الگوریتم SHA، گروههای SHA-0 و SHA-1 دیگر ایمن نیستند چراکه در آنها برخورد پیدا شده است. در حال حاضر گروههای SHA-2 و SHA-3 در برابر برخورد مقاوم هستند.
مقاومت پیش تصویر
ویژگی مقاومت پیش تصویر به مفهوم توابع یک طرفه مربوط میشود. یک تابع هش به عنوان مقاوم پیش تصویر در نظر گرفته میشود با این شرط که احتمال اینکه شخصی بتواند ورودی که منجر به تولید یک خروجی خاص میشود را پیدا کند، بسیار پایین باشد.
باید به این موضوع توجه کنید که این ویژگی نسبت به ویژگی قبلی متفاوت است، چراکه یک هکر میتواند تلاش کند با توجه به خروجی داده شده، ورودی را پیدا کند. از طرف دیگر، یک برخورد زمانی رخ میدهد که دو ورودی متفاوت یک خروجی مشابه داشته باشد، اما مهم نیست که چه وروردی مورد استفاده قرار گرفته است.
مقاومت پیش تصویر برای حفاظت از دادهها به خاطر اینکه یک هش ساده میتواند صحت آن را بدون افشای اطلاعات تایید کند، ارزشمند است. در واقع، بسیاری از ارائه دهندگان خدمات و برنامههای کاربردی وب، رمزهای عبور کاربران خود را به صورت هش ذخیره میکنند و پسوردها را به شکل واقعی خود ذخیره نمیکنند.
مقاومت پیش تصویر دوم
برای ساده سازی باید بگوییم که مقاومت پیش تصویر دوم، ویژگی است که در واقع بین دو ویژگی قبلی قرار میگیرد. حمله پیش تصویر دوم زمانی رخ میدهد که شخصی بتواند ورودی مشخصی را پیدا کند که منجر به تولید یک خروجی میشود که این خروجی حاصل یک ورودی دیگر بود است و ما از آن اطلاع داریم.
به عبارت دیگر، یک حمله پیش تصویر دوم شامل پیدا کردن یک برخورد میشود، اما به جای اینکه به دنبال دو ورودی تصادفی باشیم که یک هش یکسان تولید میکند، به دنبال این خواهیم بود که یک ورودی پیدا کنیم که خروجی تولید شده به وسیله یک ورودی دیگر را تولید کنید.
به همین خاطر، هر تابع هش که در برابر برخورد مقاوم باشد، در برابر پیش تصویر دوم نیز مقاوم است، زیرا پیش تصویر دوم همیشه مستلزم وجود برخورد است.
هش در ماینینگ
مراحل زیادی در استخراج بیت کوین وجود دارد که توابع هش را درگیر میکند، مانند بررسی موجودی، پیوند دادن تراکنشهای ورودی و خروجی و هش کردن تراکنشها در یک بلاک برای تشکیل درخت مرکل. اما یکی از دلایل اصلی که بلاکچین بیت کوین را ایمن ساخته، این است که ماینرها باید تعداد بی شماری از عملیات هش را انجام دهند تا در نهایت یک راه حل معتبر برای بلاکهای بعدی پیدا کنند.
به طور مشخص، یک ماینر باید چندین ورودی مختلف را هنگام ایجاد یک مقدار هش برای بلوک کاندید خود امتحان کند. در اصل، آنها تنها زمانی میتوانند بلاک خود را اعتبارسنجی که هش خروجی تولید شده با تعداد مشخصی از صفر شروع شود. تعداد صفرها در واقع سختی ماینینگ را تعیین میکند و با توجه به نرخ هش اختصاص داده به شبکه متفاوت خواهد بود.
در این مورد، نرخ هش بیانگر مقدار قدرتی است که کامپیوتر برای استخراج بیت کوین باید صرف کند. اگر نرخ هش شبکه افزایش پیدا کند، پروتکل بیت کوین به صورت خودکار میزان سختی ماینینگ را تنظیم میکند تا میانگین زمان لازم برای ماین کردن یک بلاک به 10 دقیقه نزدیک شود. در مقابل اگر تعدادی از ماینرها تصمیم بگیرند که عملیات ماینینگ را متوقف کنند، باعث کاهش قابل توجه هش ریت میشوند، سختی ماینینگ دوباره تنظیم میشود و استخراج را راحت تر میکند (تا زمانی که دوباره میانگین زمان هر بلاک به 10 دقیقه نزدیک شود)
از آنجایی که استخراج بیت کوین یک کار پرهزینه است، ماینرها دلیلی برای تقلب در سیستم ندارند، چراکه منجر به ضررهای مالی سنگینی میشود. هر چه ماینرهای بیشتری به بلاکچین ملحق شوند، شبکه قوی تر و بزرگ تر خواهد شد.
جمع بندی
شکی نیست که توابع هش یکی از ابزارهای ضروری در علوم کامپیوتر به حساب میآیند، به خصوص زمانی که با حجم عظیمی از دادهها سر و کار داریم. زمانی که هش با رمزنگاری ترکیب شود، الگوریتمهای هشینگ با انعطاف پذیری امنیت و اعتبار سنجی را به روشهای مختلفی ارائه میکنند. به این ترتیب، توابع رمزنگاری هش برای تمام شبکه های رمزارز حیاتی هستند و درک مفهوم این ویژگیها و مکانیسمهای عملکرد آنها مشخصا برای کسانی که به تکنولوژی بلاکچین علاقمند هستند بسیار مفید است.
نظرات کاربران