هش چیست؟ | هش تراکنش، SHA-256 و ۶ ویژگی با تصویر ۱۴۰۵

پاسخ کوتاه
هش چیست؟

هش رشته‌ای با طول ثابت است که یک تابع ریاضی مثل SHA-256 از روی هر داده‌ای می‌سازد. ورودی یکسان همیشه همان خروجی را می‌دهد و تغییر یک حرف، خروجی را کاملا عوض می‌کند. در ارز دیجیتال شناسه هر تراکنش (TxID)، شناسه هر بلاک و آدرس کیف پول با هش ساخته می‌شوند و از روی خروجی نمی‌شود به ورودی رسید.

خلاصه این مطلب با هوش مصنوعیلینک مطلب با یک پرسش آماده برای دستیار انتخابی شما باز می‌شود
هش چیست؟ | هش تراکنش، SHA-256 و ۶ ویژگی با تصویر ۱۴۰۵

هش (Hash) رشته‌ای با طول ثابت است که یک تابع ریاضی از روی هر داده‌ای می‌سازد؛ مثل اثر انگشت آن داده. در ارز دیجیتال، شناسه هر تراکنش، شناسه هر بلاک و حتی آدرس کیف پول شما از همین سازوکار بیرون می‌آید. این درس از اسمارت اف ایکس با چند آزمایش واقعی نشان می‌دهد این رشته چطور ساخته می‌شود، شناسه تراکنش یا TxID را کجا پیدا کنید و چرا تغییر یک بلاک قدیمی عملا ناممکن است.

همین حالا درباره‌ی این مطلب گفتگو کنیددر حال خواندن…ورود به گفتگو

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

فرض کنید یک دستگاه دارید که هر چیزی در آن بریزید، یک کد ۶۴ نویسه‌ای تحویل می‌دهد. یک کلمه بدهید، یک کد. یک کتاب هزار صفحه‌ای بدهید، باز هم یک کد با همان طول. اگر فردا همان کتاب را دوباره بدهید، دقیقا همان کد قبلی برمی‌گردد. ولی اگر فقط یک ویرگول کتاب جابه‌جا شده باشد، کدی کاملا متفاوت می‌گیرید. اسم این دستگاه «تابع هش» است و اسم کدی که بیرون می‌دهد «هش» یا «چکیده» (Digest).

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

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

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

هش SHA-256 عبارت SmartFX Academy در ابزار آنلاین با خروجی ۶۴ نویسه‌ای

خروجی SHA-256 یک عبارت کوتاه در ابزار آنلاین؛ تصویر از ابزار SHA-256، مهر ۱۴۰۵

تابع هش چطور کار می‌کند؛ از ورودی تا خروجی ۶۴ نویسه‌ای

این تابع یک دستورالعمل ریاضی بدون کلید است و هر کسی در هر جای دنیا می‌تواند آن را اجرا کند. مراحل کار SHA-256، الگوریتمی که بیت کوین به کار می‌برد، به زبان ساده این‌طور است:

  1. داده ورودی به عدد دودویی (صفر و یک) تبدیل می‌شود.
  2. چند بیت به انتهای آن اضافه می‌شود تا طولش مضرب ۵۱۲ بیت شود. به این کار «پر کردن» (Padding) می‌گویند.
  3. داده به بلوک‌های ۵۱۲ بیتی شکسته می‌شود.
  4. روی هر بلوک ۶۴ دور جابه‌جایی، چرخش و ترکیب بیت‌ها انجام می‌شود و نتیجه هر بلوک با بلوک بعدی قاطی می‌شود.
  5. در پایان، ۸ عدد ۳۲ بیتی کنار هم قرار می‌گیرند و یک خروجی ۲۵۶ بیتی می‌سازند که به شکل ۶۴ نویسه هگز (اعداد ۰ تا ۹ و حروف a تا f) نمایش داده می‌شود.

نکته اصلی در مرحله چهارم است. هر بیت ورودی در دورهای متوالی روی همه بیت‌های خروجی اثر می‌گذارد، به همین دلیل نمی‌شود از روی خروجی حدس زد کدام بخش ورودی چه بوده است.

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

