به ترم جدیدی از دورۀ آموزش ارزهای دیجیتالی خوش آمدید. در جلسۀ اول از ترم چهارم، بر آن شدیم تا ببینیم هش کردن یعنی چه؟ با آکادمی کالج پیپس، بزرگترین مرجع تخصصی آموزش بازارهای مالی، همراه باشید.
[ez-toc]
قبل از اینکه وارد موضوع استخراج بیتکوین شویم، نیاز داریم کمی از مسیر اصلی منحرف شویم و در مورد یک مفهوم خاص که پایه و اساس ارزهای دیجیتالی است، یاد بگیریم.
برای اینکه بتوانیم بهدرستی بفهمیم که بیتکوین و دیگر رمزارزها چگونه کار میکنند، باید ابتدا مفهوم «Hashing» را درک کنیم.
این یک مفهوم فنی است و باید با آن آشنا شوید؛ بنابراین ما آن را برای شما بهطور ساده توضیح خواهیم داد.
هش کردن یعنی چه؟
Hashing یا هش کردن، یک روش رمزنگاری است که هر نوع داده را به یک رشتۀ منحصربهفرد از متن با طول ثابت تبدیل میکند.
رمزنگاری (کریپتوگرافی) تمرین و مطالعۀ تکنیکهایی برای ارتباط ایمن در برابر ناظران خارجی است. در عصر اینترنت، رمزنگاری برای محافظت از اطلاعات یا «دادهها» در کامپیوتر استفاده میشود.
اگر هنوز برایتان واضح نیست، «کریپتو» در Cryptocurrency به رمزنگاری اشاره دارد.
Hashing بخش اساسی رمزنگاری است و نقش بزرگی در دنیای ارزهای دیجیتالی ایفا میکند.
بهطور ساده، هش کردن به این معناست که متنی با هر طولی را از طریق یک تابع هش وارد کنیم که یک خروجی با طول ثابت تولید میکند.
هر قطعه داده، بدون توجه به اندازه، نوع یا طول آن، میتواند «هش» شود.
هشی که تولید میشود همیشه به همان طول است.
در مثال زیر، با استفاده از تابع هش SHA-1، بدون توجه به طول «ورودی»، «خروجی» همیشه 40 کاراکتر دارد.


توجه داشته باشید که حتی با وجود اینکه «ورودیها» متفاوت بودند، هر سه هش همچنان 40 کاراکتر داشتند.
در این مثال خاص، طول ثابت ۴۰ کاراکتر است که توسط تابع هش خاصی که استفاده میشود (یعنی “SHA-1”) تعیین میشود که بعداً توضیح داده خواهد شد.
در حال حاضر، فقط بدانید که توابع هش دیگر ممکن است خروجیهایی با طولهای ثابت متفاوت تولید کنند. بیشتر آنها طولهای ثابتی دارند که از 40 کاراکتر بیشتر است.
هش کردن مانند اثر انگشت عمل میکند
یک قطعه داده منحصربهفرد همیشه یک هش یکسان تولید میکند. برای مثال، اگر یک میلیون بار عبارت “Hello” را از یک تابع هش عبور دهید، هش مشخصی که ایجاد میشود همان هش است که یک میلیون بار ظاهر خواهد شد.
برای کلمه “Hello”، هش SHA-1 همیشه به این شکل خواهد بود:
f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0
و فقط «Hello» است که همیشه این هش را تولید میکند.
هر تغییری در «Hello»، حتی اگر فقط به «hello» تغییر کند، باعث میشود که تابع هش یک مقدار هش کاملاً متفاوت تولید کند. به همین دلیل است که هشها به عنوان «اثر انگشت» دیجیتال شناخته میشوند. همانطور که اثر انگشت شما برای شما منحصربهفرد است، یک هش نیز برای یک ورودی خاص از دادهها منحصربهفرد است.
یک هش قابل بازگشت نیست
ورودی به تابع هش «پیشتصویر» یا «preimage» نامیده میشود، اما برای سادگی به آن «ورودی» میگویند. خروجی تابع هش «مقدار هش»، یا بهسادگی «هش» نامیده میشود. یک تابع هش بهگونهای طراحی شده است که به صورت یکطرفه عمل کند.

