فرق Hashing و Encrypting در چیست؟
Hashing و Encrypting دو کلمه هستند که اغلب به صورت اشتباه به جای هم استفاده میشوند. آیا شما فرق بین شان و شرایطی که باید از آنها استفاده کنید را میدانید؟
در این مطلب تفاوتهای مهم بین هش کردن ( Hashing ) و رمزگذاری ( Encrypting ) و جایگاه مناسب استفاده از آنها را بررسی میکنیم:
Hashing چیست؟
Hash یک رشته یا اعداد تولید شده از رشتهای متنی است. رشته یا عدد حاصل شده طول ثابتی دارد و با تغییرات کوچک در ورودی بسیار گسترده است. الگوریتمهای hashing بسیار خوبی طراحی شدهاند، به طوری که برگرداندن hash به رشته متنی اصلی غیرممکن است.
الگوریتمهای محبوب
MD5 :MD5 شناختهشدهترین تابع hashing است. این الگوریتم یک مقدار هش 16 بایتی تولید میکند که معمولا به عنوان یک عدد 32 رقمی هگزادسیمال بیان میشود. اخیرا چند مورد آسیبپذیر در MD5 کشف شده است و جداولی منتشر شدهاند که به اشخاص اجازه میدهند تا هشهای MD5 را بدون saltهای خوبی تولید کنند.
SHA: سه الگوریتم SHA مختلف وجود دارد؛ SHA-0، SHA-1 و SHA-2. SHA-0 به ندرت مورد استفاده قرار میگیرد، زیرا حاوی خطایی است که با SHA-1 اصلاح شده است. SHA-1 رایجترین الگوریتم SHA است و یک مقدار هش 20 بایتی تولید میکند.
SHA-2: شامل مجموعهای از 6 الگوریتم hashing است و قدرتمندترین نوع SHA است. SHA-256 یا بالاتر برای مواردی که امنیت بسیار حیاتی است توصیه میشوند. SHA-256 یک مقدار هش 32 بایتی توید میکند.
مواقعی که باید از Hashing استفاده کرد.
Hashing یک راه ایدهآل برای ذخیره کلمات عبور است زیرا هشها ذاتا طبیعت یک طرفه دارند. وقتی کلمات عبور در فرمت هش ذخیره میشوند، دسترسی به دادهای خام برای معکوس کردن آن بسیار دشوار میشود ( فرض بر این است که از الگوریتم قدرتمند hashing و salt مناسبی برای تولید آن استفاده شده است ).
هنگام ذخیره رمز عبور آن را با salt هش کنید، و سپس در تلاش بعدی برای ورود به سیستم، رمز عبوری که کاربر وارد میکند را هش کرده و آن را با هش ذخیره شده مقایسه کنید. اگر هر دو با هم مطابقت داشته باشند، برنامه مطمئن میشود که کاربر وارد شده رمز عبور را صحیح وارد کرده است.
Hashing برای استفاده در هر موردی که میخواهید مقداری را با یک مقدار ذخیره شده مقایسه کنید عالی است اما نمیتوانید موارد نمایشی ساده خود را به دلایل امنیتی ذخیره کنید. مورد دیگری که میتوان از Hashing استفاده کرد برای بررسی چند رقم آخر کارت اعتباری است که با ورودی کاربر مطابق باشد یا برای مقایسه هش یک فایل با هش ذخیرهشده آن در پایگاه داده تا برنامه مطمئن شود که آنها یکسان هستند.
Encryption چیست؟
Encryption یا رمزگذاری، دادهها را به مجموعهای از کاراکترهای غیرقابل خواندن تبدیل میکند که دارای طول ثابت نیستند. تفاوت اصلی بین encryption و hashing این است که اگر شما کلید درست را داشته باشید، رشتههای رمزگشایی شده را میتوان به فرم رمزگشایی اولیه تبدیل کرد.
دو نوع اصلی رمزگذاری وجود دارد؛ رمزگذاری کلید متقارن و رمزگذاری کلید عمومی. در رمزگذاری کلید متقارن، کلید رمزگذاری و رمزگشایی دقیقا یکسان است. این همان چیزی است که وقتی اکثر مردم در مورد رمزگذاری فکر میکنند، به ذهن آنها خطور میکند.
رمزگذاری کلید عمومی با مقایسه دو کلید متفاوت صورت میگیرد، یکی برای رمزگذاری رشته ( کلید عمومی ) و یکی برای رمزگشایی آن ( کلید خصوصی ) استفاده میشود. کلید عمومی برای هر کسی که از رمزگذاری پیامها استفاده میکند در دسترس است، با این حال تنها گیرندهای که از قبل مشخص شده است میتواند به کلید خصوصی دسترسی داشته باشد، و بنابراین فقط او توانایی رمزگشایی پیامها را دارد.
الگوریتمهای محبوب
AES: وقتی پای رمزگذاری کلید متقارن به میان میآید، AES "استاندارد طلایی" است و استفاده از آن برای اکثر موارد، با کلیدی به اندازه 256 بیت، توصیه میشود.
PGP :PGP محبوبترین الگوریتم رمزگذاری کلید عمومی است.
موارد استفاده از Encryption
رمزگذاری فقط وقتی که رمزگشایی نتیجه پیام ضروری است مورد استفاده قرار میگیرد. مثلا وقتی شما میخواهید پیام امنی را برای شخص دیگری در آن سوی دنیا بفرستید، شما به جای hashing نیاز به رمزگذاری دارید، چرا که اگر گیرنده نتواند پیام را رمزگشایی کند، آن پیام به هیچ دردی نمیخورد.
اگر مقادیر خام برای برنامه یا کار شما نیاز به شناخت نداشته باشند، بنابراین همیشه باید hashing استفاده شود، زیرا امنتر است.
اگر از موردی استفاده میکنید که به این نتیجه رسیدهاید که رمزگذاری ضروری است، بنابراین باید بین رمزگذاری کلید عمومی و متقارن یکی را انتخاب کنید. رمزگذاری متقارن عملکرد بهبودیافتهای را ارائه میدهد و استفاده از آن سادهتر است، با این حال کلید باید توسط دادههای رمزگذاری و رمزگشایی سیستم/نرمافزار/شخص شناخته شده باشد.
اگر با کسی در آن سوی دنیا ارتباط برقرار کردید، لازم است قبل از اشتراکگذاری پیامهای ایمن، راه امنی را برای ارسال کلید آنها پیدا کنید. اگر قبلا شیوه امنی را برای ارسال کلید رمزگذاری داشتید، بنابراین پیامهای ایمن خود را، به جای اینکه در وهله اول از رمزگذاری متقارن استفاده کنید، از طریق آن کانال ارسال کنید.
بسیاری از مردم برای رهایی از سختیهای مربوط به اشتراک کلید، ابتدا کلید خود را به وسیله کلید عمومی برای شخص مورد نظر ارسال میکنند، سپس برای ادامه ارتباط از روش رمزنگاری متقارن استفاده میکنند.
منبع: برنامه نویسان