تابع هش (Hash Function) چیست؟

تابع هش (Hash Function) چیست؟

فهرست مطالب

ما به بانک‌ها اعتماد می‌کنیم تا پول ما را امن نگه دارند، به پلتفرم‌های اجتماعی اعتماد می‌کنیم تا هویت ما را حفظ کنند و به وب‌سایت‌ها اعتماد می‌کنیم تا رمزهای عبور ما را فاش نکنند. اما اگر راهی وجود داشت که این اعتماد را نه بر اساس یک نهاد مرکزی، بلکه بر پایه‌ی ریاضیات محض و غیرقابل تغییر بنا کنیم، چه؟ این دقیقاً فلسفه‌ی وجودی بلاکچین است و در قلب این فناوری، یک مفهوم قدرتمند و حیاتی به نام تابع هش (Hash Function) قرار دارد.

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

تابع هش (Hash Function) به زبان ساده چیست؟

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

  1. شما هرگز نمی‌توانید با نگاه کردن به اسموتی، محتویات اولیه آن را دقیقاً حدس بزنید.

  2. اگر همان محتویات اولیه را دوباره داخل مخلوط‌کن بریزید، دقیقاً همان اسموتی را با همان طعم و رنگ دریافت خواهید کرد. اما اگر حتی یک قطره آبلیمو به محتویات اولیه اضافه کنید، اسموتی نهایی کاملاً متفاوت خواهد بود.

این مثال، یک تشبیه ساده برای عملکرد یک تابع هش است.

تابع هش یک الگوریتم ریاضی است که هر نوع داده ورودی (Input)، با هر اندازه‌ای، را دریافت کرده و آن را به یک رشته خروجی (Output) با طول ثابت تبدیل می‌کند. این خروجی که به آن «هش» (Hash) یا «دایجست» (Digest) گفته می‌شود، نماینده‌ی منحصر به فرد داده‌ی ورودی است. مهم‌ترین نکته این است که این فرآیند، یک‌طرفه طراحی شده است؛ یعنی رسیدن از داده‌ی ورودی به هش بسیار ساده و سریع است، اما رسیدن از هش به داده‌ی ورودی اصلی، عملاً غیرممکن است.

ویژگی‌های کلیدی یک تابع هش امن چیست؟

هر تابع هشی برای استفاده در کاربردهای امنیتی مانند بلاکچین مناسب نیست. یک تابع هش رمزنگاری‌شده (Cryptographic Hash Function) باید دارای چندین ویژگی کلیدی باشد تا بتواند امنیت و یکپارچگی را تضمین کند. در ادامه، این ویژگی‌ها را به تفصیل بررسی می‌کنیم.

یک‌طرفه بودن (One-Way Function)

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

  • مثال: فرض کنید هش عبارت Hello World با الگوریتم SHA-256 برابر با a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e است. پیدا کردن عبارت Hello World از روی این هش، مانند پیدا کردن یک دانه‌ی شن خاص در تمام سواحل جهان است. این ویژگی برای محافظت از داده‌های حساس مانند رمزهای عبور حیاتی است.

قطعیت (Deterministic)

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

خروجی با طول ثابت (Fixed-Length Output)

صرف‌نظر از حجم داده‌ی ورودی، خروجی تابع هش همیشه طولی ثابت و مشخص دارد. برای مثال، الگوریتم SHA-256 که در بیت‌کوین استفاده می‌شود، همیشه یک خروجی 256 بیتی (یا 64 کاراکتری در نمایش هگزادسیمال) تولید می‌کند. این یعنی هش یک کلمه ("cat") و هش کل محتوای یک کتابخانه، هر دو 256 بیت طول خواهند داشت. این ویژگی به استانداردسازی ذخیره‌سازی و پردازش داده‌ها کمک شایانی می‌کند.

اثر بهمنی (Avalanche Effect)

