شاید تصورش سخت باشد اما اگر تابع هش و هشینگ (هش کردن) نبود امکان استفاده امن از اینترنت وجود نداشت.
هش کردن یا هشینگ به فرآیندی گفته میشود که در آن یک عملگر ریاضی به نام تابع هش (Hash Function)، دادههای ورودی مانند حروف و اعداد و تصویر و … را به خروجی رمزگذاری شده تبدیل میکند که به تابع هش، تابع درهمساز نیز گفته میشود.
تابع هش ورودی را میگیرد و تبدیل به یک رشته متنی با طول ثابت میکند.
به عنوان مثال یک تابع هش میتواند کلمه سلام را دریافت کند و به عنوان خروجی این عبارت را تحویل بدهد: bda۱fa۴۸۳۴۵۳۳۶۶۱۸۷۴۱fd۲c۴bc۰۲۸۰۹eb۰۹۹c۴۹a۹b۰۲fb۵۰۵۶۴۰۱ab۶d۴dc۳e۶
به خروجیِ تابع هش، هش (Hash) میگویند و به این عمل یعنی استفاده از تابع هش برای ایجاد هش، هش کردن یا هشینگ (Hashing) گفته میشود.
هر کسی که در رمزنگاری و ریاضیات تخصص داشته باشد میتواند با استفاده از این علوم برای خود تابع هش بسازد.
در حال حاضر انواع زیادی تابع هش وجود دارد و آن را به روش های گوناگونی میتوان ساخت اما در اینجا قصد داریم به عنوان نمونه نحوه کار الگوریتم شناخته شده SHA-256 را توضیح بدهیم که پرکاربردترین تابع هش دنیا است.
همانطور که در عکس بالا هم مشاهده میکنید، برای تابع هشِ استاندارد اهمیتی ندارد که ورودی شما چقدر بزرگ یا کوچک است، خروجی همیشه دارای طول ثابت خواهد بود.
این مساله زمانی اهمیت پیدا میکند که با تعداد زیادی داده و اطلاعات سر و کار داشته باشید، بنابراین به جای رهگیری و ذخیره دادههای ورودی که میتوانند بسیار زیاد و بزرگ باشند میتوانید تنها هش را ذخیره کنید و آن را ردیابی کنید.
همچنین استفاده از یک خروجی با طول ثابت سبب افزایش امنیت میشود، چون کسی که سعی در رمزگشایی هش داشته باشد نمیتواند با دیدن خروجی تشخیص دهد که ورودی ما به چه صورت بوده است.
ویژگی های تابع هش رمزنگاری
یک تابع هش رمزنگاری نوع خاصی از توابع هش بوده که دارای ویژگیهای منحصر به فردی است که این نوع هش سبب میشود برای هویتسنجی و برقراری امنیت بسیار مناسب باشد.
از این نوع تابع هش برای ساخت امضاهای دیجیتال و صحت سنجی استفاده میشود و میتوان با آن به اصطلاح اثر انگشت دیجیتال ساخت.
یک تابع هش رمزنگاریِ امن باید ویژگی های زیر را داشته باشد:
۱-قطعی و منحصر به فرد
تابع هش به ازای یک ورودی مشخص، خروجی ثابت و مشخصی را به شما تحویل میدهد.
فرقی نمیکند که شما چند مرتبه و یا در چه زمانی آن ورودی را به تابع هش دادهاید، تحت هر شرایطی خروجی ثابت است.
این ویژگی از اهیمت بالایی برخوردار است زیرا اگر هر بار هش های مختلفی را تحویل دهد، آنگاه ردیابی و پیگیری اطلاعات غیرممکن خواهد بود.
مثلا اگر کلمه سلام را هزاران بار در تابع هش وارد کنیم باز هم هش این کلمه ثابت است.
با توجه به اینکه A و Bدو ورودی متفاوت تابع هش هستند و (H(A و (H(B نیز به ترتیب هش های متناظر با آنها احتمال این که این دو خروجی با یکدیگر یکسان باشند عملا غیر ممکن است.
این بدان معناست که هر ورودی،هش منحصر به فرد خود را دارد.
۲-محاسبه سریع
تابع هش باید بتواند هش ورودی را به سرعت محاسبه کند، اگر این فرآیند به اندازه کافی سریع نباشد سیستم ناکارآمد خواهد شد.
۳- تابع یک طرفه
توابع هش رمزنگاری، توابعی یک طرفه هستند که برای هر ورودی، خروجی به راحتی قابل محاسبه است.
در یک تابع هش استاندارد، ساخت خروجی از ورودی به راحتی قابل انجام است اما پیدا کردن ورودی از خروجی بسیار دشوار است.
۴-تغییر در ورودی برابر تغییر کامل هش
حتی اگر تغییری بسیار کوچک در داده ورودی ایجاد کنید، بازتاب این تغییر کوچک در هش بسیار قابل توجه خواهد بود.
همانطور که در تصویر مشاهده میکنید حتی اگر یک کاراکتر را تغییر دهید هش به طور کلی تغییر میکند، این عملکرد بسیار حائز اهمیت است چرا که در صحت کلمات عبور و بسیاری از دادههای حیاتی از آن استفاده میشود.
زمانی که شما در سایتی مثل فیسبوک، کلمه عبور خود را وارد میکنید سیستم به طور خودکار هشِ کلمه عبور شما را با هش موجود در پایگاه دادهتطبیق میدهد.
بنابراین اگر کلمه عبور ورودی شما کوچکترین تغییری نسبت به کلمه عبور اصلی کند، هش آن نیز تغییر میکند و با هش ثبت شده منطبق نخواهد بود.
همچنین در بحث ارزهای دیجیتال این ویژگی باعث برقراری یکی از مهمترین اصل های بلاک چین یعنی تغییر ناپذیری میشود.
نمونههایی از تابع هش رمزنگاری
۱-MD۵
الگوریتم هش MD که مخفف عبارت Message Digest به معنی خلاصه پیام است، در سال ۱۹۹۱ توسط رونالد ریوِست و به عنوان جایگزینی برای تابع هش پیشین این خانواده یعنی MD4 طراحی شد.
الگوریتم MD5 تابع هشی است که به صورت گسترده مورد استفاده قرار میگیرد و هش ۱۲۸ بیتی تولید میکند.
۲-SHA
الگوریتم هش ایمن Secure Hash Algorithm که به اختصار آن را SHA مینامند، مجموعه ای از الگوریتم ها است که توسط موسسه ملی استاندارد و فناوری (NIST) ایالات متحده و دیگر ارگانهای امنیتی ایجاد شد و توسعه یافت.
SHA-0 اولین الگوریتم از خانواده SHA است که در سال ۱۹۹۳ توسعه پیدا کرد، اما مدتی پس از انتشار به دلیل نقص قابل توجهی که در آن کشف شد جای خود را به نسخهی جدیدتر و اصلاحشدهی SHA-1 داد.
SHA-۱ یک تابع هش ۱۶۰ بیتی است که به الگوریتم MD5 شباهت دارد.
از طرفی دیگر الگوریتم SHA-1 شباهت بسیار زیادی به SHA-0 نیز دارد ولی در اصل ایرادهایی اساسی که در نسخه SHA-0 وجود داشته و سبب ضعف این الگوریتم شده بود را برطرف نمود.
این الگوریتم توسط آژانس امنیت ملی ایالات متحده NSA و با هدف اینکه بخشی از الگوریتم امضای دیجیتال باشد طراحی شد که در سال ۲۰۰۵ با رخنههای امنیتی در این الگوریتم، نیاز به یک الگوریتم بهتر در این حوزه احساس شد.
الگوریتم هش ایمن بعدی SHA-2 متشکل از ۶ تابع هش با مقادیر هش متفاوت ۲۲۴، ۲۵۶، ۳۸۴ و ۵۱۲ بیتی است که نامهای آنها نیز با توجه به مقادیر هش انتخاب شده است که این الگوریتم ها در طول با یکدیگر متفاوتند.
الگوریتم شناختهشدهی SHA-256 در بلاک چینِ بیت کوین هم استفاده میشود، علاوه بر این از این الگوریتم در TLS ،SSL ،PGP ،SSH، توسعه چند منظوره پست الکترونیک اینترنت امن و IPsec یا همان ایمنسازی پروتکل اینترنت استفاده میشود.
آخرین عضو از خانواده الگوریتم هش ایمن، SHA-3 است که در سال ۲۰۱۵ توسط NIST منتشر شد که از این الگوریتم به عنوان برترین الگوریتم برگزیده شد.
۳-RIPEMD
RIPEMD که مخفف عبارت RACE Integrity Primitives Evaluation Message Digest است و همانند الگوریتم SHA مجموعهای از توابع هش است که در بلژیک و توسط گروه تحقیقاتی COSIC در سال ۱۹۹۶ توسعه یافت.
در طراحی این الگوریتم از اصول به کار رفته در MD4 استفاده شده است و عملکردی مشابه با SHA-1 دارد.
طول هش توابع این خانواده متفاوت است و دارای مقادیر ۱۲۸، ۱۶۰، ۲۵۶ و ۳۲۰ بیتی است.
تاکنون حمله موفقی به RIPEMD گزارش نشده است.
۴-Whirlpool
ویرپول یکی دیگر از توابع هش در دنیای رمزنگاری است که این الگوریتم در سال ۲۰۰۰ و توسط وینسنت ریمن و پائولو بارتو طراحی شده است.
این تابع هش هر پیامی با طول کمتر از ۲۲۵۶ بایت را دریافت و هشی با اندازه ۵۱۲ بیت (۶۴ بایت) تولید میکند، هش ۵۱۲ بیتی الگوریتم ویرپول به صورت اعداد ۱۲۸ رقمی نمایش داده میشود.
۵-Blake
بلیک یکی از الگوریتمهایی است که در رقابت توابع هشی که از جانب موسسه ملی استاندارد و فناوری ایالات متحده (NIST) با هدف انتخاب بهترین تابع هش برای توسعه SHA-3 برگزار شده بود، در بین ۵ الگوریتم برگزیده قرار داشت.
همانند SHA-2 نیز دارای ۲ نوع الگوریتم متفاوت است، یکی از کلمات ۳۲ بیتی استفاده میکند و طول هش محاسبهشدهی آن حداکثر ۲۵۶ بیت است و دیگری از کلمات ۶۴ بیتی استفاده میکند با طول هش ۵۱۲ بیت.
اما شناخته شده ترین عضو خانواده بلیک، Blake2 است که در سال ۲۰۱۲ منتشر شد و هدف از طراحی این الگوریتم معرفی جایگزینی برای الگوریتمهای پرکاربرد اما آسیبپذیر MD5 و SHA-1 در برنامههایی که نیازمند کارایی بالایی بودند بود.
Blake۲ خود به دو زیرگروه Blake2b و Blake2s تقسیم میشود و گفته میشود Blake2 از SHA-3 ،SHA-2 ،SHA-1 و MD5 سریعتر است و از لحاظ امنیت نیز با SHA-3 یعنی آخرین نسخه الگوریتم هش ایمن برابری میکند.
هشینگدر ارزهای دیجیتال
ارزهای دیجیتال برای حفظ بقا و امنیت خود تا حد زیادی به هش کردن وابسته هستند، چرا که اکثر عملیات انجام شده در بلاک چین آنها بر مبنای هش کردن اطلاعات به منظور حفظ امنیت آنها صورت میگیرد.
۱-هویت سنجی و امضای دیجیتال
امضای دیجیتال یک مکانیزم رمزنگاری است که برای تایید صحت و اعتبارسنجی دادههای دیجیتال مورد استفاده قرار میگیرد.
به بیانی دیگر امضای دیجیتال را میتوان به عنوان کدی که به پیام و یا سندی متصل است در نظر گرفت، کدی که اثبات می کند پیام در طول مسیر خود از فرستنده تا گیرنده دستکاری نشده است.
الگوریتمهای رمزنگاری کلید عمومی برای امضا کردن اسناد طولانی مناسب نیستند، برای صرفهجویی در زمان اغلب پروتکل های امضای دیجیتال به جای اینکه کل پیام را رمزنگاری کنند از تابع هش استفاده میکنند.
هشینگ یکی از اصلیترین عناصر سیستم امضای دیجیتال است و امضای دیجیتال در واقع اثر انگشت دیجیتالی منحصر به فردی از پیام است.
در ارزهای دیجیتال یک سیستم امضای دیجیتال از سه مرحله ی هش کردن، امضا کردن و صحتسنجی تشکیل شده است.
اولین قدم در امضای دیجیتال، هش کردن یا هشینگ دادهها است که این فرآیند با دادن اطلاعات به یک الگوریتم هش و دریافت مقدار هش شده آغاز میشود.
ممکن است پیامهای ورودی از لحاظ اندازه با یکدیگر متفاوت باشند، اما در نهایت تمام مقادیر هش شده توسط یک الگوریتم خاص، طول یکسان و ثابتی دارند.
پس از هش کردن اطلاعات، فرستنده پیام باید آن را امضا کند و در نهایت هم اعتبار سنجی آن صورت می گیرد.
۲-تغییر ناپذیری بلاک چین
در بلاک چین از هش برای نشان دادن وضعیت فعلی شبکه استفاده میشود، به این ترتیب که داده ورودی هر چه را که در بلاک چین اتفاق افتاده است نشان میدهد.
در واقع هر تراکنشی که تا آن لحظه صورت گرفته است با دادههای جدیدی که اضافه میشود ترکیب میشود، این بدان معناست که هش خروجی مبتنی بر تمامی تراکنش های پیشینی است که بر روی بلاک چین اتفاق افتاد.
اولین هش برای اولین بلاک یا همان بلاک جنسیس با توجه به تراکنش هایی که درون آن بلاک ثبت شده است محاسبه میشود.
برای هر بلاک جدیدی که از این پس ایجاد میشود هش بلاک پیشین نیز به عنوان ورودی به تابع هش داده میشود و مقدار هش آن بلاک محاسبه میشود، بدین ترتیب زنجیره ای از بلاک ها ایجاد میشود.
هش بلاک جدید با اشاره به هش بلاک پیش از آن ایجاد میشود که این سیستم هشینگ درواقع تضمینی است که به ما اثبات میکند هیچ گونه دستکاری در تراکنش ها ممکن نیست.
برای تغییر یک بلاک در بلاک چین باید هش تمام بلاک های قبلی را هم تغییر داد چون هر بلاک علاوه بر هش خود دارای هش بلاک قبلی هم هست، در نتیجه از هرگونه تقلب و دستکاری جلوگیری میشود چرا که تنها کافی است هش ها با یکدیگر مقایسه شوند.
این ویژگی هیجان انگیز بلاک چین است چون تمام افراد حاضر در شبکه باید تنها بر روی یک هش به توافق برسند و تایید کنند که تراکنش های بلاک جدید درست هستند و در نهایت رضایت دهند که آن بلاک ایجاد شود.
در صورت مشاهده عدم انطباق هشها به راحتی به تقلب انجام شده پی میبرند و آن را رد میکنند، بدین ترتیب و به همین سادگی هشینگ، بلاک چین را تغییر ناپذیر میکند، خصوصیتی که به نوعی بارزترین مشخصه این فناوری محسوب میشود.
۳-ماینینگ
ماینینگ یا همان استخراج، فرآیند یافتن و ایجاد یک بلاک جدید و افزودن آن به بلاک چین است.
همانطور که میدانید عرضه بسیاری از ارزهای دیجیتال، محدود به تعداد مشخصی است که این عدد برای بیت کوین ۲۱ میلیون واحد است.
اگر ماینر ها بتوانند بسیار سریع و با کمترین توان محاسباتی، بلاک های جدید را ماین کنند در عرض مدت زمان کوتاهی همه کوین ها استخراج میشدند.
علاوه بر این در بلاک چین محدودیت زمانی برای ایجاد هر بلاک در نظر گرفته شده است چون اگر بلاکها در مدت زمانی کمتر از زمان درنظر گرفته شده استخراج شوند، توابع هش بیشتری تولید خواهند شد و در نتیجه منجر به تصادم بیشتر میشود.
یا اگر تعداد زیادی از ماینرها قادر به استخراج بلاک جدید شوند، در این صورت ممکن است همزمان با هم بلاک جدید به جواب برسند، اما تنها یکی از این بلاک ها جزو زنجیره خواهد شد و بقیه آنها رها خواهند شد که به آن ها بلاک یتیم میگویند.
بنابراین به منظور محدود کردن تولید بلاک یک سطح دشواری مشخصی برای محاسبه و استخراج بلاک جدید در نظر گرفته میشود، استخراج شبیه به یک بازی است، شما معما را حل میکنید و جایزه میگیرید.
به دست آوردن یک بلاک جدید به همین سادگی نیست، اینجاست که نانس (Nonce) وارد بازی میشود، نانس رشتهای تصادفی و دلخواه است که با هش بلاک ترکیب میشود.
پس از آن این رشته ی به همپیوسته ی جدید، هش میشود و با سطح سختی مقایسه میشود.
اگر مقدار آن با مقایسه سختی مناسب نباشد، نانس باید تغییر کند و این فرآیند شاید میلیون ها بار انجام شود تا در نهایت شرایط مورد نظر برآورده شود، زمانی که این اتفاق بیفتد بلاک جدید به بلاک چین اضافه میشود.
هش ریت یا نرخ هش یا قدرت هش
نرخ هش در بلاک چین و عملگرهای ارز دیجیتال، به تعداد عملیات هش انجام شده در زمان معین یا سرعت عملکرد ماینر اطلاق میشود.
نرخ هش یکی از عوامل مهم در استخراج ارز دیجیتال است و ماینر ها برای انتخاب دستگاه استخراج آن را مد نظر قرار میدهند،در واقع نرخ هش معیاری برای اندازه گیری عملکرد یک دستگاه ماینر است.
نرخ هش، پاداش ماینرها و سختی شبکه، سه عامل کاملاً وابسته به یکدیگرند، هر چه سختی شبکه بیت کوین بالاتر برود، نرخ هش بیشتری نیز برای پیدا کردن و ماین کردن بلاکها نیاز خواهد بود.
یکی از رایجترین معیارهای اندازهگیری نرخ هش، هش بر ثانیه است که این عدد نشان دهنده تعداد هش هایی که در یک ثانیه انجام میشود.
هش ریت یا نرخ هش یا قدرت هش چیست؟
اندازه گیری هش ریت
۱- ۱ KH/s یا هزار هش بر ثانیه، معادل یک کیلوهش بر ثانیه
۲- ۱ MH/s یا یک میلیون هش بر ثانیه، معادل یک مگاهش بر ثانیه
۳- ۱ GH/s یا یک میلیارد هش بر ثانیه، معادل یک گیگاهش بر ثانیه
۴- ۱ TH/s یا یک تریلیون هش بر ثانیه، معادل یک تراهش بر ثانیه
۵- ۱ PH/s یا یک کوادریلیون هش بر ثانیه، معادل یک پتاهش بر ثانیه
۶- ۱ EH/s یا یک کوئینتیلیون هش بر ثانیه، معادل یک اگزاهش بر ثانیه
واحد بعدی در این اندازهگیریزتاهش Zetta خواهد بود و این رشته را میتوان تا بینهایت ادامه داد.
هش ریت بیت کوین
در شبکه بیت کوین، مصرف انرژی از آن جهت صورت میگیرد که شبکه برای یافتن بلاک ها از محاسبات پیچیده ریاضی بهره میبرد و این مسئله توسط واحدی با عنوان نرخ یا قدرت هش اندازهگیری میشود.
بهعبارت دیگر این محاسبات، مسائل ریاضی هستند که یک ماینر نمیتواند آنها را حدس بزند و یافتن جواب این مسائل نیازمند محاسباتی پیچیده است.
ماینر ها نیز بهوسیله تغییر اندک در این بلاک که هدف موقتی (Nonce) نامیده میشود به این هش میرسند.
از آن جهت که هدف موقتی نوعی انداختن تیر در تاریکی است، ماینردفعات زیادی عمل تغییر در میزان هدف موقتی را تکرار میکند تا بالاخره موفق شود.
این تکرار در تغییر دادن میزان هدف موقتی در واحد ثانیه را نرخ هش یا قدرت هش مینامند، در واقع نرخ هش، تعداد دفعاتی است که یک ماینر، هدف موقتی را حدس میزند که به این روند استخراج بیت کوین میگویند.
نرخ هش فعلی بیت کوین پنجاه اگزاهش بر ثانیه است، این میزان با اضافه شدن تعداد ماینرها در سختیهای بالاتر، با افزایش مواجه خواهد شد.
هش ریت، پاداش ماینرها و سختی
نرخ هش، پاداش ماینرها و سختی شبکه، سه عامل کاملاً وابسته به یکدیگرند، هر چه سختی شبکه بیت کوین بالاتر برود قدرت هش بیشتری نیز برای ماین بلاکها نیاز است.
ماین کردن هر بلاک موجب بدست آوردن پاداش آن بلاک برای ماینر ها خواهد شد.
در حال حاضر در ازای ماین کردن هر بلاک ۱۲.۵ بیت کوین میان ماینر ها تقسیم میشود.
پاداش بلاک هر چهار سال یکبار در رویدادی با نام هاوینگ یا نصف شدن پاداش استخراج به یک دوم کاهش مییابد.
هر چه سختی شبکه بیت کوین به دلیل افزایش تعداد ماینرها بالاتر رود، قدرت هش مورد نیاز برای ماین کردن هر بلاک نیز با افزایش مواجه خواهد شد، این یعنی تعداد حدس ها برای رسیدن به جواب صحیح و حل کردن معادله ریاضی مربوطه بیشتر خواهد شد.
پروتکل مورد استفاده در شبکه بیت کوین به گونه ای است که بنا بر رابطه فوق میانگین زمان هر بلاک بر روی ده دقیقه باقی خواهد ماند.
اگر پس از خواندن این مطلب فکر استخراج بیت کوین به سرتان زده به یاد داشته باشید که پروسه استخراج بیت کوین کاری بسیار هزینه بر و با مصرف انرژی بالاست که تأمین هزینه ها از عهده هرکسی بر نخواهد آمد.
تهیه سخت افزار های گران قیمت، قبوض برق سنگین و نیازمندی به دانش رایانه ای بالا از جمله سختی هایی است که بر سر راه استخراج بیت کوین وجود دارد.