از آنجا که یک تابع هش یک تابع یکطرفه است، خروجی، یعنی هش، نمیتواند برای آشکار کردن ورودی، یعنی preimage، استفاده شود.
این بدان معناست که اگر تنها چیزی که دارید هش باشد، نمیتوانید دادههای اصلی (پیشتصویر) را که این هش نمایانگر آن است، رمزگشایی کنید.
توابع هش، هشهایی تولید میکنند که غیرقابل بازگشت هستند.
غیرقابل بازگشت بودن به این معناست که اگر فقط هش داشته باشید، نمیتوانید از آن برای فهمیدن اینکه دادۀ اصلی چه بوده است، استفاده کنید. این ویژگی اجازه میدهد که دادههای اصلی ایمن و ناشناخته بمانند.

تابع هش چیست؟
یک تابع هش، یک عملیات ریاضی است که دادههای ورودی با طول دلخواه را به خروجی با طول ثابت تبدیل میکند که با استفاده از یک الگوریتم خاص اجرا میشود.
یک تابع هش مفید، نباید هیچ سرنخی دربارۀ ظاهر ورودی ارائه دهد. برای مثال، تشخیص اینکه آیا ورودی، طولانی یا کوتاه بوده یا شامل اعداد یا حروف است نباید امکان پذیر باشد. همچنین، تغییر حتی یک کاراکتر در ورودی باید منجر به خروجی کاملاً متفاوتی شود.
توابع هش معروف
همۀ توابع هش به روش مشابهی کار میکنند. شما دادهها را وارد میکنید و تابع هش دادهها را «بههمریخته» و یک هش تولید میکند.
توابع هش رایج عبارتند از:
MD-5: پیغام خلاصه 5 (Message Digest 5) یک تابع هش رایج است. در گذشته، این الگوریتم ایمن در نظر گرفته میشد، اما امروزه هکرها راههایی برای شکستن این الگوریتم پیدا کردهاند و قادرند آن را در عرض چند ثانیه رمزگشایی کنند.
SHA: الگوریتم هش ایمن (Secure Hash Algorithm) نوع دیگری از تابع هش است. چندین نوع مختلف از SHA وجود دارند که در چهار خانواده دستهبندی میشوند: SHA-0، SHA-1، SHA-2، و SHA-3. بهطور کلی، هرچه شماره بالاتر باشد، انتشار جدیدتر است و الگوریتم امنتر است.
در دورۀ آموزشی ما، تنها تابع هشی که باید در حال حاضر دربارۀ آن بدانید، «الگوریتم هش ایمن» است، مخصوصاً، خانوادۀ SHA-2، چون شامل یک عضو ویژه در این خانواده به نام SHA-256 است.
SHA-256 یک تابع هش است که یک رشته متن را به رشتۀ دیگری تبدیل میکند که همیشه به همان طول است: ۶۴ کاراکتر الفبایی-عددی. این معادل ۲۵۶ بیت است که «۲۵۶» در نام آن از همین جا میآید.
این تابع، ویژه است زیرا در چندین بخش از سیستم بیتکوین استفاده میشود، که در درسهای بعدی با آن آشنا خواهید شد. در حال حاضر، مهم است که فقط بدانید که SHA-256 یک نوع تابع هش است و در بیتکوین استفاده میشود.
چه ورودی یک صفحه از یک کتاب هری پاتر باشد و چه کل مجموعه کتابهای هری پاتر، خروجی تابع هش SHA-256 همیشه به همان طول است که به صورت ۶۴ کاراکتر الفبایی-عددی نمایش داده میشود.
حالا در درس بعدی، بیایید تا نگاهی به چگونگی عملکرد Hashing در دنیای ارزهای دیجیتالی بیندازیم.