یک تابع هش امن باید به کوچک‌ترین تغییرات در ورودی، واکنش شدیدی نشان دهد. این پدیده که به آن «اثر بهمنی» می‌گویند، به این معناست که حتی تغییر یک بیت یا یک کاراکتر در داده‌ی ورودی، باید منجر به تولید یک هش خروجی کاملاً متفاوت و غیرقابل پیش‌بینی شود.

  • مثال با SHA-256:

    • ورودی: Today is a sunny day

    • هش: f333b632aa8a944e83f08a42755106a926cb1273933c811444d3d8a773e33f5b

    • ورودی: Today is a Sunny day (فقط حرف 'S' بزرگ شده است)

    • هش: b139b56f3e1b71d60a581a89c3ac839c43a49e61298d754e6079d363d39575f0

همان‌طور که می‌بینید، یک تغییر جزئی، خروجی را به طور کامل دگرگون کرده است. این ویژگی تضمین می‌کند که هیچ‌کس نمی‌تواند داده‌ها را به صورت نامحسوس دستکاری کند.

مقاومت در برابر تصادم (Collision Resistance)

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

توابع هش چگونه در بلاکچین استفاده می‌شوند؟

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

ایجاد هویت منحصر به فرد برای بلاک‌ها

هر بلاک در یک زنجیره بلاکچین (Blockchain) حاوی مجموعه‌ای از داده‌هاست که شامل لیست تراکنش‌ها، یک مُهر زمانی (Timestamp)، یک عدد تصادفی به نام نانس (Nonce) و مهم‌تر از همه، هش بلاک قبلی است. تمام این اطلاعات در کنار هم قرار گرفته و از طریق یک تابع هش (مانند SHA-256) پردازش می‌شوند. خروجی این فرآیند، هش بلاک فعلی است که به عنوان شناسه‌ی منحصر به فرد یا «اثر انگشت» آن بلاک عمل می‌کند. این هش، هویت بلاک را تعریف می‌کند و در هِدِر (Header) بلاک بعدی گنجانده می‌شود.

ایجاد زنجیره امن و تغییرناپذیر

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

  • سناریوی دستکاری: فرض کنید یک هکر قصد دارد یک تراکنش را در بلاک شماره ۱۰۰ تغییر دهد. به محض اینکه حتی یک کاراکتر از داده‌های آن بلاک تغییر کند، «اثر بهمنی» تابع هش فعال می‌شود و هش بلاک ۱۰۰ به طور کامل تغییر خواهد کرد.

  • اثر زنجیره‌ای: از آنجایی که هش بلاک ۱۰۰ در هدر بلاک ۱۰۱ ذخیره شده بود، این تغییر باعث می‌شود که هش بلاک ۱۰۱ نیز نامعتبر شود. این عدم تطابق مانند یک دومینو ادامه پیدا کرده و هش تمام بلاک‌های بعدی (۱۰۲، ۱۰۳، ...) را نیز نامعتبر می‌کند.

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

اطمینان از یکپارچگی داده‌ها با درختان مرکل (Merkle Trees)

در هر بلاک، ممکن است هزاران تراکنش وجود داشته باشد. هش کردن تمام این تراکنش‌ها به صورت یک‌جا، کارآمد نیست. در عوض، بلاکچین از یک ساختار هوشمندانه به نام درخت مرکل (Merkle Tree) استفاده می‌کند.

  1. ابتدا، هر تراکنش به صورت جداگانه هش می‌شود.

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

  3. این فرآیند به صورت لایه‌لایه ادامه می‌یابد تا در نهایت به یک هش واحد برسیم که به آن ریشه مرکل (Merkle Root) می‌گویند.

این ریشه مرکل است که در هدر بلاک ذخیره می‌شود. این ساختار به شبکه اجازه می‌دهد تا وجود یک تراکنش خاص را در یک بلاک، به سرعت و با کارایی بالا تأیید کند، بدون اینکه نیاز به دانلود و پردازش تمام تراکنش‌های آن بلاک باشد. این فرآیند به تأیید پرداخت ساده (SPV) معروف است.