مسیر داده در تابع SHA-256؛ طرح از اسمارت اف ایکس، مهر ۱۴۰۵

یک عدد برای حس کردن اندازه: SHA-256 حدود ۱٫۱۶ × ۱۰ به توان ۷۷ خروجی ممکن دارد. تعداد اتم‌های کره زمین را حدود ۱۰ به توان ۵۰ تخمین می‌زنند. یعنی فضای خروجی به قدری بزرگ است که دو داده متفاوت در عمل هیچ‌وقت به یک چکیده نمی‌رسند.

شش ویژگی تابع هش رمزنگاری که بلاکچین به آن تکیه دارد

هر تابعی که خروجی کوتاه بدهد، به درد بلاکچین نمی‌خورد. تابعی که در امنیت به کار می‌رود باید شش ویژگی داشته باشد و به آن «تابع هش رمزنگاری» (Cryptographic Hash Function) می‌گویند.

  • قطعی بودن: یک ورودی همیشه و روی هر دستگاهی همان خروجی را می‌دهد. بدون این ویژگی، دو نود شبکه هیچ‌وقت سر یک بلاک توافق نمی‌کردند.
  • طول ثابت: خروجی SHA-256 همیشه ۲۵۶ بیت است، چه ورودی یک حرف باشد چه یک فیلم چهار گیگابایتی.
  • سرعت: ساختن چکیده یک تراکنش کسری از میلی‌ثانیه طول می‌کشد. هر نود باید هزاران تراکنش را در ثانیه وارسی کند.
  • یک‌طرفه بودن: از روی خروجی نمی‌توان به ورودی رسید. تنها راه، حدس زدن ورودی و امتحان کردن آن است.
  • مقاومت در برابر برخورد: پیدا کردن دو ورودی متفاوت با خروجی یکسان باید عملا ناممکن باشد. به این اتفاق «برخورد» (Collision) می‌گویند.
  • اثر بهمنی: تغییر یک بیت در ورودی باید حدود نیمی از بیت‌های خروجی را عوض کند.

شش ویژگی تابع هش رمزنگاری شامل قطعی بودن و یک‌طرفه بودن و اثر بهمنی

شش ویژگی لازم برای یک تابع امن؛ طرح از اسمارت اف ایکس، مهر ۱۴۰۵

آزمایش اثر بهمنی با یک حرف

برای دیدن اثر بهمنی، همان عبارت را یک بار دیگر وارد کردیم و فقط حرف A را کوچک نوشتیم: SmartFX academy. خروجی تازه 13f7f2730f05a1f92f3343b4b6a0bc55b615922a2ef8168e3f6374cbcdce9290 شد. دو رشته را بیت به بیت مقایسه کردیم: ۱۴۱ بیت از ۲۵۶ بیت فرق دارد، یعنی ۵۵ درصد. از ۶۴ نویسه هگز هم فقط ۵ نویسه به‌طور اتفاقی در همان جای قبلی ماندند.

اثر بهمنی در هش؛ تغییر یک حرف در ورودی خروجی SHA-256 را کاملا عوض می‌کند

دو ورودی با یک حرف تفاوت و دو خروجی بی‌شباهت؛ تصویر از ابزار SHA-256، مهر ۱۴۰۵

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

الگوریتم‌های هش در بلاکچین: SHA-256، Keccak-256 و RIPEMD-160

هر بلاکچین الگوریتم خودش را انتخاب کرده است. بیت کوین برای بلاک و تراکنش SHA-256 را دو بار پشت سر هم اجرا می‌کند (به آن Double SHA-256 می‌گویند) و برای کوتاه کردن آدرس‌ها RIPEMD-160 را هم به کار می‌برد. اتریوم Keccak-256 را برداشت. استاندارد رسمی SHA-256 را مؤسسه ملی استاندارد و فناوری آمریکا (NIST) در سند FIPS 180-4 منتشر کرده است.

صفحه سند رسمی FIPS 180-4 که الگوریتم SHA-256 را تعریف می‌کند

