شاید تصورش سخت باشد اما اگر تابع هش و هشینگ (هش کردن) نبود، امکان استفاده امن از اینترنت وجود نداشت. در این پست به صورت جامع و به زبانی ساده این مفاهیم که پایههای علم رمزنگاری هستند را توضیح میدهیم.
هش کردن به چه معناست؟
هش کردن یا هشینگ به فرآیندی گفته میشود که در آن یک عملگر ریاضی به نام «تابع هش» (Hash Function)، دادههای ورودی مانند حروف و اعداد و تصویر و … را به خروجی رمزگذاری شده تبدیل میکند. به تابع هش، «تابع درهمساز» نیز گفته میشود.
به عنوان مثال یک تابع هش میتواند کلمه «سلام» را دریافت کند و به عنوان خروجی این عبارت را تحویل بدهد:
«bda1fa48345336618741fd2c4bc02809eb099c49a9b02fb5056401ab6d4dc3e6»
به خروجیِ تابع هش، «هش» (Hash) میگویند و به این عمل یعنی استفاده از تابع هش برای ایجاد هش، هش کردن یا «هشینگ» (Hashing) گفته میشود.
حالا بیایید ببینیم فرآیند هش کردن یا به اصطلاح هشینگ چگونه انجام میشود.
هر کسی که در رمزنگاری و ریاضیات تخصص داشته باشد، میتواند با استفاده از این علوم برای خود تابع هش بسازد. در حال حاضر انواع زیادی تابع هش وجود دارد و آن را به روشهای گوناگونی میتوان ساخت اما در اینجا قصد داریم به عنوان نمونه نحوه کار الگوریتم شناخته شده SHA-256 را توضیح بدهیم که پرکاربردترین تابع هش دنیاست.
توابع هش معتبر، هر مقدار ورودی را تبدیل به یک رشته متنی با طول ثابت میکنند.
همانطور که در عکس بالا هم مشاهده میکنید، برای تابع هشِ استاندارد اهمیتی ندارد که ورودی شما چقدر بزرگ یا کوچک است. خروجی همیشه دارای طول ثابت خواهد بود. این مساله زمانی اهمیت پیدا میکند که با تعداد زیادی داده و اطلاعات سر و کار داشته باشید. بنابراین، اساسا به جای رهگیری و ذخیره دادههای ورودی که میتوانند بسیار زیاد و بزرگ باشند، میتوانید تنها هش را ذخیره کنید و آن را ردیابی کنید.
همچنین استفاده از یک خروجی با طول ثابت سبب افزایش امنیت میشود، چون کسی که سعی در رمزگشایی هش داشته باشد، نمیتواند با دیدن خروجی تشخیص دهد که ورودی ما به چه صورت بوده است.
پیش از اینکه بیشتر در رابطه با هشینگ صحبت کنیم، ابتدا باید ویژگیهای مختلف توابع هش و چگونگی و نحوه اجرای آنها را توضیح دهیم.
تابع هش رمزنگاری
یک تابع هش رمزنگاری نوع خاصی از توابع هش بوده که دارای ویژگیهای منحصر به فردی است. ویژگیهای این نوع هش سبب میشود برای هویتسنجی و برقراری امنیت بسیار مناسب باشد. از این نوع تابع هش برای ساخت امضاهای دیجیتال و صحتسنجی استفاده میشود و میتوان با آن به اصطلاح «اثر انگشت دیجیتال» ساخت. یک تابع هش رمزنگاریِ امن باید ویژگیهای زیر را داشته باشد:
۱- قطعی و معین بودن
تابع هش به ازای یک ورودی مشخص، خروجی ثابت و مشخصی را به شما تحویل میدهد. فرقی نمیکند که شما چند مرتبه و یا در چه زمانی آن ورودی را به تابع هش دادهاید؛ تحت هر شرایطی خروجی ثابت است. این ویژگی از اهیمت بالایی برخوردار است، زیرا اگر هر بار هشهای مختلفی را تحویل دهد، آنگاه ردیابی و پیگیری اطلاعات غیرممکن خواهد بود.
مثلا اگر کلمه «سلام» را هزاران بار در تابع هش وارد کنیم باز هم هش این کلمه ثابت است.
۲- محاسبه سریع
تابع هش باید بتواند هش ورودی را به سرعت محاسبه کند. اگر این فرآیند به اندازه کافی سریع نباشد، سیستم ناکارآمد خواهد شد.
۳- تابع یک طرفه
توابع هش رمزنگاری، توابعی یک طرفه هستند. تابع یکطرفه به تابعی گفته میشود که برای هر ورودی، خروجی به راحتی قابل محاسبه است، اما بهدست آوردن پیشتصویرِ خروجیِ متناظر با یک ورودیِ تصادفی، غیرعملی است.
به عبارت دیگر، در یک تابع هش استاندارد، ساخت خروجی از ورودی به راحتی قابل انجام است اما پیدا کردن ورودی از خروجی بسیار دشوار است. دقت داشته باشید از واژه دشوار و غیرعملی به جای واژه «غیرممکن» استفاده شده است. به مثال زیر توجه کنید.
تصور کنید که ما اعدادی بین ۱ تا ۶ داریم و به صورت تصادفی و مخفیانه، یکی از این اعداد را هش میکنیم. خب حالا چگونه میتوانید تعیین کنید که عدد اصلی چه بود؟ از آنجایی که توابع هش همیشه معین است، هشینگ ورودیهای خاص همیشه یکسان خواهد بود. بنابراین تمام کاری که باید انجام دهید این است که هش اعداد ۱ تا ۶ را با هشی که ساخته شده است، مقایسه کنید و به این ترتیب عدد اصلی را بیابید.
اما این سازوکار زمانی امکانپذیر است که تعداد دادههای شما کم باشد. اگر با حجم عظیمی از اعداد سروکار داشته باشید، آنگاه چه خواهید کرد؟
فرض کنید شما با یک هش ۱۲۸ بیتی سر و کار دارید. تنها راه پیدا کردن داده ورودی اصلی استفاده از روش «جستجوی جامع» است. جستجوی جامع که به آن جستجوی خام و بیخردانه (brute-force method) نیز گفته میشود، اساسا به این معنی است که شما باید همینطور دادهها را امتحان کرده و آن را با خروجی مقایسه کنید و این مراحل را تا جایی که هش ورودی و هش هدف با یکدیگر تطابق پیدا کنند، ادامه دهید.
خب اگر از این روش استفاده کنید چه اتفاقی میافتد؟
- بهترین حالت ممکن: شما در اولین تلاش خود، جواب را پیدا کنید. برای اینکه این اتفاق بیافتد به معنای واقعی کلمه باید خوششانسترین فرد در تمام هستی باشید. احتمال رخ دادن چنین اتفاقی تقریبا به صفر میل میکند.
- بدترین حالت ممکن: شما پاسخ را در سعی و خطای دفعه (۱-۱۲۸)^۲ام بیابید. در واقع یعنی در آخرین شانس خود جواب را پیدا کنید.
- حالت میانگین: جواب را جایی در آن وسطها پیدا کنید. بنابراین پس از ۱۲۷^۲ = ۲/(۱۲۸)^۲ بار. برای اینکه درک واضحی از این عدد داشته باشید، باید بدانید که ۱۲۷^۲برابر است با ۳۸^۱۰× ۱.۷ و پیدا کردن عدد از بین این همه احتمال با کامپیوترهای امروزی احتمالا هزاران سال زمان خواهد برد.
بنابراین همانطور که پیشتر نیز عنوان شد، یافتن پیشتصویرِ خروجیِ متناظر با یک ورودیِ تصادفی با استفاده از حدس دادهها امکانپذیر است اما بسیار بسیار زمانبر خواهد بود به طوری که هیچ توجیهی برای این کار وجود ندارد.
۴- هر تغییر در ورودی، هش را به طور کامل تغییر میدهد
حتی اگر تغییری بسیار کوچک در داده ورودی ایجاد کنید، بازتاب این تغییر کوچک در هش بسیار قابل توجه خواهد بود.
همانطور که در تصویر بالا مشاهده میکنید، حتی اگر یک کاراکتر را تغییر دهید هش به طور کلی تغییر میکند. این عملکرد بسیار حائز اهمیت است، چراکه در صحت کلمات عبور و بسیاری از دادههای حیاتی از آن استفاده میشود.
زمانی که شما در سایتی مثل فیسبوک کلمه عبور خود را وارد میکنید، سیستم به طور خودکار هشِ کلمه عبور شما را با هش موجود در پایگاه داده تطبیق میدهد. بنابراین اگر کلمه عبور ورودی شما کوچکترین تغییری نسبت به کلمه عبور اصلی کند، هش آن نیز تغییر میکند و با هش ثبت شده منطبق نخواهد بود.
همچنین در بحث ارزهای دیجیتال، این ویژگی باعث برقراری یکی از مهمترین اصلهای بلاک چین یعنی «تغییرناپذیری» میشود که در ادامه بیشتر در مورد آن میخوانید.
۵- مقاوم در برابر تصادم
با توجه به اینکه A و B دو ورودی متفاوت تابع هش هستند و (H(A و (H(B نیز به ترتیب هشهای متناظر با آنها، احتمال اینکه این دو خروجی با یکدیگر یکسان باشند عملا غیرممکن است. این بدان معناست که هر ورودی، هش منحصر به فرد خود را دارد.
نمونههایی از توابع هش
الگوریتمهای هش زیادی برای رمزنگاری داده وجود دارند. در ادامه به چند مورد از شناختهشدهترین و پرکاربردترین آنها اشاره خواهد شد.
MD5
الگوریتم هش MD که مخفف عبارت «Message Digest» به معنی «خلاصه پیام» است، در سال ۱۹۹۱ توسط رونالد ریوِست و به عنوان جایگزینی برای تابع هش پیشین این خانواده یعنی MD4 طراحی شد. الگوریتم MD5، تابع هشی است که به صورت گسترده مورد استفاده قرار میگیرد و هش ۱۲۸ بیتی تولید میکند.
اگر چه MD5 با هدف اینکه به عنوان تابع رمزنگاری مورد استفاده قرار گیرد طراحی و ایجاد شد، اما از مشکلات زیادی برخوردار است. همین باعث شد که کمتر به عنوان تابع هش از آن استفاده شود. امروزه از این الگوریتم به عنوان چکسام برای بررسی درستی و یکپارچگی دادهها در برابر دستکاری ناخواسته استفاده میشود.
SHA
الگوریتم هش ایمن (Secure Hash Algorithm) که به اختصار آن را SHA مینامند، مجموعهای از الگوریتمهاست که توسط موسسه ملی استاندارد و فناوری (NIST) ایالات متحده و دیگر ارگانهای امنیتی ایجاد شد و توسعه یافت. SHA-0 اولین الگوریتم از خانواده SHA است که در سال ۱۹۹۳ توسعه پیدا کرد. اما مدتی پس از انتشار به دلیل نقص قابل توجهی که در آن کشف شد، جای خود را به نسخهی جدیدتر و اصلاحشدهی SHA-1 داد.
SHA-1 یک تابع هش ۱۶۰ بیتی است که به الگوریتم MD5 شباهت دارد. از طرفی دیگر الگوریتم SHA-1 شباهت بسیار زیادی به SHA-0 نیز دارد ولی در اصل ایرادهایی اساسی که در نسخه ۰ وجود داشته و سبب ضعف این الگوریتم شده بود را برطرف نمود. این الگوریتم توسط آژانس امنیت ملی ایالات متحده (NSA) و با هدف اینکه بخشی از الگوریتم امضای دیجیتال باشد طراحی شد. در سال ۲۰۰۵ رخنههای امنیتی در این الگوریتم تشخیص داده شد، که نشان از نفوذپذیری احتمالی آن داشت. از آن زمان بود که نیاز به یک الگوریتم بهتر در این حوزه احساس شد.
الگوریتم هش ایمن بعدی، SHA-2، متشکل از ۶ تابع هش با مقادیر هش متفاوت ۲۲۴، ۲۵۶، ۳۸۴ و ۵۱۲ بیتی است که نامهای آنها نیز با توجه به مقادیر هش انتخاب شده است؛ SHA-224، SHA-256، SHA-384، SHA-512، SHA-512/224 و SHA-512/256. این الگوریتمها در طول با یکدیگر متفاوتند.
الگوریتم شناختهشدهی SHA-256 در بلاک چینِ بیت کوین هم استفاده میشود. علاوه بر این، از این الگوریتم در TLS ،SSL ، PGP، SSH، توسعه چندمنظوره پست الکترونیک اینترنت/امن و IPsec یا همان ایمنسازی پروتکل اینترنت استفاده میشود.
آخرین عضو از خانواده الگوریتم هش ایمن، SHA-3 است که در سال ۲۰۱۵ توسط NIST منتشر شد. این الگوریتم در سال ۲۰۱۲ در جریان رقابت و مسابقهای عمومی در رابطه با طراحی الگوریتمی جدید به عنوان برترین الگوریتم برگزیده شد. SHA-3 در واقع زیرمجموعهای از خانواده گستردهتری به نام Keccak است.
RIPEMD
RIPEMD که مخفف عبارت «RACE Integrity Primitives Evaluation Message Digest» است، همانند الگوریتم SHA مجموعهای از توابع هش است که در بلژیک و توسط گروه تحقیقاتی COSIC در سال ۱۹۹۶ توسعه یافت. آنها این مجموعه الگوریتم را در واکنش به ضعف امنیتی که در RIPEMD مشاهده شد، طراحی کردند. در طراحی این الگوریتم از اصول به کار رفته در MD4 استفاده شده است و عملکردی مشابه با SHA-1 دارد.
طول هش توابع این خانواده متفاوت است و دارای مقادیر ۱۲۸، ۱۶۰، ۲۵۶ و ۳۲۰ بیتی است. تاکنون حمله موفقی به RIPEMD-160 گزارش نشده است. نسخه ۲۵۶ و ۳۲۰ بیتی این توابع نیز سطح امنیتی بالاتری ندارند، بلکه تنها امکان بروز تصادم را از بین میبرند.
Whirlpool
ویرپول، یکی دیگر از توابع هش در دنیای رمزنگاری است. این الگوریتم برای اولین بار در سال ۲۰۰۰ و توسط وینسنت ریمن و پائولو بارتو طراحی شده است. ویرپول بر مبنای نسخه اصلاح شدهی استاندارد رمزنگاری پیشرفته (AES) ساخته شده است.
این تابع هش، هر پیامی با طول کمتر از ۲۲۵۶ بایت را دریافت و هشی با اندازه ۵۱۲ بیت (۶۴ بایت) تولید میکند. هش ۵۱۲ بیتی الگوریتم ویرپول به صورت اعداد ۱۲۸ رقمی نمایش داده میشود.
الگوریتم ویرپول از سال ۲۰۰۰ تاکنون، ۲ بار بازبینی شده است. در اولین بازبینی در سال ۲۰۰۱، S-box را تغییر دادند تا پیادهسازی این الگوریتم بر روی سختافزار آسانتر شود. در دومین بازبینی (۲۰۰۳)، نقصی در ماتریس انتشار که سبب میشد تا امنیت روش پایینتر از آنچه از آن انتظار میرفت باشد، پیدا و برطرف شد. الگوریتم اولیه و اصلی را Whirlpool-0، بازبینی اول Whirlpool-T و نسخه نهایی را Whirlpool نام دارند.
Blake
بلیک یکی از الگوریتمهایی است که در رقابت توابع هشی که از جانب موسسه ملی استاندارد و فناوری ایالات متحده (NIST) با هدف انتخاب بهترین تابع هش برای توسعه SHA-3 برگزار شده بود، در بین ۵ الگوریتم برگزیده قرار داشت. این رقابت از سال ۲۰۰۷ آغاز شد و در نهایت در سال ۲۰۱۲ با اعلام Keccak به عنوان برنده به طور رسمی به کار خود پایان داد.
همانند SHA-2، بلیک نیز دارای ۲ نوع الگوریتم متفاوت است. یکی از کلمات ۳۲ بیتی استفاده میکند و طول هش محاسبهشدهی آن حداکثر ۲۵۶ بیت است و دیگری از کلمات ۶۴ بیتی استفاده میکند با طول هش ۵۱۲ بیت.
اما شناختهشدهترین عضو خانواده بلیک، Blake2 است که در سال ۲۰۱۲ منتشر شد. هدف از طراحی این الگوریتم معرفی جایگزینی برای الگوریتمهای پرکاربرد اما آسیبپذیر MD5 و SHA-1 در برنامههایی که نیازمند کارایی بالایی بودند بود.
Blake2 خود به دو زیرگروه Blake2b و Blake2s تقسیم میشود. گفته میشود Blake2 از MD5، SHA-1، SHA-2 و SHA-3 سریعتر است و از لحاظ امنیت نیز با SHA-3، یعنی آخرین نسخه الگوریتم هش ایمن برابری میکند.
هشینگ در ارزهای دیجیتال
ارزهای دیجیتال برای حفظ بقا و امنیت خود تا حد زیادی به هشینگ وابسته هستند. چرا که اکثر عملیات انجام شده در بلاک چین آنها بر مبنای هشینگ اطلاعات به منظور حفظ امنیت آنها صورت میگیرد. در ادامه به نقش هشینگ در ارزهای دیجیتال در صه بخش مهم میپردازیم.
هویت سنجی و امضای دیجیتال
امضای دیجیتال یک مکانیزم رمزنگاری است که برای تایید صحت و اعتبارسنجی دادههای دیجیتال مورد استفاده قرار میگیرد.
به بیانی دیگر، امضای دیجیتال را میتوان به عنوان کدی که به پیام و یا سندی متصل است در نظر گرفت؛ کدی که اثبات میکند پیام در طول مسیر خود از فرستنده تا گیرنده دستکاری نشده است. اگر چه مفهوم تضمین امنیت ارتباطات با استفاده از علم رمزنگاری به دوران باستان باز میگردد، اما امضای دیجیتال به لطف توسعه رمزنگاری کلید عمومی در سال ۱۹۷۰ به واقعیت بدل شد.
همچنین بخوانید: مروری بر تاریخچه رمزنگاری و انواع روشهای آن
الگوریتمهای رمزنگاری کلید عمومی برای امضا کردن اسناد طولانی مناسب نیستند. برای صرفهجویی در زمان، اغلب پروتکلهای امضای دیجیتال به جای اینکه کل پیام را رمزنگاری کنند، از تابع هش استفاده میکنند.
هشینگ، یکی از اصلیترین عناصر سیستم امضای دیجیتال است. در مبحث ارزهای دیجیتال، یک سیستم امضای دیجیتال از سه مرحلهی هشینگ، امضا کردن و صحتسنجی تشکیل شده است.
بیشتر بخوانید: کلید خصوصی، کلید عمومی و آدرس بیت کوین چه تفاوتی با هم دارند؟
هش کردن دادهها
اولین قدم در امضای دیجیتال، هش کردن یا هشینگ دادههاست. این فرآیند با دادن اطلاعات به یک الگوریتم هش و دریافت مقدار هششده آغاز میشود. همانطور که پیشتر نیز اشاره شد، ممکن است پیامهای ورودی از لحاظ اندازه با یکدیگر متفاوت باشند، اما در نهایت تمام مقادیر هش شده توسط یک الگوریتم خاص، طول یکسان و ثابتی دارند.
هشینگ دادههای برای ایجاد امضای دیجیتال ضروری نیست، چرا که میتوان از کلید خصوصی برای امضای اطلاعات استفاده کرد. اما در زمینه ارزهای دیجیتال، دادهها همیشه هش میشوند، زیرا سروکار داشتن با دادههایی با طول ثابت و مشخص در تسهیل فرآیند عملکرد بلاک چین بسیار موثر است.
امضا کردن
پس از هشینگ اطلاعات، فرستنده پیام باید آن را امضا کند. این نقطه، جایی است که رمزنگاری کلید عمومی وارد بازی میشود. انواع مختلفی از الگوریتمهای امضای دیجیتال وجود دارد که هر یک مکانیزم خاص خود را دارد. اما در اصل، پیام هششده، با کلید خصوصی امضا خواهد شد و دریافتکننده پیام میتواند اعتبار آن را با استفاده از کلید عمومی که توسط فرستنده ارائه شده است، بسنجد.
به بیانی دیگر، اگر در هنگام ایجاد امضا از کلید خصوصی استفاده نشود، دریافتکننده قادر نخواهد بود که از کلید عمومی مربوطه برای تایید صحت آن اطلاعات استفاده کند. هر دوی کلیدهای عمومی و خصوصی توسط فرستنده پیام ایجاد میشوند، اما تنها کلید عمومی با شخص دریافتکننده و یا حتی دیگران به اشتراک گذاشته میشود.
شایان ذکر است که امضاهای دیجیتال به طور مستقیم با محتوای هر پیام مرتبط هستند. بنابراین برخلاف امضاهای دستی، که صرف نظر از نوع پیام و محتوا باید یکسان باشند، هر پیامی که به صورت دیجیتالی امضا شده است، امضای دیجیتالی متفاوتی دارد.
صحتسنجی
بیایید با مثالی کل فرآیند صحتسنجی را از ابتدا تا انتها بررسی کنیم. تصور کنید که مریم پیامی برای محمد نوشته، آن را هش کرده و سپس مقدار هش را با کلید اختصاصی خود ترکیب کرد تا یک امضای دیجیتال تولید کند. این امضا همانند اثر انگشت دیجیتالی منحصر به فردی از آن پیام عمل خواهد کرد.
زمانی که محمد پیام را دریافت کند، میتواند اعتبار امضای دیجیتال را با استفاده از کلید عمومی مریم بررسی کند. بدین طریق محمد میتواند اطمینان حاصل کند که این امضا توسط مریم ایجاد شده است، چرا که کلید خصوصیای که با این کلید عمومی منطبق باشد تنها در اختیار مریم قرار دارد.
بنابراین، مخفی و امن نگه داشتن کلید خصوصی برای هر کسی ضروری است. اگر شخصی دیگری به کلید خصوصی مریم دسترسی داشته باشد، میتواند به راحتی وانمود کند که مریم است و امضاهای دیجیتالی تولید کند که منجر به کلاهبرداری و دسترسی به اطلاعات خصوصی او شود. در رابطه با ارزهای دیجیتال، این بدان معناست که هر کسی که به کلید خصوصی مریم دسترسی داشته باشد، میتواند بدون اجازهی او از حسابش کوین برداشت کند.
تغییرناپذیری بلاک چین
در بلاک چین از هش برای نشان دادن وضعیت فعلی شبکه استفاده میشود، به این ترتیب که داده ورودی هر چه را که در بلاک چین اتفاق افتاده است نشان میدهد. در واقع هر تراکنشی که تا آن لحظه صورت گرفته است با دادههای جدیدی که اضافه میشود، ترکیب میشود. این بدان معناست که هش خروجی مبتنی بر تمامی تراکنشهای پیشینی است که بر روی بلاک چین اتفاق افتاد.
اولین هش برای اولین بلاک یا همان بلاک جنسیس، با توجه به تراکنشهایی که درون آن بلاک ثبت شده است محاسبه میشود. برای هر بلاک جدیدی که از این پس ایجاد میشود، علاوه بر تراکنشهای بلاک مورد نظر، هش بلاک پیشین نیز به عنوان ورودی به تابع هش داده میشود و مقدار هش آن بلاک محاسبه میشود. بدین ترتیب زنجیرهای از بلاکها ایجاد میشود.
هش بلاک جدید با اشاره به هش بلاک پیش از آن ایجاد میشود. این سیستم هشینگ، درواقع تضمینی است که به ما اثبات میکند هیچگونه دستکاری در تراکنشها ممکن نیست. چرا که اگر تنها بخش کوچکی از اطلاعات تراکنش تغییر کند، در نتیجه هش بلاکی که تراکنش درون آن ثبت شده است نیز تغییر خواهد کرد و به همین ترتیب هش بلاکهای بعد از آن نیز تغییر میکند.
در نتیجه از هرگونه تقلب و دستکاری جلوگیری میشود، چراکه تنها کافی است هشها با یکدیگر مقایسه شوند. این ویژگی جالب و هیجانانگیز بلاک چین است، چون تمام افراد حاضر در شبکه باید تنها بر روی یک هش به توافق برسند و تایید کنند که تراکنشهای بلاک جدید درست هستند و در نهایت رضایت دهند که آن بلاک ایجاد شود. در صورت مشاهده عدم انطباق هشها، به راحتی به تقلب انجام شده پی میبرند و آن را رد میکنند. بدین ترتیب و به همین سادگی هشینگ، بلاک چین را تغییرناپذیر میکند، خصوصیتی که به نوعی بارزترین مشخصه این فناوری محسوب میشود.
ماینینگ
ماینینگ یا همان استخراج فرآیند یافتن و ایجاد یک بلاک جدید و افزودن آن به بلاک چین است. همانطور که میدانید عرضه بسیاری از ارزهای دیجیتال محدود به تعداد مشخصی است که این عدد برای بیت کوین ۲۱ میلیون واحد است. اگر ماینرها بتوانند بسیار سریع و با کمترین توان محاسباتی بلاکهای جدید را ماین کنند، در عرض مدت زمان کوتاهی همه کوینها استخراج میشدند. علاوه بر این، در بلاک چین محدودیت زمانی برای ایجاد هر بلاک در نظر گرفته شده است. اگر بلاکها در مدت زمانی کمتر از زمان درنظر گرفتهشده استخراج شوند، مشکلات زیر به وجود میآید:
- تصادم بیشتر: توابع هشینگ بیشتری تولید خواهند شد و در نتیجه منجر به تصادم بیشتر میشود.
- بلاکهای یتیم بیشتر: اگر تعداد زیادی از ماینرها قادر به استخراج بلاک جدید شوند، در این صورت ممکن است همزمان با هم بلاک جدید به جواب برسند. اما همانطور که میدانید تنها یکی از این بلاکها جزو زنجیره خواهد شد و بقیه آنها رها خواهند شد که به آنها بلاک یتیم میگویند.
بنابراین، به منظور محدود کردن تولید بلاک، یک سطح دشواری مشخصی برای محاسبه و استخراج بلاک جدید در نظر گرفته میشود. استخراج شبیه به یک بازی است. شما معما را حل میکنید و جایزه میگیرید. در نظر گرفتن سختی، حل معما را دشوارتر و زمانبرتر میکند. به عنوان مثال سختی هدف بیت کوین، یک رشته ۶۴ کاراکتری است که با چند صفر آغاز میشود. با افزایش سطح سختی استخراج، تعداد این صفرها نیز افزایش مییابد. سطح سختی پس از هر ۲۰۱۶ بلاک تغییر میکند.
زمانی که نرمافزارهای استخراج میخواهند یک بلاک جدید را به بلاک چین اضافه کنند، به شیوه زیر این کار را انجام میدهند. زمانی که بلاک جدید برای استخراج در شبکه قرار میگیرد، تمام محتویات بلاک هش میشوند. اگر مقدار هش کمتر از سختی هدف است، آنگاه آن را به بلاک چین اضافه میکنند و تمام افراد شبکه باید بلاک جدید را تایید کنند.
به دست آوردن یک بلاک جدید به همین سادگی نیست. اینجاست که نانس (nounce) وارد بازی میشود. نانس رشتهای تصادفی و دلخواه است که با هش بلاک ترکیب میشود. پس از آن، این رشته بههمپیوستهی جدید هش میشود و با سطح سختی مقایسه میشود. اگر مقدار آن کمتر از سطح سختی هدف نباشد، نانس باید تغییر کند و این فرآیند شاید میلیونها بار انجام شود تا در نهایت شرایط مورد نظر برآورده شود. زمانی که این اتفاق بیفتد، بلاک جدید به بلاک چین اضافه میشود.
نرخ هش چیست؟
نرخ هش در بلاک چین و عملگرهای ارز دیجیتال، به تعداد عملیات هشینگ انجام شده در زمان معین یا سرعت عملکرد ماینر اطلاق میشود. نرخ هش یکی از عوامل مهم و تاثیرگذار در استخراج ارز دیجیتال است و ماینرها برای انتخاب دستگاه استخراج آن را مد نظر قرار میدهند. در واقع نرخ هش، معیاری برای اندازهگیری عملکرد یک دستگاه ماینر است.
نرخ هش، پاداش ماینرها و سختی شبکه، سه عامل کاملاً وابسته به یکدیگرند. هر چه سختی شبکه بیت کوین بالاتر برود، نرخ هش بیشتری نیز برای پیدا کردن و ماین کردن بلاکها نیاز خواهد بود.
یکی از رایجترین معیارهای اندازهگیری نرخ هش «هش بر ثانیه» است. این عدد نشاندهنده تعداد هشهایی که در یک ثانیه انجام میشود. با توجه به نوع نوع الگوریتم و سختی شبکه، نرخ هش است و باید توجه داشت که نمیتوان نرخ هش الگوریتمهای متفاوت را با یکدیگر مقایسه کرد.
برخی دیگر از معیارهای اندازهگیری نرخ هش که در واقع تنها عمل تبدیل واحد بر روی آنها صورت گرفته عبارتند از:
- ۱ KH/s یا هزار هش بر ثانیه
- ۱ MH/s یا یک میلیون هش بر ثانیه
- ۱ GH/s یا یک میلیارد هش بر ثانیه
- ۱ TH/s یا یک تریلیون هش بر ثانیه
- ۱ PH/s یا یک کوادریلیون هش بر ثانیه
- ۱ EH/s یا یک کوئینتیلیون هش بر ثانیه
ارقام بالا به ترتیب کیلوهش، مگاهش، گیگاهش، تراهش، پتاهش و اگزا هش نامگذاری میشوند.