فرآیند استخراج (ماینینگ) و اثبات کار (Proof-of-Work)

در بلاکچین‌هایی مانند بیت‌کوین، توابع هش در قلب مکانیزم اجماع اثبات کار (Proof-of-Work) قرار دارند. ماینرها برای اضافه کردن یک بلاک جدید به زنجیره، باید یک معمای ریاضی بسیار دشوار را حل کنند.

این معما در واقع یک رقابت برای پیدا کردن یک عدد خاص به نام نانس (Nonce) است. ماینرها هدر بلاک (که شامل ریشه مرکل، هش بلاک قبلی و ... است) را با نانس‌های مختلف ترکیب کرده و بارها و بارها آن را هش می‌کنند. هدف، پیدا کردن یک هش است که با تعداد مشخصی صفر شروع شود (این تعداد صفر، سختی شبکه را تعیین می‌کند).

از آنجایی که خروجی تابع هش غیرقابل پیش‌بینی است، تنها راه برای پیدا کردن این هش، آزمون و خطای بی‌وقفه (Brute-Force) است. ماینری که زودتر از بقیه این هش معتبر را پیدا کند، حق اضافه کردن بلاک جدید به زنجیره را به دست آورده و به عنوان پاداش، مقداری ارز دیجیتال (مانند بیت‌کوین) دریافت می‌کند. این فرآیند که ماینینگ (Mining) نام دارد، به قدرت محاسباتی بسیار زیادی نیاز دارد و همین امر، امنیت شبکه را تأمین می‌کند؛ زیرا حمله به شبکه و بازنویسی زنجیره، نیازمند قدرتی فراتر از کل شبکه‌ی ماینرها خواهد بود.

معرفی محبوب‌ترین الگوریتم‌های هش

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

ویژگی (Feature) SHA-256 SHA-3 (Keccak) MD5 (Message Digest 5)
طول خروجی (بیت) 256 قابل تنظیم (معمولاً 224, 256, 384, 512) 128
امنیت بسیار بالا بسیار بالا (ساختار داخلی متفاوت) ناامن - آسیب‌پذیر در برابر تصادم
سرعت سریع کندتر از SHA-256 روی برخی سخت‌افزارها بسیار سریع
مقاومت در برابر تصادم قوی قوی ضعیف (تصادم‌ها به راحتی قابل ایجاد هستند)
کاربرد اصلی در بلاکچین بیت‌کوین، بسیاری از ارزهای دیجیتال اتریوم (برای برخی اهداف)، استانداردهای جدید نباید استفاده شود - منسوخ شده

SHA-256 عضوی از خانواده SHA-2 است که توسط آژانس امنیت ملی آمریکا (NSA) طراحی شده و به دلیل امنیت و کارایی بالا، به طور گسترده در بیت‌کوین و سایر سیستم‌های بلاکچینی استفاده می‌شود. SHA-3 یک استاندارد جدیدتر با طراحی داخلی کاملاً متفاوت است که به عنوان جایگزین امنی برای SHA-2 توسعه داده شده. MD5 یک الگوریتم قدیمی است که امروزه به دلیل آسیب‌پذیری‌های شدید در برابر تصادم، کاملاً ناامن تلقی شده و نباید برای هیچ کاربرد امنیتی استفاده شود.

نتیجه‌گیری

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

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

آیا امکان دارد دو داده مختلف، هش یکسانی تولید کنند؟