صفحه استاندارد Secure Hash Standard؛ تصویر از سایت NIST، مهر ۱۴۰۵

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

الگوریتم طول خروجی کجا به کار می‌رود وضعیت امنیتی
MD5 ۱۲۸ بیت چک‌سام فایل در سیستم‌های قدیمی شکسته؛ اولین برخورد سال ۲۰۰۴ منتشر شد
SHA-1 ۱۶۰ بیت نسخه‌های قدیمی گواهی امنیتی سایت‌ها و Git شکسته؛ برخورد عملی سال ۲۰۱۷ ساخته شد
SHA-256 ۲۵۶ بیت بلاک و تراکنش بیت کوین، استخراج امن؛ تا امروز هیچ برخوردی پیدا نشده
RIPEMD-160 ۱۶۰ بیت کوتاه کردن کلید عمومی در آدرس بیت کوین امن برای این کاربرد
Keccak-256 ۲۵۶ بیت آدرس، تراکنش و قراردادهای اتریوم امن
SHA3-256 ۲۵۶ بیت استاندارد رسمی FIPS 202 امن

چرا Keccak-256 اتریوم با SHA3-256 فرق دارد

Keccak برنده مسابقه‌ای بود که NIST برای انتخاب نسل سوم SHA برگزار کرد. اتریوم در سال ۲۰۱۴ نسخه اولیه را برداشت. NIST در نسخه نهایی که اوت ۲۰۱۵ با نام FIPS 202 منتشر شد، بیت‌های پرکننده را کمی تغییر داد. نتیجه این است که دو الگوریتم با نام تقریبا یکسان، دو خروجی متفاوت می‌دهند.

خروجی Keccak-256 عبارت SmartFX Academy در ابزار آنلاین

همان ورودی با الگوریتم اتریوم؛ تصویر از ابزار Keccak-256، مهر ۱۴۰۵

آزمایش کردیم: عبارت SmartFX Academy با Keccak-256 خروجی 1abec6618562377227f800ebd6e405dc6787844d2519ffcd5f65257557df84ad می‌دهد و با SHA3-256 خروجی a7040723e8214b08a07cf7f74378853c290bf51e424f922f1f70e88d646360fc. اگر برنامه‌نویس هستید و با کتابخانه‌ای کار می‌کنید که فقط SHA3 دارد، آدرس اتریوم اشتباه درمی‌آید.

صفحه سند رسمی FIPS 202 برای استاندارد SHA-3 بر پایه Keccak

سند رسمی استاندارد SHA-3؛ تصویر از سایت NIST، مهر ۱۴۰۵

هش تراکنش یا TxID چیست

هر بار که ارزی را از کیف پول یا صرافی برداشت می‌کنید، شبکه برای آن تراکنش یک شناسه یکتا می‌سازد. این شناسه را هش تراکنش می‌نامند و در رابط‌های انگلیسی با نام‌های TxID، Transaction ID، Txn Hash یا Transaction Hash می‌بینید. همه این‌ها یک چیزند.

شناسه از خود محتوای تراکنش ساخته می‌شود: اطلاعات فرستنده و گیرنده و مبلغ و کارمزد به همراه امضای دیجیتال. در بیت کوین داده تراکنش دو بار از SHA-256 رد می‌شود. پس شناسه تراکنش با محتوای آن گره خورده است و نمی‌شود محتوا را تغییر داد و شناسه را ثابت نگه داشت. نکته دیگر اینکه بلاک اکسپلورر بیت کوین بایت‌های این شناسه را به ترتیب برعکس نشان می‌دهد؛ این یک قرارداد نمایشی قدیمی است و در کار روزمره اهمیتی ندارد.

تصویر زیر یکی از معروف‌ترین تراکنش‌های تاریخ بیت کوین را نشان می‌دهد: پرداخت ۱۰ هزار بیت کوین برای دو پیتزا در ۲۲ مه ۲۰۱۰. رشته آبی‌رنگ جلوی کلمه Transaction همان TxID است.

هش تراکنش بیت کوین یا TxID در صفحه تراکنش بلاک اکسپلورر mempool

