در دنیای امروزی که حجم عظیمی از اطلاعات را با خود به همراه داریم نیاز به روشهایی برای مدیریت و امنیت این اطلاعات بسیار احساس میشود تابع هش و هشینگ یکی از ابزارهای مهم است که به ما کمک میکند اطلاعات را به صورتی تبدیل کنیم که میتوانند به عنوان امضاهای دیجیتالی رمزها و موارد دیگر استفاده شوند .
در این مقاله به بررسی این مفهوم و کاربردهای آن میپردازیم :
• هش کردن به چه معناست ؟
هش یک فرایند ریاضی است که دادههای ورودی را به یک مقدار ثابت و یکتا تبدیل میکند ، دادههای ورودی مانند حروف و اعداد و تصویر و … هستند که به خروجی رمزگذاری شده تبدیل میشوند ، این مقدار هش به طور معمول یک رشته عددی یا بایتی است ، به طور سادهتر هش کردن مانند یک ماشین مجرد است که برای هر ورودی خاص، یک مقدار خروجی خاص تولید میکند.
به عنوان مثال یک تابع هش برای کلمه سلام این خروجی را به شما ارائه میکند :
«bda۱fa۴۸۳۴۵۳۳۶۶۱۸۷۴۱fd۲c۴bc۰۲۸۰۹eb۰۹۹c۴۹a۹b۰۲fb۵۰۵۶۴۰۱ab۶d۴dc۳e۶»
• فرآیند هش کردن ( هشینگ )
به گزارش آکادمی روبلکس به خروجی تابع هش ( Hash ) و استفاده از تابع هش برای ایجاد هش ، هش کردن یا هشینگ (Hashing) میگویند . هر شخصی که در رمزنگاری و ریاضیات تخصص داشته باشد میتواند با استفاده از این علوم برای خود تابع هش بسازد ، در حال حاضر انواع زیادی تابع هش وجود دارد مهمترین الگوریتمهای هش شامل MD5، SHA-1، SHA-256 و SHA-3 هستند ، این الگوریتمها به طور گستردهای استفاده میشوند و در امنیت اطلاعات نقش مهمی ایفا میکنند.
• منطق عملکرد تابع هش :
• ورودی دریافت میشود : یک پیام ورودی (مانند متن، فایل و غیره) به عنوان ورودی به تابع هش داده میشود این ورودی ممکن است یک رشته متنی ، یک فایل یا یک بلوک داده باشد .
• فرآیند پردازش : تابع هش از الگوریتمهای ریاضی پیچیده برای پردازش پیام ورودی استفاده میکند این الگوریتمها عملیات محاسباتی مشخصی را برروی بیتهای ورودی اعمال میکنند و نتیجه را به عنوان خروجی هش تولید میکنند .
• خروجی هش تولید میشود : فرآیند پردازش باعث تولید یک خروجی هش یکتا و ثابت میشود ، این خروجی هش به صورت یک رشته کوتاه تر از پیام ورودی است و معمولاً به عنوان نماینده یکتای پیام استفاده میشود این مقدار هش ممکن است به صورت رشتهای از اعداد و حروف هگزادسیمال (از 0 تا 9 و A تا F) نمایش داده شود .
• مهمترین ویژگی تابع هش
مهم ترین ویژگی این است که تغییر کوچک در ورودی موجب تغییر کامل در مقدار هش میشود ، به عبارت دیگر حتی یک تغییر کوچک در ورودی باعث تولید یک مقدار هش کاملاً متفاوت میشود این ویژگی به عنوان “خاصیت انتشار” شناخته میشود و در برنامههایی که نیاز به تشخیص تغییرات در دادهها دارند ( مانند بررسی امنیت یا تطابق دادهها ) بسیار مفید است .
به یاد داشته باشید که هر تابع هش دارای الگوریتم خاصی است و منطق عملکرد آن ممکن است بسته به نوع تابع هش متفاوت باشد ، علاوه بر این توابع هش مانند MD5، SHA-256 و SHA-3 در زمینههای مختلفی از جمله رمزنگاری ، امضای دیجیتال و امنیت اطلاعات استفاده میشوند .
• تابع هش رمزنگاری
تابع هش برای استفاده در حوزه رمزنگاری و امنیت اطلاعات طراحی شده است ، یکی از ویژگیهای مهم این تابع عملکرد یک طرفه آن است به این معنی که نمیتوان از خروجی هش به سادگی به داده ورودی اصلی دسترسی پیدا کرد تابع هش رمزنگاری باید دارای ویژگیهای امنیتی مهمی باشد به عنوان مثال : تغییر کوچکی در ورودی باید تغییر اساسی در خروجی تولید شده داشته باشد همچنین باید امکان بازیابی داده اصلی از خروجی هش با استفاده از روشهای معکوس یا تصادفی سازی بسیار کم باشد .
• تابع های هش رمزنگاری معروف
SHA-256 (Secure Hash Algorithm 256-bit) و MD5 (Message Digest Algorithm 5 در بسیاری از سیستمها و برنامهها استفاده میشوند این توابع هش به دلیل ویژگیهای امنیتی و عملکرد قویشان در حوزههایی مانند رمزنگاری اطلاعات امضای دیجیتال تأیید هویت و سیستمهای امنیتی استفاده میشوند .
• تابع هش SHA-256
تابع SHA-256 (Secure Hash Algorithm 256-bit) یک تابع هش رمزنگاری است که یک متن ورودی را به یک مقدار هش 256 بیتی تبدیل میکند این تابع برای تولید هش های منحصر به فرد و امن استفاده میشود با این حال SHA-256 تنها یک تابع یک طرفه است و امکان بازیابی متن اصلی از هش وجود ندارد .اطلاعات بیشتر در مورد هش را می توانید در وب سایت روبلکس بخوانید.
• تابع هش MD5
تابع هش MD5 (Message Digest Algorithm 5) برای تولید مقدار هش یکتا و ثابت از یک ورودی استفاده میشود هدف اصلی MD5 ایجاد یک مقدار هش 128 بیتی (یا 16 بایتی) برای هر ورودی است که به صورت یک رشته شناخته شده از اعداد و حروف هگزادسیمال نمایش داده میشود ، MD5 میتواند به صورت سریع و موثر مقادیر هش را محاسبه کند اما امنیت آن برای برخی کاربردها ضعیف است در صورتی که برنامه یا سیستم شما نیاز به امنیت بالا دارد توصیه میشود از توابع هش قویتری مانند SHA-256 یا SHA-3 استفاده کنید .
• الگوریتم SHA (Secure Hash Algorithm)
مجموعهای از توابع هش امن هستند که توسط سازمان ملی استانداردها و فناوری (NIST) در ایالات متحده طراحی و منتشر شدهاند نسخههای مختلف الگوریتم SHA عبارتند از :
• SHA-1 :این نسخه از الگوریتم SHA یک مقدار هش 160 بیتی را برای ورودیها تولید میکند با گذر زمان آسیبپذیریهای امنیتی در SHA-1 شناسایی شد و توصیه میشود از استفاده از آن به عنوان یک تابع هش امن خودداری شود .
• SHA-224 و SHA-256: SHA-224 یک مقدار هش 224 بیتی و SHA-256 یک مقدار هش 256 بیتی را تولید میکنند این نسخهها از توابع هش قویتری نسبت به SHA-1 برخوردارند و به عنوان جایگزینی بهتر برای آن مطرح شدند .
• SHA-384 و SHA-512 : SHA-384 یک مقدار هش 384 بیتی و SHA-512 یک مقدار هش 512 بیتی را تولید میکنند این نسخهها از توابع هش با اندازه بیشتری نسبت به SHA-256 برخوردارند و برای برخی کاربردها مانند امنیت اطلاعات حساس استفاده میشوند .
• SHA-3 : SHA-3 یک خانواده از الگوریتمهای هش است که در سه نسخه با اندازههای مختلف (SHA-3-224، SHA-3-256 و SHA-3-512) ارائه میشوند ، SHA-3 بر اساس یک ساختار جدید به نام Keccak بنا شده است و به عنوان جایگزینی برای SHA-2 مورد استفاده قرار میگیرد توجه داشته باشید که SHA-2 (شامل SHA-224، SHA-256، SHA-384 و SHA-512) و SHA-3 دو خانواده جداگانه از الگوریتمهای هش هستند و با هم متفاوتند هر یک از این نسخهها ممکن است بر اساس نیازهای خاص و مقاصد استفاده مورد نیاز شما باشند .
• (RACE Integrity Primitives Evaluation Message Digest) RIPEMD
یک خانواده از توابع هش رمزنگاری است که برای تولید مقادیر هش با طول ۱۲۸ بیت یا ۱۶۰ بیت طراحی شدهاند هدف یک تابع هش این است که با گرفتن ورودی مانند یک پیام یا فایل یک خروجی ثابت به نام مقدار هش تولید کند ویژگیهای کلیدی یک تابع هش خوب شامل سرعت تولید خروجی منحصر به فرد برای ورودیهای مختلف و مقاومت در برابر تصادفی شدن (collision) هستند (وقوع دو ورودی متفاوت با یک خروجی یکسان)
RIPEMD این اهداف را از طریق ترکیب عملیات بیتی توابع چرخش و عملیات منطقی مانند XOR بهدست میآورد ورودی را به بلوکهایی تقسیم کرده و روی هر بلوک یک سری عملیات انجام میدهد تا مقدار هش نهایی بهدست آید ، عملیاتهای خاص مورد استفاده در RIPEMD برای ارائه خروجی با خصوصیات مورد نظر طراحی شدهاند .
• Whirlpool
Whirlpool یک الگوریتم تابع هش قوی و مقاوم در برابر حملات است که برای تولید مقادیر هش ۵۲۸ بیتی طراحی شده است . هدف اصلی تابع هش Whirlpool این است که با گرفتن یک ورودی مانند یک پیام یا فایل یک مقدار هش ثابت و یکتا را تولید کند این مقدار هش میتواند برای تأیید صحت اطلاعات ، امضای دیجیتال ، جلوگیری از تغییرات غیرمجاز و سایر فرآیندهای امنیتی مورد استفاده قرار گیرد .
Whirlpool از ساختاری با نام Merkle-Damgård استفاده میکند که ورودی را به بلوکهای کوچک تر تقسیم میکند و روی هر بلوک یک سری عملیات را اجرا میکند تا مقدار هش نهایی به دست آید . این الگوریتم از توابع جمع بیتی ، چرخش بیتی ، تابع جعبه جادویی (S-Box) و تابع جمع و کاهش ماژولار استفاده میکند تا عملیات هش را انجام دهد .
Whirlpool دارای خصوصیات مهمی همچون مقاومت در برابر حملات بازیابی پیام (preimage)، مقاومت در برابر حملات دوتایی (second preimage) و مقاومت در برابر تصادفی شدن (collision) است این الگوریتم به عنوان یکی از الگوریتمهای تابع هش قوی و پیچیده مورد استفاده در بسیاری از برنامهها و پروتکلهای امنیتی قرار دارد .
BLAKE
Blake یک الگوریتم تابع هش قوی و امن است که برای تولید مقادیر هش با طول قابل تنظیم طراحی شده است. هدف اصلی تابع هش Blake این است که با گرفتن ورودی مانند یک پیام یا فایل یک مقدار هش ثابت و منحصر به فرد را تولید کند مقدار هش میتواند برای امنیت اطلاعات تأیید صحت دادهها جلوگیری از تغییرات غیرمجاز و سایر فرآیندهای رمزنگاری و امنیتی مورد استفاده قرار گیرد .
• ساختار فلوریو (Flower) Blake
Blakeاز ساختاری با نام فلوریو (Flower) استفاده میکند که ورودی را به بلوکهای کوچکتر تقسیم میکند و روی هر بلوک یک سری عملیات را اجرا میکند تا مقدار هش نهایی به دست آید این عملیات شامل توابع جمع بیتی ، چرخش بیتی ، تابع جعبه جادویی (S-Box) و تابع جمع و کاهش ماژولار است.
Blake دارای خصوصیات امنیتی مطلوبی است و مقاوم در برابر حملات بازیابی پیام (preimage)، حملات دوتایی (second preimage) و تصادفی شدن (collision) میباشد ، این الگوریتم قابل تنظیم است و میتوان برای تولید مقادیر هش با طول مختلف استفاده کرد .