تابع هش (Hash Function) یک فرمول ریاضی است که هر دادهای را، از یک کلمه ساده تا یک فایل چندگیگابایتی، به رشتهای کوتاه با طول ثابت تبدیل میکند. این رشته مثل اثر انگشتِ همان داده عمل میکند. اگر بخواهیم کوتاه بگوییم تابع هش چیست و چرا در ارز دیجیتال اینقدر مهم است: هش به همه اجازه میدهد بدون نیاز به اعتماد به یک واسطه، مطمئن شوند اطلاعات دست نخورده است. در این مقاله، قدمبهقدم و بدون اصطلاحات پیچیده میبینیم یک هش امن چه ویژگیهایی دارد، الگوریتم SHA-256 در بیت کوین چه کاری انجام میدهد، بلاکها چطور با هش به هم وصل میشوند و هش ریت دقیقاً چه چیزی را اندازه میگیرد. اگر هنوز با مفهوم پایه آشنا نیستید، خواندن مطلب بلاکچین چیست نقطه شروع خوبی است.
تابع هش چیست؟ توضیح با یک مثال ساده
یک دستگاه آبمیوهگیری را در نظر بگیرید. هر بار که دقیقاً همان میوهها را با همان مقدار داخلش بریزید، همان آبمیوه را تحویل میگیرید. اما از روی لیوان آبمیوه نمیتوانید سیب و پرتقال اولیه را دوباره بسازید. تابع هش هم همینطور کار میکند: داده را میگیرد، آن را «خرد» میکند و خروجیای میدهد که به آن هش یا چکیده (Digest) میگویند.
به این فرایند هش کردن (Hashing) گفته میشود. اندازه ورودی اهمیتی ندارد. چه یک حرف به تابع بدهید و چه یک کتاب کامل، خروجی الگوریتم SHA-256 همیشه یک رشته ۶۴ کاراکتری است.
به این مثال واقعی نگاه کنید. تنها تفاوت دو ورودی زیر، کوچک یا بزرگ بودن حرف اول است:
| ورودی | خروجی SHA-256 |
|---|---|
| hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
| Hello | 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 |
همانطور که میبینید، دو خروجی هیچ شباهتی به هم ندارند. همین ویژگی ساده، پایه امنیت بسیاری از سیستمهای دیجیتال است و نقش اصلی را در رمزنگاری بلاکچین بازی میکند.
ویژگیهای یک تابع هش امن
دانستن اینکه تابع هش چیست کافی نیست؛ چون هر فرمولی که داده را کوتاه کند، برای بلاکچین مناسب نیست. یک تابع هش رمزنگاری (Cryptographic Hash Function) باید همزمان این ویژگیها را داشته باشد:
- قطعی بودن (Deterministic): یک ورودی مشخص همیشه و روی هر کامپیوتری همان خروجی را میدهد. بدون این ویژگی، هیچکس نمیتوانست درستی محاسبات دیگران را بررسی کند.
- محاسبه سریع: ساختن هش از روی داده باید در کسری از ثانیه انجام شود.
- یکطرفه بودن (Pre-image Resistance): از روی خروجی نمیتوان به ورودی رسید. تنها راه، حدس زدن تعداد بیشماری ورودی مختلف است.
- اثر بهمنی (Avalanche Effect): کوچکترین تغییر در ورودی، حتی یک ویرگول یا یک حرف بزرگ، خروجی را بهطور کامل عوض میکند؛ همان چیزی که در مثال hello دیدید.
- مقاومت در برابر تصادم (Collision Resistance): پیدا کردن دو ورودی متفاوت با هش یکسان، در عمل غیرممکن است.
- طول ثابت خروجی: اندازه هش همیشه یکسان است و به حجم داده بستگی ندارد.
نکته: هش با رمزگذاری یکی نیست. در رمزگذاری (Encryption)، داده با یک کلید قفل میشود و با کلید درست دوباره باز میشود. اما هش برگشتپذیر نیست و کلیدی برای باز کردنش وجود ندارد؛ هدفش پنهان کردن داده نیست، بلکه اثبات دستنخوردن آن است.
آیا هش کردن شکستناپذیر است؟
هیچ فناوریای برای همیشه بینقص نیست. الگوریتمهای قدیمیتری مثل MD5 و SHA-1 امروز برای کاربردهای امنیتی ناامن شناخته میشوند، چون پژوهشگران راههایی برای ساختن تصادم در آنها پیدا کردهاند. در مقابل، تا امروز حمله عملی شناختهشدهای که SHA-256 را بشکند گزارش نشده است.
درباره رایانههای کوانتومی هم بحث زیادی وجود دارد. بسیاری از کارشناسان معتقدند تهدید جدیتر کوانتوم متوجه امضای دیجیتال است تا خود تابع هش. با این حال، این حوزه هنوز در حال پژوهش است و جامعه توسعهدهندگان آن را زیر نظر دارد.
الگوریتم SHA-256 در بیت کوین
SHA-256 مخفف Secure Hash Algorithm 256-bit است و عضو خانوادهای به نام SHA-2 به شمار میآید. این الگوریتم را آژانس امنیت ملی آمریکا (NSA) طراحی کرد و مؤسسه ملی استاندارد و فناوری آمریکا (NIST) در اوایل دهه ۲۰۰۰ میلادی آن را بهعنوان استاندارد منتشر کرد.
عدد ۲۵۶ یعنی خروجی همیشه ۲۵۶ بیت است. این خروجی معمولاً به شکل ۶۴ کاراکتر هگزادسیمال، یعنی ترکیبی از اعداد ۰ تا ۹ و حروف a تا f، نمایش داده میشود. تعداد خروجیهای ممکن ۲ به توان ۲۵۶ است؛ عددی حدوداً ۷۸ رقمی که حدس زدن تصادفی یک هش مشخص را عملاً ناممکن میکند.
ساتوشی ناکاموتو در وایتپیپر بیت کوین از این ابزار برای سازوکار اثبات کار (Proof of Work) استفاده کرد. بیت کوین در بیشتر بخشها از هش دوگانه استفاده میکند؛ یعنی داده را دو بار پشت سر هم از SHA-256 عبور میدهد. به این روش SHA-256d هم میگویند.
SHA-256 در کنار الگوریتمهای دیگر
همه شبکهها از یک الگوریتم استفاده نمیکنند. برای مثال، اتریوم (Ethereum) در بسیاری از بخشها از Keccak-256 بهره میبرد و لایتکوین (Litecoin) برای استخراج از الگوریتم Scrypt استفاده میکند. منطق همه آنها یکی است: ورودی دلخواه، خروجی ثابت، یکطرفه و حساس به کوچکترین تغییر.
هش چطور بلاکها را به هم زنجیر میکند؟
هر بلاک در بیت کوین دو بخش دارد: بدنه که فهرست تراکنشها در آن قرار دارد، و سربرگ بلاک (Block Header) که خلاصهای از اطلاعات بلاک است. هش بلاک در واقع هش همین سربرگ است.
یکی از مهمترین قسمتهای سربرگ، هش بلاک قبلی است. یعنی هر بلاک، اثر انگشت بلاک پیش از خودش را در خود دارد. همین ارجاع پشت سر هم، بلاکها را مثل حلقههای یک زنجیر به هم وصل میکند.
حالا فرض کنید کسی بخواهد یک تراکنش قدیمی را دستکاری کند. بیایید ساده بررسی کنیم چه اتفاقی میافتد:
- با تغییر تراکنش، محتوای آن بلاک عوض میشود و بهخاطر اثر بهمنی، هش بلاک کاملاً تغییر میکند.
- بلاک بعدی هنوز هش قدیمی را بهعنوان «هش بلاک قبلی» در خود دارد؛ پس اتصال زنجیر قطع میشود.
- برای پنهان کردن این تغییر، مهاجم باید هش همه بلاکهای بعدی را دوباره بسازد.
- چون ساختن هر بلاک به محاسبات سنگین نیاز دارد و شبکه مدام بلاک جدید اضافه میکند، مهاجم باید از کل شبکه سریعتر باشد؛ کاری که در یک شبکه بزرگ بسیار پرهزینه و عملاً غیرواقعبینانه است.
به همین دلیل میگویند دادههای بلاکچین تغییرناپذیر (Immutable) هستند. البته این تغییرناپذیری مطلق نیست و به اندازه و توان محاسباتی شبکه بستگی دارد؛ شبکههای کوچکتر در برابر چنین حملههایی آسیبپذیرترند.
ریشه مرکل؛ خلاصه همه تراکنشها در یک هش
سربرگ بلاک بهجای نگهداشتن همه تراکنشها، فقط یک هش به نام ریشه مرکل (Merkle Root) دارد. تراکنشها دوتادوتا هش و با هم ترکیب میشوند تا در نهایت به یک هش واحد برسند. اگر حتی یک تراکنش تغییر کند، ریشه مرکل هم عوض میشود و این تغییر بلافاصله آشکار میشود.
نقش هش در ماینینگ و هش ریت
در بیت کوین، اضافه کردن بلاک جدید یک رقابت محاسباتی است. ماینرها باید هشی برای سربرگ بلاک پیدا کنند که از یک عدد هدف (Target) کوچکتر باشد؛ به زبان ساده، هشی که با تعداد مشخصی صفر شروع شود. چون خروجی هش قابل پیشبینی نیست، تنها راه این است که عددی به نام نانس (Nonce) را مدام تغییر دهند و دوباره هش بگیرند.
جزئیات این فرایند، از تجهیزات تا پاداش بلاک، موضوع مطلب جداگانهای است که در راهنمای ماینینگ به آن پرداختهایم. اینجا همینقدر کافی است که بدانید پیدا کردن جواب سخت است، اما بررسی درستی آن برای بقیه شبکه فقط به یک هش ساده نیاز دارد.
هش ریت چیست و چه چیزی را نشان میدهد؟
هش ریت (Hash Rate) تعداد هشهایی است که یک دستگاه یا کل شبکه در هر ثانیه محاسبه میکند. هرچه هش ریت شبکه بیشتر باشد، حمله به آن پرهزینهتر میشود، چون مهاجم باید توان محاسباتی بیشتری از بقیه شبکه در اختیار داشته باشد.
| واحد | معنی |
|---|---|
| H/s | یک هش در ثانیه |
| TH/s (تراهش) | هزار میلیارد هش در ثانیه |
| PH/s (پتاهش) | هزار تراهش در ثانیه |
| EH/s (اگزاهش) | هزار پتاهش در ثانیه |
هش ریت کل شبکه بیت کوین امروز در مقیاس اگزاهش بر ثانیه و بالاتر اندازهگیری میشود. شبکه تقریباً هر ۲۰۱۶ بلاک (حدود دو هفته) سختی استخراج (Difficulty) را تنظیم میکند تا میانگین زمان ساخت هر بلاک نزدیک ۱۰ دقیقه بماند. پس افزایش هش ریت لزوماً به معنی سریعتر شدن ساخت بلاکها نیست.
هشدار: هش ریت شاخص امنیت شبکه است، نه سیگنال قیمت. بالا یا پایین رفتن آن را بهتنهایی دلیلی برای تصمیم خرید یا فروش ندانید.
کاربردهای دیگر هش در کریپتو
حالا که میدانید تابع هش چیست و چطور از بلاکها محافظت میکند، بد نیست ببینید در چه جاهای دیگری از دنیای کریپتو به کار میرود:
- شناسه تراکنش: هر تراکنش یک شناسه منحصربهفرد دارد که خودش یک هش است و با آن میتوانید وضعیت انتقال را در اکسپلورر بلاکچین پیگیری کنید. نحوه پیدا کردن و استفاده از این شناسه را در مطلب هش تراکنش توضیح دادهایم.
- ساخت آدرس کیفپول: آدرس از روی کلید عمومی و با چند مرحله هش ساخته میشود؛ در آدرسهای قدیمیتر بیت کوین، ترکیبی از SHA-256 و RIPEMD-160 به کار میرود. برای آشنایی با رابطه این دو کلید، مطلب کلید خصوصی و عمومی را ببینید.
- امضای دیجیتال: پیش از امضای یک تراکنش، دادههای آن هش میشود تا امضا روی خلاصهای ثابت و غیرقابل دستکاری انجام شود.
- بررسی سلامت فایلها: بسیاری از کیفپولهای رسمی، هش SHA-256 فایل نصبی را در سایت خود منتشر میکنند. اگر هش فایلی که دانلود کردهاید با عدد اعلامشده یکی باشد، مطمئن میشوید نسخه دستکاریشده یا آلوده دریافت نکردهاید؛ نکتهای مهم برای کاربرانی که مجبورند نرمافزار را از منابع مختلف دانلود کنند.
- ذخیره رمز عبور: سرویسهای امن، خود رمز عبور شما را نگه نمیدارند و فقط هش آن را ذخیره میکنند تا اگر پایگاه دادهشان لو رفت، رمز اصلی فاش نشود.
سوالات متداول درباره تابع هش
۱. آیا میتوان از روی هش به داده اصلی رسید؟
خیر. تابع هش یکطرفه طراحی شده و هیچ فرمول یا کلیدی برای برگرداندن خروجی به ورودی وجود ندارد. تنها راه، حدس زدن ورودیهای مختلف و مقایسه هش آنهاست. برای دادههای ساده و کوتاه این کار ممکن است، اما برای دادههای پیچیده و تصادفی، مثل آنچه در بلاکچین استفاده میشود، عملاً ناممکن است.
۲. آیا ممکن است دو داده مختلف هش یکسان داشته باشند؟
از نظر ریاضی بله، چون تعداد ورودیهای ممکن بینهایت و تعداد خروجیها محدود است. به این حالت «تصادم» میگویند. اما در یک تابع هش امن مثل SHA-256، تعداد خروجیهای ممکن آنقدر زیاد است که پیدا کردن عمدی دو ورودی با هش یکسان، با فناوری امروز عملاً غیرممکن به شمار میآید.
۳. هش بلاک با هش تراکنش چه فرقی دارد؟
هش بلاک اثر انگشت سربرگ یک بلاک است و آن را به بلاک قبلی وصل میکند. هش تراکنش اثر انگشت یک تراکنش مشخص است و برای پیگیری انتقال به کار میرود. هر دو با یک منطق ساخته میشوند، اما کاربردشان متفاوت است. جزئیات هش تراکنش را در مطلب اختصاصی همین موضوع که بالاتر معرفی شد بخوانید.
۴. آیا برای استفاده از ارز دیجیتال باید خودم هش را محاسبه کنم؟
نه. کیفپولها، صرافیها و شبکه بلاکچین همه محاسبات هش را بهطور خودکار انجام میدهند. آشنایی با این مفهوم به شما کمک میکند بفهمید چرا تراکنشها قابل اعتمادند، شناسه تراکنش را درست پیگیری کنید و هنگام دانلود نرمافزار کیفپول، از اصل بودن فایل مطمئن شوید.
جمعبندی
اگر بخواهیم در یک جمله بگوییم تابع هش چیست: ابزاری که هر دادهای را به اثر انگشتی کوتاه، ثابت و غیرقابل بازگشت تبدیل میکند. همین ابزار ساده، بلاکها را به هم زنجیر میکند، ماینینگ را ممکن میسازد و دستکاری اطلاعات را پرهزینه و آشکار میکند. فهم این مفهوم، قدم مهمی برای تصمیمگیری آگاهانه در دنیای کریپتو است.
- هش یکطرفه است و کوچکترین تغییر در ورودی، بهخاطر اثر بهمنی، خروجی را کاملاً عوض میکند.
- بیت کوین از الگوریتم SHA-256، آن هم بهصورت دوگانه، استفاده میکند.
- قرار گرفتن هش هر بلاک در بلاک بعدی، زنجیره را در برابر دستکاری مقاوم میکند.
- هش ریت شاخص امنیت شبکه است، نه سیگنال خرید یا فروش.
اگر بعد از آشنایی با این مفاهیم دوست دارید وضعیت شبکهای را ببینید که بر پایه همین هشها کار میکند، میتوانید قیمت لحظهای بیتکوین را در ناربیت ببینید و با خیال راحت و بدون عجله، مسیر یادگیریتان را ادامه دهید.
این مطلب صرفاً آموزشی است و توصیه مالی یا سرمایهگذاری محسوب نمیشود. پیش از هر تصمیم، ریسکها را با شرایط مالی خود بسنجید.