TxID تراکنش پیتزای ۲۰۱۰؛ تصویر از mempool.space، مهر ۱۴۰۵

در اتریوم و شبکه‌های سازگار با آن، شناسه با 0x شروع می‌شود. تصویر بعدی یکی از اولین تراکنش‌های اتریوم را در بلاک ۴۶۱۴۷ نشان می‌دهد که مرداد ۱۳۹۴ ثبت شد.

Transaction Hash یک تراکنش اتریوم در Etherscan با پیشوند 0x

شناسه تراکنش در بلاک ۴۶۱۴۷ اتریوم؛ تصویر از Etherscan، مهر ۱۴۰۵

هش تراکنش در هر شبکه چند رقمی است

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

شبکه قالب شناسه تراکنش طول نمونه کاوشگر
بیت کوین هگز بدون پیشوند ۶۴ نویسه mempool.space
اتریوم (ERC20) 0x و بعد هگز ۶۶ نویسه با 0x etherscan.io
بی ان بی اسمارت چین (BEP20) 0x و بعد هگز ۶۶ نویسه با 0x bscscan.com
ترون (TRC20) هگز بدون پیشوند ۶۴ نویسه tronscan.org
سولانا امضای تراکنش با الفبای Base58 حدود ۸۷ تا ۸۸ نویسه solscan.io

پیدا کردن و پیگیری هش تراکنش در بلاک اکسپلورر

بلاک اکسپلورر (Block Explorer) یا کاوشگر بلاکچین، موتور جست‌وجوی عمومی هر بلاکچین است. هر کسی بدون ثبت نام می‌تواند در آن ببیند یک تراکنش کی ثبت شد، چند تایید گرفت و چقدر کارمزد داد. توضیح کامل فیلدهای آن در درس بلاک اکسپلورر و پیگیری واریز آمده است. روال کوتاه پیگیری این است:

گام ۱: شناسه را از تاریخچه برداشت کپی کنید

در کیف پول یا صرافی، بخش تاریخچه یا History را باز کنید و روی تراکنش برداشت بزنید. فیلدی با نام TxID یا Txn Hash کنار آیکن کپی دیده می‌شود. اگر وضعیت تراکنش هنوز «در حال پردازش» است، شناسه ساخته نشده و باید چند دقیقه صبر کنید.

گام ۲: کاوشگر همان شبکه را باز کنید

تتر روی ترون را باید در کاوشگر ترون جست‌وجو کرد و تتر روی اتریوم را در Etherscan. اشتباه گرفتن شبکه رایج‌ترین دلیل پیام «تراکنش پیدا نشد» است. اگر مطمئن نیستید با کدام شبکه فرستاده‌اید، درس شبکه انتقال را ببینید.

گام ۳: شناسه را در کادر جست‌وجو بچسبانید

صفحه تراکنش باز می‌شود. سه فیلد را نگاه کنید: وضعیت (Success یا Confirmed)، تعداد تایید یا Confirmations، و آدرس گیرنده. تصویر زیر یک انتقال ۱۰۰ تتری روی شبکه ترون است که چند دقیقه پیش از گرفتن عکس انجام شده بود.

پیگیری هش تراکنش تتر روی شبکه ترون در کاوشگر با وضعیت تاییدشده

یک تراکنش تتر روی ترون با ۲۷ تایید؛ تصویر از کاوشگر OKLink، مهر ۱۴۰۵

گام ۴: لینک صفحه را برای گیرنده بفرستید

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

هش بلاک و زنجیره شدن بلاک‌ها به هم

هر بلاک یک سربرگ (Header) ۸۰ بایتی دارد. چکیده همین سربرگ، شناسه بلاک است که به آن «هش بلاک» یا Block Hash می‌گویند. سربرگ بیت کوین شش فیلد دارد:

  • نسخه (Version)
  • شناسه بلاک قبلی (Previous Block Hash)
  • ریشه مرکل (Merkle Root): یک چکیده که همه تراکنش‌های بلاک را در خود خلاصه می‌کند
  • زمان ثبت (Timestamp)
  • هدف سختی به شکل فشرده (Bits)
  • عدد یک‌بارمصرف (Nonce) که ماینر آن را عوض می‌کند

