فصل پنجم:

Data Security Basics

Data Encryption / قفل گذاری داده ها

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

مقدمه ای بر قفل گذاری (رمزنگاری) داده ها

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

قفل گذاری داده ها از الگوریتم های پیچیده برای تبدیل داده ها به یک فرم قفل گذاری شده استفاده می کند – که اغلب “متن رمز” نامیده می شود – که بدون کلید صحیح بی فایده است.

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

 فرآیند تبدیل داده های قابل خواندن به داده های قفل گذاری شده به عنوان “قفل گذاری” یا “رمزنگاری” شناخته می شود، در حالی که روند معکوس برگرداندن داده های قفل گذاری شده به حالت اولیه و قابل خواندن خود به عنوان “رمزگشایی” شناخته می شود. کلید (Key) رازی است مانند رمز عبور برای رمزگذاری و رمزگشایی اطلاعات استفاده می شود.  دو نوع اصلی قفل گذاری وجود دارد:

قفل گذاری متقارن / Symmetric Encryption: از همان کلید برای قفل گذاری و رمزگشایی داده ها استفاده می کند. الگوریتم های قفل گذاری متقارن معمولا سریعتر هستند و برای قفل گذاری مقادیر زیادی از داده ها مناسب هستند. یک مثال معروف استاندارد قفل گذاری پیشرفته (AES) است.

قفل گذاری نامتقارن / Asymmetric Encryption (همچنین به عنوان قفل گذاری کلید عمومی شناخته می شود): این از دو کلید متفاوت اما مرتبط استفاده می کند – یک کلید عمومی برای قفل گذاری و یک کلید خصوصی برای رمزگشایی. این روش ارتباطات و انتقال داده ایمن را امکان پذیر می کند، حتی اگر کلید عمومی به طور عمومی شناخته شده باشد. RSA نمونه ای از الگوریتم قفل گذاری نامتقارن است.

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

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

قفل گذاری متقارن / Symmetric Encryption

با قفل گذاری متقارن، از یک کلید هم برای قفل گذاری داده ها توسط فرستنده و هم برای رمزگشایی آن توسط گیرنده استفاده می شود. این ساده ترین نوع رمزگذاری است که تنها شامل یک کلید مخفی برای رمزگذاری و رمزگشایی اطلاعات است. رمزگذاری متقارن یک تکنیک قدیمی و شناخته شده است. از یک کلید مخفی استفاده می کند که می تواند یک عدد، یک کلمه یا یک رشته از حروف تصادفی باشد. این متن با متن ساده یک پیام ترکیب شده است تا محتوا را به روشی خاص تغییر دهد. فرستنده و گیرنده باید کلید مخفی را بدانند که برای رمزگذاری و رمزگشایی همه پیام ها استفاده می شود. Blowfish، AES، RC4، DES، RC5 و RC6 نمونه هایی از قفل گذاری متقارن هستند. پرکاربردترین الگوریتم متقارن AES-128، AES-192 و AES-256 است.

نقطه ضعف اصلی قفل گذاری کلید متقارن این است که همه طرف های درگیر باید کلید مورد استفاده برای رمزگذاری داده ها را قبل از اینکه بتوانند رمزگشایی کنند، مبادله کنند.

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

قفل گذاری نامتقارن (قفل گذاری کلید عمومی) / Asymmetric Encryption

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

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

قفل گذاری نامتقارن بیشتر در کانال های ارتباطی روزمره به ویژه از طریق اینترنت استفاده می شود. الگوریتم قفل گذاری کلید نامتقارن رایج شامل ELGamal، RSA، DSA، تکنیک‌های منحنی بیضی، PKCS است.

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

