تابع هش و هشینگ : تبدیل اطلاعات به مجموعه عدد های مختص

Hash Function And Hashing
  • 11 شهریور 1402

مقدمه
در دنیای امروزی که حجم عظیمی از اطلاعات را با خود به همراه داریم نیاز به روش‌هایی برای مدیریت و امنیت این اطلاعات بسیار احساس می‌شود تابع هش و هشینگ یکی از ابزارهای مهم است که به ما کمک می‌کند اطلاعات را به صورتی تبدیل کنیم که می‌توانند به عنوان امضاهای دیجیتالی رمزها و موارد دیگر استفاده شوند . در این مقاله به بررسی این مفهوم و کاربردهای آن می‌پردازیم :
• هش کردن به چه معناست ؟
هش یک فرایند ریاضی است که داده‌های ورودی را به یک مقدار ثابت و یکتا تبدیل می‌کند ، داده‌های ورودی مانند حروف و اعداد و تصویر و … هستند که به خروجی رمزگذاری شده تبدیل می‌شوند ، این مقدار هش به طور معمول یک رشته عددی یا بایتی است ، به طور ساده‌تر هش کردن مانند یک ماشین مجرد است که برای هر ورودی خاص، یک مقدار خروجی خاص تولید می‌کند.
به عنوان مثال یک تابع هش برای کلمه سلام این خروجی را به شما ارائه میکند :
«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) می‌باشد ، این الگوریتم قابل تنظیم است و می‌توان برای تولید مقادیر هش با طول مختلف استفاده کرد .
• Blake و تابع هش
Blake به عنوان یک الگوریتم تابع هش مطرح و مورد استفاده در بسیاری از برنامه‌های رمزنگاری ، امضای دیجیتال و سیستم‌های امنیتی است با این حال برای استفاده از Blake و سایر الگوریتم‌های تابع هش توصیه می‌شود از نسخه‌های استاندارد و امن آنها استفاده کنید و به روش‌های تست و ارزیابی امنیتی مناسب توجه کنید .
• هش کردن در ارزهای دیجیتال

تأیید صحت تراکنش‌ها : وقتی یک تراکنش در بلاک چین صورت می‌گیرد اطلاعات آن تراکنش به عنوان ورودی به تابع هش داده می‌شود مقدار هش حاصل به عنوان یک “امضای تراکنش” در نظر گرفته می‌شود با استفاده از این امضا می‌توان به راحتی صحت تراکنش را تأیید کرد و از وجود تغییرات در داده‌های تراکنش جلوگیری کرد .
امنیت امضای دیجیتال : فرایند امضای دیجیتال نیز از هش کردن استفاده می‌کند هنگامی که فردی می‌خواهد یک تراکنش را امضا کند داده‌های تراکنش را به عنوان ورودی به تابع هش می‌دهد و مقدار هش را محاسبه می‌کند سپس با استفاده از کلید خصوصی خود مقدار هش را رمزنگاری کرده و به عنوان امضای دیجیتال به تراکنش اضافه می‌کند .
امنیت هش کردن : از آنجایی که تابع هش یک به یک است یعنی هر مقدار ورودی تنها به یک مقدار هش منتهی می‌شود تقلب و تغییر در داده‌ها بسیار سخت است ، همچنین توانایی بازیابی داده اصلی از هش وجود ندارد این به معنای این است که حتی اگر هش یک تراکنش در بلاک چین را داشته باشیم نمی‌توانیم به طور مستقیم به داده‌های تراکنش دسترسی پیدا کنیم .
انواع توابع هش : در ارزهای دیجیتال، اغلب از توابع هش رایجی مانند SHA-256 (Secure Hash Algorithm 256-bit) استفاده می‌شود این تابع هش برای تولید هش‌های 256 بیتی استفاده می‌شود وجود بیت‌های بسیار زیاد در هش باعث می‌شود تاکید بر امنیت و صحت تراکنش‌ها بیشتر شود .

• تغییر ناپذیری بلاک چین
بلاک چین یک فناوری پیشرفته است که در ارزهای دیجیتال مانند بیت کوین استفاده می‌شود یکی از ویژگی‌های مهم بلاک چین تغییر ناپذیری آن است.
تغییر ناپذیری به معنای عدم امکان تغییر داده‌ها در بلاکچین است هر بلاک در بلاک چین شامل اطلاعاتی است که شامل تراکنش‌ها ، امضاها و دیگر اطلاعات مربوط به آن بلاک است بلاک ها به صورت پیوسته به یکدیگر متصل می‌شوند و هر بلاک به بلاک قبلی خود ارجاع دارد این ارجاعات به صورت شفاف و روشن ذخیره می‌شوند.
• عوامل حفظ امنیت و صحت اطلاعات با تغییر ناپذیری در بلاک چین
• استفاده از تابع هش : در بلاکچین از توابع هش (hash functions) استفاده می‌شود این توابع داده‌های ورودی را به صورت یک رشته عددی که به عنوان هش شناخته می‌شود تبدیل می‌کنند تابع هش این ویژگی را دارد که حتی با تغییر کوچک در داده‌های ورودی مقدار هش کاملاً تغییر می‌کند این ویژگی به معنای این است که هرگونه تغییر در بلاک ها و تراکنش‌ها می‌تواند به سادگی شناسایی شود .
• استفاده از شبکه‌ی بلاک چین : بلاک چین در اختیار یک شبکه از کامپیوترهای متصل به هم قرار دارد این کامپیوترها به عنوان گره‌های شبکه شناخته می‌شوند وجود بسیاری از گره‌ها در شبکه امکان بررسی و تأیید صحت بلاک‌ها و تراکنش‌ها را فراهم می‌کند هر تغییر در بلاک چین باید توسط اکثریتی از گره‌ها تأیید شود تا بتواند اعمال شود این باعث امنیت بالا و جلوگیری از تغییرات ناخواسته در بلاک چین می‌شود.