فیلد دوم همان چیزی است که بلاک‌ها را به زنجیره تبدیل می‌کند. بلاک ۱ شناسه بلاک ۰ را در خودش دارد و بلاک ۲ شناسه بلاک ۱ را. اگر کسی تراکنشی در بلاک ۰ را تغییر دهد، ریشه مرکل آن عوض می‌شود، پس شناسه بلاک ۰ عوض می‌شود، پس پیوند بلاک ۱ می‌شکند و این زنجیره تا آخرین بلاک ادامه پیدا می‌کند. به این ویژگی «تغییرناپذیری» بلاکچین می‌گویند؛ پایه‌های آن را در درس آموزش بلاکچین ببینید.

زنجیره شدن سه بلاک اول بیت کوین با هش بلاک قبلی و nonce واقعی

شناسه و nonce واقعی بلاک‌های ۰ تا ۲ بیت کوین؛ طرح از اسمارت اف ایکس، مهر ۱۴۰۵

ریشه مرکل این‌طور ساخته می‌شود: شناسه تراکنش‌ها دوتا دوتا کنار هم قرار می‌گیرند و چکیده می‌شوند، نتیجه‌ها دوباره دوتا دوتا، تا در آخر فقط یک رشته باقی بماند. به این ساختار درخت مرکل (Merkle Tree) می‌گویند و صرافی‌ها برای گزارش اثبات ذخایر هم از آن استفاده می‌کنند.

هش بلاک پیدایش بیت کوین با nonce و ریشه مرکل در بلاک اکسپلورر

بلاک ۰ بیت کوین که ۱۴ دی ۱۳۸۷ ساخته شد؛ تصویر از mempool.space، مهر ۱۴۰۵

هش بلاک ۸۴۰۰۰۰ بیت کوین با ۱۹ صفر ابتدایی و nonce و ریشه مرکل

بلاک ۸۴۰۰۰۰، همان بلاک هاوینگ چهارم؛ تصویر از mempool.space، مهر ۱۴۰۵

در اتریوم همین فیلد با نام Parent Hash دیده می‌شود. صفحه بلاک ۴۶۱۴۷ را باز کنید و روی «Click to show more» بزنید تا شناسه بلاک، Parent Hash و Nonce نمایش داده شوند.

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

فیلد Parent Hash در بلاک ۴۶۱۴۷؛ تصویر از Etherscan، مهر ۱۴۰۵

نقش هش در اثبات کار و استخراج بیت کوین

استخراج بیت کوین یک مسابقه حدس زدن است. ماینر سربرگ بلاک را می‌سازد، یک عدد برای Nonce می‌گذارد و سربرگ را دو بار با SHA-256 چکیده می‌کند. اگر نتیجه از عدد «هدف» شبکه کوچک‌تر بود، بلاک پذیرفته می‌شود. اگر نبود، Nonce را یکی بالا می‌برد و دوباره امتحان می‌کند. چون خروجی قابل پیش‌بینی نیست، راهی جز امتحان کردن میلیاردها عدد وجود ندارد. این سازوکار اثبات کار نام دارد و ساتوشی ناکاموتو آن را در بخش چهارم وایت پیپر بیت کوین شرح داده است.

بخش چهارم وایت پیپر بیت کوین درباره اثبات کار و هش با بیت‌های صفر

بخش Proof-of-Work در صفحه ۳ وایت پیپر؛ تصویر از متن اصلی، ۲۰۰۸

«کوچک‌تر از هدف» در ظاهر یعنی شناسه بلاک با تعداد زیادی صفر شروع شود. هر صفر هگز اضافه، کار لازم را ۱۶ برابر می‌کند. مقایسه دو بلاک واقعی این را روشن می‌کند:

