تفاوت بین Hashing و Encryption - هش کردن و رمزنگاری

تفاوت بین Hashing و Encryption - هش کردن و رمزنگاری

برای رمزنگاری برای جلوگیری از دسترسی انسان های غیر معتبر به ارتباطات استفاده شده است. از روش مبادله ساده نامه نگاری تا ماشین های پیشرفته تر مثل Enigma Machine که در طول جنگ جهانی دوم استفاده شد.

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

رمزنگاری برای تبدیل متن به یک متن ناخوانا و سپس تبدیل آن به متن اصلی استفاده می شود. Hashing تنها متن را به یک به متن ناخوانا تبدیل می کند و نمی تواند آن را به متن خوانا بر گرداند. هر دوی این تکنیک ها به طور عمده ای با اهداف مختلف و به اندازه یکسان مورد نیاز هستند.

رمزنگاری چیست؟

رمزنگاری یک متن خوانا را می گیرد و آن را به متن غیر خوانا با هدف اینکه بعدا آن را به متن خوانا بر گرداند تبدیل می کند. دو روش برای این کار وجود دارد. روش اول رمزنگاری کلید متقارن symmetrical key encryption است که معمولا چیزی است که بیشتر مردم در رابطه با رمزنگاری تصور می کنند. می توان آن را  با یک قفل مقایسه کرد که یک کلید یکسان می تواند آن را باز و بسته کند.

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


این یعنی که ارتباطات وب سایت رمزنگاری شده و از رمزنگاری کلید عمومی استفاده می شود. از آنجایی که متنی که رمزنگاری شده می تواند به متن ساده برگردد متن رمزنگاری شده همیشه یک طول متغیر بسته به اندازه متن اصلی دارد.

Hashing چیست؟

هش کردن گرفتن متن خوانا و تبدیل آن به متن با طول ثابت و ناخوانا است اما بر گرداندن متن به متن خوانا غیر ممکن است. متن هش شده تنها می تواند به این منظور استفاده شود که آن را با یک متن هش شده دیگر مقایسه کنیم.

الگوریتم های هش کردن مثل MD5 همیشه مقدار هش برابر برای مقدار متن مشابه بر میگردانند. به طور مثال متن I am Text همیشه در الگوریتم MD5 برابر با 8c120839f2b7f2665f6505845ed81f78 می باشد. این روش برای پسورد امن نیست. برای هش کردن پسورد شما نیاز دارید تا متن ناشناسی را به ورودی اضافه کنید تا هش کردن MD5 را unique تر کنید. این متن Salt نام دارد.

الگوریتم های هش کردن امن تر مثل Bcrypt هش های قابل پیش بینی ندارند چون به طور پیش فرض از Salt استفاده می کنند.

در چه موقعیت هایی از رمزنگاری و در چه موقعیت هایی از هش کردن استفاده کنیم؟

قانون کلی این است که اگر شما نیازی ندارید تا بدانید متن اصلی چه چیزی بوده است برای امنیت بیشتر از هش کردن استفاده کنید.

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

از رمزنگاری بهتر است در موقعیت هایی مثل ارتباطات استفاده شود که متن رمزنگاری شده نیاز است به حالت خوانای اولیه برگردد.

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

منبع مقاله