Hash and Hash-Algorithms

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

    • یک ورودی شناخته شده معین باید همیشه یک خروجی شناخته شده تولید کند.
    • هنگامی که هش انجام شد، نمی توان از خروجی به ورودی رفت.
    • چندین ورودی مختلف باید خروجی متفاوتی را ارائه دهند.
    • اصلاح یک ورودی باید به معنای تغییر در هش باشد.

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

    •      MD4 – این یک تابع هش است که توسط Ronald Rivest در سال 1990 ایجاد شد. طول آن 128 بیت است و بر بسیاری از طرح های خلفی مانند WMD5، WRIPEMD و خانواده WSHA تأثیر گذاشته است. اما امنیت این الگوریتم حتی توسط خود سازنده مورد انتقاد قرار گرفته است.
    •      الگوریتم SHA – الگوریتم هش ایمن توسط آژانس امنیت ملی طراحی شده است تا در الگوریتم امضای دیجیتال آنها استفاده شود. طول آن 160 بیت است. درست مانند دومی، ضعف های امنیتی در آن به این معنی است که دیگر از SHA و SHA-1 استفاده نمی شود، سازمان ها از الگوریتم قوی SHA- 2 256 بیتی برای اهداف رمزنگاری استفاده می کنند.
    •      RIPMEND – این یک الگوریتم هش رمزنگاری است که توسط Hans Dobbertin طراحی شده است. طول آن 160 بیت است. این در چارچوب پروژه اتحادیه اروپا RIPE توسعه یافته است.
    •      الگوریتم WHIRLPOOL – طراحی الگوریتم توسط وینسنت ریمن و پل بارتو است. طول آن 2256 بیت است و خلاصه پیام 512 بیتی را تولید می کند.
    •      الگوریتم TIGER – این یک الگوریتم جدید و سریع است. توسط کامپیوترهای مدرن استفاده می شود. بیش از 132 میلیون بیت در ثانیه هش می کند. تا کنون ثابت شده است که کارآمدتر از همه الگوریتم های هش مورد بحث است. هیچ محدودیتی در استفاده از آن ندارد، به این معنی که هیچ حق ثبت اختراعی ندارد.

هدف اصلی پشت هش چیست؟

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

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

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

هش کردن / Hashing

هش کردن فرآیندی است که داده ها را با هر اندازه ای به یک مقدار اندازه ثابت (هش) تبدیل می کند. برخلاف قفل گذاری، هش کردن یک تابع یک طرفه است – این بدان معنی است که شما نمی توانید از مقدار هش به مجموعه داده های اصلی برگردید.

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

حوزه های کاربرد و اهمیت هش:

    • امنیت داده ها: قفل گذاری از داده های حساس در برابر دسترسی غیرمجاز محافظت می کند، چه هنگام انتقال از طریق شبکه و چه زمانی که روی دیسک ذخیره می شود.
    • امضای دیجیتال: قفل گذاری نامتقارن امکان ایجاد امضای دیجیتالی را فراهم می کند که صحت و یکپارچگی پیام ها را تضمین می کند.
    • ارتباطات ایمن: فناوری‌های قفل گذاری کانال‌های ارتباطی امن را فعال می‌کنند، مانند آن‌هایی که در HTTPS، VPN‌ها و سرویس‌های ایمیل امن استفاده می‌شوند.
    • بررسی یکپارچگی: هش کردن برای بررسی یکپارچگی داده ها و اطمینان از عدم تغییر آنها از زمان ایجاد آنها استفاده می شود.
    • قفل گذاری و هش ابزارهای اساسی در امنیت فناوری اطلاعات هستند. آنها ما را قادر می سازند که محرمانه بودن، یکپارچگی و صحت اطلاعات دیجیتال را در دنیایی که به طور فزاینده ای متصل می شود، حفظ کنیم.

تفاوت بین هش و رمزگذاری چیست؟ 

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

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

به طور خلاصه، رمزگذاری یک تابع دو طرفه است که شامل رمزگذاری و رمزگشایی می شود، در حالی که هش کردن یک تابع یک طرفه است که یک متن ساده را به یک خلاصه منحصر به فرد تغییر می دهد که برگشت ناپذیر است.

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

