هش ریت (HashRate) یا نرخ هش خروجی تابع هش میباشد و در بیت کوین، هش ریت سرعت اتمام عملیات محاسباتی در کد بیت کوین است. هنگام ماینینگ هرچه هش ریت بیشتر باشد بهتر است، زیرا فرصت یافتن بلاک بعدی و دریافت جایزه افزایش مییابد.
اگر میخواهید وارد عرصه ماینینگ شوید، دانستن مفهوم هش ریت و اهمیت آن بسیار ضروری است. هم چنین باید از اثرات آن بر ظرفیت استخراج کوین ها آگاه باشید. برخورداری از دانش کافی در خصوص هش ریت میتواند به شما کمک کند که بهترین تصمیم ممکن در حوزه ماینینگ را اتخاذ کنید. در این مقاله به این موضوعات میپردازیم که هش ریت چیست، از چه اهمیتی برخوردار است و هزینه های برق مصرقی بر سودآوری چه تاثیری دارد.
تعریف هش ریت
به زبان ساده هش ریت سرعت عملکرد دستگاه ماینر میباشد. استخراج ارز دیجیتال (ماینینگ کریپتو) شامل یافتن بلاک ها از طریق محاسبات پیچیده میباشد. بلاک ها مشابه پازل های ریاضیاتی اند. دستگاه های ماینینگ باید هزاران یا حتی میلیون ها حدس در ثانیه بزنند تا جواب صحیح برای حل بلاک بیابند.
به عبارت دیگر برای استخراج موثر یک بلاک، ماینر باید طوری هِدِر بلاک را هش کند که کمتر یا برابر با هدف (تارگت) شود. با تغییر سختی، هدف نیز تغییر میکند. برای رسیدن به هش (یا هدف) مورد نظر، ماینر باید بعضی از هدرهای بلاک که نانس (nonce) نام دارند را تغییر دهد. هر نانس با “0” شروع شده و برای رسیدن به هش (یا هدف) ضروری افزایش مییابد.
از آن جا که تغییر نانس کاملا تصادفی میباشد، احتمال رسیدن به هش (یا هدف) مورد نظر بسیار کم است. بنابراین ماینر با تغییر نانس باید تلاش زیادی کند. تعداد دفعاتی که ماینر در ثانیه برای رسیدن به هش تلاش میکند را هش ریت یا قدرت هش میگویند.
اندازه گیری هش ریت و واحدهای آن
واحد اندازه گیری هش ریت، هش در ثانیه h/s میباشد. بعضی از اصطلاحات رایج مورد استفاده شامل مگا، گیگا و ترا است که براساس تعداد هش ها گفته میشوند. برای مثال دستگاهی با سرعت 60 هش در ثانیه ، هنگام تلاش برای حل کردن بلاک، 60 حدس در ثانیه میزند. برای 1000 هش از کیلوهش KH/s ، برای 1000 کیلوهش از مگاهش MH/s ، برای 1000 مگاهش از تراهش TH/s و برای 1000 تراهش از پتاهش PH/s استفاده میشود.
دستگاه های مختلفی که برای استخراج ارزهای دیجیتال متفاوت به کار گرفته میشوند دارای هش های برابر نیستند. برای مثال، یک دستگاه ماینینگ بیت کوین هش ریت متفاوتی با دستگاه ماینینگ اتریوم دارد. این موضوع را با الگوریتم های متفاوتی که ارزهای دیجیتال به کار میگیرند میتوان توضیح داد، زیرا برای استخراج آن ها از میزان حافظه و محاسبات یکسان استفاده نمیشود.
رابطه بین هش ریت، سودآوری ماینر و سختی استخراج
هش ریت، سودآوری ماینر و سختی استخراج از چند طریق به هم وابسته اند. برای مثال بیت کوین را در نظر میگیریم. هربار که سختی شبکه بیت کوین افزایش مییابد، هش ریت نیز زیاد میشود و به دنبال آن، ماینر 12.5 بیت کوین BTC و کارمزد تراکنش را به دست میآورد. تعداد ماینرها در شبکه بیت کوین، سختی را افزایش میدهد زیرا ماینر باید حدس های بیشتری در ثانیه محاسبه کند.
تاثیر برق مصرفی بر سودآوری
برای سودآوری، بیت کوین را در نظر میگیریم. در حال حاضر یک دستگاه ماینینگ بیت کوین نظیر ASIC تقریبا قدرت ماینینگ 12 تراهش در ثانیه دارد. با در نظر گرفتن سختی حال حاضر شبکه، این دستگاه میتواند 0.318 بیت کوین BTC در سال تولید کند.
هرچند هنگام محاسبه سودآوری، باید هزینه برق مصرفی تجهیزات ماینینگ را در نظر بگیرید. به این مورد، بازده (راندمان) ماینر میگویند. افزایش سختی ماینینگ ارز دیجیتال، هزینه های برق مصرفی را نیز بیشتر میکند. برای مثال، یک دستگاه ماینینگ با 10 درصد هش ریت بیشتر نسبت به دستگاهی دیگر، 50 درصد بیشتر برق مصرف میکند. بنابراین، هرچند هش ریت عاملی مهم در ماینینگ میباشد، اما همواره راندمان را نیز در نظر بگیرید.
هش کردن یا هشینگ به فرآیندی گفته میشود که در آن یک عملگر ریاضی به نام «تابع هش» (Hash Function)، دادههای ورودی مانند حروف و اعداد و تصویر و … را به خروجی رمزگذاری شده تبدیل میکند. به تابع هش، «تابع درهمساز» نیز گفته میشود.
به عنوان مثال یک تابع هش میتواند کلمه «سلام» را دریافت کند و به عنوان خروجی این عبارت را تحویل بدهد:
«bda1fa48345336618741fd2c4bc02809eb099c49a9b02fb5056401ab6d4dc3e6»
به خروجیِ تابع هش، «هش» (Hash) میگویند و به این عمل یعنی استفاده از تابع هش برای ایجاد هش، هش کردن یا «هشینگ» (Hashing) گفته میشود.
تابع هش ورودی را میگیرد و تبدیل به یک رشته متنی با طول ثابت میکند.
حالا بیایید ببینیم فرآیند هش کردن یا به اصطلاح هشینگ چگونه انجام میشود.
هر کسی که در رمزنگاری و ریاضیات تخصص داشته باشد، میتواند با استفاده از این علوم برای خود تابع هش بسازد. در حال حاضر انواع زیادی تابع هش وجود دارد و آن را به روشهای گوناگونی میتوان ساخت اما در اینجا قصد داریم به عنوان نمونه نحوه کار الگوریتم شناخته شده SHA-256 را توضیح بدهیم که پرکاربردترین تابع هش دنیاست.
توابع هش معتبر، هر مقدار ورودی را تبدیل به یک رشته متنی با طول ثابت میکنند.
هش کردن عبارات با استفاده از تابع هش SHA-256
همانطور که در عکس بالا هم مشاهده میکنید، برای تابع هشِ استاندارد اهمیتی ندارد که ورودی شما چقدر بزرگ یا کوچک است. خروجی همیشه دارای طول ثابت خواهد بود. این مساله زمانی اهمیت پیدا میکند که با تعداد زیادی داده و اطلاعات سر و کار داشته باشید. بنابراین، اساسا به جای رهگیری و ذخیره دادههای ورودی که میتوانند بسیار زیاد و بزرگ باشند، میتوانید تنها هش را ذخیره کنید و آن را ردیابی کنید.
همچنین استفاده از یک خروجی با طول ثابت سبب افزایش امنیت میشود، چون کسی که سعی در رمزگشایی هش داشته باشد، نمیتواند با دیدن خروجی تشخیص دهد که ورودی ما به چه صورت بوده است.
پیش از اینکه بیشتر در رابطه با هشینگ صحبت کنیم، ابتدا باید ویژگیهای مختلف توابع هش و چگونگی و نحوه اجرای آنها را توضیح دهیم.
تابع هش رمزنگاری
یک تابع هش رمزنگاری نوع خاصی از توابع هش بوده که دارای ویژگیهای منحصر به فردی است. ویژگیهای این نوع هش سبب میشود برای هویتسنجی و برقراری امنیت بسیار مناسب باشد. از این نوع تابع هش برای ساخت امضاهای دیجیتال و صحتسنجی استفاده میشود و میتوان با آن به اصطلاح «اثر انگشت دیجیتال» ساخت. یک تابع هش رمزنگاریِ امن باید ویژگیهای زیر را داشته باشد:
1- قطعی و معین بودن
تابع هش به ازای یک ورودی مشخص، خروجی ثابت و مشخصی را به شما تحویل میدهد. فرقی نمیکند که شما چند مرتبه و یا در چه زمانی آن ورودی را به تابع هش دادهاید؛ تحت هر شرایطی خروجی ثابت است. این ویژگی از اهیمت بالایی برخوردار است، زیرا اگر هر بار هشهای مختلفی را تحویل دهد، آنگاه ردیابی و پیگیری اطلاعات غیرممکن خواهد بود.
مثلا اگر کلمه «سلام» را هزاران بار در تابع هش وارد کنیم باز هم هش این کلمه ثابت است.
2- محاسبه سریع
تابع هش باید بتواند هش ورودی را به سرعت محاسبه کند. اگر این فرآیند به اندازه کافی سریع نباشد، سیستم ناکارآمد خواهد شد.
3- تابع یک طرفه
تابع هش رمزنگاری یک طرفه است
توابع هش رمزنگاری، توابعی یک طرفه هستند. تابع یکطرفه به تابعی گفته میشود که برای هر ورودی، خروجی به راحتی قابل محاسبه است، اما بهدست آوردن پیشتصویرِ خروجیِ متناظر با یک ورودیِ تصادفی، غیرعملی است.
به عبارت دیگر، در یک تابع هش استاندارد، ساخت خروجی از ورودی به راحتی قابل انجام است اما پیدا کردن ورودی از خروجی بسیار دشوار است. دقت داشته باشید از واژه دشوار و غیرعملی به جای واژه «غیرممکن» استفاده شده است. به مثال زیر توجه کنید.
تصور کنید که ما اعدادی بین 1 تا 6 داریم و به صورت تصادفی و مخفیانه، یکی از این اعداد را هش میکنیم. خب حالا چگونه میتوانید تعیین کنید که عدد اصلی چه بود؟ از آنجایی که توابع هش همیشه معین است، هش ورودیهای خاص همیشه یکسان خواهد بود. بنابراین تمام کاری که باید انجام دهید این است که هش اعداد 1 تا 6 را با هشی که ساخته شده است، مقایسه کنید و به این ترتیب عدد اصلی را بیابید.
اما این سازوکار زمانی امکانپذیر است که تعداد دادههای شما کم باشد. اگر با حجم عظیمی از اعداد سروکار داشته باشید، آنگاه چه خواهید کرد؟
فرض کنید شما با یک هش 128 بیتی سر و کار دارید. تنها راه پیدا کردن داده ورودی اصلی استفاده از روش «جستجوی جامع» است. جستجوی جامع که به آن جستجوی خام و بیخردانه (brute-force method) نیز گفته میشود، اساسا به این معنی است که شما باید همینطور دادهها را امتحان کرده و آن را با خروجی مقایسه کنید و این مراحل را تا جایی که هش ورودی و هش هدف با یکدیگر تطابق پیدا کنند، ادامه دهید.
خب اگر از این روش استفاده کنید چه اتفاقی میافتد؟
- بهترین حالت ممکن: شما در اولین تلاش خود، جواب را پیدا کنید. برای اینکه این اتفاق بیافتد به معنای واقعی کلمه باید خوششانسترین فرد در تمام هستی باشید. احتمال رخ دادن چنین اتفاقی تقریبا به صفر میل میکند.
- بدترین حالت ممکن: شما پاسخ را در سعی و خطای دفعه (1-128)^2ام بیابید. در واقع یعنی در آخرین شانس خود جواب را پیدا کنید.
- حالت میانگین: جواب را جایی در آن وسطها پیدا کنید. بنابراین پس از 127^2 = 2/(128)^2 بار. برای اینکه درک واضحی از این عدد داشته باشید، باید بدانید که 127^2برابر است با 38^10× 1.7 و پیدا کردن عدد از بین این همه احتمال با کامپیوترهای امروزی احتمالا هزاران سال زمان خواهد برد.
بنابراین همانطور که پیشتر نیز عنوان شد، یافتن پیشتصویرِ خروجیِ متناظر با یک ورودیِ تصادفی با استفاده از حدس دادهها امکانپذیر است اما بسیار بسیار زمانبر خواهد بود به طوری که هیچ توجیهی برای این کار وجود ندارد.
4- هر تغییر در ورودی، هش را به طور کامل تغییر میدهد
حتی اگر تغییری بسیار کوچک در داده ورودی ایجاد کنید، بازتاب این تغییر کوچک در هش بسیار قابل توجه خواهد بود.
همانطور که در تصویر بالا مشاهده میکنید، حتی اگر یک کاراکتر را تغییر دهید هش به طور کلی تغییر میکند. این عملکرد بسیار حائز اهمیت است، چراکه در صحت کلمات عبور و بسیاری از دادههای حیاتی از آن استفاده میشود.
زمانی که شما در سایتی مثل فیسبوک کلمه عبور خود را وارد میکنید، سیستم به طور خودکار هشِ کلمه عبور شما را با هش موجود در پایگاه داده تطبیق میدهد. بنابراین اگر کلمه عبور ورودی شما کوچکترین تغییری نسبت به کلمه عبور اصلی کند، هش آن نیز تغییر میکند و با هش ثبت شده منطبق نخواهد بود.
همچنین در بحث ارزهای دیجیتال، این ویژگی باعث برقراری یکی از مهمترین اصلهای بلاک چین یعنی «تغییرناپذیری» میشود که در ادامه بیشتر در مورد آن میخوانید.
5- مقاوم در برابر تصادم
با توجه به اینکه A و B دو ورودی متفاوت تابع هش هستند و (H(A و (H(B نیز به ترتیب هشهای متناظر با آنها، احتمال اینکه این دو خروجی با یکدیگر یکسان باشند عملا غیرممکن است. این بدان معناست که هر ورودی، هش منحصر به فرد خود را دارد.
نمونههایی از توابع هش
الگوریتمهای هش زیادی برای رمزنگاری داده وجود دارند. در ادامه به چند مورد از شناختهشدهترین و پرکاربردترین آنها اشاره خواهد شد.
MD5
الگوریتم هش MD که مخفف عبارت «Message Digest» به معنی «خلاصه پیام» است، در سال 1991 توسط رونالد ریوِست و به عنوان جایگزینی برای تابع هش پیشین این خانواده یعنی MD4 طراحی شد. الگوریتم MD5، تابع هشی است که به صورت گسترده مورد استفاده قرار میگیرد و هش 128 بیتی تولید میکند.
اگر چه MD5 با هدف اینکه به عنوان تابع رمزنگاری مورد استفاده قرار گیرد طراحی و ایجاد شد، اما از مشکلات زیادی برخوردار است. همین باعث شد که کمتر به عنوان تابع هش از آن استفاده شود. امروزه از این الگوریتم به عنوان چکسام برای بررسی درستی و یکپارچگی دادهها در برابر دستکاری ناخواسته استفاده میشود.
SHA
الگوریتم هش ایمن (Secure Hash Algorithm) که به اختصار آن را SHA مینامند، مجموعهای از الگوریتمهاست که توسط موسسه ملی استاندارد و فناوری (NIST) ایالات متحده و دیگر ارگانهای امنیتی ایجاد شد و توسعه یافت. SHA-0 اولین الگوریتم از خانواده SHA است که در سال 1993 توسعه پیدا کرد. اما مدتی پس از انتشار به دلیل نقص قابل توجهی که در آن کشف شد، جای خود را به نسخهی جدیدتر و اصلاحشدهی SHA-1 داد.
SHA-1 یک تابع هش 160 بیتی است که به الگوریتم MD5 شباهت دارد. از طرفی دیگر الگوریتم SHA-1 شباهت بسیار زیادی به SHA-0 نیز دارد ولی در اصل ایرادهایی اساسی که در نسخه 0 وجود داشته و سبب ضعف این الگوریتم شده بود را برطرف نمود. این الگوریتم توسط آژانس امنیت ملی ایالات متحده (NSA) و با هدف اینکه بخشی از الگوریتم امضای دیجیتال باشد طراحی شد. در سال 2005 رخنههای امنیتی در این الگوریتم تشخیص داده شد، که نشان از نفوذپذیری احتمالی آن داشت. از آن زمان بود که نیاز به یک الگوریتم بهتر در این حوزه احساس شد.
الگوریتم هش ایمن بعدی، SHA-2، متشکل از 6 تابع هش با مقادیر هش متفاوت 224، 256، 384 و 512 بیتی است که نامهای آنها نیز با توجه به مقادیر هش انتخاب شده است؛ SHA-224، SHA-256، SHA-384، SHA-512، SHA-512/224 و SHA-512/256. این الگوریتمها در طول با یکدیگر متفاوتند.
الگوریتم شناختهشدهی SHA-256 در بلاک چینِ بیت کوین هم استفاده میشود. علاوه بر این، از این الگوریتم در TLS ،SSL ، PGP، SSH، توسعه چندمنظوره پست الکترونیک اینترنت/امن و IPsec یا همان ایمنسازی پروتکل اینترنت استفاده میشود.
آخرین عضو از خانواده الگوریتم هش ایمن، SHA-3 است که در سال 2015 توسط NIST منتشر شد. این الگوریتم در سال 2012 در جریان رقابت و مسابقهای عمومی در رابطه با طراحی الگوریتمی جدید به عنوان برترین الگوریتم برگزیده شد. SHA-3 در واقع زیرمجموعهای از خانواده گستردهتری به نام Keccak است.
RIPEMD
RIPEMD که مخفف عبارت «RACE Integrity Primitives Evaluation Message Digest» است، همانند الگوریتم SHA مجموعهای از توابع هش است که در بلژیک و توسط گروه تحقیقاتی COSIC در سال 1996 توسعه یافت. آنها این مجموعه الگوریتم را در واکنش به ضعف امنیتی که در RIPEMD مشاهده شد، طراحی کردند. در طراحی این الگوریتم از اصول به کار رفته در MD4 استفاده شده است و عملکردی مشابه با SHA-1 دارد.
طول هش توابع این خانواده متفاوت است و دارای مقادیر 128، 160، 256 و 320 بیتی است. تاکنون حمله موفقی به RIPEMD-160 گزارش نشده است. نسخه 256 و 320 بیتی این توابع نیز سطح امنیتی بالاتری ندارند، بلکه تنها امکان بروز تصادم را از بین میبرند.
Whirlpool
ویرپول، یکی دیگر از توابع هش در دنیای رمزنگاری است. این الگوریتم برای اولین بار در سال 2000 و توسط وینسنت ریمن و پائولو بارتو طراحی شده است. ویرپول بر مبنای نسخه اصلاح شدهی استاندارد رمزنگاری پیشرفته (AES) ساخته شده است.
این تابع هش، هر پیامی با طول کمتر از 2256 بایت را دریافت و هشی با اندازه 512 بیت (64 بایت) تولید میکند. هش 512 بیتی الگوریتم ویرپول به صورت اعداد 128 رقمی نمایش داده میشود.
الگوریتم ویرپول از سال 2000 تاکنون، 2 بار بازبینی شده است. در اولین بازبینی در سال 2001، S-box را تغییر دادند تا پیادهسازی این الگوریتم بر روی سختافزار آسانتر شود. در دومین بازبینی (2003)، نقصی در ماتریس انتشار که سبب میشد تا امنیت روش پایینتر از آنچه از آن انتظار میرفت باشد، پیدا و برطرف شد. الگوریتم اولیه و اصلی را Whirlpool-0، بازبینی اول Whirlpool-T و نسخه نهایی را Whirlpool نام دارند.
Blake
بلیک یکی از الگوریتمهایی است که در رقابت توابع هشی که از جانب موسسه ملی استاندارد و فناوری ایالات متحده (NIST) با هدف انتخاب بهترین تابع هش برای توسعه SHA-3 برگزار شده بود، در بین 5 الگوریتم برگزیده قرار داشت. این رقابت از سال 2007 آغاز شد و در نهایت در سال 2012 با اعلام Keccak به عنوان برنده به طور رسمی به کار خود پایان داد.
همانند SHA-2، بلیک نیز دارای 2 نوع الگوریتم متفاوت است. یکی از کلمات 32 بیتی استفاده میکند و طول هش محاسبهشدهی آن حداکثر 256 بیت است و دیگری از کلمات 64 بیتی استفاده میکند با طول هش 512 بیت.
اما شناختهشدهترین عضو خانواده بلیک، Blake2 است که در سال 2012 منتشر شد. هدف از طراحی این الگوریتم معرفی جایگزینی برای الگوریتمهای پرکاربرد اما آسیبپذیر MD5 و SHA-1 در برنامههایی که نیازمند کارایی بالایی بودند بود.
Blake2 خود به دو زیرگروه Blake2b و Blake2s تقسیم میشود. گفته میشود Blake2 از MD5، SHA-1، SHA-2 و SHA-3 سریعتر است و از لحاظ امنیت نیز با SHA-3، یعنی آخرین نسخه الگوریتم هش ایمن برابری میکند.
هشینگ در ارزهای دیجیتال
ارزهای دیجیتال برای حفظ بقا و امنیت خود تا حد زیادی به هش کردن وابسته هستند. چرا که اکثر عملیات انجام شده در بلاک چین آنها بر مبنای هش کردن اطلاعات به منظور حفظ امنیت آنها صورت میگیرد. در ادامه به نقش هش کردن در ارزهای دیجیتال در صه بخش مهم میپردازیم.
هویت سنجی و امضای دیجیتال
امضای دیچیتال یک مکانیزم رمزنگاری است که برای تایید صحت و اعتبارسنجی دادههای دیجیتال مورد استفاده قرار میگیرد.
به بیانی دیگر، امضای دیجیتال را میتوان به عنوان کدی که به پیام و یا سندی متصل است در نظر گرفت؛ کدی که اثبات میکند پیام در طول مسیر خود از فرستنده تا گیرنده دستکاری نشده است. اگر چه مفهوم تضمین امنیت ارتباطات با استفاده از علم رمزنگاری به دوران باستان باز میگردد، اما امضای دیجیتال به لطف توسعه رمزنگاری کلید عمومی در سال 1970 به واقعیت بدل شد.
الگوریتمهای رمزنگاری کلید عمومی برای امضا کردن اسناد طولانی مناسب نیستند. برای صرفهجویی در زمان، اغلب پروتکلهای امضای دیجیتال به جای اینکه کل پیام را رمزنگاری کنند، از تابع هش استفاده میکنند.
هشینگ، یکی از اصلیترین عناصر سیستم امضای دیجیتال است. در مبحث ارزهای دیجیتال، یک سیستم امضای دیجیتال از سه مرحلهی هش کردن، امضا کردن و صحتسنجی تشکیل شده است.
هش کردن دادهها
اولین قدم در امضای دیجیتال، هش کردن یا هشینگ دادههاست. این فرآیند با دادن اطلاعات به یک الگوریتم هش و دریافت مقدار هششده آغاز میشود. همانطور که پیشتر نیز اشاره شد، ممکن است پیامهای ورودی از لحاظ اندازه با یکدیگر متفاوت باشند، اما در نهایت تمام مقادیر هش شده توسط یک الگوریتم خاص، طول یکسان و ثابتی دارند.
هش کردن دادههای برای ایجاد امضای دیجیتال ضروری نیست، چرا که میتوان از کلید خصوصی برای امضای اطلاعات استفاده کرد. اما در زمینه ارزهای دیجیتال، دادهها همیشه هش میشوند، زیرا سروکار داشتن با دادههایی با طول ثابت و مشخص در تسهیل فرآیند عملکرد بلاک چین بسیار موثر است.
امضا کردن
پس از هش کردن اطلاعات، فرستنده پیام باید آن را امضا کند. این نقطه، جایی است که رمزنگاری کلید عمومی وارد بازی میشود. انواع مختلفی از الگوریتمهای امضای دیجیتال وجود دارد که هر یک مکانیزم خاص خود را دارد. اما در اصل، پیام هششده، با کلید خصوصی امضا خواهد شد و دریافتکننده پیام میتواند اعتبار آن را با استفاده از کلید عمومی که توسط فرستنده ارائه شده است، بسنجد.
به بیانی دیگر، اگر در هنگام ایجاد امضا از کلید خصوصی استفاده نشود، دریافتکننده قادر نخواهد بود که از کلید عمومی مربوطه برای تایید صحت آن اطلاعات استفاده کند. هر دوی کلیدهای عمومی و خصوصی توسط فرستنده پیام ایجاد میشوند، اما تنها کلید عمومی با شخص دریافتکننده و یا حتی دیگران به اشتراک گذاشته میشود.
شایان ذکر است که امضاهای دیجیتال به طور مستقیم با محتوای هر پیام مرتبط هستند. بنابراین برخلاف امضاهای دستی، که صرف نظر از نوع پیام و محتوا باید یکسان باشند، هر پیامی که به صورت دیجیتالی امضا شده است، امضای دیجیتالی متفاوتی دارد.
صحتسنجی
بیایید با مثالی کل فرآیند صحتسنجی را از ابتدا تا انتها بررسی کنیم. تصور کنید که مریم پیامی برای محمد نوشته، آن را هش کرده و سپس مقدار هش را با کلید اختصاصی خود ترکیب کرد تا یک امضای دیجیتال تولید کند. این امضا همانند اثر انگشت دیجیتالی منحصر به فردی از آن پیام عمل خواهد کرد.
زمانی که محمد پیام را دریافت کند، میتواند اعتبار امضای دیجیتال را با استفاده از کلید عمومی مریم بررسی کند. بدین طریق محمد میتواند اطمینان حاصل کند که این امضا توسط مریم ایجاد شده است، چرا که کلید خصوصیای که با این کلید عمومی منطبق باشد تنها در اختیار مریم قرار دارد.
بنابراین،مخفی و امن نگه داشتن کلید خصوصی برای هر کسی ضروری است. اگر شخصی دیگری به کلید خصوصی مریم دسترسی داشته باشد، میتواند به راحتی وانمود کند که مریم است و امضاهای دیجیتالی تولید کند که منجر به کلاهبرداری و دسترسی به اطلاعات خصوصی او شود. در رابطه با ارزهای دیجیتال، این بدان معناست که هر کسی که به کلید خصوصی مریم دسترسی داشته باشد، میتواند بدون اجازهی او از حسابش کوین برداشت کند.
تغییرناپذیری بلاک چین
در بلاک چین از هش برای نشان دادن وضعیت فعلی شبکه استفاده میشود، به این ترتیب که داده ورودی هر چه را که در بلاک چین اتفاق افتاده است نشان میدهد. در واقع هر تراکنشی که تا آن لحظه صورت گرفته است با دادههای جدیدی که اضافه میشود، ترکیب میشود. این بدان معناست که هش خروجی مبتنی بر تمامی تراکنشهای پیشینی است که بر روی بلاک چین اتفاق افتاد.
اولین هش برای اولین بلاک یا همان بلاک جنسیس، با توجه به تراکنشهایی که درون آن بلاک ثبت شده است محاسبه میشود. برای هر بلاک جدیدی که از این پس ایجاد میشود، علاوه بر تراکنشهای بلاک مورد نظر، هش بلاک پیشین نیز به عنوان ورودی به تابع هش داده میشود و مقدار هش آن بلاک محاسبه میشود. بدین ترتیب زنجیرهای از بلاکها ایجاد میشود.
هش بلاک جدید با اشاره به هش بلاک پیش از آن ایجاد میشود. این سیستم هشینگ، درواقع تضمینی است که به ما اثبات میکند هیچگونه دستکاری در تراکنشها ممکن نیست. چرا که اگر تنها بخش کوچکی از اطلاعات تراکنش تغییر کند، در نتیجه هش بلاکی که تراکنش درون آن ثبت شده است نیز تغییر خواهد کرد و به همین ترتیب هش بلاکهای بعد از آن نیز تغییر میکند.
برای تغییر یک بلاک در بلاک چین باید هش تمام بلاک های قبلی را هم تغییر داد چون هر بلاک علاوه بر هش خود، دارای هش بلاک قبلی هم هست.
در نتیجه از هرگونه تقلب و دستکاری جلوگیری میشود، چراکه تنها کافی است هشها با یکدیگر مقایسه شوند. این ویژگی جالب و هیجانانگیز بلاک چین است، چون تمام افراد حاضر در شبکه باید تنها بر روی یک هش به توافق برسند و تایید کنند که تراکنشهای بلاک جدید درست هستند و در نهایت رضایت دهند که آن بلاک ایجاد شود. در صورت مشاهده عدم انطباق هشها، به راحتی به تقلب انجام شده پی میبرند و آن را رد میکنند. بدین ترتیب و به همین سادگی هشینگ، بلاک چین را تغییرناپذیر میکند، خصوصیتی که به نوعی بارزترین مشخصه این فناوری محسوب میشود.
ماینینگ
استخراج فرآیند یافتن و ایجاد یک بلاک جدید و افزودن آن به بلاک چین است. همانطور که میدانید عرضه بسیاری از ارزهای دیجیتال محدود به تعداد مشخصی است که این عدد برای بیت کوین 21 میلیون واحد است. اگر ماینرها بتوانند بسیار سریع و با کمترین توان محاسباتی بلاکهای جدید را ماین کنند، در عرض مدت زمان کوتاهی همه کوینها استخراج میشدند. علاوه بر این، در بلاک چین محدودیت زمانی برای ایجاد هر بلاک در نظر گرفته شده است. اگر بلاکها در مدت زمانی کمتر از زمان درنظر گرفتهشده استخراج شوند، مشکلات زیر به وجود میآید:
- تصادم بیشتر: توابع هش بیشتری تولید خواهند شد و در نتیجه منجر به تصادم بیشتر میشود.
- بلاکهای یتیم بیشتر: اگر تعداد زیادی از ماینرها قادر به استخراج بلاک جدید شوند، در این صورت ممکن است همزمان با هم بلاک جدید به جواب برسند. اما همانطور که میدانید تنها یکی از این بلاکها جزو زنجیره خواهد شد و بقیه آنها رها خواهند شد که به آنها بلاک یتیم میگویند.
بنابراین، به منظور محدود کردن تولید بلاک، یک سطح دشواری مشخصی برای محاسبه و استخراج بلاک جدید در نظر گرفته میشود. استخراج شبیه به یک بازی است. شما معما را حل میکنید و جایزه میگیرید. در نظر گرفتن سختی، حل معما را دشوارتر و زمانبرتر میکند. به عنوان مثال سختی هدف بیت کوین، یک رشته 64 کاراکتری است که با چند صفر آغاز میشود. با افزایش سطح سختی استخراج، تعداد این صفرها نیز افزایش مییابد. سطح سختی پس از هر 2016 بلاک تغییر میکند.
زمانی که نرمافزارهای استخراج میخواهند یک بلاک جدید را به بلاک چین اضافه کنند، به شیوه زیر این کار را انجام میدهند. زمانی که بلاک جدید برای استخراج در شبکه قرار میگیرد، تمام محتویات بلاک هش میشوند. اگر مقدار هش کمتر از سختی هدف است، آنگاه آن را به بلاک چین اضافه میکنند و تمام افراد شبکه باید بلاک جدید را تایید کنند.
به دست آوردن یک بلاک جدید به همین سادگی نیست. اینجاست که نانس (nounce) وارد بازی میشود. نانس رشتهای تصادفی و دلخواه است که با هش بلاک ترکیب میشود. پس از آن، این رشته بههمپیوستهی جدید هش میشود و با سطح سختی مقایسه میشود. اگر مقدار آن کمتر از سطح سختی هدف نباشد، نانس باید تغییر کند و این فرآیند شاید میلیونها بار انجام شود تا در نهایت شرایط مورد نظر برآورده شود. زمانی که این اتفاق بیفتد، بلاک جدید به بلاک چین اضافه میشود.
نرخ هش چیست؟
نرخ هش در بلاک چین و عملگرهای ارز دیجیتال، به تعداد عملیات هش انجام شده در زمان معین یا سرعت عملکرد دستگاه ماینر اطلاق میشود. نرخ هش یکی از عوامل مهم و تاثیرگذار در استخراج ارز دیجیتال است و ماینرها برای انتخاب دستگاه استخراج آن را مد نظر قرار میدهند. در واقع نرخ هش، معیاری برای اندازهگیری عملکرد یک دستگاه ماینر است.
نرخ هش، پاداش ماینرها و سختی شبکه، سه عامل کاملاً وابسته به یکدیگرند. هر چه سختی شبکه بیت کوین بالاتر برود، نرخ هش بیشتری نیز برای پیدا کردن و ماین کردن بلاکها نیاز خواهد بود.
یکی از رایجترین معیارهای اندازهگیری نرخ هش «هش بر ثانیه» است. این عدد نشاندهنده تعداد هشهایی که در یک ثانیه انجام میشود. با توجه به نوع نوع الگوریتم و سختی شبکه، نرخ هش است و باید توجه داشت که نمیتوان نرخ هش الگوریتمهای متفاوت را با یکدیگر مقایسه کرد.
برخی دیگر از معیارهای اندازهگیری نرخ هش که در واقع تنها عمل تبدیل واحد بر روی آنها صورت گرفته عبارتند از:
- 1 KH/s یا هزار هش بر ثانیه
- 1 MH/s یا یک میلیون هش بر ثانیه
- 1 GH/s یا یک میلیارد هش بر ثانیه
- 1 TH/s یا یک تریلیون هش بر ثانیه
- 1 PH/s یا یک کوادریلیون هش بر ثانیه
- 1 EH/s یا یک کوئینتیلیون هش بر ثانیه
ارقام بالا به ترتیب کیلوهش، مگاهش، گیگاهش، تراهش، پتاهش و اگزا هش نامگذاری میشوند.