دسته OWASP: MASVS-CRYPTO: رمزنگاری
نمای کلی
باوجود استفاده گسترده از رمزنگاری برای محافظت از محرمانگی و یکپارچگی دادهها، وقتی توسعهدهندگان بهطور ناخواسته الگوریتمهای رمزنگاری ضعیف یا قدیمی را پیادهسازی میکنند، خطر قابلتوجهی ایجاد میشود. این آسیبپذیری ناشی از ضعفهای ذاتی این الگوریتمها است که میتواند توسط عاملان بدخواه با قدرت محاسباتی یا دانش لازم مورد سوءاستفاده قرار گیرد. پیامدهای چنین سوءاستفادهای میتواند شدید باشد و بهطور بالقوه منجر به دسترسی غیرمجاز، سرقت اطلاعات شبکه، و دستکاری اطلاعات حساس شود.
تأثیر
دادههای حساس ممکن است افشا، اصلاح، یا جعل شود. الگوریتمهای رمزنگاری خراب یا پرخطر ممکن است منجر به آسیبپذیری شوند و میتوان از آنها برای رمزگشایی اطلاعات حساس، دستکاری دادهها، یا جعل هویت نهادهای قانونی سوءاستفاده کرد. تأثیر سوءاستفاده از چنین آسیبپذیریهایی میتواند از سرقت اطلاعات شبکه و زیانهای مالی تا آسیب به شهرت و ازدست رفتن اعتماد کاربر متغیر باشد.
خطر: توابع درهمساز رمزنگاری ضعیف یا خراب
استفاده از توابع درهمساز رمزنگاری ضعیف یا خراب (مانند MD5 یا SHA1)
خطر قابلتوجهی برای امنیت و یکپارچگی دادهها ایجاد میکند. تابعهای چکیدهساز
برای ایجاد اثر انگشتهای (چکیدههای) منحصربهفرد با طول ثابت از دادههای ورودی طراحی شدهاند،
که آنها را برای اهداف مختلف، ازجمله درستیسنجی تمامیت دادهها،
ذخیره گذرواژه، و امضاهای دیجیتال مفید میسازد. بااینحال، وقتی از توابع چکیدهساز ضعیف یا بهخطرافتاده استفاده میشود، چندین آسیبپذیری ممکن است بهوجود آید:
- حملات تصادم: توابع چکیدهساز ضعیف دربرابر حملات تصادم آسیبپذیر هستند، که در آن مهاجم دو ورودی متفاوت پیدا میکند که مقدار چکیدهساز یکسانی تولید میکنند. این کار میتواند به آنها اجازه دهد دادههای مخرب را بدون شناسایی جایگزین دادههای قانونی کنند و تمامیت دادهها را بهخطر بیندازند.
- سرقت اطلاعات شبکه: اگر گذرواژهها با الگوریتم ضعیفی درهمسازی شده باشند، سرقت موفقیتآمیز اطلاعات شبکه میتواند منجر به لو رفتن اعتبارنامههای کاربر شود. سپس مهاجمان میتوانند از جدولهای رنگینکمان یا تکنیکهای دیگر برای شکستن گذرواژهها استفاده کنند و دسترسی غیرمجاز به حسابها پیدا کنند.
- انکار امضاهای دیجیتال: از توابع چکیدهساز ضعیف مورداستفاده در امضاهای دیجیتال میتوان برای ایجاد امضاهای جعلی سوءاستفاده کرد، که این امر تعیین اصالت و تمامیت اسناد یا پیامها را دشوار میکند.
کاهش
برای کاهش این خطرات، استفاده از توابع درهمساز رمزنگاری قوی و بهخوبی بررسیشده مانند SHA-2 یا SHA-3 و بهروز نگه داشتن آنها با کشف آسیبپذیریهای جدید بسیار مهم است. علاوهبراین،
اتخاذ شیوههای امنیتی مانند نمکزدن گذرواژهها و استفاده از
الگوریتمهای درهمسازی مختص گذرواژه مانند bcrypt یا
Argon2 میتواند حفاظت از دادهها را بیشتر تقویت کند.
خطر: عملکردهای رمزگذاری رمزنگارانه ضعیف یا خراب
استفاده از توابع رمزگذاری رمزنگاری ضعیف یا خراب (مانند DES یا
RC4) خطرات شدیدی برای محرمانه بودن دادههای حساس ایجاد میکند. رمزگذاری
برای محافظت از اطلاعات با تبدیل آن به قالبی غیرقابلخواندن طراحی شده است،
اما اگر الگوریتم رمزگذاری معیوب باشد، این محافظتها قابلدور زدن است:
- سرقت اطلاعات شبکه: الگوریتمهای رمزگذاری ضعیف دربرابر حملات مختلفی ازجمله حملات جستجوی فراگیر، حملات متن ساده شناختهشده، و تکنیکهای تحلیل رمز آسیبپذیر هستند. اگر این حملات موفقیتآمیز باشند، میتوانند دادههای رمزگذاریشده را افشا کنند و امکان دسترسی غیرمجاز به اطلاعات حساس مانند جزئیات شخصی، سوابق مالی، یا دادههای محرمانه کسبوکار را فراهم کنند.
- دستکاری و تقلب در دادهها: حتی اگر مهاجم نتواند دادهها را بهطور کامل رمزگشایی کند، اگر الگوریتم رمزگذاری ضعیف باشد، ممکن است همچنان بتواند بدون شناسایی شدن، دادهها را دستکاری کند. این امر میتواند منجر به تغییرات غیرمجاز در دادهها شود و بهطور بالقوه به کلاهبرداری، ارائه اطلاعات نادرست، یا سایر فعالیتهای مخرب منجر شود.
کاهش
استفاده از الگوریتمهای رمزنگاری قوی در توابع رمزگذاری
برای کاهش این خطرات، استفاده از الگوریتمهای رمزنگاری قوی و بهخوبی بررسیشده و پیروی از روالهای مطلوب برای مدیریت کلید و پیادهسازی رمزگذاری بسیار مهم است. بهروزرسانی منظم الگوریتمهای رمزگذاری و مطلع ماندن از تهدیدهای نوظهور نیز برای حفظ امنیت قوی دادهها ضروری است.
برخیاز الگوریتمهای پیشفرض توصیهشده برای استفاده:
- رمزگذاری متقارن:
-
AES-128/AES-256با حالتGCM Chacha20
-
- رمزگذاری نامتقارن:
-
RSA-2048/RSA-4096با حاشیه داخلیOAEP
-
برای کاهش مشکلات رایج، از عناصر اولیه امن کتابخانه رمزنگاری استفاده کنید
درحالیکه انتخاب الگوریتم رمزگذاری مناسب بسیار مهم است، برای بهحداقل رساندن واقعی آسیبپذیریهای امنیتی، استفاده از کتابخانه رمزنگاری را درنظر بگیرید که میانای برنامهسازی کاربردی سادهای ارائه میدهد و بر پیکربندیهای پیشفرض امن تأکید میکند. این رویکرد نه تنها امنیت برنامههایتان را تقویت میکند، بلکه احتمال ایجاد آسیبپذیری ازطریق خطاهای کدنویسی را نیز بهطور قابلتوجهی کاهش میدهد. برای مثال، Tink با ارائه دو گزینه متمایز، انتخابهای رمزگذاری را ساده میکند: رمزگذاری AEAD و Hybrid، که تصمیمگیری آگاهانه درباره امنیت را برای توسعهدهندگان آسانتر میکند.
خطر: توابع امضای رمزنگاری ضعیف یا خراب
استفاده از توابع امضای رمزنگاری ضعیف یا خراب (مانند
RSA-PKCS#1 v1.5، یا توابعی که براساس توابع چکیدهساز ضعیف هستند)
خطرات شدیدی برای یکپارچگی دادهها و ارتباطات ایجاد میکند. امضاهای دیجیتال برای ارائه اصالتسنجی، عدم انکار، و تمامیت دادهها طراحی شدهاند و تضمین میکنند که پیام یا سند از فرستنده خاصی ارسال شده است و دستکاری نشده است. بااینحال، وقتی الگوریتم امضای اصلی
نقص داشته باشد، این اطمینانها ممکن است بهخطر بیفتد:
- جعل امضا: الگوریتمهای امضای ضعیف میتوانند دربرابر حملاتی که به عاملان مخرب اجازه میدهند امضاهای جعلی ایجاد کنند آسیبپذیر باشند. این یعنی آنها میتوانند هویت نهادهای قانونی را جعل کنند، اسناد جعلی بسازند، یا پیامها را دستکاری کنند بدون اینکه شناسایی شوند.
- انکار امضا: اگر الگوریتم امضا شکسته شود، امضاکننده ممکن است بتواند بهدروغ ادعا کند که سندی را امضا نکرده است، که این امر اصل انکارناپذیری را تضعیف میکند و چالشهای حقوقی و لجستیکی ایجاد میکند.
- دستکاری و تقلب در دادهها: در سناریوهایی که از امضا برای محافظت از یکپارچگی دادهها استفاده میشود، الگوریتم ضعیف میتواند به مهاجمان اجازه دهد دادهها را بدون باطل کردن امضا تغییر دهند، که منجر به تقلب شناسایینشده و بهخطر افتادن احتمالی اطلاعات حیاتی میشود.
کاهش
از الگوریتمهای امضای رمزنگاری قوی استفاده کنید
برای کاهش این خطرات، استفاده از الگوریتمهای امضای رمزنگاری قوی و بهخوبی بررسیشده بسیار مهم است:
برای کاهش مشکلات رایج، از عناصر اولیه امن کتابخانه رمزنگاری استفاده کنید
انتخاب الگوریتم امضای مناسب ضروری است، اما برای بهحداقل رساندن واقعی آسیبپذیریهای امنیتی، کتابخانه رمزنگاریای را درنظر بگیرید که بهطور پیشفرض تضمینهای امنیتی قوی ارائه میدهد. برای مثال، Tink انتخابهای امضا را با ارائه ECDSA با منحنیهای امن بهعنوان گزینه پیشفرض خود، همه در یک میانای برنامهسازی کاربردی ساده و جامع، ساده میکند. این رویکرد نهتنها امنیت را افزایش میدهد، بلکه با حذف نیاز به پیکربندی یا تصمیمگیری پیچیده، توسعه را نیز ساده میکند.
منابع
- کتابخانه رمزنگاری Tink
- کیفیت برنامه Android: رمزنگاری
- امضای دیجیتال با Tink
- رمزگذاری ترکیبی با Tink
- رمزگذاری اصالتسنجیشده با Tink
- درهمساز رمزنگاری ضعیف یا خراب و توابع رمزگذاری Android security lint
- CWE-327: استفاده از الگوریتم رمزنگاری معیوب یا پرخطر
- CWE-328: Use of Weak Hash
- CWE-780: استفاده از الگوریتم RSA بدون OAEP
- صفحه NIST درباره «توابع چکیدهساز تأییدشده»
- استاندارد رمزگذاری پیشرفته (Wikipedia)
- الگوریتم درهمسازی امن ۲ (ویکیپدیا)
- الگوریتم درهمسازی امن ۳ (ویکیپدیا)
- سامانه رمز RSA (ویکیپدیا)
- الگوریتم امضای دیجیتال منحنی بیضوی (ویکیپدیا)
- رمز جریانی ChaCha (ویکیپدیا)
- نمکزنی گذرواژه (ویکیپدیا)
- سامانه رمز ترکیبی (ویکیپدیا)
- رمزگذاری اصالتسنجیشده