مفهوم هش و هشینگ “Hashing” در ارزهای دیجیتال | الگوریتم هش SHA-256

هش یا هشینگ چیست

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

برای اینکه به درک درستی از بیت کوین و دیگر رمزارزها برسیم، مهم است که ابتدا مفهوم هش یا هشینگ “Hashing” را درک کنیم. 

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

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

هش “Hashing” چیست؟

هش یک روش رمزنگاری “cryptography” است که هر شکل از داده را می‌پذیرد و سپس آن را به یک رشته متن منحصر به فرد با طول ثابت تبدیل می‌کند. 

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

اگر تا به حال برایتان شفاف نبوده،‌ خوب است بدانید کلمه “Crypto” در  “Cryptocurrencies” (ارزهای دیجیتال) مخفف کلمه “Cryptography” است.

“هش” بخش اصلی و اساسی در رمزنگاری است و نقش بزرگی در رمزنگاری ارزهای دیجیتال ایفا می‌کند. 

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

تابع هش

هر قطعه از داده را می‌توان هش کرد که اندازه، نوع و طول آن اهمیتی ندارد. 

در مثال‌های زیر، تابع هش با استفاده از الگوریتم SHA-1، صرف نظر از نوع ورودی، خروجی با طول 40 کاراکتر تولید می‌کند. 

مثال هش

مثال هش نحوه عملکرد تابع هش

در این‌جا یک مقایسه سریع از سه مثال بالا آورده شده است:

ورودی و خروجی در تابع هش

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

در این مثال، طول ثابت 40 کاراکتر است که توسط تابع هش با الگوریتم SHA-1 تعیین می‌شود. بعدا در این مورد بیشتر توضیح داده خواهد شد. 

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

هش مانند اثر انگشت دیجیتال عمل می‌کند!

هر داده‌ی منحصر به فرد، همیشه هش یکسانی را تولید می‌کند.

برای مثال اگر کلمه Hello میلیون‌ها بار به تابع هش داده شود، هر بار هش یکسانی را دریافت می‌کنید. 

هش کلمه Hello همیشه به این صورت خواهد بود:

f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0

و فقط کلمه Hello می‌تواند چنین هشی تولید کند. 

 اگر تغییری در کلمه Hello به‌وجود بیاوید، مثلا حرف بزرگ آن را به حرف کوچک hello تغییر دهید، تابع این بار هش کاملا متفاوتی را تولید می‌کند.

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

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

 اثر انگشت دیجیتال

هش قابل برگشت نیست

در یک تابع هش، به ورودی “Preimage” یا پیش تصویر گفته می‌شود. همچنین خروجی را مقدار هش یا “digest” می‌نامند که برای ساده نگه‌داشتن مطالب به استفاده از دو نام ورودی و هش (خروجی) بسنده می‌کنیم.

یک تابع هش به‌گونه‌ای طراحی شده است که به صورت یک‌طرفه عمل کند.

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

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

توابع هش، هش‌های یک‌طرفه و برگشت‌ناپذیر تولید می‌کنند. 

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

مثال تابع هش یک طرفه

تابع هش “Hash Function” چیست؟

تابع هش “Hash Function” یک عمل ریاضی است که با استفاده از یک الگوریتم خاص، داده‌های ورودی با طول دلخواه را به خروجی به طول ثابت تبدیل می‌کند. 

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

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

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

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

یک تابع هش خوب، همه اطلاعات را درمورد داده‌های ورودی پنهان می‌کند.

برای مثال، هیچکس نباید بتواند اندازه (کوتاهی یا بلندی) و اجزای داده (حروف یا عدد بودن) را تشخیص دهد. همچنین تغییر تنها یک کاراکتر در داده باید خروجی کاملا متفاوتی را تولید کند.

 توابع هش محبوب

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

توابع هش رایج عبارتند از:

MD-5: این تابع مخفف Message Digest 5 است که در گذشته از امنیت بالایی برخوردار بود اما امروزه هکرها نحوه رمزگشایی این الگوریتم را کشف کرده‌اند و می‌توانند تنها در چند ثانیه آن را هک کنند.

SHA: مخفف Secure Hash Algorithm به معنای “الگوریتم هش امن”، نوع دیگری از توابع هش است. انواع مختلفی از SHA وجود دارد که به چهار دسته تقسیم می‌شود: SHA-2، SHA-1، SHA-0 و SHA-3. به‌طور کلی هرچه عدد این تابع بزرگتر باشد، نسخه آن جدیدتر و امن‌تر است.

تنها تابع هش که در حال حاضر باید درمورد آن بدانید الگوریتم هش امن (SHA) است. چون SHA-256 (تابع هش بیت کوین) عضوی از خانواده SHA-2 است.

SHA-256 یک تابع هش است که یک رشته از متن را به رشته‌ای با طول ثابت ۶۴ کاراکتر شامل الفبا و اعداد تبدیل می‌کند. این ۶۴ کاراکتر معادل 256 بیت است. به همین دلیل این الگوریتم را SHA-256 می‌نامند.

این الگوریتم بسیار خاص است زیرا در چندین بخش از سیستم بیت کوین استفاده شده است که در درس‌های بعدی بیشتر با آن آشنا خواهید شد. در حال حاضر، مهم است که بدانید SHA-256 یک نوع تابع هش است که در سیستم بیت کوین مورد استفاده قرار گرفته است.

در تابع هش، تفاوتی ندارد که ورودی یک صفحه از کتاب هری پاتر باشد یا کل مجموعه کتاب‌های آن؛ به‌هرحال خروجی تابع هش SHA-256 همیشه ۶۴ کاراکتر شامل حروف و اعداد است.

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

این مطلب بخشی از دوره رایگان و گام‌به‌گام آموزش ارز دیجیتال وبسایت «ایران بروکر» است. شما می‌توانید از طریق لینک‌های زیر به درس قبل یا بعد بروید.

فهرست مطالب