درهم سازی یا hash چیست؟

توابه هش

هش و اصول رمز نگاری

 

یک Hash  که به آن Checksum ، پیام Digest و یا اثرانگشت ، نیز گفته می شود ، فرآیندی است که بصورت ریاضی، حجم یک جریان از داده را به یک طول ثابت کاهش می دهد ( معمولا” ۱۲۸ و یا ۱۶۰ بیت ) .  عملکرد hash ، مشابه اثرانگشت یک شخص می باشد. اثرانگشت ، پارامتری منحصربفرد به منظور تشخیص هویت افراد بوده و در ادامه با استفاده از آن امکان دستیابی به سایر مشخصات افراد نظیر : رنگ چشم ، قد ، جنسیت و سایر موارد دلخواه ، فراهم می گردد . اکثر توابع Hash از لحاظ رمزنگاری دارای عملکردی مشابه توابع رمزنگاری  می باشند . در حقیقت ، برخی توابع hash صرفا” تغییرات اندکی را در توابع رمزنگاری ایجاد نموده اند . اکثر عملیات با دریافت یک بلاک  از داده  شروع و در ادامه با استفاده از یک فرآیند تکرارشونده و بکارگیری یک الگوریتم رمزنگاری ، تغییرات لازم در ارتباط با بیت ها ، اعمال می شود.

 hashبه عبارتی دیگر

      هش (Hash, Hash Code, Digest, Message Digest هم نامیده می شود) را می توان به صورت اثر انگشت دیجیتالی یک داده در نظر گرفت. با این روش شما می توانید رشته ای اندازه-ثابت (fixed length) از یک داده به دست آورید که با روش های ریاضی به صورت “یک طرفه” رمزنگاری شده است. کشف رشته اصلی از رشته هش آن (عملیات معکوس) به صورت کارا تقریبا  غیر ممکن است. نکته دیگر اینکه هر داده یک رشته هش شده کاملا  منحصر به فرد ایجاد می کند( احتمال یکی شدن رشته های هش دو رشته متفاوت در الگوریتم MD5 یک در ۳٫۴۰۲۸۲۳۶۶۹۲۰۹۳۸۴۶۳۴۶۳۳۷۴۶۰۷۴۳۱۷۷e+38 می باشد..  این خواص ، هش کردن را به روشی کارا و ایده آل برای ذخیره سازی کلمات عبور در برنامه های شما تبدیل می کند. چرا؟ برای این که حتی اگر یک نفوذگر(Hacker) بتواند به سیستم و بانک اطلاعاتی شما نفوذ کند و بخشی از اطلاعات شما را به دست آورد (شامل کلمات عبور هش شده) نمی تواند کلمات عبور اولیه را از روی آن ها بازیابی کند.

 توجه کنیدکه:

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

Hash ، دارای ویژگی های مهم زیر می باشد :

امکان استنتاج ورودی از طریق خروجی وجود ندارد .

نمی توان دو ورودی را پیدا کرد که به ازای آنان خروجی یکسانی تولید گردد : احتمال تولید مقادیر Hash یکسان برای دو مجموعه متفاوت از داده ها کمتر از ۰۰۱ /۰  درصد است .

 

موارد استفاده از Hash  ها

    Hash ها کلا موارد استفاده کمی دارند که ما در ادامه بحث آن ها را بیان می کنیم:

۱) تشخیص درستی یک فایل Verifying file integrity

برای مثال زمانی که یک فایل با حجم بالا را دانلود می نماییم می توانیم با به دست آوردن مقدار MD5 آن فایل توسط دستور md5sum  و مقایسه آن  با مقدار Md5  داده شده توسط سایت مورد نظر  از درستی فایلمان اطمینان حاصل کنیم.

hash (2کردن کلمه عبور Hashing passwords

 ۳) نشانه گذاری  اسناد به روش digitally   (امضاهای digitally)

انواع هش

  • (۱۲۸ bits, obsolete) MD4

  • (۱۲۸ bits) MD5

  • (۱۶۰ bits)RIPEMD-160

  • (۱۶۰ bits)SHA-1

  • (longer versions of SHA-1, with slightly different designs) SHA-256, SHA-384, and SHA-512