مشخصه بلاک ۰ (پیدایش) بلاک ۸۴۰۰۰۰ (هاوینگ چهارم)
تاریخ ۳ ژانویه ۲۰۰۹ ۲۰ آوریل ۲۰۲۴
صفرهای ابتدای شناسه بلاک ۱۰ نویسه ۱۹ نویسه
سختی شبکه ۱ حدود ۸۶٫۴ هزار میلیارد
Nonce 2083236893 3932395645
تعداد تراکنش ۱ ۳٬۰۵۰
اندازه بلاک ۲۸۵ بایت ۲٫۳۳ مگابایت

سختی هر ۲۰۱۶ بلاک (حدود دو هفته) تنظیم می‌شود تا میانگین زمان ساخت هر بلاک نزدیک ۱۰ دقیقه بماند. تعداد حدس‌هایی که همه ماینرها روی هم در هر ثانیه می‌زنند، همان Hash Rate شبکه است. این عدد و رابطه‌اش با قیمت را در درس جداگانه نرخ هش چیست توضیح داده‌ایم. برای جنبه اقتصادی ماینینگ هم درس استخراج ارز دیجیتال را ببینید.

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

هش و ساخت آدرس کیف پول

آدرسی که برای دریافت ارز به دیگران می‌دهید، نسخه خلاصه‌شده کلید عمومی شماست. در آدرس‌های قدیمی بیت کوین که با عدد ۱ شروع می‌شوند (نوع P2PKH)، مسیر ساخت این‌طور است:

  1. کلید خصوصی یک عدد تصادفی ۲۵۶ بیتی است.
  2. کلید عمومی با ضرب روی منحنی بیضوی از آن ساخته می‌شود.
  3. کلید عمومی یک بار با SHA-256 و بعد با RIPEMD-160 چکیده می‌شود. نتیجه ۲۰ بایت است.
  4. یک بایت نسخه به ابتدا و چهار بایت کنترلی به انتها اضافه می‌شود. بایت‌های کنترلی از دو بار SHA-256 روی همان داده به دست می‌آیند.
  5. کل رشته با الفبای Base58 نوشته می‌شود و آدرس نهایی به دست می‌آید.

چهار بایت کنترلی کار مهمی انجام می‌دهند. اگر یک نویسه آدرس را اشتباه تایپ کنید، کیف پول متوجه می‌شود و اجازه ارسال نمی‌دهد. در اتریوم مسیر کوتاه‌تر است: آدرس، ۲۰ بایت آخر خروجی Keccak-256 روی کلید عمومی است که با 0x نوشته می‌شود.

آدرس P2PKH بلاک پیدایش بیت کوین که از هش کلید عمومی ساخته شده است

آدرس دریافت پاداش بلاک ۰؛ تصویر از mempool.space، مهر ۱۴۰۵

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

تفاوت هش و رمزنگاری

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

جدول تفاوت هش و رمزنگاری از نظر هدف و کلید و برگشت‌پذیری

مقایسه هش و رمزنگاری؛ طرح از اسمارت اف ایکس، مهر ۱۴۰۵

سایت‌هایی که ادعا می‌کنند «کد Hash را رمزگشایی می‌کنند» در عمل یک فهرست بزرگ از ورودی‌های رایج و خروجی‌شان را از قبل ساخته‌اند و فقط جست‌وجو می‌کنند. اگر ورودی شما رمز ساده‌ای مثل 123456 باشد، پیدایش می‌کنند. برای یک کلید خصوصی ۲۵۶ بیتی یا یک تراکنش، چنین فهرستی وجود ندارد.

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

کاربردهای هش بیرون از تراکنش‌ها

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

وارسی فایل نصب کیف پول

سازندگان کیف پول‌ها و نرم‌افزارهای نود کنار هر فایل دانلود، چکیده SHA-256 آن را منتشر می‌کنند. بعد از دانلود، در ترمینال مک دستور shasum -a 256 و در ویندوز دستور certutil -hashfile را روی فایل اجرا کنید و خروجی را با عدد سایت رسمی مقایسه کنید. یک نویسه اختلاف یعنی فایل دستکاری یا خراب شده است. این همان «هش فایل» است که در جست‌وجوها می‌بینید.

