در حال بارگذاری...
بررسی و شناسایی استفاده از الگوریتمهای رمزنگاری ضعیف، کلیدهای کوتاه و پیادهسازیهای نادرست رمزنگاری در برنامه.
اهداف این درس
رمزنگاری ضعیف (Weak Cryptography) شامل استفاده از الگوریتمهای رمزنگاری منسوخ، کلیدهای کوتاه، پیادهسازیهای نادرست و روشهای ناامن ذخیرهسازی اطلاعات حساس است. حتی اگر از الگوریتم قوی استفاده شود، پیادهسازی نادرست میتواند امنیت را به خطر بیندازد.
علم و هنر محافظت از اطلاعات با استفاده از تکنیکهای ریاضی برای محرمانگی، یکپارچگی، احراز هویت و عدم انکار.
| نوع | توضیح | مثال |
|---|---|---|
| متقارن (Symmetric) | یک کلید برای رمزنگاری و رمزگشایی | AES, ChaCha20 |
| نامتقارن (Asymmetric) | دو کلید: عمومی و خصوصی | RSA, ECC |
| هش (Hashing) | تبدیل یکطرفه داده به رشته ثابت | SHA-256, bcrypt |
| الگوریتم | وضعیت | دلیل |
|---|---|---|
| MD5 | ضعیف | Collision، سریع برای Brute-force |
| SHA-1 | ضعیف | Collision |
| SHA-256 | امن | برای هش داده مناسب است |
| bcrypt | امن | برای هش رمز عبور مناسب است |
| scrypt | امن | مقاوم در برابر GPU |
| Argon2 | امنترین | استاندارد فعلی |
| الگوریتم | وضعیت | دلیل |
|---|---|---|
| DES | ضعیف | کلید 56 بیتی |
| 3DES | ضعیف | آسیبپذیری Sweet32 |
| RC4 | ضعیف | آسیبپذیریهای متعدد |
| Blowfish | ضعیف | کلید 64 بیتی |
| AES-128 | امن | کلید 128 بیتی |
| AES-256 | امنتر | کلید 256 بیتی |
| ChaCha20 | امن | رمزنگاری مدرن |
بررسی کنید برنامه از چه الگوریتمهایی برای رمزنگاری، هش و امضا استفاده میکند.
1# بررسی الگوریتم TLS2nmap --script ssl-enum-ciphers -p 443 target.com34# بررسی هش رمز عبور5# فرض: دسترسی به پایگاه داده6# هش bcrypt: $2b$10$...7# هش MD5: 5f4dcc3b5aa765d61d8327deb882cf998# هش SHA-1: 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8910# بررسی الگوریتم امضای دیجیتال11openssl x509 -in certificate.pem -text -noout | grep 'Signature Algorithm'رمزنگاری ضعیف میتواند منجر به رمزگشایی دادههای حساس، سرقت رمزهای عبور، جعل هویت و نقض محرمانگی اطلاعات شود.
هشدار
هرگز رمز عبور را بهصورت plaintext ذخیره نکنید، حتی در محیط توسعه. اگر پایگاه داده لو برود، تمام رمزهای عبور در معرض خطر قرار میگیرند.
1// استفاده از BCrypt2using BCrypt.Net;34public class PasswordHasher5{6 public static string HashPassword(string password)7 {8 // BCrypt خودش salt تولید میکند9 return BCrypt.HashPassword(password, BCrypt.GenerateSalt(12));10 }11 12 public static bool VerifyPassword(string password, string hash)13 {14 return BCrypt.Verify(password, hash);15 }16}1718// استفاده19string hash = PasswordHasher.HashPassword("MySecurePassword123!");20bool isValid = PasswordHasher.VerifyPassword("MySecurePassword123!", hash);توصیه عملی
از OWASP Cryptographic Storage Cheat Sheet برای راهنمایی در ذخیرهسازی امن اطلاعات حساس استفاده کنید. همچنین از ابزارهای تحلیل کد مثل SonarQube برای شناسایی الگوریتمهای ضعیف استفاده کنید.
هرگز از MD5 یا SHA-1 برای هش کردن رمز عبور استفاده نکنید.
از bcrypt، scrypt یا Argon2 برای هش کردن رمز عبور استفاده کنید.
کلیدهای رمزنگاری باید طول کافی داشته باشند (حداقل 128 بیت برای متقارن).
از کتابخانههای رمزنگاری استاندارد استفاده کنید، نه پیادهسازی سفارشی.
کدام الگوریتم برای هش کردن رمز عبور مناسب نیست؟
چرا استفاده از MD5 برای هش کردن رمز عبور خطرناک است؟
MD5 الگوریتم سریعی است که برای هش کردن رمز عبور مناسب نیست. حملات Brute-force و Rainbow Table میتوانند هشهای MD5 را سریع بشکنند. همچنین MD5 دارای آسیبپذیری Collision است.
بهترین الگوریتم برای هش کردن رمز عبور چیست؟
bcrypt، scrypt و Argon2 بهترین الگوریتمها برای هش کردن رمز عبور هستند. این الگوریتمها از تکنیکهای key stretching استفاده میکنند و در برابر حملات Brute-force مقاوم هستند.