انواع مختلفی از الگوریتم های قوی هش کردن برای استفاده در برنامه های کاربردی موجود هستند، محبوب ترین آنها که مورد استفاده برنامه نویسان هستند MD5 و SHA-1(Secure hash algorithm)می باشند. سیستم های قدیمی تر از( DES(Data Encryption Standard استفاده می کردند. این روش ۵۶ بیتی دیگر  یک روش قوی هش کردن محسوب نمی گردد. ، الگوریتم های قوی تری مانند SHA-256 و SHA-512  برای موارد خاص مانند امضاهای دیجیتالی توصیه می گردد ولی برای هش کردن کلمات عبوردر برنامه های امروزی SHA-1 هنوز سطح امنیت بسیار خوبی را فراهم می کند.

  • الگوریتم های hashing ، از یک تابع ایمن رمزنگاری نظیر  Message Digest 5)MD5) و یا Secure Hash Algoritm)SHA) به منظور تولید یک مقدار Hash  مرتبط با  داده ورودی استفاده می نمایند . Hash ، یک نوع خاص از رمزنگاری یک طرفه است . برخی افراد ، hashing  را به عنوان یک مدل رمزنگاری تلقی می نمایند . Hashing عملا” یک مدل رمزنگاری نمی باشد چراکه Hash نمی تواند رمزگشائی گردد ( بدست آوردن مقدار ورودی با اسنتاد و آنالیز مقدار خروجی ) . شکل زیر ، نحوه عملکرد الگوریتم SHA-1 ( نسخه شماره یک ، پیاده سازی شده در سال  ۱۹۹۴ ) را  نشان می دهد :

  • MD5 روشی برای تولید یک چکیده از یک پیام است ( Message Digest ) . چه یک کلمه ، یک عدد ، یک جمله ، یک کتاب چند صد صفحه ای ، یک فایل و … به او بدهید ، یک چکیده با طول ثابت ۱۲۸بیتی تولید میکند . حالا این به چه دردی میخورد ؟ فرض کنید در حاشیه ء انتخابات پر شور مجلس ( که قرار دوباره ملت یک حماسه دیگه توش خلق کنند ! و براستی این مردم جز خلق کردن حماسه به درد دیگری هم میخورند ؟ 🙄 ) قراره وزیر کشور نامه ای محرمانه به تمام استانداری های کشور ارسال کنه . ( حالا به چه روشی زیاد مهم نیست ) اگر این نامه بین راه توسط افرادی تغییر داده بشه ، دریافت کننده چطور ممکنه بفهمه ؟ اون ماموره و مجبور به اطاعت . خیلی بعیده به تهران تلفن بزنه و استعلام کنه ، شاید اصلا بالاش نوشته باشه محرمانه و اون مجبور باشه بدون اطلاع دیگران بهش عمل کنه … اگر حالا متن اصلی وزیر با مطلب دیگری تغییر داده شده باشه ( مثلا” : نمایندگان شورای نگهبان رو به حوزه های انتخابیه راه ندید ! 😈 8) ) چه دردسر بزرگی ایجاد میشه …!

 یکی از راه های اعتماد سازی در یک تبادل اطلاعات دو طرفه استفاده از امضاهای دیجیتال است و چکیده پیام یا همون Message Digest نقش مهمی در این مهم ایفا میکنه . پیام شما ( هر چی که میخواد باشه ) همیشه دارای یک چکیده ۱۲۸ بیتی است که با متدی یکتا تهیه شده و پس از رمزنگاری به انتهای نامه الصاق میشود ، دریافت کننده ( که به عنوان مثال در یک معماری مبتنی بر PKI دارای کلید خصوصی – Private Key – خودش هست ) میتونی با کلید خصوصی خودش چکیده پیام رو ( که با کلید عمومی – Public key – کد شده ) باز کنه ، بعد متن پیام رو با همون الگوریتم یکتا درهم ریزی کنه ( Hashing ) و بعدش محصول رو با آنچه که به پیام الصاق شده بود مقایسه کنه . با تکیه به معماری غیر متقارن ( Asymmetric ) شناسائی و تصدیق هویت ( Authentication ) این یکی از روشهای مناسب برای اعتماد سازی است .

  • MD5 یا Message Digest version 5 در دانشگاه MIT و توسط پروفسور Ronald L. Rivest طراحی شده و متن کامل داستان MD5 رو میتونید در آر اف سی شماره ۱۳۲۱ مطالعه کنید : http://www.faqs.org/rfcs/rfc1321.html

    این صفحه وب هم حاوی مقداری سورس کد به زبانهای مختلف از جمله سی و دلفی و جاوا است که میتونی تولید چکیده پیام به روش ام دی فایو رو حمایت کنه :

    http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html

    نکته پایانی : شاید موقع دریافت نرم افزار از برخی سایتهای معتبر دیده باشید که کنار فایلهای مربوطه نوشته اند MD5 و کنار آن هم رشته ای مثل این :

    ۹۰۰۱۵۰۹۸۳cd24fb0d6963f7d28e17f72 ) این رشته خروجیه abc است (

  اینگونه سایتهای برای ایجاد اعتماد ، از فایلهای خود با برنامه هائی که چکیدهء MD5 تولید میکنند ، امضای مربوطه را ایجاد و اعلام میکنند ، شما هم بعد از دریافت میتونید با یکی از ابزارهای متداول همینکار ( روی لینوکس اصلا دستوری به همین نام و به همین مقصود وجود داره ) فایل مربوطه رو چک کنید تا از صحت محتوای اون مطمئن بشید . مدتها قبل فردی توانست سایت حمایت کننده SendMail که میل سروری معروف روی پلت فرمهای مبتنی بر یونیکس است را هک کرده و بجای تغییر صفحات وب آن ، نسخه ای حاوی یک تروجان را به عنوان نسخه جدید آپلود کرد و بعد هم به ا راسال خبرنامهء رسمی سایت SendMail باعث شد تعداد زیادی از مدیران سرورها جهت نصب نسخه جدید هجوم بیارن و در واقع نسخه محتوی تروجان را دریافت و نصب کنند ( و براستی وقتی سورس باز است چه کسی به خودش زحمت چک کردن اون رو میده ؟ بقول یکی از اساتید مرحومم ، مخفی ترین چیز ، چیزیه که اصلا برای مخفی کردنش تلاش نشده ! ) و این حرکت زیرکانه اون هکر باعث شد صدها سایت تحت سیطره اون قرار بگیرن که البته ناگفته پیداست برای برقراری یک حملهء DDOS ( یا Distributed Denail of service ) به اونها احتیاج داشت

  • الگوریتم رمزنگاری متقارن BlowFish یکی از روشهای متداول رمزنگاری است . این الگوریتم با پذیرش کلید عمومی از ۳۲ بیت تا ۴۴۸ بیت ، جایگزین خوبی برای روشهائی مثل DES است . ( خصوصا در کشورهائی مثل آمریکا که صدور و فروش نرم افزارهای دارای سیستم رمزنگاری به خارج از کشور ممنوع و برای استفاده های داخلی هم در طول کلید محدودیتهائی وجود داره )

    از این روش امروزه به وفور در نرم افزارهای گسترده و سازمانی استفاده میشه ، به عنوان مثال Oracle . این الگوریتم در سال ۱۹۹۳ توسط Bruce Schneier طراحی و توسعه داده شد .

    توضیحات مفیدی برای این الگوریتم اینجا : http://www.schneier.com/blowfish.html است که میتونید استفاده کنید . پیاده سازی های متعددی از این الگوریتم به زبانهای سی ، سی شارپ ، جاوا ، دلفی ، بیسیک وجود داره که در صورت نیاز با یک جستجوی ساده میتونید پیداشون کنید .

 

نوشته‌های تازه

آخرین نظرات

    بایگانی

    دسته‌ها

    مسعود معاونی نوشته شده توسط:

    مسعود معاونی کارشناس ارشد فناوری اطلاعات ، طراح وب ، سئو سایت مدیر ارشد کسب و کار الکترونیک

    اولین نفری باشید که نظر می دهد.

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

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