نگه‌داری رمز عبور در سایت‌ها

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

امضای دیجیتال و قراردادهای هوشمند

امضا روی چکیده تراکنش زده می‌شود، چون امضا کردن یک رشته کوتاه سریع‌تر است. در اتریوم هم شناسه توابع قرارداد، چهار بایت اول Keccak-256 نام تابع است. کیف پول هنگام تایید یک تراکنش همین چهار بایت را می‌خواند تا بفهمد چه دستوری اجرا می‌شود.

اثبات بدون فاش کردن

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

خطاهای رایج درباره هش تراکنش

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

  • فرستادن آدرس به جای شناسه تراکنش: آدرس ترون با حرف T شروع می‌شود و ۳۴ نویسه دارد. شناسه تراکنش ترون ۶۴ نویسه هگز است.
  • جست‌وجو در کاوشگر شبکه اشتباه: شناسه یک تراکنش BEP20 در Etherscan پیدا نمی‌شود، با اینکه ظاهرش شبیه است.
  • عجله در اعلام گم شدن: تراکنشی که در صف انتظار (Mempool) مانده، هنوز شناسه دارد ولی تایید نگرفته است. در روزهای شلوغ بیت کوین این انتظار ممکن است چند ساعت طول بکشد. کارمزد پایین معمولا دلیل آن است و درس کارمزد گس راه‌های تنظیمش را گفته است.
  • اعتماد به اسکرین‌شات: هر کسی می‌تواند تصویر یک صفحه تراکنش را با ویرایشگر عکس بسازد. «هش تراکنش فیک» در خرید و فروش همتا به همتا یک ترفند شناخته‌شده است. فقط شناسه را بگیرید و خودتان در کاوشگر رسمی جست‌وجو کنید. الگوهای مشابه را در درس کلاهبرداری رمزارز ببینید.
  • یکی دانستن موفقیت و تایید کافی: وضعیت Success در صفحه کاوشگر یعنی تراکنش اجرا شد. صرافی مقصد ممکن است برای ثبت واریز تعداد تایید بیشتری بخواهد؛ مثلا چند تایید برای بیت کوین.
  • تکیه بر MD5 یا SHA-1: اگر نرم‌افزاری برای وارسی فایل فقط چکیده MD5 داده است، کافی نیست. هر دو الگوریتم شکسته شده‌اند و ساختن فایل تقلبی با همان چکیده عملی است.

جمع‌بندی

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

  • این تابع یک‌طرفه است و کلیدی برای برگرداندن خروجی ندارد.
  • بیت کوین SHA-256 دوگانه و RIPEMD-160 را به کار می‌برد و اتریوم Keccak-256 را.
  • شناسه تراکنش بیت کوین و ترون ۶۴ نویسه هگز است و در اتریوم و BEP20 با 0x شروع می‌شود.
  • هر بلاک شناسه بلاک قبلی را در سربرگش دارد؛ تغییر یک بلاک همه بلاک‌های بعدی را باطل می‌کند.
  • تصویر صفحه تراکنش مدرک نیست؛ شناسه را خودتان در کاوشگر همان شبکه جست‌وجو کنید.

منابع

آخرین به‌روزرسانی: ۲۹ مهر ۱۴۰۵. داده بلاک‌ها و تراکنش‌ها از کاوشگرهای عمومی و خروجی‌های SHA-256 و Keccak-256 در همین تاریخ آزمایش شده‌اند.

سوالات متداول درباره هش

۱۲ سوال
هش یعنی چه؟

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

هش تراکنش چیست؟

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

هش تراکنش را از کجا پیدا کنیم؟

در کیف پول یا صرافی، بخش تاریخچه برداشت را باز کنید و روی تراکنش بزنید. فیلدی با نام TxID یا Txn Hash کنار آیکن کپی دیده می‌شود. اگر تراکنش هنوز در حال پردازش است، شناسه ساخته نشده و باید چند دقیقه صبر کنید تا صرافی آن را به شبکه بفرستد.

هش تراکنش چند رقمی است؟

