توابع هش یا برهم ساز

زنجیره بلوکی مطمئنا مهم ترین نوآوری معرفی شده توسط بیت کوین است. نواوری مزبور، ایجاد ارزهای دیجیتال همکار به همکار توزیع شده را امکان پذیر کرده است. زنجیره بلوکی پایگاه داده ای توزیع شده بوده و تراکنش های بیت کوین را از آغاز آن (۳ ژانویه ۲۰۰۹) نگهداری کرده است. همچنین روشی برای تأمین امنیت این پایگاه داده ارایه کرده است. زنجیره بلوکی، لیستی امن از تمام تراکنش ها را نگه می دارد. با این حال، پرسش هایی نظیر این که آیا خروجی یک تراکنش خاص قابلیت خرج شدن دارد یا نه، توسط زنجیره بلوکی بطور مستقیم پاسخ نداده است.
نرم افزارهای منتفع از زنجیره بلوکی همانند گره های معدن کاو یا کیف های پول، برای استخراج اطلاعات مرتبط باید زنجیره بلوکی را تجزیه کنند. اطلاعات استخراج شده از زنجیره بلوکی بطور معمول از داخل پایگاه داده ای تغذیه می شوند. برای مثال، نرم افزار گره بیت کوین از پایگاه داده های خاصی در این زمینه استفاده می کند. این پایگاه داده یک کپی از خروجی های تراکنش خرج نشده را نگه داری می کند. برای پر کردن پایگاه داده مزبور، تمام زنجیره بلوکی باید تجزیه شود.

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

توابع هش یا برهم ساز

تابع هش، الگوریتمی است که داده با طول اختیاری را به عنوان ورودی گرفته و خروجی آن رشته ای بیتی با طول ثابت به نام خروجی هش” است. مقدار خروجی هش همیشه برای داده های ورودی مشابه یکسان است. تابع هش یک نگاشت از مجموعه ای از داده های ورودی (با طول اختیاری) به مجموعه ای از خروجی های هش با طول ثابت است. ویژگی توابع هش این است که تفاوتی کوچک در داده های ورودی باعث ایجاد تفاوت های بزرگ در نتیجه خروجی می شود. یکی از نیازمندی های مشترک توابع هش انجام سریع محاسبات است. توابع هش بطور گسترده در محاسبات استفاده می شوند. برای مثال، می توان از جداول هش برای جست وجوی سریع و تعیین مکان پرونده داده ها استفاده کرد. اندازه خروجی های هش بطور معمول کوچکتر از اندازه داده های ورودی به آن هستند. بنابراین دور از تصور نیست که بسیاری از داده های ورودی، به خروجی هش یکسانی اشاره کنند.
تابع هش خوب باید مقادیر ورودی را به خروجی های هش، به طوری که هر خروجی هش تقریبا به تعداد مشابهی از مقادیر ورودی ممکن مرتبط شده باشند، بطور متناسب توزیع کند. یکی از راههای رسیدن به این تناسب آن است تا یک خروجی هشی بسازیم که رفتار آن تا آنجا که ممکن است، تصادفی باشد. توجه داشته باشید گر چه رفتار خروجی هش تصادفی بوده، ولی هنوز قطعی است. یعنی اگر مقدار ورودی مشابه باشد، مقدار خروجی هش همواره یکسان خواهد بود. بیت کوین از توابع هش
نگاری برای انجام گواهی تأیید کار خود استفاده می کند. توابع هش رمزنگاری نیازهای اضافی دیگری را علاوه بر توابع هش رایج، تحمیل می کنند:

  • مقاومت در برابر پیش تصویر

با داشتن مقدار هش خروجی، پیدا کردن داده های ورودی باید از لحاظ محاسباتی غیرعملی باشد. همان طور که در ادامه روشن خواهد شد، این موضوع ویژگی کلیدی برای کاربرد گواهی تأیید کار است.

  • مقاومت در برابر برخورد (ضعیف)

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

  • مقاومت در برابر برخورد (سخت) (عدم برخورد)