• ماینینگ
ماینینگ یکی از عناصر کلیدی در فرایند ایجاد ارزهای دیجیتال مانند بیت کوین است .
• مفهوم ماینینگ
ماینینگ فعالیتی است که در آن ارزهای دیجیتال توسط کامپیوترها استخراج میشود در واقع ماینرها (اشخاصی که این فعالیت را انجام می‌دهند) با استفاده از قدرت محاسباتی کامپیوترهای خود معاملاتی که در شبکه‌ی بلاک چین رخ می‌دهند را تأیید و به رکوردی به نام “بلاک” اضافه می‌کنند این بلاک‌ها به صورت پیوسته به یکدیگر متصل می‌شوند و یک زنجیره‌ی بلاک چین را تشکیل می‌دهند
• روش عملکرد ماینینگ
روش عملکرد ماینینگ بر اساس الگوریتمی به نام “Proof of Work” (اثبات کار) استوار است در این روش ماینرها برای حل یک مسئله‌ی ریاضی پیچیده به رقابت می‌پردازند اولین ماینری که مسئله را حل کند بلاک جدید را ایجاد می‌کند و در ازای این کار پاداشی به شکل ارز دیجیتال دریافت می‌کند این پاداش در واقع هزینه‌ای است که شبکه به ماینرها پرداخت می‌کند و همچنین برای تشویق ماینرها به ادامه‌ی فعالیت خود استفاده می‌شود .
• کسب درآمد از ماینینگ
ماینینگ می‌تواند به افراد کمک کند تا درآمد کسب کنند با شروع ماینینگ و استخراج ارزهای دیجیتال در صورت موفقیت در حل مسئله‌های ریاضی ماینرها پاداشی دریافت می‌کنند که به صورت ارز دیجیتال به حسابشان واریز می‌شود این ارزهای دیجیتال می‌توانند در بازارهای مختلف معامله شوند یا به عنوان واحد پرداخت در خرید و فروش مورد استفاده قرار گیرند همچنین برخی افراد ممکن است تجهیزات ماینینگ خود را به دیگران اجاره دهند و درآمدی بدست آورند .

• نرخ هش
نرخ هش (Hash Rate) یکی از عوامل مهم در ماینینگ و ارزهای دیجیتال است نرخ هش را میتوان به عنوان سرعت یا توانایی یک دستگاه یا شبکه در انجام محاسبات و حل مسائل رمزنگاری در نظر گرفت تصور کنید که شما یک ماینر هستید و دارید در حال استخراج بلاک‌ها و کسب ارزهای دیجیتال هستید نرخ هش در اینجا نشان دهنده تعداد محاسباتی است که شما در ثانیه می‌توانید انجام دهید به عبارت دیگر نرخ هش نشان می‌دهد که دستگاه شما چقدر سریع می‌تواند مسائل ریاضی پیچیده را حل کند نرخ هش بیانگر تعداد هش‌هایی است که در یک ثانیه توسط دستگاه یا شبکه تولید می‌شود .
• هش (Hash)
با افزایش نرخ هش، سرعت استخراج بلاک‌ها و کسب ارزهای دیجیتال نیز افزایش می‌یابد بنابراین ماینرهایی که نرخ هش بالاتری دارند احتمالاً به طور سریع‌تر بلاک‌ها را حل می‌کنند و به پاداش بیشتری دست می‌یابند نرخ هش می‌تواند با استفاده از تجهیزات قدرتمندتر بهبود یابد .
• معیار اندازه گیری نرخ هش
یکی از رایج‌ترین معیارهای اندازه‌گیری نرخ هش «هش بر ثانیه» است این عدد نشان‌دهنده تعداد هش‌هایی که در یک ثانیه انجام می‌شود با توجه به نوع الگوریتم و سختی شبکه نرخ هش است قابل ذکر است که نمی‌توان نرخ هش الگوریتم‌های متفاوت را با یکدیگر مقایسه کرد .
معیارهای اندازه‌گیری نرخ هش که در واقع تنها عمل تبدیل واحد بر روی آن‌ها صورت گرفته عبارتند از:
• ۱ KH/s یا هزار هش بر ثانیه
• ۱ MH/s یا یک میلیون هش بر ثانیه
• ۱ GH/s یا یک میلیارد هش بر ثانیه
• ۱ TH/s یا یک تریلیون هش بر ثانیه
• ۱ PH/s یا یک کوادریلیون هش بر ثانیه
• ۱ EH/s یا یک کوئینتیلیون هش بر ثانیه
ارقام بالا به ترتیب کیلوهش، مگاهش، گیگاهش، تراهش، پتاهش و اگزا هش نام‌گذاری می‌شوند.