در بیت کوین و ترون شناسه تراکنش ۶۴ نویسه هگز است. در اتریوم و شبکه BEP20 همان ۶۴ نویسه با پیشوند 0x می‌آید و جمعا ۶۶ نویسه می‌شود. در سولانا شناسه یک امضای Base58 حدود ۸۸ نویسه‌ای است. طول متفاوت معمولا یعنی آدرس را به جای شناسه کپی کرده‌اید. برای نمونه آدرس ترون با حرف T شروع می‌شود و ۳۴ نویسه دارد، ولی شناسه تراکنش همان شبکه فقط از اعداد و حروف a تا f ساخته شده است.

هش یا لینک تراکنش چیست؟

برخی صرافی‌ها برای ثبت واریز، شناسه یا لینک تراکنش می‌خواهند. اولی همان رشته TxID است و لینک، آدرس صفحه همان تراکنش در بلاک اکسپلورر که شناسه در انتهای آن آمده است. هر دو به یک تراکنش اشاره می‌کنند و گیرنده با هر کدام می‌تواند واریز را تایید کند.

هش بلاک قبلی چیست؟

این فیلد در سربرگ هر بلاک قرار دارد و شناسه بلاک پیش از آن را نگه می‌دارد. همین فیلد بلاک‌ها را به زنجیره تبدیل می‌کند. اگر یک بلاک قدیمی تغییر کند، شناسه‌اش عوض می‌شود و پیوند همه بلاک‌های بعدی می‌شکند. در اتریوم این فیلد Parent Hash نام دارد. برای دیدنش کافی است صفحه یک بلاک را در کاوشگر باز کنید؛ در بیت کوین با عنوان Previous Block و در اتریوم زیر دکمه نمایش جزئیات بیشتر.

تابع هش SHA-256 چیست؟

SHA-256 عضو خانواده SHA-2 است که NIST در استاندارد FIPS 180-4 منتشر کرده است. هر ورودی را به خروجی ۲۵۶ بیتی یا ۶۴ نویسه هگز تبدیل می‌کند. بیت کوین آن را دو بار پشت سر هم برای ساخت شناسه بلاک و تراکنش و برای استخراج به کار می‌برد.

آیا می‌شود هش را برگرداند یا رمزگشایی کرد؟

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

هش تراکنش فیک چیست و چطور تشخیص دهیم؟

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

هش واریزی چیست؟

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

فرق هش با نرخ هش چیست؟

خروجی یک بار اجرای تابع روی یک داده، یک چکیده است. نرخ هش تعداد این محاسبه‌ها در هر ثانیه است و توان پردازشی ماینرها را نشان می‌دهد. این عدد برای کل شبکه بیت کوین با واحد EH/s سنجیده می‌شود و هرچه بالاتر باشد، حمله به شبکه گران‌تر است.

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

منظور چکیده SHA-256 یک فایل است که سازنده نرم‌افزار کنار لینک دانلود منتشر می‌کند. بعد از دانلود، چکیده فایل خودتان را با دستور shasum در مک یا certutil در ویندوز بگیرید و با عدد سایت رسمی مقایسه کنید. اختلاف یعنی فایل خراب یا دستکاری شده است. این کار برای کیف پول‌های دسکتاپ و نرم‌افزار نود اهمیت زیادی دارد، چون نسخه تقلبی یک کیف پول می‌تواند عبارت بازیابی شما را به سرور مهاجم بفرستد.

گفتگوی کاربران درباره این مطلب—آموزش و پرسش

سهیل فلاح
تحلیلگر بازارهای مالی و بنیان‌گذار اسمارت اف ایکس

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

آخرین بروزرسانی: ۲۹ مهر ۱۴۰۵ درباره نویسنده LinkedIn

درس‌های دیگرِ کریپتوکارنسی

نظرات و بررسی‌های کاربران

۰ نظر
پرسش و گفت‌وگو در تلگرام سوالی دارید که جواب سریع می‌خواهد؟ در کانال تلگرام ما بپرسید
هنوز نظری ثبت نشده است. اولین نفر باشید.
کانال VIP سیگنال رایگان با حد سود و حد ضرر