زوم ارز پدیا

تابع هش و هشینگ چیست؟ ( Hashing , hash )

یک تابع هش ( hash function ) یا تابع درهم ساز روی  داده های ورودی مانند  حروف و اعداد و تصویر و غیره ، اثر می کند و خروجی هایی  به صورت رمزگذاری ایجاد می کند. به این عمل  هشینگ  hashing یا هش کردن و به خروجی آن هش hash می گویند. تابع هش ورودی را به یک رشته متنی با طول ثابت  تبدیل می‌کند.

مثال تابع هش روی کلمه «سلام» اثر می کند و خروجی به صورت زیر ایجاد می کند:

000000000000007a6be31011560f1e3abe8f125e356a31db6051753334

عناوین مطالب تابع هش و هشینگ چیست ؟ به شرح ذیل است:


[sta_anchor id=”هشینگ-یا-هش-کردن-به-چه-صورت-انجام-می-شود؟” unsan=”هشینگ یا هش کردن به چه صورت انجام می شود؟” /]

هشینگ یا هش کردن به چه صورت انجام می شود؟

 

برای انجام هشینگ، الگوریتم های زیادی وحود  دارد. اما یکی از الگوریتم های پر کاربرد الگوریتم SHA-256 است. در اینجا با توضیحاتی د راین مورد بحث را ادامه می  دهیم.

همانطور که در بالا گفتیم تابع هش بر روی هر ورودی تاثیر گذاشته و آن را به خروجی به صورت رشته متنی با طول ثابت تبدیل  می کند.


[sta_anchor id=”هش-کردن-عبارات-با-استفاده-از-تابع-هش-sha-256″ unsan=”هش کردن عبارات با استفاده از تابع هش SHA-256″ /]

هش کردن عبارات با استفاده از تابع هش SHA-256

در رمزگذاری ، داده ها به یک قالب امن تبدیل می شوند که غیرقابل خواندن هستند مگر اینکه گیرنده کلید داشته باشد. در فرم رمزگذاری شده ، داده ها ممکن است اندازه نامحدود داشته باشند ، غالباً دقیقاً به همان اندازه که بدون رمزگذاری هستند. در مقابل ، داده هایی با اندازه دلخواه به داده هایی با اندازه ثابت ترسیم می شوند.

جهت مطالعه مقاله الگوریتم SHA-256 بر روی لینک کلیک کنید.

به عنوان مثال ، یک رشته داده 512 بیتی از طریق hash SHA-256 به یک رشته 256 بیتی تبدیل می شود. در واقع طول ورودی چه کوتاه باشد و چه طولانی خروجی دارای طول ثابت است. وقتی تعداد زیادی داده داشته باشیم می توان به جای ذخیره داده های ورودی که ممکن است طول زیادی داشته باشند، فقط هش داده را ذخیره کرد و سپس آن داده را از روی هش بازیابی کرد. این کار باعث افزایش امنیت بیشتر می شود زیرا افراد مختلف با دیدن هش  داده ها نمی توانند ورودی را تشخیص دهند. البته در ادامه بحث دوباره به الگوریتم  SHAبرمی گردیم و توضیحات مفصل تری بیان می کنیم.

[sta_anchor id=”تابع-هش-رمز-نگاری” unsan=”تابع هش رمز نگاری” /]

تابع هش رمز نگاری

نوعی از توابع هش با ویژگی های خاص و منحصر به فرد ، تابع هش رمزنگاری است که برای جاهایی که امنیت و هویت سنجی مد نظر است از آن استفاده می شود. در برای ساخت امضاهای دیجیتال و صحت‌ سنجی نیز کاربرد دارد و برای ساخت  « اثر انگشت دیجیتال » نیز از آن استفاده می شود.


[sta_anchor id=”ویژگی-های-یک-تابع-هش-رمزنگاری” unsan=”ویژگی های یک تابع هش رمزنگاری” /]

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

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

هش

۱- قطعی و ثابت بودن

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

