مقایسه Encryption و Hashing و Salting

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

هشینگ و رمزگذاری هر دو راه هایی برای ایمن نگه داشتن داده ها هستند، اما عملکردهای متفاوتی دارند. رمزگذاری رمز عبور(Password Encryption) زمانی استفاده می شود که متن رمزنگاری نشده (plaintext) به هر دلیلی باید بازیابی شود. در حالی که هش رمز عبور (Password hashing) ، معمولا در سمت سرور زمانی که اپراتورهای سرور نیازی به دانستن Plaintext ندارند، رایج است، آنها فقط باید نشان دهند که کاربر متن رمزنگاری نشده را می‌داند. این عملکردها در پس‌زمینه انجام می‌شوند، مانند Salting، بدون اینکه خللی در تجربه کاربرایجاد شود .

Encryption چیست؟

رمزگذاری یا Encryption ، روشی برای ایمن کردن رمز عبور می باشد . بدین ترتیب که با استفاده از یک فرمول ریاضی ، رمز عبور را  به یک نسخه درهم یا متن رمزنگاری شده (Ciphertext) تبدیل می کند. Encryption یک تابع دو طرفه است، به این معنی که رمز عبور plaintext اصلی که به Ciphertext تبدیل شده را می توان با رمزگشایی به plaintext بازگرداند.

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

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

هشینگ چیست؟

Hashing همچنین از یک الگوریتم برای تبدیل رمز عبور Plaintext به Ciphertext استفاده می کند که رمز عبور واقعی را مبهم می کند. برخلاف رمزگذاری، هش کردن یک عملکرد یک طرفه است. اگر یک رمز عبور دلخواه متن رمزگذاری نشده با هر طولی را انتخاب کنید، آن را از طریق یک الگوریتم هش اجرا کنید، یک رشته یا عدد هگزادسیمال را که منحصر به متن رمزگذاری نشده ارائه شده است، بیرون می‌آورد. طول هش بستگی به الگوریتم مورد استفاده ، متفاوت است. هش رمزهای عبور را نمی توان به رمز عبور متن پلین تکست اصلی تبدیل کرد.

سرور یک نسخه هش شده رمز عبور را ذخیره می کند. هنگامی که کاربر رمز عبور Plaintext را تایپ می کند، سیستم هش را محاسبه کرده و هش ها را با هم مقایسه می کند. اگر هش ها برابر باشند، سرور می تواند رمز عبور را تأیید کند و سپس به کاربر دسترسی داده می شود.

الگوریتم های هش رایج

الگوریتم های هش کمتر ایمن:

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

الگوریتم هش امن (SHA) :

 یک تابع هش رمزنگاری است. مقادیر 160 بیتی SHA-1 ایمن تر از طول مقدار هش 128 بیتی MD5 است، اما دارای نقاط ضعفی نیز هست که منجر به خانواده کد هش SHA-2 شد.

الگوریتم های هش ایمن تر:

خانواده کد هش SHA-2 امروزه به طور گسترده استفاده می شود، با الگوریتم هایی که طولانی تر و شکستن آنها سخت تر است. نام الگوریتم های SHA-2 به طول متصل است، بنابراین SHA-224 طول 224 بیت را نشان می دهد. همین فرمت برای SHA-256، SHA-384 و SHA-512 کار می کند.

الگوریتم های هش رایج

درست همانطور که برای بهبود طعم غذا به آن نمک اضافه می کنید ، یک رشته تصادفی از کاراکترها (نمک) به رمزهای عبور اضافه می شود تا آنها را بهبود بخشد. به هر کاربر نمک متفاوتی اختصاص می‌یابد که فقط سرور آن را می‌شناسد و باعث منحصربفرد و ایمن‌تر شدن آن‌ها می‌شود. نمک را می توان در دو طرف رمز عبور قرار داد. به عنوان مثال، افزودن salt به رمز عبور “Password” می تواند منجر به یک رمز عبور نمکی مانند “4(j3Li95Password” یا “Password4(j3Li95 شود.

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



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

ترکیب Salting و Hashing برای امنیت :

هش کردن گذرواژه، ذخیره‌سازی و مدیریت را ایمن‌تر می‌کند. رمزهای عبور نمکی که هش نیز هستند، شکستن رمزهای عبور را برای بازیگران بد تا حد زیادی دشوارتر می کند. از آنجایی که کاراکترهای تصادفی قبل از هش به رمزهای عبور اضافه می شوند، هکر توانایی تشخیص سریع رمز عبور متن ساده را از دست می دهد. بدون حدس زدن، گرفتن خروجی یک تابع هش و معکوس کردن آن برای یافتن مقدار اصلی تقریباً غیرممکن است. هش منحصربه‌فرد ایجاد شده با گذرواژه‌های سالت در برابر بردارهای حمله، از جمله حملات فرهنگ لغت، brute force و جدول هش دفاع می‌کند.

مقایسه رمزگذاری ، هشینگ و سالتینگ

رمزگذاری رمز عبور یا  Password Encryption زمانی استفاده می شود که Plaintext به هر دلیلی باید بازیابی شود. رمزگذاری یک روش برگشت پذیر برای تبدیل رمزهای عبور Plaintext به Ciphertext است و می توانید با یک کلید رمزگشایی به متن اصلی بازگردید.Encryption اغلب برای ذخیره رمزهای عبور در مدیریت رمز عبور استفاده می شود.

Password Hashing زمانی که اپراتورهای سرور نیازی به دانستن Plaintext ندارند، هش رمز عبور در سمت سرور مفید است، فقط کاربر Plaintext را می‌داند. هش کردن یک فرآیند یک طرفه است که رمز عبور را با استفاده از الگوریتم های هش به متن رمزی تبدیل می کند. رمز عبور هش شده را نمی توان رمزگشایی کرد، اما یک هکر می تواند سعی کند آن را مهندسی معکوس کند.

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

گذرواژه ها به تنهایی برای مدیریت هویت و دسترسی (IAM) کافی نیستند و باید با روش های دیگر احراز هویت تقویت شوند.