یکی از مفاهیمی که در صنعت رمز ارزها با آن مواجه هستیم، تابع هش است. در این بین یکی از سوالات مهمی که همواره از سوی کاربران پرسیده میشود این است که تابع هش چیست؟
در همین راستا در این مطلب قصد داریم تا شما را با تابع هش آشنا کرده و در مورد آن اطلاعات جامع و کاملی را به شما ارائه دهیم.
توجه به نکات گفته شده در این مطلب به شما کمک میکند تا به خوبی درک کنید که تابع هش چیست و چه ویژگیهایی دارد. پس با ما همراه باشید تا در مورد این تابع صحبت کرده و اطلاعات جامع و کاملی را در این زمینه به شما ارائه دهیم.
معرفی تابع هش
به منظور پاسخ به این سوال که تابع هش چیست باید گفت که این ابزار رمزنگاری به احراز هویت ایمن در صنعت رمز ارزها کمک میکند و یکپارچگی پیام دادهها را در کانالهای دیجیتال تضمین میکند -.
به منظور بررسی و معرفی تابع هش و پاسخ به این سوال که تابع هش چیست باید گفت که این تابع یک فرآیند ریاضی است که نقش مهمی در رمزنگاری کلید عمومی دارد. در واقع تابع هش به شما کمک میکند تا:
- ذخیره ایمن رمزهای عبور در پایگاه داده
- یکپارچگی دادهها در بسیاری از برنامههای کاربردی مختلف با نشان دادن زمان تغییر دادهها اطمینان حاصل کنید
- احراز هویت ایمن
- محتوا و فایلها را به گونهای سازماندهی کنید که کارایی را افزایش دهد
تقریباً در همه جا میتوانید عملکردهای هش را مورد استفاده قرار دهید. از امضای برنامههای نرم افزاری که در تلفن خود استفاده میکنید تا ایمن سازی اتصالات وب سایتی که برای انتقال اطلاعات حساس به صورت آنلاین همگی از جمله قابلیتهای تابع هش است. با این حال یکی از سوالات مهم این است که در صنعت رمزنگاری نقش تابع هش چیست و دقیقاً چه کاری برای کمک به محافظت از دادههای کسب و کار شما انجام میدهد.
ویژگی تابع هش چیست؟
اصطلاح تابع هش میتواند برای افراد مختلف بسته به زمینه، چندین معنی داشته باشد. برای توابع هش در حوزه رمزنگاری، تعریف کمی ساده تری وجود دارد. اگر بخواهیم به این سوال پاسخ دهیم که تابع هش چیست باید گفت که این تابع یک شناسه منحصر به فرد برای هر قطعه معینی از محتوا است. همچنین فرآیندی است که دادههای متن ساده را با هر اندازهای دریافت میکند و آن را به یک متن رمزی منحصر به فرد با طول خاصی تبدیل میکند.
قسمت اول تعریف به شما میگوید که هیچ دو قسمتی از محتوای خروجی تابع هش یکسان نیستند و اگر محتوا تغییر کند، مقدار خروجی تابع هش نیز تغییر میکند. اساساً، هش کردن راهی است برای اطمینان از این که هر دادهای که ارسال میکنید به گیرنده شما در همان شرایطی میرسد که شما آن را به وجود آورده اید و ورودی کاملا دست نخورده و بدون تغییر در نهایت به مقصد میرسد.
پس از آن که بررسی کردیم که تابع هش چیست ممکن است این سوال برای شما مطرح شود که آیا عملکرد تابع هش شبیه رمزگذاری است؟
در پاسخ به این سوال باید گفت که مطمئنا این دو شبیه هم هستند، اما رمزگذاری و هش کردن دو مفهوم گوناگون هستند. آنها دو عملکرد رمزنگاری جداگانه هستند که به تسهیل ارتباطات ایمن و قانونی کمک میکنند. بنابراین، اگر میشنوید که شخصی در مورد رمزگشایی یک مقدار هش صحبت میکند به احتمال خیلی زیاد آن فرد دارد در مورد این مسئله اشتباه میکند چرا که هشها در وهله اول رمزگذاری نشده اند.
کمی بعد در مورد تفاوت بین این دو فرآیند بیشتر صحبت خواهیم کرد. اما در حال حاضر، اجازه دهید که به بررسی این مسئله بپردازیم که عملکرد تابع هش چیست؟
تصویر با یک عکس ساده از عملکرد تابع هش است که با گرفتن ورودی داده متن ساده و استفاده از یک الگوریتم ریاضی اقدام به تولید یک خروجی ناخوانا میکند.
شاید فکر کنید که عملکرد تابع هش بسیار ساده است اما به منظور بررسی این مسئله که نحوه کار تابع هش چیست باید گفت که در زیر سطح تابع هش اتفاقاتی میافتد که بسیار جالب و پیچیده تر است.
یک تابع هش یک الگوریتم رمزنگاری یک طرفه همه کاره است که ورودی با هر اندازهای را به خروجی منحصر به فرد با طول ثابتی از بیتها نگاشت میکند.
خروجی حاصل که به عنوان خلاصه هش، مقدار هش یا کد هش شناخته میشود، شناسه منحصر به فردی است که قبلاً به آن اشاره کردیم .
بنابراین، چرا آن را تابع یک طرفه مینامیم؟ در پاسخ به این سوال باید گفت که به دلیل قدرت محاسباتی، زمان و هزینهای است که برای استفاده آن نیاز دارد. امتحان کردن هر ترکیب ممکن که منجر به یک مقدار هش میشود، کاملا غیر عملی است. بنابراین، برای همه مقاصد ، یک تابع هش یک تابع یک طرفه است.
وقتی دادهها را هش میکنید، خلاصه به دست آمده معمولاً کوچک تر از ورودی است که با آن شروع شده است. با هش کردن، مهم نیست که یک پیام یک جملهای دارید یا یک کتاب کامل نتیجه همچنان یک تکه بیت با طول ثابت خواهد بود. این امر مانع از آن میشود که اشخاص دیگر متوجه شوند پیام ورودی اصلی چقدر بزرگ یا کوچک بوده است.
اگر بخواهیم به این سوال پاسخ دهیم که کاربردهای اولیه تابع هش چیست باید گفت که توابع هش در درجه اول برای احراز هویت استفاده میشوند اما کاربردهای دیگری نیز دارند.
ویژگیهای یک الگوریتم تابع هش چیست
یکی از سوالات مهمی که در ادامه تابع هش چیست مطرح میشود این است که چه چیزی یک الگوریتم هش قوی را به وجود میآورد. به منظور پاسخ به این سوال مهم باید گفت که چند ویژگی کلیدی وجود دارد که باعث وجود تابع هش قوی میشود:
جبر
یک الگوریتم هش باید قطعی باشد، به این معنی که بدون توجه به اندازه ورودی که با آن شروع کرده اید، همیشه خروجی با اندازه یکسان به شما میدهد. این به آن معنا است که اگر یک جمله را هش میکنید، خروجی حاصل باید به اندازه چیزی باشد که هنگام هش کردن کل یک کتاب به دست میآورید.
مقاومت در برابر معکوس کردن
ایده اصلی یک الگوریتم هش قوی در واقع بیانگر الگوریتمی است که دارای مقاومت در برابر معکوس کردن اولیه است، به این معنی که معکوس کردن یک مقدار هش برای بازیابی پیام متن ساده ورودی اصلی غیر ممکن است. از این رو، مفهوم هش غیرقابل برگشت و یک طرفه بودن توابع است.
مقاومت در برابر برخورد
برخورد زمانی رخ میدهد که دو جسم با هم برخورد کنند. خوب، این مفهوم در رمزنگاری با مقادیر هش منتقل میشود. اگر دو نمونه منحصر به فرد از دادههای ورودی خروجیهای یکسانی داشته باشند، به آن برخورد میگویند. این خبر بدی است و به این معنی است که الگوریتمی که برای هش دادهها استفاده میکنید خراب است و بنابراین نا امن است. اساساً، نگرانی در اینجا این است که کسی میتواند یک فایل مخرب با مقدار هش مصنوعی ایجاد کند که با یک فایل واقعی (ایمن) مطابقت دارد و آن را به عنوان چیز واقعی ارسال کند زیرا امضا مطابقت دارد. بنابراین، یک الگوریتم هش خوب و قابل اعتماد، الگوریتمی است که در برابر این برخوردها مقاوم باشد.
اثر بهمنی
معنی این موضوع این است که هر تغییری که در یک ورودی ایجاد شود، مهم نیست که چقدر کوچک باشد، منجر به تغییر عظیم در خروجی میشود. اساساً، یک تغییر کوچک مانند افزودن یک کاما به چیزی بسیار بزرگتر تبدیل میشود، از این رو اصطلاح ” اثر بهمن ” را به خود اختصاص میدهد .
سرعت هش
jلگوریتمهای هش باید با سرعت معقولی کار کنند. در بسیاری از موقعیت ها، الگوریتمهای هش باید مقادیر هش را به سرعت محاسبه کنند. این ویژگی ایده آل یک تابع هش رمزنگاری در نظر گرفته میشود. با این حال، این ویژگی کمی ذهنی تر است. سریع تر بودن همیشه بهتر نیست زیرا سرعت به نحوه استفاده از الگوریتم هش بستگی داشته باشد. گاهی اوقات، شما میخواهید یک الگوریتم هش سریع تری داشته باشید و گاهی اوقات بهتر است از الگوریتم کندتر استفاده کنید که اجرای آن به زمان بیشتری نیاز دارد. اولی برای اتصالات وب سایت و دومی برای هش رمز عبور بهتر است.
نحوه کار تابع هش چیست
یکی از اهداف یک تابع هش در رمزنگاری، گرفتن یک ورودی متن ساده و تولید یک خروجی مقدار هش شده با یک اندازه خاص است به نحوی که قابل برگشت نباشد. توابع هش قوی کارکردهای زیر را دارند:
- اطمینان از یکپارچگی داده ها
- ایمن در برابر تغییرات غیرمجاز
- محافظت از رمزهای عبور ذخیره شده،
- با سرعتهای مختلف برای اهداف مختلف کار کند
اطمینان از یکپارچگی داده ها
توابع هش راهی برای اطمینان از یکپارچگی دادهها در رمزنگاری کلید عمومی است. منظور این است که توابع هش به عنوان یک جمع بندی بررسی یا راهی برای شناسایی این که آیا دادهها پس از امضای آنها دستکاری شده اند یا خیر، عمل میکنند. همچنین به عنوان ابزاری برای تأیید هویت عمل میکند.
به عنوان مثال برای آشنایی بیشتر با این که تابع هش چیست باید گفت که فرض کنید برای ارسال ایمیل به Wi-Fi عمومی وارد شده اید. بنابراین، شما پیام را مینویسید، با استفاده از گواهی دیجیتال خود آن را امضا میکنید و آن را در مسیر اینترنت ارسال میکنید. این همان چیزی است که باعث میشود تا شخصی بتواند به راحتی پیام شما را رهگیری کند و آن را مطابق با اهداف خود تغییر دهد.
مثال بالا مربوط به یک ایمیل امضا شده دیجیتالی است که در حین انتقال از طریق حمله MitM دستکاری شده است. زمانی که هر یک از محتوای ایمیل پس از امضای دیجیتالی اصلاح میشود، خلاصه هش کاملاً تغییر میکند و این نشان میدهد که نمیتوان به آن اعتماد کرد.
بنابراین، اکنون پیام را دریافت میکنم و میخواهم بدانم که قانونی است. کاری که انجام میدهیم این است که از مقدار هش که امضای دیجیتالی شما ارائه میاستفاده کرده تا هش را دوباره تولید کرده و بررسی کنیم که آیا مقدار هش که ایجاد میکنم مطابقت دارد یا خیر. اگر مطابقت دارد، عالی است، به این معنی است که کسی آن را تغییر نداده است.
حتی اگر چیزی کوچک در یک پیام تغییر کند به جای استفاده از حروف کوچک، یک حرف را با حروف بزرگ بنویسید، یا علامت تعجب را در جایی که نقطه وجود دارد عوض کنید منجر به تولید یک مقدار هش کاملاً جدید خواهد شد. مهم نیست که یک تغییر چقدر بزرگ یا کوچک است، تفاوت در مقادیر هش به شما میگوید که پیام دستخوش تغییر شده است.
ایمن در برابر تغییرات غیرمجاز
یکی از بهترین جنبههای تابع هش رمزنگاری این است که به شما کمک میکند تا از یکپارچگی دادهها اطمینان حاصل کنید. اما اگر هش را روی داده اعمال کنید، به این معنی است که پیام را نمیتوان تغییر داد؟ تابع هش کاری که انجام میدهد این است که به گیرنده پیام اطلاع میدهد که پیام تغییر کرده است. این به این دلیل است که حتی کوچکترین تغییرات در یک پیام منجر به ایجاد یک مقدار هش کاملاً جدید میشود. به هش کردن مانند یک هشدار فکر کنید.
شما را قادر میسازد تا رمزهای عبور را تأیید و ذخیره کنید
امروزه، بسیاری از وب سایتها به شما اجازه میدهند رمزهای عبور خود را ذخیره کنید تا مجبور نباشید هر بار که میخواهید وارد شوید، آنها را به خاطر بسپارید. اما ذخیره رمزهای عبور متن ساده مانند آن در یک سرور عمومی خطرناک است زیرا این اطلاعات را در برابر مجرمان سایبری آسیب پذیر میکند. بنابراین، کاری که وب سایتها معمولاً انجام میدهند، هش رمزهای عبور برای تولید مقادیر هش است، که در عوض ذخیره میکنند.
اما هش رمز عبور به تنهایی برای محافظت از شما در برابر انواع خاصی از حملات، از جمله حملات brute force کافی نیست. به همین دلیل است که ابتدا باید یک عدد تصادفی و منحصر به فرد که قبل از هش کردن رمزهای عبور متن ساده اعمال میشود را به آن اضافه کنید. این یک لایه امنیتی اضافی را فراهم میکند و میتواند رمزهای عبور را از روشهای شکستن رمز عبور محافظت کند.
با سرعتهای مختلف، متناسب با اهداف مختلف کار کنید
همچنین توجه به این نکته مهم است که توابع هش ابزارهای یکسانی نیستند. همان طوری که قبلا ذکر کردیم، توابع هش مختلف بسته به طراحی و سرعت هش، اهداف مختلفی را انجام میدهند. آنها با سرعتهای عملیاتی متفاوتی کار میکنند، برخی سریع تر در حالی که برخی دیگر بسیار کندتر هستند. این سرعتها میتوانند به امنیت یک الگوریتم هش کمک کرده یا بسته به نحوه استفاده از آن، مانع شوند. بنابراین، برخی تحت چتر الگوریتمهای هش ایمن قرار میگیرند در حالی که برخی دیگر نه.
یک نمونه از جایی که میخواهید از یک الگوریتم هش سریع استفاده کنید، هنگام ایجاد اتصالات ایمن به وب سایتها است. این مثال زمانی است که داشتن سرعت بیشتر اهمیت دارد زیرا به ارائه تجربه کاربری بهتر کمک میکند. با این حال، اگر میخواهید وب سایتهای خود را فعال کنید تا رمزهای عبور را برای مشتریان خود ذخیره کنند، قطعاً میخواهید از یک الگوریتم هش آهسته استفاده کنید. در مقیاس، این امر مستلزم یک حمله شکستن رمز عبور مانند brute force است که زمان و منابع محاسباتی بیشتری را برای مجرمان سایبری میگیرد.
مکان استفاده از تابع هش چیست
اما توابع هش را از کجا پیدا میکنید؟ به فناوری اطراف خود نگاه نکنید. هش کردن برای همه چیز مفید است، از امضای نرم افزار جدید و تأیید امضای دیجیتال تا ایمن کردن اتصالات وب سایت در رایانه و مرورگرهای وب تلفن همراه شما همگی امکان استفاده از تابع هش را دارند.
همچنین برای نمایه سازی و بازیابی موارد در پایگاههای داده آنلاین عالی است. به عنوان مثال، هش برای تأیید موارد زیر استفاده میشود:
- بلوکهای داده در ارزهای دیجیتال و سایر فناوریهای بلاک چین
- یکپارچگی دادههای نرم افزار، ایمیلها و اسناد
- گذر واژهها و ذخیره هشهای رمز عبور در پایگاههای داده آنلاین
برای کسب اطلاعات بیشتر در مورد بلاک چین به مقاله همه چیز در مورد بلاک چین مراجعه فرمایید
توابع هش را میتوان در سراسر رمزنگاری کلید عمومی یافت. به عنوان مثال، خواهید دید که توابع هش استفاده از موارد زیر تسهیل میشوند:
- گواهینامههای SSL/TLS
- گواهی امضای کد
- گواهی امضای اسناد
- گواهی امضای ایمیل
- چک لیست مدیریت گواهی
هنگامی که یک پیام را هش میکنید، رشتهای از دادهها با هر اندازهای را به عنوان ورودی خود میگیرید، آن را از طریق یک الگوریتم ریاضی اجرا میکنید که منجر به تولید خروجی با طول ثابت میشود.
در برخی روشهای هش کردن، ورودی داده اصلی به بلوکهای کوچک تر با اندازه مساوی تقسیم میشود. اگر بخواهیم به این سوال پاسخ دهیم که نحوه عملکرد تابع هش چیست، میتوان به نمودار تابع هش اشاره کرد:
البته اگر گذرواژهها را برای ذخیره سازی در سرور آنلاین هش میکردید، این فرآیند کمی متفاوت به نظر میرسید. اساساً، قبل از اجرای آن از طریق الگوریتم هش، یک مقدار تصادفی و منحصر به فرد به پیام اضافه میکنید. حتی با افزودن یک کاراکتر، یک مقدار هش کاملاً جدید در پایان فرآیند دریافت خواهید کرد.
هش کردن مثالها با الگوریتمهای مختلف
اکنون که میدانید تابع هش چیست و از نظر تئوری چه کاری انجام میدهد، بیایید با چند مثال نحوه عملکرد آن را در نظر بگیریم. فرض کنید که یک جمله را به عنوان ورودی به تابع هش میدهیم. خروجی حاصل در صفحه نمایش شما به شکل زیر خواهد بود:
49FCA16A2271B34066DAA46492C226C4D4F61D56452A1E1A01A3201B234509A2
یک گرافیک تابع هش اولیه که نحوه اجرای یک ورودی را از طریق یک الگوریتم هش نشان میدهد و منجر به ایجاد یک خروجی خلاصه هش میشود.
به عنوان یک تصویر ساده از این که چگونه یک الگوریتم هش یک ورودی دریافت میکند و یک خروجی هگزادسیمال منحصر به فرد با طول ثابت تولید میکند.
به این دلیل که رشتههای نمونه ۲۵۶ بیتی هستند که در صفحه نمایش شما به صورت ۶۴ کاراکتر هگزا دسیمال در هر رشته نمایش داده میشود. مهم نیست که پیام چقدر بزرگ یا کوچک است، همیشه خروجی با همان اندازه را بر میگرداند. به یاد داشته باشید، الگوریتمهای هش قطعی هستند ، بنابراین این به آن معنا است که آنها همیشه بدون توجه به اندازه ورودی، خروجی یکسانی دارند.
حال، اگر بخواهید همان ورودی را بگیرید و آن را از طریق یک تابع هش MD5 اجرا کنید، در عوض یک مقدار هش خواهید داشت که چیزی شبیه به این است:
B53CE8A3139752B10AAE878A15216598
همانطور که میبینید، خروجی کمی کوتاه تر است. دلیل آن این است که MD5 یک خلاصه هش به شما میدهد که تنها 32 کاراکتر هگزا دسیمال دارد. این به معنای واقعی کلمه نصف اندازه هشهایی است که از الگوریتم هش SHA-256 حاصل میشود. اما هر بار که یک الگوریتم هش MD5 را روی یک پیام متنی ساده اجرا میکنید، خروجی به همان اندازه خواهد بود.
اگر تصمیم گرفتید همان جمله را از طریق الگوریتم هش SHA-512 اجرا کنید، هش چیزی شبیه به مقدار زیر خواهد بود که یک رشته هگزادسیمال 512 بیتی است:
6DC1AAE5D80E8F72E5AF3E88A5C0FA8A71604739D4C0618182303EEEB1F02A0DBA319987D5B5F717E771B9DA1EAD7F3F92CD649D49D
همان طور که مشاهده می کنید در کنار بررسی و پاسخ به این سوال که تابع هش چیست، امروزه شاهد انواع مختلفی از تابع هش هستیم.
تفاوت رمزگذاری و تابع هش چیست
پس از آن که بیان کردیم تابع هش چیست، به منظور بررسی تفاوت رمزگذاری و تابع هش باید گفت که هر دو توابع رمزنگاری هستند که از الگوریتمها به عنوان بخشی از فرآیندهای خود استفاده میکنند.
همانطور که میدانید، یک تابع هش یک تابع یک طرفه است. ایده این است که میتوانید از آن برای تبدیل دادههای متن ساده قابل خواندن به یک رشته هگزادسیمال اعداد غیرقابل خواندن استفاده کنید، اما برعکس آن صادق نیست. از سوی دیگر، رمزگذاری به عنوان یک تابع دو طرفه شناخته میشود . این به این دلیل است که هدف اصلی رمزگذاری جلوگیری از دسترسی افراد غیرمجاز یا ناخواسته به دادهها است. بنابراین، دادهها را رمزگذاری میکنید تا فقط توسط شخصی که کلید را در اختیار دارد، رمزگشایی شود.
نمونههایی از الگوریتمهای هش رایج و خانواده الگوریتم ها
اکنون میدانیم که توابع هش چیست و الگوریتمهای هش چگونه کار میکنند. اکنون زمان آن رسیده است که به این سوال پاسخ دهیم که مهم ترین خانواده تابع هش چیست؟ در پاسخ اگر بخواهیم برخی از رایج ترین الگوریتمهای هش را یاد بگیریم میتوان گفت که چند نمونه از الگوریتمهای هش رایج عبارتند از:
- الگوریتم هش ایمن SHA:این خانواده هش شامل SHA-1، SHA-2 و شامل SHA-224، SHA-256، SHA-384، و SHA-512 و SHA-3 SHA3-224، SHA3-256، SHA3-384، و SHA3-512. SHA-1 میشود و رایج ترین الگوریتم هش در حال حاضر SHA-256 است.
- الگوریتم هش خلاصه پیام MD : این خانواده از هشها شامل انواع توابع هش است که شامل MD2، MD4، MD5 و MD6 میشوند. MD5 برای مدتها به عنوان یک الگوریتم هش سازی در نظر گرفته میشد، اما اکنون منسوخ شده است زیرا منجر به برخورد میشود.
- Windows NTHash : این مدل به عنوان هش یونیکد یا NTLM شناخته میشود، این هش معمولاً توسط سیستمهای ویندوز استفاده میشود، زیرا نسبت به نسخه قبلی خود، هش LM، ایمن تر است. با این حال، NTHash نیز همچنان دارای آسیب پذیریهایی است که باید نگران آن بود، اما این الگوریتم خاص برای سیستمهای ویندوز یکپارچه است.
نمونههای دیگر از الگوریتمهای هش عبارتند از BLAKE 2 و BLAKE 3، RIPEMD-160، و WHIRLPOOL که در بخشهای مختلف مورد استفاده قرار میگیرند.
حرف آخر
در این مطلب به این سوال مهم پاسخ دادیم که تابع هش چیست و این تابع چه عملکردی دارد. توجه به نکات گفته شده در این مطلب به شما کمک میکند تا درک کاملی از این تابع و نحوه کار آن داشته باشید. تابع هش امروزه در بخشهای مختلفی مورد استفاده قرار میگیرد اما مهم ترین کاربرد آن در صنعت رمز ارزها است.
منبع
bitpanda