Salt

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

هش رمز عبور (Password Hash) چیست؟

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

بر خلاف رمزگذاری – که طبق تعریف می توان آن را رمزگشایی کرد – نسخه معکوس این فرآیند وجود ندارد: این یک تابع یک طرفه است.

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

هش کردن همچنین معمولا طول را اضافه می کند، که یک دفاع ساده در برابر حملات brute-force است. در مورد SHA-256، یک الگوریتم هش محبوب، رمز عبور هش شده همیشه 256 بیت است (64 کاراکتر در هگزادسیمال)، بدون توجه به طول رمز اصلی. الگوریتم دیگر MD5 است که هش 128 بیتی تولید می کند.

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

آیا تا به حال یک رمز عبور را فراموش کرده اید و به این فکر کرده اید که چرا وب سایت شما را مجبور به ایجاد رمز عبور جدید می کند؟ چرا نمی تواند به شما بگوید که قدیمی چیست؟ احتمالاً به این دلیل که به لطف هش کردن، از ابتدا نمی‌دانست چه چیزی است.

آیا هش برای رمزهای عبور ایمن است؟ 

هش کردن به خودی خود مستعد حملات brute-force است که حمله به جدول رنگین کمانی نامیده می شود که از دو واقعیت بهره می برد:

    1. افراد اغلب از رمزهای عبور خود مجددا استفاده می کنند.
    1.  رمز عبور یکسانی که با الگوریتم یکسانی هش شده است همیشه باعث ایجاد نتیجه مشابه.

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

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

با این حال، راهی وجود دارد که برنامه‌ها و وب‌سایت‌ها از حملات جدول رنگین کمانی حتی زمانی که کاربرانشان از رمزهای عبور منحصربه‌فرد استفاده نمی‌کنند محافظت کنند: قبل از هش کردن، گذرواژه‌هایشان را نمک بزنند.

نمک پسورد چیست؟

Salt یک رشته منحصر به فرد و تصادفی از کاراکترها است که به ابتدا یا انتهای یک رمز عبور اضافه می شود. هنگامی که تابع هش به این ترکیب اعمال می شود، نتیجه هش نمک نامیده می شود.

Salting مشکل گذرواژه استفاده مجدد را حل می‌کند، زیرا افزودن نمک‌های مختلف به یک رمز عبور باعث ایجاد هش‌های متفاوتی می‌شود:

زیبایی نمک زدن در این است که نمک هر رمز عبور را می توان در متن ساده در کنار هش آن ذخیره کرد بدون اینکه رمز اصلی را به خطر بیندازد (اگرچه می توان آنها را جداگانه ذخیره کرد، در این صورت به آن فلفل می گویند). نمک‌ها را می‌توان با هش‌ها ذخیره کرد، زیرا حتی اگر مهاجم بداند چه نمکی با کدام هش همراه است، باز هم نمی‌تواند روند را معکوس کند و رمز عبور اصلی را محاسبه کند.

اگرچه از نظر تئوری می توان یک جدول رنگین کمان را برای هر نمک ممکن از قبل محاسبه کرد، اما در عمل این کار بسیار وقت گیر است، مشروط بر اینکه نمک ها طولانی و منحصر به فرد باشند.

آیا نمک زدن هش به این معنی است که اکنون می‌توانم با خیال راحت از گذرواژه‌ها استفاده مجدد کنم؟

متاسفانه نه! هش‌های سالت محافظی در برابر مهاجمانی هستند که از گذرواژه‌های استفاده مجدد استفاده می‌کنند، اما هرگز نباید تصور کنید که هر برنامه و وب‌سایتی که استفاده می‌کنید به درستی یا اصلاً پایگاه داده‌های خود را نمک می‌زند.

Main Article: https://www.expressvpn.com/blog/salt-hash-password-protection/