تاریخ بروز رسانی :
۲۰
مرداد
۱۴۰۳
هش (Hash) چیست؟ تابع هش چه کاربردی در بلاک چین بیت کوین دارد؟
زمان مطالعه :
10 دقیقهفهرست
اگر کمی با بازار کریپتو و ارزهای دیجیتال آشنا باشید، حتما کلماتی مانند استخراج، سختی شبکه و هش ریت را شنیدهاید؛ اما آیا با نحوه کارکرد ماینرها آشنا هستید؟ آیا میدانید که ماینرها در شبکه به دنبال یافتن چه چیزی هستند؟ آیا ارتباط سختی شبکه یک بلاک چین مانند بیت کوین با تابع هش و ماینرها را میدانید؟
اگر شما هم کنجکاو هستید که به این سوالات پاسخ دهید باید بگویم که پاسخ تمام این سوالات در یادگیری مفهوم تابع هش (Hash Function)، فرایند هشینگ (Hashing) و کاربردهای تابع هش نهفته است. در این مطلب سعی خواهیم کرد با زبانی ساده به این سوالات اساسی پاسخ دهیم، پس با ما همراه باشید.
پیشنهاد میکنیم پیش از ادامه این مطلب، برای آشنایی کامل با بیت کوین، مقاله «بیت کوین چیست؟» را مطالعه کنید
هش یا فرایند هش چیست؟
هش (Hash) یا فرایند هشینگ (Hashing) به زبان ساده به فرایندی میگویند که در آن اطلاعات یا یک رشته کاراکتر تبدیل به یک رشته کاراکتر دیگر میشود که معمولا این رشته کاراکتر کوچکتر است، احتمالا کمی گیج شدهاید، اما نگران نباشید اکنون با یک مثال مفهوم هش را بیشتر توضیح خواهم داد.
فرض کنید شما یک تصویر خاص از فردی دارید که فقط افراد کمی آن را دارند و شما قصد دارید افرادی که این تصویر را در اختیار دارند بیابید، حال چندین راهکار پیش روی شما است.
این تصویر را به دیگران نشان دهید تا افرادی که این تصویر را دارند با مقایسهکردن بیابید. این کار بسیار زمانبر و از امنیت کافی برخوردار نیست؛ زیرا تمام افراد تصویر شما را مشاهده میکنند، شاید با خود بگویید که برای افزایش سرعت بهتر است آن را در شبکههای اجتماعی به اشتراک بگذاریم، این کار امنیت بسیار پایینی خواهد داشت و افراد زیادی تصویر شما را مشاهده و آن را برای خود ذخیره خواهند کرد؛ اما راهحل چیست؟
یکی از راهحلهای موجود این است که ما تصویر مورد نظر را با یک تابع هش معروف، هش کرده و خروجی آن که یک رشته کاراکتر است را با دیگران به اشتراک بگذاریم، حال افرادی که این تصویر را دارند، این خروجی را با خروجی تابع هش تصویر خود مقایسه میکنند و اگر یکسان بود، میتوان نتیجه گرفت که هر دو فرد یک تصویر را بهعنوان ورودی به تابع دادهاند.
تابع هش (Hash Function) چیست؟
احتمالا از قسمت قبل متوجه شدهاید که برای هشکردن یک فایل یا یک رشته کاراکتر و… نیاز به یک دستگاه یا یک تابع داریم که به آن تابع یا همان الگوریتم هش میگویند، تابع هش یک تابع یکبهیک است، یعنی بهازای هر ورودی متفاوت یک خروجی یکتا دارد، به بیانی سادهتر برای هر ورودی خاص یک خروجی متفاوت تولید میکند.
هر الگوریتم هش یا پروسه هشکردن را میتوان یک تابع ریاضی دانست که شرایط زیر را دارد:
- بهازای هر ورودی خاص یک خروجی خاص تولید کند
بهعنوان مثال اگر X را وارد تابع هش کنید خروجی Y را دریافت خواهید کرد و اگر R را بهعنوان ورودی به تابع هش بدهید، D را بهعنوان خروجی دریافت میکنید و امکان این که شما یک ورودی به جز X به این تابع بدهید و Y را دریافت کنید باید نزدیک به صفر باشد.
برای مثال ما دو کلمه Pooleno و pooleno را با الگوریتم SHA256 هش کردهایم و نتیجه آن به صورت زیر درآمده است:
Pooleno: 71ed9fb2415166e9ee40a05dc2af1291b7d4b35179b25bd4a436fe5284d7c200
pooleno: 603b10caf66521a0b7260df588c111bf1b63b95f334d33d534d43ad430d8cf0d
همانطور که مشاهده میکنید دو کلمه Pooleno فقط در یک حرف بزرگ و کوچک با هم تفاوت دارند؛ اما خروجی هش آنها با هم متفاوت است، این موضوع باعث استفاده و کاربرد تابع هش در بسیاری از حوزهها مخصوصا حوزه کریپتو شده است.
- با داشتن خروجی نتوان به ورودی تابع دست پیدا کرد
در یک فرایند هشینگ با داشتن خروجی نمیتوان به ورودی دست پیدا کرد؛ یعنی اگر به Y و تابع هش دسترسی داشته باشیم، نتوانیم از طریق آن به ورودی یعنی X برسیم؛ به بیانی دیگر تابع هش یک تابع یک طرفه است.
- عموما خروجی تابع هش از تعداد کاراکترهای ثابتی تشکیل شده است
در اکثر توابع هش، هر ورودی که به آن بدهیم خروجی یک رشته کاراکتر ثابت چند بیتی است، این موضوع باعث میشود که فرایند مقایسه کردن و بررسی درستی اطلاعات را سرعت بخشد.
کاربردهای تابع هش
با توجه به ویژگیهای تابع هش از فرایند هشینگ استفادههای بسیاری میشود، از مهمترین کاربردهای هش میتوان به موارد زیر اشاره کرد:
- بررسی و مقایسه اطلاعات
همانطور که متوجه شدید، میتوان بهجای مقایسه بیت به بیت یک فایل با فایلی دیگر این دو فایل را هش کرده و هش آنها را با هم مقایسه کرد. در صورتی که یک تفاوت کوچک در این دو فایل وجود داشته باشد، هش آنها نیز متفاوت خواهد بود و این مسئله در بلاک چینها بسیار کاربرد دارد.
- رمز عبور
گاهی برای واردشدن به یک سایت نیاز دارید که حسابی ساخته و برای آن حساب، رمز عبوری بگذارید، حال اگر سایت هک شود، رمز عبور شما نیز به دست هکرها خواهد افتاد؟
خیر، در بسیاری از سایتها رمز عبور افراد بهصورت هش شده ذخیره میشود و شما زمانی که رمز را وارد میکنید، سایت این رمز را هش کرده و با هش رمز عبور شما مطابقت میدهد. در صورتی که این دو یکسان باشند، شما میتوانید وارد حساب خود شوید.، حال اگر سایت هک شود، هکرها فقط هش رمز عبور شما را دارند که نمیتوان با آن بهحساب افراد دسترسی داشت.
- افزایش امنیت
تمام دو کاربرد قبلی تابع هش باعث افزایش امنیت در فضای دیجیتال میشود.
کاربرد هش در بلاک چین چیست؟
ستون فقرات یک ارز دیجیتال، بلاک چین است. میدانیم که blockchain یک دفتر کل جهانی است که از اتصال بلوکهای جداگانه دادههای تراکنش به یکدیگر شکل میگیرد. بلاک چین فقط شامل تراکنشهای معتبر است که از تراکنشهای تقلبی و حملاتی همچون دوبار خرج کردن (Double Spending) جلوگیری میکند.
هکرها چگونه به بلاک چین حمله میکنند؟ آشنایی با مهم ترین حملات بلاک چینی
هش کردن (Hashing) در بلاک چین به معنای پردازش دادههای یک بلاک از طریق یک تابع ریاضی است که منجر به یک خروجی با طول ثابت میشود. استفاده از یک خروجی با طول ثابت امنیت را افزایش میدهد، زیرا هرکسی که سعی در رمزگشایی هش داشته باشد، نمیتواند به سادگی با نگاه کردن به طول خروجی تشخیص دهد که ورودی چقدر طولانی یا کوتاه بوده است.
هش یا فرایند هش کردن یکی از مهمترین بخشهای هر بلاک چین به حساب میآید؛ زیرا تمام گرهها و یا همان ماینرها در حال دستوپنجه نرم کردن با این تابع هستند. از هش برای بررسی و مقایسه اطلاعات موجود در بلاک و افزایش امنیت استفاده میشود.
هش در بلاک چین در دو بخش کاربرد اساسی دارد:
۱- درخت مرکل
هر بلاک دارای دو بخش مهم به اسم بدنه و سربرگ است، در بدنه، تراکنشها ثبت میشوند و علاوه بر ثبت شدن در درخت مرکل به صورتی خاص هش میشوند. این نوع ذخیره، علاوه بر کاهش حجم ذخیرهسازی باعث افزایش سرعت در بررسی اطلاعات میشود، در این مقاله قصد نداریم به بررسی درخت مرکل بهصورت تخصصی بپردازیم؛ اما باید بدانید که اطلاعات در بلاک چین بهصورت زیر ذخیره میشوند:
همانطور که در تصویر مشاهده میکنید، L1 تا L4 تراکنشهایی هستند که در بلاک ثبت شدهاند، حال هر تراکنش را بر اساس تابع هش مخصوص خود شبکه هش میکنیم، بهعنوان مثال در بیت کوین این تراکنشها با تابع SHA256 هش میشوند و در جایگاه مشخص شده قرار میگیرد، حال هر دو Hash نزدیک به هم با یکدیگر ترکیب و هش میشوند و این فرایند تا رسیدن به TOP HASH یا ریشه درخت مرکل ادامه دارد. حال شاید از خود بپرسید که هش در درخت مرکل چه فایدهای دارد؟
- بررسی سریع تراکنشها و صحت سنجی آنها
- یافتن سریع تراکنشهایی که در آنها دستکاری صورتگرفته است
۲- ساخت بلاک
حال که متوجه شدیم، تراکنشها در درخت مرکل بهصورت هش شده نیز ثبت میشوند به سراغ اصل ماجرا که تمام ماینرها در سراسر جهان برای آن در حال رقابت هستند، میرسیم.
در اکثر شبکههای بلاک چینی تعدادی از اطلاعات مهم بلاک به همراه هش بلاک قبلی هش شده و در سربرگ بلاک قرار میگیرد، این هش شدن اطلاعات با هش بلاک قبلی باعث میشود که بلاکها بهصورت زنجیر مانند به هم متصل شوند. در ادامه برای درک بهتر این موضوع به بررسی هش در بلاک چین بیت کوین خواهیم پرداخت.
کاربرد هش در بلاک چین بیت کوین ⛓
تا این بخش از مقاله متوجه شدید که در برخی از بلاک چینها مانند اتریوم و بیت کوین تراکنشها بهصورت درختی هش میشوند و تمام اطلاعات نیز هش شده و در سربرگ بلاک قرار میگیرد؛ اما در این بخش قرار است به اهمیت هش در بلاک چین بیت کوین، وظیفه هش در شبکه بیت کوین و پروسه این کار و ساخت بلاک در Bitcoin صحبت کنیم.
همانطور که بیان شد تمام تراکنشهای موجود در یک بلاک هش شده و در ریشه درخت مرکل قرار میگیرد؛ اما ماینرها علاوه بر ثبت تراکنشها به دنبال یافتن یک عدد ورودی به نام نانس (Nonce) هستند که اگر آن را با دیگر اطلاعات زیر ترکیب و هش کنند، خروجی هش کمتر از nBits است.
- هش بلاک قبلی: در هر بلاک، هش بلاک قبلی قرار دارد که با دیگر اطلاعات ترکیب و دوباره هش میشود، این کار باعث میشود، بلاکها به صورت زنجیره مانند به هم متصل شوند.
- ریشه درخت مرکل: در بخش قبل بهصورت خلاصه در مورد ریشه درخت مرکل صحبت شد، ریشه درخت مرکل نیز یکی از بخشهایی است که در ساخت هش بلاک تاثیر دارد، تا ماینرها بتوانند به راحتی تخلف در تراکنشهای ثبت شده را با بررسی هش بلاک مشخص کنند.
- ورژن اطلاعات بلاک: این بخش اطلاعاتی در مورد ورژن و قوانین بلاک چین را در خود ذخیره کرده است.
- زمان: زمان ساخت بلاک
- سختی (nBits): این عدد نشاندهنده تارگتی است که ماینر باید به آن برسد، شبکه بیت کوین حدودا هر ۲ هفته یکبار این عدد را آپدیت میکند.
- نانس (Nonce): عددی است که ماینرها به دنبال آن هستند، تمام اطلاعات بالا مشخص است و فقط نانس است که باید توسط ماینر کشف شود، ماینرها نانس را حدس زده و با دیگر اطلاعات بالا ترکیب میکنند و هش به دست آمده را با nBits مقایسه میکنند، در صورتی که هش به دست آمده از nBits کوچکتر بود، نانس مورد نظر درست است در غیر این صورت باید یک عدد دیگر را بهعنوان نانس قرار دهند، این فرایند را تا زمانی که نانس یافت شود، ادامه خواهد داشت.
این نحوه هش شدن در بلاک چین بیت کوین باعث میشود، هرگونه مغایرت در تراکنشها و زمان فقط با بررسی هش بلاک ساخته شده قابل شناسایی باشد؛ زیرا هر گونه تفاوت در این اطلاعات که ثابت هستند باعث تغییر در خروجی تابع هش میشود.
احتمالا با نحوه کار تابع هش بیت کوین، نانس، سختی شبکه و … آشنا شدید، حال شاید از خود سوالاتی در مورد سختی شبکه بیت کوین و هش ریت داشته باشید. برای درک بهتر سختی شبکه بیت کوین و ارتباط آن با تابع هش به مثال زیر دقت کنید.
فرض کنید شما یک سیستمی دارید که اعداد رندوم بین ۰ تا ۱۰۰ را تولید میکند، به نظر شما چقدر احتمال دارد که اولین عدد انتخابی توسط این دستگاه در بازه ۰ تا ۱۰۰ باشد؟ درست است، اولین عدد مطمئنا بین این بازه است، حال چقدر احتمال دارد که اولین عدد در بازه ۰ تا ۱۰ قرار گیرد؟ مطمئنا احتمال قرارگیری عدد اول در این بازه کمتر میشود و برای این که یک عدد در این بازه تولید شود باید چندین بار این فرایند انجام شود.
برای اینکه ماینرها به سرعت نتوانند نانس را بیابند و بلاک جدید به شبکه اضافه کنند و همچنین فعالیت گرههای مخرب پرهزینه شود، سختی شبکه که نشاندهنده محدوده مورد قبول برای خروجی تابع هش است در هر دوره حدودا ۲ هفتهای بهروز میشود، تا زمان ساخته شدن بلاک در شبکه بیت کوین حدوداً ۱۰ دقیقه ثابت بماند.
آیا با مفهوم هاوینگ بیت کوین آشنا هستید؟ این مقاله را از دست ندهید!
هش ریت چیست؟ ⛏
هش ریت یک معیار برای سنجش قدرت ماینرها در شبکه محسوب میشود، هش ریت (HashRate) یا هش پاور (Hash Power) برابر تعداد حدسهایی است که یک ماینر در هر یک ثانیه برای پیدا کردن نانس میزند؛ به عبارتی دیگر یک ماینر با قدرت ۱ کیلو هش بر ثانیه (۱ KH/s) میتواند در هر ثانیه هزار عدد را به عنوان نانس انتخاب و در تابع هش بیت کوین (SHA256) قرار دهد. دیگر واحدهای اندازهگیری هش ریت به شرح زیر است:
چرا هش ریت بیت کوین مهم است و تغییرات آن چه تاثیری در شبکه دارد؟
هش ریت (Hash Rate) یا قدرت هش (Hash Power)، سرعت عملکرد دستگاههای ماینینگ موجود در شبکه را برای اتمام عملیات محاسباتی نشان میدهد.
برای سرمایهگذاران، هش ریت بیت کوین معیار مهمی است، به این دلیل که نشان میدهد شبکه اثبات کار این ارز دیجیتال چقدر میتواند در برابر هکرها غیر متمرکز باشد؛ هرچه هش ریت بالاتر باشد، حمله به شبکه دشوارتر و پرهزینهتر است.
هش ریت یک معیار مهم برای ارزیابی قدرت یک شبکه بلاک چین و به ویژه امنیت آن است. کاهش ناگهانی هش ریت نیز مساوی است با کاهش امنیت شبکه! هش ریت کمتر به این معنی است که برای تأیید و افزودن تراکنشها به بلاک چین آن ارز دیجیتال، به قدرت محاسباتی کمتری نیاز است. این امر باعث میشود شبکه کمتر غیرمتمرکز شود، زیرا ماینرهای کمتری در شبکه حضور دارند.
به طور کلی، هر چه ماینرهای بیشتری در یک شبکه شرکت کنند، هش ریت آن شبکه بیشتر میشود، زیرا ماینرهای بیشتری برای دریافت پاداش با هم رقابت میکنند. هرچه استخراج کنندگان کمتر باشند، هش ریت شبکه نیز کمتر خواهد بود.
چه والتهایی برای نگهداری و ذخیره BTC مناسب هستند؟ در مقاله «کیف پول بیت کوین» به این پرسش پاسخ دادهایم
چه چیزی باعث تغییر هش ریت میشود؟
فاکتورهای زیادی میتوانند روی این شاخص تأثیر بگذارند. هش ریت بالا نشان میدهد که رقابت بیشتری وجود دارد، اما این رقابت هنوز ارزش پاداش آن را دارد. به عنوان مثال، در حال حاضر هش ریت بیت کوین به اگزاهش در ثانیه (۱ اگزاهش = ۱ میلیون تراهش) رسیده است، اما ماینرها همچنان با مشاهده قیمت بیت کوین، برای مشارکت در فرایند ماینینگ انگیزه دارند.
ماینرها معمولاً با ارزیابی هزینه استخراج یک رمز ارز در مقابل پاداش، تصمیم میگیرند که کدام ارز دیجیتال را استخراج کنند. برای مثال بیت کوین را در نظر بگیرید. هر چند هفته یکبار، پروتکل این رمز ارز به طور خودکار میزان سختی استخراج را بر اساس هش ریت فعلی تنظیم میکند. وقتی هش ریت بالا باشد، سختی استخراج زیاد است. هنگامی که هش ریت افت میکند، سختی استخراج نیز به همراه آن کاهش مییابد.
مقاله استاندارد BRC-20 چیست را حتما مطالعه کنید.
چگونه میتوانیم هش ریت ارزهای دیجیتال را ردیابی کنیم؟
وب سایتهای زیادی مانند BitInfoCharts هستند که هش ریت بیت کوین و سایر رمز ارزهای اثبات کار را ردیابی میکنند.
چگونه هش ریت روزانه شبکه بیت کوین را اندازهگیری کنیم؟
هش ریت بیت کوین نشاندهنده قدرت محاسباتی کلی گرهها در سراسر جهان است که به استخراج بیت کوین کمک میکنند. با این حال تعیین آن دشوار است، زیرا دستگاههای ماینینگ قابل شناسایی نیستند و تنها پس از یافتن یک بلاک است که با شبکه ارتباط برقرار میکنند.
با این حال، نرخ هش روزانه با مقایسه بلاکهای یافت شده در ۲۴ ساعت گذشته با عدد ۱۴۴، که نرخ مورد انتظار برای یافتن یک بلاک است، تخمین زده میشود. طبق الگوریتم، سرعت استخراج باید ثابت بماند (۶۰۰ ثانیه). به این ترتیب، فرمول قدرت هش بیت کوین به صورت زیر در میآیدل:
۶۰۰ / کار × (تعداد مورد انتظار بلوک /بلوکهای پیدا شده در ۲۴ ساعت) = قدرت هش
هرچه نرخ هش بیت کوین بالاتر باشد، سختی استخراج بیشتر میشود. تنظیم سختی برای امنیت ضروری است. برای جلوگیری از تورم، لازم است همان سرعت استخراج ارزهای دیجیتال حفظ شود. در غیر این صورت، ماینرها بیت کوینهای بیشتری را سریعتر تولید میکنند و این ارز دیجیتال ارزش خود را از دست میدهد.
فرق رمزنگاری با هش 🔑
یکی از سوالات اساسی که افراد از خود میپرسند، تفاوت رمزنگاری با هش است. اصلا این دو مورد با هم تفاوتی دارند یا هر دو نشان دهنده یک مفهوم مشابه هستند؟
در رمزنگاری (Encryption) یک ورودی به یک خروجی غیرقابل خوانش و غیر قابل استفاده تبدیل میشود که فقط فردی که کلید بازگشایی این فایل رمزنگاری شده را دارد، توانایی تبدیل آن به فایل ورودی را دارد؛ به عبارت سادهتر ما در فرایند رمزنگاری یک ورودی را به یک مجموعه کاراکتر تبدیل میکنیم که فقط برای افرادی خاص (کسانی که کلید بازگشایی را دارند) قابل بازگردانی است؛ اما در تابع هش هیچ فردی نمیتواند، با داشتن خروجی و تابع هش به ورودی دست پیدا کند.
همانطور که در تصویر بالا نیز مشخص است در فرایند Encryption ورودی توسط یک کلید رمزنگاری شده و توسط یک کلید این رمز باز و شما به فایل اصلی دسترسی خواهید داشت، اکنون میتوان بر اساس نوع کلیدها، رمزنگاری را به دو نوع رمزنگاری متقارن و رمزنگاری نامتقارن تقسیمبندی کرد.
رمزنگاری متقارن: در این نوع رمزنگاری با همان کلیدی که Encryption (رمزنگاری) انجام میشود، Decryption (رمزگشایی) نیز انجام میشود.
رمزنگاری نامتقارن: در این نوع رمزنگاری با یک کلید Encryption (رمزنگاری) انجام و با کلیدی دیگر Decryption (رمزگشایی) انجام میشود که این عمل باعث افزایش امنیت خواهد شد.
به نظر شما از رمزنگاری در کدام بخش بلاک چین و ارزهای دیجیتال استفاده شده است؟ (راهنمایی = در کدام بخش از دو کلید استفاده میکنیم😉)
انواع تابع هش در بلاک چین
تابع هش در کریپتوگرافی یک بخش مهم و اساسی محسوب میشود، بهطوری که بسیاری از بلاک چینهای موجود از توابع هش گوناگونی استفاده میکنند. از مهمترین توابع هش در بلاک چینهای میتوان به موارد زیر اشاره کرد.
- تابع هش SHA–۲۵۶
این تابع هش که در بیت کوین و بیت کوین کش مورد استفاده قرار گرفته است، SHA–۲۵۶ یک عضو از خانواده SHA محسوب میشود که دیگر اعضای این خانواده میتوان به SHA-0، SHA-1 و SHA-2 اشاره کرد.
- تابع هش Ethash
تابع Ethash که در اتریوم و اتریوم کلاسیک مورد استفاده قرار گرفته است.
- تابع هش Scrypt
این تابع هش در بلاک چینهایی مانند دوج کوین، لایت کوین و نئو مورد استفاده قرار گرفته است.
- تابع هش CryptoNight
از مهمترین پروژههایی که از این تابع هش استفاده میکنند، میتوان به بایت کوین (Bytecoin)، مونرو (Monero)، الکترونیوم، HYCON و Dero اشاره کرد.
آخرین برآوردها از هش ریت بیت کوین و نمودار آن را میتوانید در وب سایت Blockchain.com پیدا کنید.
جمعبندی
تابع هش و هشینگ (Hashing) باعث به وجود آمدن انقلابی در امنیت سیستمهای دیجیتال شدهاند، علاوه بر این دستاورد میتوان هش را یکی از پایههای اصلی در صنعت کریپتو و بلاک چین دانست؛ زیرا اگر تابع هش وجود نداشت، بیت کوین و دیگر بلاک چینها نیز وجود خارجی نداشتند.
در این مقاله به بررسی مفهوم هش، کاربرد آن در بلاک چین و بسیاری موارد دیگر پرداختیم. امیدواریم که از این مقاله استفاده لازم را برده باشید.
چنانچه به مشاوره رایگان علاقهمندید، پرسشها و نظرات خود را درباره این مقاله یا موضوعات مختلف حوزه بلاکچین و ارزهای دیجیتال مطرح کنید. برای پاسخگویی آمادهایم!
نظر بدهید
1
سلام مطلب عالی و جالبی بود
اگر nbits در بیت کوین هر دو هفته یکبار آپدیت نمیشد پادشاه رمز ارزها هک میشد ولی همچنان بدون رقیب و بدون هک این شبکه هستش