پیدا کردن دو ورودی که خروجی هش آنها یکسان باشد، به لحاظ محاسباتی غیر عملی است این ویژگی به جعل ناپذیری امضا الکترونیکی کمک می کند.

بیت کوین با دو بار استفاده از تابع هش اس.اچ.ای ۲۵۶، گواهی تأیید کار خود را کاربردی می کند. اس.اچ.ای ۲۵۶ بخشی از توابع هشی است که توسط آژانس امنیت ملی طراحی شده و در سال ۲۰۰۱ توسط مؤسسه ملی استاندارد و فن آوری منتشر شده است. اس.اچ.ای ۲۵۶ تابع هشی از این خانواده بوده و خروجی آن ۲۵۶ بیت است. شکل زیر مثالی از دو بار استفاده از تابع هش اس.اچ.ای ۲۵۶ را نشان می دهد:

توابع هش یا برهم ساز

توابع هش

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

بسیاری از توابع هش رمزنگاری و از جمله اس.اچ.ای ۲۵۶، از راهکاری ابتدایی و ساده به نام تابع فشرده سازی استفاده کرده و ساخته می شوند. تابع فشرده سازی بر روی ورودی با طول ثابت عمل کرده و خروجی با همان طول را ایجاد می کند. هدف از تابع فشرده سازی این است تا بیت های ورودی را به صورت قطعی، اما از راهی پیچیده به هم ریخته تا به خروجی برسیم. این هدف با قرار دادن پیام اصلی در سری هایی از انتقال داده ها و عملیات درهم کردن با ثابت هایی تصادفی برآورده می شود.

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

تابع مرکل دامارد

تابع مرکل دامگارد

در مورد اس.ای.ای ۲۵۶، تابع فشرده سازی بر روی داده های ۲۵۶ بیتی عمل می کند. تابع فشرده سازی دو ورودی می پذیرد: یکی مقدار هش میانی و دیگری بلوکی از دادههای ورودی برای محاسبه هش اس.اچ.ای ۲۵۶، داده های ورودی برای اولین بار به بلوکهایی با طول ۲۵۶ بیت شکسته می شوند. پایان پیام را با صفر و نیز اندازه طول پیام پر می کنند. مقدار هش میانی اولیه با مقدار هش اولیه، مقداردهی اولیه می شود. با استفاده از مقدار هش آخرین مرحله به عنوان مقدار هش میانی برای مرحله بعدی، تابع فشرده سازی به هر یک از بلوکهای پیام اعمال می شود. مقدار هش حاصل در آخرین مرحله اس.اچ.ای ۲۵۶، هش کل پیام است.
اس.اچ.ای ۲۵۶ به عنوان بیشترین تابع هش رمزنگاری مورد استفاده، طراحی شده است تا بر روی سخت افزارهای چند منظوره سریع عمل کند. علاوه بر این، به دلیل این که دوره های تابع فشرده سازی از عملیات بیتی و رجیسترهای ۳۲ بیتی استفاده می کند، بهتر است از پیاده سازی های سخت افزاری کارا استفاده شود. این موضوع باعث رشد صنعت معدن کاوی مدارهای مجتمع خاص کاربرد که شده است.

هش کلمه عبور

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

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

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

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

بسیاری از توابع هش استاندارد از جمله اس.اچ.ای ۲۵۶، سریع هستند. این می تواند مشکلی برای هش کردن کلمه عبور باشد؛ زیرا توابع هش سریع کلمه عبور، آسان تر شکسته می شوند. یک راه حل ممکن آن است تا تابع هش را چند بار اجرا کنیم. برای مثال، سیستم عامل لینوکس اجازه میدهد تا تعداد دفعات اجرای هش را تعیین و تابع هش را به کلمه عبور همراه با نمک، قبل از این که آن را ذخیره سازی کرد، اعمال کنیم. با استفاده از تکرار، تلاش برای شکستن رمز عبور مشکل تر می شود.

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

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

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *