تابع هش یا هشینگ در ارز دیجیتال چیست؟
تابع هش چیست؟
شاید تصورش سخت باشد اما اگر تابع هش و هشینگ (هش کردن) نبود، امکان استفاده امن از اینترنت وجود نداشت. تابع هش (Hash Function) یک تابع ریاضی است که یک مقدار ورودی را به مقدار فشرده شده دیگر تبدیل میکند. ورودی تابع هش یک مقدار با طول نامعلوم است؛ اما خروجی همیشه طول ثابتی دارد. توابع هش به شدت کاربردی هستند و تقریبا در همه کاربردهای امنیت اطلاعات حضور دارند. البته با شرکت در دوره رایگان ارز دیجیتال مدرسه معین به صورت تخصصی تری با این مبحث آشنا خواهید شد.
معنای هش کردن یا هشینگ
هش کردن یا هشینگ به فرآیندی گفته میشود که در آن یک عملگر ریاضی به نام «تابع هش» (Hash Function)، دادههای ورودی مانند حروف و اعداد و تصویر و … را به خروجی رمزگذاری شده تبدیل میکند. به تابع هش، «تابع درهمساز» نیز گفته میشود.
به عنوان مثال یک تابع هش میتواند کلمه «سلام» را دریافت کند و به عنوان خروجی این عبارت را تحویل بدهد:
«bda۱fa۴۸۳۴۵۳۳۶۶۱۸۷۴۱fd۲c۴bc۰۲۸۰۹eb۰۹۹c۴۹a۹b۰۲fb۵۰۵۶۴۰۱ab۶d۴dc۳e۶»
به خروجیِ تابع هش، «هش» (Hash) میگویند و به این عمل یعنی استفاده از تابع هش برای ایجاد هش، هش کردن یا «هشینگ» (Hashing) گفته میشود.
-
هشینگ hash function
هر کسی که در رمزنگاری و ریاضیات تخصص داشته باشد، میتواند با استفاده از این علوم برای خود تابع هش بسازد.
در حال حاضر انواع زیادی تابع هش وجود دارد و آن را به روشهای گوناگونی میتوان ساخت. توابع هش معتبر، هر مقدار ورودی را تبدیل به یک رشته متنی با طول ثابت میکنند.
رای تابع هشِ استاندارد اهمیتی ندارد که ورودی شما چقدر بزرگ یا کوچک است. خروجی همیشه دارای طول ثابت خواهد بود.
این مساله زمانی اهمیت پیدا میکند که با تعداد زیادی داده و اطلاعات سر و کار داشته باشید.
بنابراین، اساسا به جای رهگیری و ذخیره دادههای ورودی که میتوانند بسیار زیاد و بزرگ باشند، میتوانید تنها هش را ذخیره کنید و آن را ردیابی کنید.
همچنین استفاده از یک خروجی با طول ثابت سبب افزایش امنیت میشود، چون کسی که سعی در رمزگشایی هش داشته باشد، نمیتواند با دیدن خروجی تشخیص دهد که ورودی ما به چه صورت بوده است.
ویژگیهای تابع هش
-
طول ثابت خروجی (مقدار هش)
- تابع هش، داده با طول متغیر را به طول ثابت تبدیل میکند.
- معمولا اندازه هش بسیار کوچکتر از ورودی است؛ بنابراین توابع هش را گاهی با نام توابع فشردهساز میشناسند.
- تابع هش با خروجی n بیتی، را تابع هش n-بیتی مینامند.
-
اثربخشی فرآیند hash function
- به طور کلی برای هر تابع هش h با ورودی X، محاسبه (h(x، یک عملیات سریع است.
- انجام محاسبات در توابع هش بسیار سریعتر از رمزنگاری متقارن هستند.
شرایط توابع هش
برای این که تابع هش یک ابزار موثر رمزنگاری باشد، بایستی شرایط زیر را برآورده کند:
-
شرط اول
- این شرط بیان میکند که تابع هش باید یک تابع یکطرفه باشد.
- به بیان دیگر اگر یک تابع هش h یک مقدار هش z را تولید کرد، پیدا کردن یک مقدار x که هش آن با z یکی شود، بایستی فرآیند دشواری باشد.
- این خاصیت باعث محافظت از پیدا کردن مقدار ورودی هش توسط حمله کنندهای میشود که مقدار هش را در اختیار دارد.
-
شرط دوم
- اگر یک ورودی و هش آن را در اختیار داشته باشیم، پیدا کردن یک ورودی متفاوت که همان مقدار هش را بدهد، بایستی دشوار باشد.
- به بیان دیگر اگر یک تابع هش h برای یک ورودی x، یک مقدار هش (h(x را بدهد، پیدا کردن مقدار ورودی دیگری که (h(y) = h(x شود، بایستی دشوار باشد.
- این ویژگی باعث میشود در برابر حمله کنندهای که یک مقدار هش ورودی و هش آن را دارد و میخواهد یک مقدار متفاوت را به عنوان مقدار ورودی اصلی جایگزین آن کند، محافظت شود.
-
شرط سوم hash function
- پیدا کردن دو ورودی متفاوت با هر طولی که منجر به یک هش مشابه شود، بایستی دشوار باشد. این ویژگی با عنوان «تابع هش بدون تصادم» نیز شناخته میشود.
- به بیان دیگر برای یک تابع هش h، پیدا کردن دو ورودی متفاوت x و y به طوری که (h(x) = h(y شود، باید دشوار باشد.
- چون تابع هش یک تابع فشردهساز با خروجی ثابت است، نداشتن تصادم برای آن غیرممکن است. این ویژگی تنها بیان میکند که پیدا کردن این تصادمها باید بسیار سخت باشد.
تابع هش رمزنگاری
یک تابع هش رمزنگاری نوع خاصی از توابع هش بوده که دارای ویژگیهای منحصر به فردی است.
ویژگیهای این نوع هش سبب میشود برای هویتسنجی و برقراری امنیت بسیار مناسب باشد.
از این نوع تابع هش برای ساخت امضاهای دیجیتال و صحتسنجی استفاده میشود و میتوان با آن به اصطلاح «اثر انگشت دیجیتال» ساخت.
یک تابع هش رمزنگاریِ امن باید ویژگیهای زیر را داشته باشد:
-
قطعی و معین بودن
تابع هش به ازای یک ورودی مشخص، خروجی ثابت و مشخصی را به شما تحویل میدهد.
فرقی نمیکند که شما چند مرتبه و یا در چه زمانی آن ورودی را به تابع هش دادهاید؛ تحت هر شرایطی خروجی ثابت است.
این ویژگی از اهیمت بالایی برخوردار است، زیرا اگر هر بار هشهای مختلفی را تحویل دهد، آنگاه ردیابی و پیگیری اطلاعات غیرممکن خواهد بود.
مثلا اگر کلمه «سلام» را هزاران بار در تابع هش وارد کنیم باز هم هش این کلمه ثابت است.
-
محاسبه سریع
تابع هش باید بتواند هش ورودی را به سرعت محاسبه کند. اگر این فرآیند به اندازه کافی سریع نباشد، سیستم ناکارآمد خواهد شد.
-
تابع یک طرفه
توابع هش رمزنگاری، توابعی یک طرفه هستند. تابع یکطرفه به تابعی گفته میشود که برای هر ورودی، خروجی به راحتی قابل محاسبه است، اما بهدست آوردن پیشتصویرِ خروجیِ متناظر با یک ورودیِ تصادفی، غیرعملی است.
به عبارت دیگر، در یک تابع هش استاندارد، ساخت خروجی از ورودی به راحتی قابل انجام است اما پیدا کردن ورودی از خروجی بسیار دشوار است.
دقت داشته باشید از واژه دشوار و غیرعملی به جای واژه «غیرممکن» استفاده شده است.
-
مثال
تصور کنید که ما اعدادی بین ۱ تا ۶ داریم و به صورت تصادفی و مخفیانه، یکی از این اعداد را هش میکنیم.
خب حالا چگونه میتوانید تعیین کنید که عدد اصلی چه بود؟ از آنجایی که توابع هش همیشه معین است، هش ورودیهای خاص همیشه یکسان خواهد بود.
بنابراین تمام کاری که باید انجام دهید این است که هش اعداد ۱ تا ۶ را با هشی که ساخته شده است، مقایسه کنید و به این ترتیب عدد اصلی را بیابید.
اما این سازوکار زمانی امکانپذیر است که تعداد دادههای شما کم باشد. اگر با حجم عظیمی از اعداد سروکار داشته باشید، آنگاه چه خواهید کرد؟
فرض کنید شما با یک هش ۱۲۸ بیتی سر و کار دارید. تنها راه پیدا کردن داده ورودی اصلی استفاده از روش «جستجوی جامع» است.
جستجوی جامع که به آن جستجوی خام و بیخردانه (brute-force method) نیز گفته میشود، اساسا به این معنی است که شما باید همینطور دادهها را امتحان کرده و آن را با خروجی مقایسه کنید و این مراحل را تا جایی که هش ورودی و هش هدف با یکدیگر تطابق پیدا کنند، ادامه دهید.
خب اگر از این روش استفاده کنید چه اتفاقی میافتد؟
- هترین حالت ممکن: شما در اولین تلاش خود، جواب را پیدا کنید. برای اینکه این اتفاق بیافتد به معنای واقعی کلمه باید خوششانسترین فرد در تمام هستی باشید. احتمال رخ دادن چنین اتفاقی تقریبا به صفر میل میکند.
- بدترین حالت ممکن: شما پاسخ را در سعی و خطای دفعه (۱-۱۲۸)^۲ام بیابید. در واقع یعنی در آخرین شانس خود جواب را پیدا کنید.
- حالت میانگین: جواب را جایی در آن وسطها پیدا کنید. بنابراین پس از ۱۲۷^۲ = ۲/(۱۲۸)^۲ بار. برای اینکه درک واضحی از این عدد داشته باشید، باید بدانید که ۱۲۷^۲برابر است با ۳۸^۱۰× ۱.۷ و پیدا کردن عدد از بین این همه احتمال با کامپیوترهای امروزی احتمالا هزاران سال زمان خواهد برد.
بنابراین همانطور که پیشتر نیز عنوان شد، یافتن پیشتصویرِ خروجیِ متناظر با یک ورودیِ تصادفی با استفاده از حدس دادهها امکانپذیر است اما بسیار بسیار زمانبر خواهد بود به طوری که هیچ توجیهی برای این کار وجود ندارد.
-
هر تغییر در ورودی، هش را به طور کامل تغییر میدهد
حتی اگر تغییری بسیار کوچک در داده ورودی ایجاد کنید، بازتاب این تغییر کوچک در هش بسیار قابل توجه خواهد بود.
حتی اگر یک کاراکتر را تغییر دهید هش به طور کلی تغییر میکند. این عملکرد بسیار حائز اهمیت است، چراکه در صحت کلمات عبور و بسیاری از دادههای حیاتی از آن استفاده میشود.
زمانی که شما در سایتی مثل فیسبوک کلمه عبور خود را وارد میکنید، سیستم به طور خودکار هشِ کلمه عبور شما را با هش موجود در پایگاه داده تطبیق میدهد.
بنابراین اگر کلمه عبور ورودی شما کوچکترین تغییری نسبت به کلمه عبور اصلی کند، هش آن نیز تغییر میکند و با هش ثبت شده منطبق نخواهد بود.
-
مقاوم در برابر تصادم
با توجه به اینکه A و B دو ورودی متفاوت تابع هش هستند و (H(A و (H(B نیز به ترتیب هشهای متناظر با آنها، احتمال اینکه این دو خروجی با یکدیگر یکسان باشند عملا غیرممکن است. این بدان معناست که هر ورودی، هش منحصر به فرد خود را دارد.
انواع تابع هش
الگوریتمهای هش زیادی برای رمزنگاری داده وجود دارند.
-
MD۵
الگوریتم هش MD که مخفف عبارت «Message Digest» به معنی «خلاصه پیام» است، در سال ۱۹۹۱ توسط رونالد ریوِست و به عنوان جایگزینی برای تابع هش پیشین این خانواده یعنی MD4 طراحی شد.
الگوریتم MD5، تابع هشی است که به صورت گسترده مورد استفاده قرار میگیرد و هش ۱۲۸ بیتی تولید میکند.
اگر چه MD5 با هدف اینکه به عنوان تابع رمزنگاری مورد استفاده قرار گیرد طراحی و ایجاد شد، اما از مشکلات زیادی برخوردار است. همین باعث شد که کمتر به عنوان تابع هش از آن استفاده شود.
امروزه از این الگوریتم به عنوان چکسام برای بررسی درستی و یکپارچگی دادهها در برابر دستکاری ناخواسته استفاده میشود.
-
SHA – تابع هش ایمن
الگوریتم هش ایمن (Secure Hash Algorithm) که به اختصار آن را SHA مینامند، مجموعهای از الگوریتمهاست که توسط موسسه ملی استاندارد و فناوری (NIST) ایالات متحده و دیگر ارگانهای امنیتی ایجاد شد و توسعه یافت.
SHA-0 اولین الگوریتم از خانواده SHA است که در سال ۱۹۹۳ توسعه پیدا کرد. اما مدتی پس از انتشار به دلیل نقص قابل توجهی که در آن کشف شد، جای خود را به نسخهی جدیدتر و اصلاحشدهی SHA-1 داد.
SHA-۱ یک تابع هش ۱۶۰ بیتی است که به الگوریتم MD5 شباهت دارد. از طرفی دیگر الگوریتم SHA-1 شباهت بسیار زیادی به SHA-0 نیز دارد ولی در اصل ایرادهایی اساسی که در نسخه ۰ وجود داشته و سبب ضعف این الگوریتم شده بود را برطرف نمود.
این الگوریتم توسط آژانس امنیت ملی ایالات متحده (NSA) و با هدف اینکه بخشی از الگوریتم امضای دیجیتال باشد طراحی شد.
در سال ۲۰۰۵ رخنههای امنیتی در این الگوریتم تشخیص داده شد، که نشان از نفوذپذیری احتمالی آن داشت. از آن زمان بود که نیاز به یک الگوریتم بهتر در این حوزه احساس شد.
الگوریتم هش ایمن بعدی، SHA-2، متشکل از ۶ تابع هش با مقادیر هش متفاوت ۲۲۴، ۲۵۶، ۳۸۴ و ۵۱۲ بیتی است که نامهای آنها نیز با توجه به مقادیر هش انتخاب شده است؛ SHA-224، SHA-۲۵۶، SHA-384، SHA-۵۱۲، 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 در برنامههایی که نیازمند کارایی بالایی بودند بود.
Blake۲ خود به دو زیرگروه Blake2b و Blake2s تقسیم میشود. گفته میشود Blake2 از MD5، SHA-۱، SHA-2 و SHA-۳ سریعتر است و از لحاظ امنیت نیز با SHA-3، یعنی آخرین نسخه الگوریتم هش ایمن برابری میکند.
هشینگ در ارزهای دیجیتال
ارزهای دیجیتال برای حفظ بقا و امنیت خود تا حد زیادی به هش کردن وابسته هستند. چرا که اکثر عملیات انجام شده در بلاک چین آنها بر مبنای هش کردن اطلاعات به منظور حفظ امنیت آنها صورت میگیرد.
-
هویت سنجی و امضای دیجیتال
امضای دیجیتال یک مکانیزم رمزنگاری است که برای تایید صحت و اعتبارسنجی دادههای دیجیتال مورد استفاده قرار میگیرد.
به بیانی دیگر، امضای دیجیتال را میتوان به عنوان کدی که به پیام و یا سندی متصل است در نظر گرفت؛ کدی که اثبات میکند پیام در طول مسیر خود از فرستنده تا گیرنده دستکاری نشده است.
اگر چه مفهوم تضمین امنیت ارتباطات با استفاده از علم رمزنگاری به دوران باستان باز میگردد، اما امضای دیجیتال به لطف توسعه رمزنگاری کلید عمومی در سال ۱۹۷۰ به واقعیت بدل شد.
الگوریتمهای رمزنگاری کلید عمومی برای امضا کردن اسناد طولانی مناسب نیستند. برای صرفهجویی در زمان، اغلب پروتکلهای امضای دیجیتال به جای اینکه کل پیام را رمزنگاری کنند، از تابع هش استفاده میکنند.
هشینگ، یکی از اصلیترین عناصر سیستم امضای دیجیتال است. در مبحث ارزهای دیجیتال، یک سیستم امضای دیجیتال از سه مرحلهی هش کردن، امضا کردن و صحتسنجی تشکیل شده است.
-
-
هش کردن دادهها hash function
-
اولین قدم در امضای دیجیتال، هش کردن یا هشینگ دادههاست. این فرآیند با دادن اطلاعات به یک الگوریتم هش و دریافت مقدار هششده آغاز میشود.
ممکن است پیامهای ورودی از لحاظ اندازه با یکدیگر متفاوت باشند، اما در نهایت تمام مقادیر هش شده توسط یک الگوریتم خاص، طول یکسان و ثابتی دارند.
هش کردن دادههای برای ایجاد امضای دیجیتال ضروری نیست، چرا که میتوان از کلید خصوصی برای امضای اطلاعات استفاده کرد.
اما در زمینه ارزهای دیجیتال، دادهها همیشه هش میشوند، زیرا سروکار داشتن با دادههایی با طول ثابت و مشخص در تسهیل فرآیند عملکرد بلاک چین بسیار موثر است.
-
-
امضا کردن
-
پس از هش کردن اطلاعات، فرستنده پیام باید آن را امضا کند. این نقطه، جایی است که رمزنگاری کلید عمومی وارد بازی میشود.
انواع مختلفی از الگوریتمهای امضای دیجیتال وجود دارد که هر یک مکانیزم خاص خود را دارد. اما در اصل، پیام هششده، با کلید خصوصی امضا خواهد شد و دریافتکننده پیام میتواند اعتبار آن را با استفاده از کلید عمومی که توسط فرستنده ارائه شده است، بسنجد.
به بیانی دیگر، اگر در هنگام ایجاد امضا از کلید خصوصی استفاده نشود، دریافتکننده قادر نخواهد بود که از کلید عمومی مربوطه برای تایید صحت آن اطلاعات استفاده کند.
هر دوی کلیدهای عمومی و خصوصی توسط فرستنده پیام ایجاد میشوند، اما تنها کلید عمومی با شخص دریافتکننده و یا حتی دیگران به اشتراک گذاشته میشود.
شایان ذکر است که امضاهای دیجیتال به طور مستقیم با محتوای هر پیام مرتبط هستند. بنابراین برخلاف امضاهای دستی، که صرف نظر از نوع پیام و محتوا باید یکسان باشند، هر پیامی که به صورت دیجیتالی امضا شده است، امضای دیجیتالی متفاوتی دارد.
-
-
صحتسنجی
-
بیایید با مثالی کل فرآیند صحتسنجی را از ابتدا تا انتها بررسی کنیم. تصور کنید که مریم پیامی برای محمد نوشته، آن را هش کرده و سپس مقدار هش را با کلید اختصاصی خود ترکیب کرد تا یک امضای دیجیتال تولید کند. این امضا همانند اثر انگشت دیجیتالی منحصر به فردی از آن پیام عمل خواهد کرد.
زمانی که محمد پیام را دریافت کند، میتواند اعتبار امضای دیجیتال را با استفاده از کلید عمومی مریم بررسی کند. بدین طریق محمد میتواند اطمینان حاصل کند که این امضا توسط مریم ایجاد شده است، چرا که کلید خصوصیای که با این کلید عمومی منطبق باشد تنها در اختیار مریم قرار دارد.
بنابراین، مخفی و امن نگه داشتن کلید خصوصی برای هر کسی ضروری است. اگر شخصی دیگری به کلید خصوصی مریم دسترسی داشته باشد، میتواند به راحتی وانمود کند که مریم است و امضاهای دیجیتالی تولید کند که منجر به کلاهبرداری و دسترسی به اطلاعات خصوصی او شود.
در رابطه با ارزهای دیجیتال، این بدان معناست که هر کسی که به کلید خصوصی مریم دسترسی داشته باشد، میتواند بدون اجازهی او از حسابش کوین برداشت کند.
-
تغییرناپذیری بلاک چین
در بلاک چین از هش برای نشان دادن وضعیت فعلی شبکه استفاده میشود، به این ترتیب که داده ورودی هر چه را که در بلاک چین اتفاق افتاده است نشان میدهد.
در واقع هر تراکنشی که تا آن لحظه صورت گرفته است با دادههای جدیدی که اضافه میشود، ترکیب میشود. این بدان معناست که هش خروجی مبتنی بر تمامی تراکنشهای پیشینی است که بر روی بلاک چین اتفاق افتاد.
اولین هش برای اولین بلاک یا همان بلاک جنسیس، با توجه به تراکنشهایی که درون آن بلاک ثبت شده است محاسبه میشود.
برای هر بلاک جدیدی که از این پس ایجاد میشود، علاوه بر تراکنشهای بلاک مورد نظر، هش بلاک پیشین نیز به عنوان ورودی به تابع هش داده میشود و مقدار هش آن بلاک محاسبه میشود. بدین ترتیب زنجیرهای از بلاکها ایجاد میشود.
هش بلاک جدید با اشاره به هش بلاک پیش از آن ایجاد میشود. این سیستم هشینگ، درواقع تضمینی است که به ما اثبات میکند هیچگونه دستکاری در تراکنشها ممکن نیست.
چرا که اگر تنها بخش کوچکی از اطلاعات تراکنش تغییر کند، در نتیجه هش بلاکی که تراکنش درون آن ثبت شده است نیز تغییر خواهد کرد و به همین ترتیب هش بلاکهای بعد از آن نیز تغییر میکند.
در نتیجه از هرگونه تقلب و دستکاری جلوگیری میشود، چراکه تنها کافی است هشها با یکدیگر مقایسه شوند.
این ویژگی جالب و هیجانانگیز بلاک چین است، چون تمام افراد حاضر در شبکه باید تنها بر روی یک هش به توافق برسند و تایید کنند که تراکنشهای بلاک جدید درست هستند و در نهایت رضایت دهند که آن بلاک ایجاد شود. در صورت مشاهده عدم انطباق هشها، به راحتی به تقلب انجام شده پی میبرند و آن را رد میکنند.
بدین ترتیب و به همین سادگی هشینگ، بلاک چین را تغییرناپذیر میکند، خصوصیتی که به نوعی بارزترین مشخصه این فناوری محسوب میشود.
-
ماینینگ hash function
ماینینگ یا همان استخراج فرآیند یافتن و ایجاد یک بلاک جدید و افزودن آن به بلاک چین است. همانطور که میدانید عرضه بسیاری از ارزهای دیجیتال محدود به تعداد مشخصی است که این عدد برای بیت کوین ۲۱ میلیون واحد است.
اگر ماینرها بتوانند بسیار سریع و با کمترین توان محاسباتی بلاکهای جدید را ماین کنند، در عرض مدت زمان کوتاهی همه کوینها استخراج میشدند.
علاوه بر این، در بلاک چین محدودیت زمانی برای ایجاد هر بلاک در نظر گرفته شده است. اگر بلاکها در مدت زمانی کمتر از زمان درنظر گرفتهشده استخراج شوند، مشکلات زیر به وجود میآید:
- تصادم بیشتر: توابع هش بیشتری تولید خواهند شد و در نتیجه منجر به تصادم بیشتر میشود.
- بلاکهای یتیم بیشتر: اگر تعداد زیادی از ماینرها قادر به استخراج بلاک جدید شوند، در این صورت ممکن است همزمان با هم بلاک جدید به جواب برسند. اما همانطور که میدانید تنها یکی از این بلاکها جزو زنجیره خواهد شد و بقیه آنها رها خواهند شد که به آنها بلاک یتیم میگویند.
بنابراین، به منظور محدود کردن تولید بلاک، یک سطح دشواری مشخصی برای محاسبه و استخراج بلاک جدید در نظر گرفته میشود. استخراج شبیه به یک بازی است. شما معما را حل میکنید و جایزه میگیرید. در نظر گرفتن سختی، حل معما را دشوارتر و زمانبرتر میکند.
-
مثال
به عنوان مثال سختی هدف بیت کوین، یک رشته ۶۴ کاراکتری است که با چند صفر آغاز میشود. با افزایش سطح سختی استخراج، تعداد این صفرها نیز افزایش مییابد. سطح سختی پس از هر ۲۰۱۶ بلاک تغییر میکند.
زمانی که نرمافزارهای استخراج میخواهند یک بلاک جدید را به بلاک چین اضافه کنند، به شیوه زیر این کار را انجام میدهند. زمانی که بلاک جدید برای استخراج در شبکه قرار میگیرد، تمام محتویات بلاک هش میشوند.
اگر مقدار هش کمتر از سختی هدف است، آنگاه آن را به بلاک چین اضافه میکنند و تمام افراد شبکه باید بلاک جدید را تایید کنند.
به دست آوردن یک بلاک جدید به همین سادگی نیست. اینجاست که نانس (nounce) وارد بازی میشود. نانس رشتهای تصادفی و دلخواه است که با هش بلاک ترکیب میشود.
پس از آن، این رشته بههمپیوستهی جدید هش میشود و با سطح سختی مقایسه میشود. اگر مقدار آن کمتر از سطح سختی هدف نباشد، نانس باید تغییر کند و این فرآیند شاید میلیونها بار انجام شود تا در نهایت شرایط مورد نظر برآورده شود. زمانی که این اتفاق بیفتد، بلاک جدید به بلاک چین اضافه میشود.
نرخ تابع هش
نرخ هش در بلاک چین و عملگرهای ارز دیجیتال، به تعداد عملیات هش انجام شده در زمان معین یا سرعت عملکرد ماینر اطلاق میشود.
نرخ هش یکی از عوامل مهم و تاثیرگذار در استخراج ارز دیجیتال است و ماینرها برای انتخاب دستگاه استخراج آن را مد نظر قرار میدهند. در واقع نرخ هش، معیاری برای اندازهگیری عملکرد یک دستگاه ماینر است.
نرخ هش، پاداش ماینرها و سختی شبکه، سه عامل کاملاً وابسته به یکدیگرند. هر چه سختی شبکه بیت کوین بالاتر برود، نرخ هش بیشتری نیز برای پیدا کردن و ماین کردن بلاکها نیاز خواهد بود.
یکی از رایجترین معیارهای اندازهگیری نرخ هش «هش بر ثانیه» است. این عدد نشاندهنده تعداد هشهایی که در یک ثانیه انجام میشود. با توجه به نوع نوع الگوریتم و سختی شبکه، نرخ هش است و باید توجه داشت که نمیتوان نرخ هش الگوریتمهای متفاوت را با یکدیگر مقایسه کرد.
برخی دیگر از معیارهای اندازهگیری نرخ هش که در واقع تنها عمل تبدیل واحد بر روی آنها صورت گرفته عبارتند از:
- ۱ KH/s یا هزار هش بر ثانیه
- ۱ MH/s یا یک میلیون هش بر ثانیه
- ۱ GH/s یا یک میلیارد هش بر ثانیه
- ۱ TH/s یا یک تریلیون هش بر ثانیه
- ۱ PH/s یا یک کوادریلیون هش بر ثانیه
- ۱ EH/s یا یک کوئینتیلیون هش بر ثانیه
ارقام بالا به ترتیب کیلوهش، مگاهش، گیگاهش، تراهش، پتاهش و اگزا هش نامگذاری میشوند.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.