سمیرا ابراهیم پور | 1395.12.03

تابع هش و ارتباط آن با بیتکوین

یکی از مباحثی که هر علاقه مندی به بیت کوین آن را شنیده است “تابع هش برای رمزنگاری” است. در این مقاله به توضیح این تابع و ارتباط آن با بیت کوین و سایر دیجی ارزها می پردازیم.

تابع هش چیست؟

تابع “هش” نه تنها برای امنیت بیت کوین بلکه برای امنیت هرگونه اطلاعاتی نیاز است.

تابع هش با استفاده از یک پردازش ریاضی داده هایی را با سایزهای مختلف دریافت کرده و طی انجام عملیاتی بر روی آنها، خروجی هایی با اندازه مشخص می دهد. فرقی نمی کند که ورودی تابع چه اندازه ای داشته باشد، می تواند یک حرف یا یک کلمه یا حتی یک کتاب باشد، اما در نهایت خروجی این تابع ترتیبی از حروف با اندازه مشخص خواهد بود.

یکی از استفاده های رایج از تابع هش در ذخیره پسوردها می باشد. زمانی که در جایی پسوردی ساخته می شود، این پسورد از تابع هش عبور کرده و پس از تغییراتی که روی آن انجام می گیرد ذخیره می شود. همچنین زمانی که کاربر برای ورود، پسورد را وارد می کند، همان تابع روی حروف تایپ شده اعمال می شود و سرور خروجی تابع را با آنچه که قبلا ذخیره شده بود چک می کند و در صورت مشابه بودن، به کاربر اجازه ورود می دهد.

امنیت ایجاد شده توسط هش

فرض کنید هکری به پایگاه داده ای (Database) که پسوردهای هش شده در آن وجود دارد دسترسی پیدا کند. این هکر نمی تواند بلافاصله به حساب کاربران دسترسی پیدا کند؛ چرا که یافتن پسورد از طریق هش تولید شده از آن پسورد کار ساده ای نیست.

در رابطه با هش این موضوع نیز قابل توجه است که زمانی که یک ورودی به تابع هش داده می شود، خروجی مشخصی تولید می کند. این در حالی ست که اگر تنها یک کاراکتر در هرکجای همان ورودی تغییر کرده یا اضافه شود، خروجی کاملا تغییر می کند و هیچ شباهتی به خروجی قبلی نخواهد داشت.

تکه کدی برای نمونه

برای مثال تکه کدی کوتاه در زبان پایتون را خواهید دید:

 

خروجی خط 7:  362100fe0cf50b94297480e384692c03

خروجی خط 8:  fdf7f4126ecde5a22ac07859680ab348

خروجی خط 9:  c68019cc8dbc4d4909c1988ec0b780a8

همانطور که مشخص است هر سه خروجی متفاوت هستند. تفاوت خط 7 و 8 در نقطه ای ست که در انتهای ورودی خط 8 اضافه شده و تفاوت خط 7 و 9 در حرف I و i در قسمت CoinIran است، یعنی حتی با تغییر حروف از بزرگ به کوچک و بالعکس نیز خروجی تابع به طور کامل تغییر خواهد کرد.

تابع هش در بیت کوین

در روند استخراج (mining) برای اضافه کردن هر تراکنش به بلاک چین، از توابع هش که بخشی از “الگوریتم هش کردن بلاک” است استفاده می شود. ورودی ها برای این توابع تراکنش های جدیدِ هنوز تایید نشده به همراه ورودی های دیگری مثل زمان انجام تراکنش و ارجاعی به بلاک های قبلی می باشد.

استخراخ کنندگان برای تایید هر بلوک تراکنش باید تمام ورودی ها را با ورودی های دلخواه ادغام کرده، به طوری که هش بدست آمده، با تعداد تعریف شده ای صفر آغاز شود. به این عمل “اثبات کار” یا همان “proof of work” می گویند. در حال حاضر هش تولید شده باید با 18 صفر آغاز شود که این امر محاسبات سنگینی را می طلبد. چرا که با توجه به مطلبی که در بالا توضیح داده شد، هر ورودی دارای هش منحصر به فردی است که با هر تغییر کوچک در ورودی، هش خروجی هم تغییر می کند. سیستم بیت کوین از الگوریتم هش SHA-256) Secure Hash Algorithm 256-bit) استفاده می کند.



دیدگاه هایی که در این مقاله ارائه شده اند، متعلق به نویسنده می باشند و لزوماً مربوط به Coiniran نمی باشد و نباید به آن نسبت داده شود.



 Images via csharpoop