مثلا اگر کلمه « سلام دنیا » را بارها در تابع هش وارد کنیم ، نتیجه همیشه  ثابت است.

۲- سرعت در محاسبه

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

۳- تابع یک طرفه

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

فرض کنید اعدادی بین 1تا 5 را به صورت تصادفی و مخفیانه هش کنیم. میدانیم که تابع هش برای هر ورودی مقدار ثابتی دارد. بنابراین فقط کافیست هش اعداد 1 تا 5 را با هش ساخته شده مقایسه کنیم و در نتیجه عدد مشخص شده پیدا می شود.

اما وقتی دادها زیاد می شوند ، این راه حل جوابگو نیست!

برای مثال وقتی یک هش 128 بیتی داریم باید از روش  «جستجوی جامع» برای یافتن داده های ورودی استفاده کنیم. روند آن به این صورت است که انقدر داده هارا امتحان کرده و با خروجی مقایسه می کنیم تا جایی که با هش مورد نظر  پیدا شود!!

با انجام روش « جستجوی جامع » نتایج زیر حاصل می شود:

بهترین حالت ممکن:

بهترین حالت وقتی است که در همان مرحله اول و اولین تلاش جواب را پیدا کنیم.

که شانس واحتمال این  اتفاق خیلی کم است.

بدترین حالت ممکن:

جواب در مرحله  2128  پیدا شود.

حالت میانگین:

جواب را در اواسط کار پیدا کنید.

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

۴- هر تغییر در ورودی ، هش را به طور کامل تغییر می‌دهد

با کمترین تغییر در ورودی ها ، خروجی تابع هش کاملا تغییر می کند.

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

در ارزهای دیجیتال نیز این امر از مهم ترین ویژه گی های بلاک چین است .

۵- مقاوم در برابر تصادم

هر ورودی هش منحصر به فرد دارد. برای مثال دو ورودیSو T دارای دو هش H(S)و H(T) هستند و کاملا با یکدیگر متفاوت هستند.


[sta_anchor id=”نمونه‌هایی-از-توابع-هش” unsan=”نمونه‌هایی از توابع هش” /]

نمونه‌هایی از توابع هش

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

MD5 md5

الگوریتم هشینگ MD5 یا( Message Digest)، هش ۱۲۸ بیتی تولید می‌کند. یک رمزنگاری یک طرفه است که پیامی را با هر طولی دریافت می کند و برای آنها خروجی با طول ثابت بر می گرداند و برای  تأیید صحت پیام اصلی استفاده شود.

اگر چه در ابتدا به عنوان یک الگوریتم کد تأیید اعتبار پیام رمزنگاری برای استفاده در اینترنت طراحی شده است ، اما این الگوریتم هش کردن دیگر برای استفاده به عنوان یک رمزنگاری رمزنگاری قابل اعتماد محسوب نمی شود.

در حال حاضر بیشتر برای چک کردن درستی و یکپارچگی داده‌ها در برابر دستکاری ناخواسته استفاده می‌شود.

SHA

sha

الگوریتم های Secure Hash ، همچنین به عنوان SHA شناخته می شوند ، خانواده ای از توابع رمزنگاری هستند که برای ایمن نگه داشتن داده ها طراحی شده اندو توسط موسسه ملی استاندارد و فناوری (NIST) ایالات متحده و دیگر ارگان‌های امنیتی ایجاد شد. با تبدیل داده ها با استفاده از یک تابع هش کار می کند. تابع هش رشته ای با اندازه ثابت تولید می کند. این الگوریتم ها به صورت توابع یک طرفه طراحی شده اند ، به این معنی که وقتی آنها به مقادیر هش مربوطه تبدیل شوند ، تبدیل آنها به داده های اصلی تقریباً غیرممکن است. شامل چند الگوریتم مهم از جمله  SHA-1 ، SHA-2 و SHA-3 هستند که هر یک به صورت  رمزگذاری فزاینده تر در پاسخ به حملات هکرها طراحی شدند.  SHA-0 اولین الگوریتم از خانواده SHA است.  SHA-0 به دلیل آسیب پذیری های گسترده در حال حاضر منسوخ شده است و جای خود را به نسخه‌ی جدیدتر و اصلاح‌شده‌ی SHA-1 داد.