از نظر تئوری، بله. از آنجایی که تعداد ورودی‌های ممکن بی‌نهایت است اما تعداد خروجی‌های هش (با طول ثابت) محدود است، قطعاً تصادم‌ها (Collisions) وجود دارند. اما نکته کلیدی در یک تابع هش امن این است که پیدا کردن چنین تصادمی باید از نظر محاسباتی آنقدر دشوار باشد که در عمل غیرممکن تلقی شود. برای الگوریتمی مانند SHA-256، تعداد خروجی‌های ممکن 2256 است که عددی بزرگ‌تر از تعداد اتم‌های موجود در جهان شناخته شده است. بنابراین، احتمال یافتن یک تصادم به صورت تصادفی تقریباً صفر است.

تفاوت بین هشینگ و رمزنگاری چیست؟

اگرچه هر دو از ابزارهای علم رمزنگاری هستند، اما اهداف متفاوتی دارند.

  • هشینگ (Hashing): یک فرآیند یک‌طرفه است که برای تأیید یکپارچگی داده‌ها (Integrity) استفاده می‌شود. شما نمی‌توانید داده‌ی اصلی را از هش آن بازیابی کنید. هدف، تأیید این است که داده‌ها تغییر نکرده‌اند.

  • رمزنگاری (Encryption): یک فرآیند دو‌طرفه است که برای حفظ محرمانگی داده‌ها (Confidentiality) به کار می‌رود. داده‌ها با استفاده از یک کلید رمزگذاری می‌شوند و می‌توانند بعداً با استفاده از کلید مربوطه، رمزگشایی (Decrypt) و به حالت اولیه بازگردانده شوند.

هش ریت (Hash Rate) در ماینینگ به چه معناست؟

هش ریت به تعداد محاسبات هشی اشاره دارد که یک ماینر (یا کل شبکه) در هر ثانیه می‌تواند انجام دهد. این معیار، نشان‌دهنده‌ی کل قدرت محاسباتی درگیر در شبکه‌ی بلاکچین است. هش ریت بالاتر به معنای امنیت بیشتر شبکه است، زیرا یک مهاجم برای غلبه بر شبکه و انجام حمله‌ای مانند حمله ۵۱٪، به قدرت محاسباتی بسیار بیشتری نیاز خواهد داشت.

اگر کامپیوترهای کوانتومی بیایند، آیا توابع هش ناامن می‌شوند؟

کامپیوترهای کوانتومی تهدیدی جدی برای الگوریتم‌های رمزنگاری نامتقارن (مانند RSA که در امضای دیجیتال استفاده می‌شود) هستند. با این حال، تأثیر آن‌ها بر توابع هش کمتر است. الگوریتم Grover، یک الگوریتم جستجوی کوانتومی، می‌تواند فرآیند یافتن ورودی از روی هش (حمله Preimage) را تسریع کند، اما این تسریع به اندازه‌ای نیست که الگوریتم‌هایی مانند SHA-256 را فوراً ناامن کند. برای مقابله با این تهدید، جامعه‌ی رمزنگاری در حال توسعه‌ی الگوریتم‌های هش مقاوم در برابر کوانتوم (Quantum-Resistant) است و افزایش طول خروجی هش (مثلاً به 512 بیت) نیز می‌تواند امنیت را به میزان قابل توجهی افزایش دهد.

چرا بیت‌کوین از SHA-256 استفاده می‌کند؟

در زمان خلق بیت‌کوین در سال ۲۰۰۹، SHA-256 یکی از امن‌ترین و آزمایش‌شده‌ترین الگوریتم‌های هش موجود بود. این الگوریتم توسط NSA طراحی شده و به عنوان یک استاندارد فدرال در آمریکا پذیرفته شده بود که به آن اعتبار زیادی می‌بخشید. علاوه بر این، SHA-256 تعادل خوبی بین امنیت بالا و سرعت محاسباتی مناسب ارائه می‌دهد که آن را برای فرآیند ماینینگ و اعتبارسنجی تراکنش‌ها در مقیاس بزرگ، ایده‌آل می‌سازد.

سوسن
سوسن نوبخت

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

دسته‌بندی‌ها و محصولات مرتبط
اشتراک‌گذاری:

نظرات کاربران