کد گزاری و روش های مختلف :
روش های مختلفی برای کد گزاری وجود دارد مانند توابع و الگوریتم های Randomize و Hash و ...
معمولا هدف اصلی از کد گزاری دو گزینه می باشد
1- امنیت
2- ایجاد کلید های منحصر بفرد
در واقع این دو مورد پر کاربرد ترین موارد استفاده از کد گزاری می باشد
توضیح :
برای ایجاد امنیت در برنامه های مختلف از روش های کد گزاری استفاده میشود ، برای مثال در ذخیره پسورد یوزر های سایت DpiGuide از الگوریتم MD5 که در ادامه در مورد قدرت آن توضیح خواهیم داد استفاده می شود
مثالی که برای ایجاد کلید های منحصر به فرد می شود آورد در امضا های اینترنتی می باشد . برای ایجاد امضا هایی که به صورت منحصر به فرد و بدون تکرار باشند از این روش ها استفاده می شود.
هش که (Hash, Hash Code, Digest, Message Digest هم نامیده می شود) را می توان به صورت اثر انگشت دیجیتالی یک داده در نظر گرفت. با این روش شما می توانید رشته ای اندازه-ثابت (fixed length) از یک داده به دست آورید که با روش های ریاضی به صورت "یک طرفه" رمزنگاری شده است
منظور از "یک طرفه" این مفهوم است که قابل برگشت نمی باشد
برای مثال فرض کنید فرمول ما X+2 باشد ! و برای ورودی مانند 3 خروجی ما برابر 5 خواهد بود
حال اگر شما 5 را در اختیار داشته باشید می توانید مقدار اولیه را به راحتی با فرمول معکوس Y-2 بدست آورید !
در روش های "یک طرفه" این امکان وجود ندارد ...
کشف رشته اصلی از رشته هش آن (عملیات معکوس) به صورت کارا تقریبا غیر ممکن است. نکته دیگر اینکه هر داده یک رشته هش شده کاملا منحصر به فرد ایجاد می کند .
انواع هش
MD4 (128 bits, obsolete)
MD5 (128 bits)
RIPEMD-160 (160 bits)
SHA-1 (160 bits)
SHA-256, SHA-384
and SHA-512 (longer versions of SHA-1, with) slightly different designs
برای تفهیم بهتر مقوله هش در حین توضیح درباره ی نوع MD5 بیشتر با هش آشنا خواهید شد وبه مفهموم آن پی می بریم.
در الگوریتم MD5 احتمال وجود تکرار و تصادف وجود ندارد و تمام مقادیر منحصر به فرد می باشد
البته در مقاله ای احتمال یکی شدن رشته های هش دو رشته متفاوت در الگوریتم MD5 یک در 3.4028236692093846346337460743177e+38 عنوان شده بود که در واقع می توان گفت احتمال برابر 0 می باشد
این خواص ، هش کردن را به روشی کارا و ایده آل برای ذخیره سازی کلمات عبور در برنامه های شما تبدیل می کند. چرا؟ برای این که حتی اگر یک نفوذگر(Hacker) بتواند به سیستم و بانک اطلاعاتی شما نفوذ کند و بخشی از اطلاعات شما را به دست آورد ( اطلاعات شامل کلمات عبور هش شده باشد) نمی تواند کلمات عبور اولیه را از روی آن ها بازیابی کند.
یکی از دو خصوصیت الگوریتم های HASH معکوس ناپذیری آنهاست و دوم اینکه هرگز دو ورودی متفاوت به خروجی یکسان منجر نمی شوند. هر یک از این دو خصوصیت اگر نقض شود می گوییم الگوریتم شکسته!!!
شناسایی اعضا با استفاده از Hash :
تا کنون نشان داده ایم که بازیابی کلمه عبور اصلی از روی رشته هش تقریبا غیر ممکن است ، خب چگونه برنامه های ما تشخیص دهند که کلمه عبور وارد شده توسط کاربر صحیح است ؟ به سادگی ! با تولید رشته هش کلمه عبور وارد شده توسط کاربر و مقایسه آن با رشته هش ذخیره شده در رکورد بانک اطلاعاتی مربوط به کاربر می توانید متوجه شوید که آیا دو رشته با هم برابرند یا نه.
Hash یک عمل خلاصه سازی (digest ) را روی جریان ورودی انجام می دهد نه یک عمل رمز نگاری (encryption) . Encryption داده را از یک متن صریح (Clear text) به یک متن برمز در آورده تبدیل می کند (Cipher text encryption )که عمل دو طرفه می باشد . که هرچه حجمClear text بیشتر باشد حجم Cipher text نیز بیشتر می شود.
Hash ها جریان داده ورودی را به یک خلاصه کوچک تبدیل می کنند. که این یک عمل یک طرفه(غیر قابل بازگشت) می باشد. و جریان داده ورودی آنها با هر حجمی که باشد خروجی یک مقدار ثابت می شود.
این الگوریتم یک رشته با طول متفاوت را به عنوان ورودی می گیرد و یک "خلاصه پیام MD5" یا "اثر انگشت" با طول 128 بیت می سازد.
برای مثال اگر شما این یک "کلمه" را به الگوریتم دهید ، و یا کل این خط را و یا کل این پاراگراف را ، در نهایت در هر 3 مورد خروجی 128 بیت می باشد.
یکی از کاربرد های هش تشخیص درستی یک فایل Verifying file integrity می باشد برای مثال زمانی که یک فایل با حجم بالا را دانلود می نماییم می توانیم با به دست آوردن مقدار MD5 آن فایل،توسط دستور md5sum و مقایسه آن با مقدار Md5 داده شده توسط سایت مورد نظر از درستی فایلمان اطمینان حاصل کنیم.
از کاربرد های دیگر آن نشانه گذاری اسناد به روش digitally (امضاهای digitally) می باشد.
Collision (تصادف) در Hash:
البته معنی صحیح Collision "تصادم" و "برخورد" می باشد . زمانی که مقدار Hash دو ورودی متفاوت یکسان باشند می گوییم Collision رخ داده است.
اما تا کنون هیچ موردی از Collision دیده نشده است که این امر از این حقیقت ناشی می شود که تعداد مقادیر یک الگوریتم hash بسیار زیاد می باشند.
برای مثال یک Hash 128 بیتی می تواند 3.4 x 1038 مقدار ممکن داشته باشد. که معادل 340,282,366,920,938,463,463,374,607,431,768,211,456 می باشد.
محبوب ترین hashهایی که مورد استفاده برنامه نویسان هستند MD5 و SHA-1 می باشند. سیستم های قدیمی تر از( DES(Data Encryption Standard استفاده می کردند. این روش 56 بیتی دیگر یک روش قوی هش کردن محسوب نمی گردد.
الگوریتم های قوی تری مانند SHA-256 و SHA-512 برای موارد خاص مانند امضاهای دیجیتالی توصیه می گردد ولی برای هش کردن کلمات عبوردر برنامه های امروزی SHA-1 هنوز سطح امنیت بسیار خوبی را فراهم می کند. SHA مخفف Secure hash algorithm می باشد.
البته در حال حاضر MD5 کاربرد زیادی پیدا کرده است ، و برای ذخیره رمز های عبور از آنها استفاده می شود .الگوریتم MD5 توسعه ای از الگوریتم MD4 می باشد با این تفاوت که MD5 کمی کندتر از MD4 عمل می کند اما در طراحی آن بسیار محافظه کارانه عمل شده است.
MD5 به این دلیل طراحی شد که حس کردند MD4 به عنوان سرعت بالایی که داشت پذیرفته شده و از امنیت بالایی در شرایط بحرانی برخوردار نمی باشد. MD4 برای سرعت بالا طراحی شده ولی احتمال شکست آن در رمز کردنی موفق وجود دارد. MD5 کمی در سرعت کند شده با این تفاوت که بیشترین امنیت را داراست.
برای توضیحات بیش تر هم یک فایل وردی که تهیه کردم می توانید استفاده کنید و هم به ادامه مطالب می توانید رجوع کنید.