SHA-1

SHA-1 الگوریتم Secure Hash یا SHA-1 در سال 1993 توسط آژانس استاندارد دولت آمریكا انستیتوی ملی استاندارد و فناوری (NIST) تهیه شد. این نرم افزار به طور گسترده ای در برنامه های امنیتی و پروتکل ها ، از جمله TLS ، SSL ، PGP ، SSH ، IPsec و S / MIME مورد استفاده قرار می گیرد یک تابع هش ۱۶۰ بیتی است که به الگوریتم MD5 شباهت دارد.

SHA-2

با توجه به آسیب پذیری های  SHA-1 ، آن  را برای تولید SHA-2 اصلاح كردند. از ۶ تابع هش با مقادیر هش متفاوت ۲۲۴، ۲۵۶، ۳۸۴ و ۵۱۲ بیتی   تشکیل  شده است . دو تابع هش معروف به SHA-256 و SHA-512  کاربردهای فراوانی در بلاک چین و ارز های دیجیتال  دارد. البته  این الگوریتم در TLS ،SSL ، PGP،  SSH، توسعه چندمنظوره پست الکترونیک اینترنت/امن و IPsec یا همان ایمن‌سازی پروتکل اینترنت  نیز کاربرد فراوان دارد.

SHA-1 و SHA-2 تفاوت های دارند از جمله اینکه  SHA-2 تابع هش با اندازه 224 یا 256 تولید می کند ، در حالی که SHA-1 هش 160 بیتی تولید می کند.

جدیدترین عضو خانواده SHA-3، SHA است.که در سال ۲۰۱۵ توسط NIST منتشر شد.

RIPEMD

RIPEMDالگوریتمRIPEMD یا(RACE Integrity Primitives Evaluation Message)،مجموعه‌‌ای از توابع هش است که در بلژیک و توسط گروه تحقیقاتی COSIC در سال ۱۹۹۶ توسعه یافت در طراحی آن از MD4 استفاده شده و مشابه SHA-1  عمل می کند. دارای طول هش متفاوت با مقادیر ۱۲۸، ۱۶۰، ۲۵۶ و ۳۲۰ بیتی است.

Whirlpool

WHIRLPOOL

توسط وینسنت ریجمن (یکی از سازندگان AES) و پائولو بارتو در سال 2000 ایجاد شده است. این پروژه توسط پروژه NESSIE توصیه می شود و توسط IEC تصویب شده است. این یکی از سه روش هشی  است که در TrueCrypt استفاده می شود. (RIPEMD-160 ، SHA-512 و WHIRLPOOL)

Blake

یکی از الگوریتم های برگزیده موسسه ملی استاندارد و فناوری ایالات متحده (NIST)  برای توسعه الگوریتم SHA-3 می باشد.

بیشتر بخوانید:  دلار دیجیتالی چیست؟ هدف از دلار دیجیتالی چه بود؟

معروفترین عضو خانواده بلیک ، Blake2 است که در سال ۲۰۱۲ انتشار یافت. هدف از طراحی آن یافتن جایگزینی مناسب برای MD5 و SHA-1 بود.

BLAKE2 یک عملکرد هش رمزنگاری سریعتر از MD5 ، SHA-1 ، SHA-2 و SHA-3 است و به  اندازه آخرین استاندارد SHA-3 امن است. BLAKE2 به دلیل سرعت بالا ، امنیت و سادگی ، توسط بسیاری از پروژه ها به تصویب رسیده است.

BLAKE2 به دوشکل عرضه می شود:

BLAKE2b (یا فقط BLAKE2) برای سیستم عامل های 64 بیتی از جمله ARM هایی با قابلیت NEON بهینه شده است و  رقم هایی با هر اندازه را بین 1 تا 64 بایت تولید می کند

