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

راهنمای مطالعه []

    رمزنگاری در رمزارزها به چه معناست؟

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

    برای این کار از امضای دیجیتال استفاده می شود. از آنجایی که رمزنگاری کردن پیغام های طولانی زمان زیادی را می طلبد، پروتکل های امضای دیجیتال از تابع هش استفاده می کنند.

    پروتکل های امضای دیجیتال چه پروسه ای را می گذرانند تا به هدف خود برسند؟

    هشینگ

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

    استفاده از تابع هش کمک بسیار زیادی به تسهیل و سرعت بخشیدن به شبکه بلاک چین دارد، چرا که با استفاده از تابع هش، شبکه همیشه با داده هایی با طول یکسان کار می کند و همین موضوع سرعت عملیات را بالا برده و روند را سهل تر می کند.

    امضا

    در قدم بعد داده های هش شده باید امضا شوند. فرد فرستنده با استفاده از کلید خصوصی خود هش به دست آمده از تابع هش را امضا می کند، اما کلید خصوصی قرار نیست با شبکه و یا شخص گیرنده به اشتراک گذاشته شود، در نتیجه با استفاده از کلید خصوصی به کلید عمومی دست یافته و آن را به همراه هش به گیرنده ارسال می کنیم.

    اعتبارسنجی

    همان طور که گفته شد، فرستنده با استفاده از کلید خصوصی پیغامی که قصد ارسال آن را دارد امضا می کند.

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

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

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

    هدف هش

    فرض کنید یک مسابقه برگزار شده و عده ای در آن مسابقه شرکت کرده اند. مجری مسابقه عددی را انتخاب می کند و شرکت کنندگان باید آن عدد را حدس بزنند. در این صورت مجری مسابقه ممکن است حتی در صورت ارائه جواب درست از سمت شرکت کنندگان ادعا کند که عدد دیگری را مد نظر داشته است.

    در شبکه بلاک چین امکان چنین تقلب هایی نیست، زیرا یک نسخه از عدد انتخابی باید به تمام افراد حاضر در شبکه ارسال شود و همین موضوع اجازه تقلب به کسی را نخواهد داد.

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

    فرایند هشینگ

    همان طور که پیش از این نیز بیان شد، تابع هش ورودی های مختلف را دریافت می کند و خروجی هایی متفاوت اما با طول کاراکتر ثابت را تحویل می دهد.

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

    همان طور که در دو تصویر بالا می بینید، قرار دادن یک حرف و یا یک جمله برای این تابع فرقی ندارد و تعداد کاراکترهای خروجی تابع با توجه به نوع تابع هش که اینجا تابع هش پرکاربرد sha256 مورد استفاده قرار گرفته است، ثابت می ماند.

    خروجی تابع هش را “هش” و عملی که با کمک تابع هش انجام می شود را هشینگ می گویند.

    توابع هش بسیار گوناگون هستند، اما تابع هش sha256 بیشترین کاربرد را در میان توابع هش دارد.

    در هر زمینه ای که هویت سنجی و ایجاد امنیت مهم باشد، استفاده از تابع هش رمزنگاری می تواند بسیار کمک بزرگی باشد و به عنوان ایجادکننده امضای دیجیتال عمل کند.

    هش در بلاک چین

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

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

    شبکه بلاک چین از این سیستم هش برای اطمینان از اینکه تراکنش ها تغییر نکرده اند استفاده می کند.

    هر بلاک علاوه بر هش خود، هش بلاک قبلی را نیز دارد، در نتیجه فردی که قصد ایجاد تغییر در بلاک را دارد باید نه تنها هش همان بلاک بلکه هش تمام بلاک های قبلی را نیز تغییر دهد که تقریبا غیرممکن است.

    و بلاک چین به این صورت از تقلب در شبکه جلوگیری می کند. از طرف دیگر تمام افراد فعال در شبکه به هش های واقعی دسترسی داشته اند و برای تایید تراکنش های جدید به راحتی متوجه تغییر شده و تراکنش را تایید نمی کنند.

    به همین دلیل است که همه باوردارند که بلاک چین تغییرناپذیر است.

    ویژگی هایی که تابع هش رمزنگاری باید داشته باشد:

    دقیق و ثابت بودن

    تابع هش رمزنگاری به ازای وردی که دریافت می کند یک خروجی با طول ثابت تحویل می دهد، این خروجی که همان “هش” است، باید برای همیشه ثابت بماند. به عنوان مثال اگر شما حرف A را به عنوان ورودی به تابع هش دادید باید همان هشی را دریافت کنید که یک آمریکایی و یا چینی دریافت می کنند.

    همچنین اگر شما ماه آینده نیز حرف A را به عنوان ورودی به تابع هش دادید باز هم باید همان هش ماه پیش را دریافت کنید.

    زیرا در غیر این صورت پیگیری و رصد کردن اطلاعات غیرممکن خواهد بود.

    یک طرفه بودن تابع

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

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

    به عنوان مثال در نظر بگیرید که 10 کلمه را به شما نشان می دهند، و هش یکی از 10 کلمه را نیز در اختیار شما می گذارند، حال شما باید بگویید که این هش متعلق به کدام کلمه است؟

    در این حالت کار شما بسیار ساده است و می توانید با قرار دادن هر 10 کلمه به صورت جداگانه در تابع هش و مقایسه خروجی تابع با هشی که به شما داده شده، بگویید که این هش متعلق به کدام کلمه بوده است.

    اما این کار برای تعداد زیادی از اطلاعات بسیار دشوار و یا حتی غیرممکن خواهد بود.

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

    تغییر هش در صورت ایجاد کوچک ترین تغییر در ورودی

    با وارد کردن جمله my name is Jack در تابع هش sha256 به هش  f794886e4987ce4cb1f4deaf4f942dccfdb766ed38217c596aeaac4cc3b2d4aa دست خواهید یافت.

    با وارد کردن my name is Jack. تابع هش یک ورودی متفاوت را به شما ارائه خواهد داد که برابر است با:

    4c4f8a7772915dc152a906edc79ca11ec800421eed2e18874f594189ecd05138

    همان طور که می بینید تنها با اضافه کردن یک نقطه به انتهای جمله، هش جمله یا به عبارتی خروجی تابع هش رمزنگاری به طور کامل تغییر کرد.

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

    فرض کنید که شما در یک وبسایت ثبت نام کرده اید و قصد ورود به حساب کاربری خود را دارید. در این صورت تنها با وارد کردن رمزعبور خود به صورت دقیق حق ورود به حساب کاربری خود را دارید.

    شیوه کار به این صورت است که با انتخاب یک رمز عبور در زمان ثبت نام، هش رمزعبوری که انتخاب کردید در بایگانی قرار می گیرد، در هنگام ورود، پس از وارد کردن رمزعبور، هش رمزعبور وارد شده با هش ثبت شده در پایگاه داده مقایسه شده و در صورت تطبیق به شما اجازه ورود داده خواهد شد.

    منحصر به فرد بودن هش

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

    معرفی شناخته شده ترین توابع هش

    MD5

    MD که کوتاه شده عبارت Message Digest است و هش 128 بیتی را تولید می کند. با اینکه امروزه خیلی مورد اعتماد نیست اما هنوز هم در سیستم های مختلف از این تابع هش استفاده می شود.

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

    SHA

    SHA کوتاه شده عبارت Secure Hash Algorithm است. SHA-0 که اولین الگوریتم این تابع است در سال 1993 طراحی شد. SHA-1 یک تابع هش 160 بیتی نسخه برطرف شده ایرادات SHA-0 به حساب می آید.

    SHA-2 شامل 6 تابع SHA-224، SHA-256، SHA-384، SHA-512، SHA-512/224 و SHA-512/256است.

    در بلاک چین بیت کوین از الگوریتم SHA256 استفاده می شود.

    SHA-3 در سال 2012 طراحی و در سال 2015 منتشر شد.

    RIPEMD

    الگوریتم RIPEMD مجموعه ای از توابع هش است. این الگوریتم شباهت زیادی با الگوریتم MD4 دارد، اما از نظر عملکرد به الگوریتم SHA-1 شباهت دارد.

    Whirlpool

    الگوریتم ویرپول در سال 2000 طراحی شد. این تابع هش 512 بیتی است و تا کنون 3 نسخه WHIRLPOOL، WHIRLPOOL-T WHIRLPOO از آن منتشر شده است.

    سخن آخر

    سعی ما بر این بود تا با زبانی ساده هش رمزنگاری را شرح دهیم. مطمئنا با مطالعه این مطلب و مطالب دیگر بسیاری از سوالات شما جواب داده خواهد شد و ابهامات درون ذهن شما از بین می روند.

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