BLAKE2 برای سیستم عامل های 8 تا 32 بیتی بهینه شده رقم هایی با هر اندازه را بین 1 تا 32 بایت تولید می کند.

شکل زیر نشان می دهد که چگونه BLAKE2 از MD5 ، SHA-1 ، SHA-2 و SHA-3 در پردازنده Skylake Intel فراتر می رود:

مقایسه الگوریتم ها


[sta_anchor id=”نقش-هشینگ-در-ارز-دیجیتال:” unsan=”نقش هشینگ در ارز دیجیتال:” /]

نقش هشینگ در ارز دیجیتال:

برای حفظ امنیت ارزهای دیجیتال به هش کردن احتیاج داریم زیرا اکثر کارهایی که در بلاک چین انجام می شود بر مبنای هشینگ  طلاعات  برای حفظ امنیت آنها انجام می شود.

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

[sta_anchor id=”هویت-سنجی-و-امضای-دیجیتال” unsan=”هویت سنجی و امضای دیجیتال” /]

هویت سنجی و امضای دیجیتال

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

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

 


[sta_anchor id=”هش-کردن-یا-هشینگ-داده‌ها” unsan=”هش کردن یا هشینگ داده‌ها” /]

مراحل اصلی امضای دیجیتال در ارز های دیجیتال

سه مرحله هش کردن، امضا کردن و صحت‌ سنجی مراحل اصلی امضای دیجیتال در ارز های دیجیتال هستند.

هش کردن یا هشینگ داده‌ها

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

امضای دیجیتال، اثر انگشت دیجیتال  منحصر به فرد از پیام است.

امضا کردن

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

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

هر پیامی که به صورت دیجیتالی امضا شده است، امضای دیجیتالی متفاوتی دارد.

صحت‌ سنجی

مرحله اول:

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

مرحله دوم:

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

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


[sta_anchor id=”تغییر-ناپذیری-بلاک-چین” unsan=”تغییر ناپذیری بلاک چین” /]

تغییر ناپذیری بلاک چین

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

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

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

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

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


[sta_anchor id=”ماینینگ” /]

ماینینگ

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

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

همچنین می توانید مطلب ماینیگ یا استخراج چیست؟ را مطالعه کنید.

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

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

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


[sta_anchor id=”نرخ-هش-چیست” unsan=”نرخ هش چیست” /]

نرخ هش چیست

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

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

بیشتر بخوانید: هش ریت چیست؟

سه عامل مهم و وابسته به هم نرخ هش ، پاداش ماینر ها و سختی شبکه می باشند. در واقع هر چه سختی شبکه بیت کوین بالاتر باشد، نرخ هش بیشتری نیز برای پیدا کردن و ماین کردن بلاک‌ها نیاز خواهد بود.

تعداد هش انجام شده در یک ثانیه ، با واحد هش بر ثانیه ، یکی از رایج‌ترین معیارهای اندازه‌گیری نرخ هش نشان داده می شود. واحد های دیگر به شرح زیر می باشد:

1 KH/s  یا هزار هش بر ثانیه

1 MH/s یا یک میلیون هش بر ثانیه

1 GH/s یا یک میلیارد هش بر ثانیه

1 TH/s یا یک تریلیون هش بر ثانیه

1 PH/s یا یک کوادریلیون هش بر ثانیه

EH/s یا یک کوئینتیلیون هش بر ثانیه

توجه: ارقام بالا به ترتیب کیلوهش ، مگاهش ، گیگاهش ، تراهش ، پتاهش و اگزاهش نام‌ گذاری می‌شوند.


بیشتر بخوانید:

مشاهده بیشتر

معصومه گودرزی

کارشناس ارشد ریاضی|تکنسین شبکه|مولف کتاب های اموزشی|مدرس دانشگاه های آزاد و علمی کاربردی|پژوهشگر در مورد ارزهای دیجیتال

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن
بستن