نوع رمز عبوری که باید ایجاد کنید ارتباط زیادی با نحوه ذخیره رمز عبور دارد.
سالها پیش، رمزهای عبور تصادفی هشت کاراکتری متشکل از حروف بزرگ و کوچک، نمادها و اعداد واقعاً سخت بود. در برخی موارد، شکستن چنین رمز عبوری سال ها طول کشید.
به لطف تکنولوژی در حال تغییر امروزی و ماشین های قابل اجاره، این زمان به ساعت ها کاهش یافته است. اما این پسوردها در وهله اول چگونه ذخیره می شوند؟
چگونه رمزهای عبور آنلاین ذخیره می شوند
سیستمها رمزهای عبور کاربر را مستقیماً در فایلها یا پایگاههای داده ذخیره نمیکنند، زیرا مهاجمان میتوانند پایگاه داده را که در آن سیستمها رمز عبور را نگه میدارند، تصرف کنند. در عوض، سیستم ها رمزهای عبور کاربر را رمزگذاری می کنند و مهاجمان با نسخه رمزگذاری شده هر رمز عبور مواجه می شوند.
الگوریتم هایی وجود دارد که سیستم ها برای رمزگذاری رمزهای عبور استفاده می کنند. یکی از این الگوریتم ها الگوریتم متقارن است. الگوریتم متقارن نوعی رمزگذاری است که در آن می توانید از یک کلید هم برای رمزگذاری و هم برای رمزگشایی استفاده کنید. کلیدی که برای رمزگذاری داده ها استفاده می کنید هم برای رمزگذاری و هم برای رمزگشایی یکسان است. امنیت الگوریتم های متقارن با خطراتی همراه است زیرا تنها یک کلید برای رمزگشایی وجود دارد. به همین دلیل، سیستم ها معمولاً از الگوریتم های متقارن برای رمزگذاری رمز عبور استفاده نمی کنند.
به طور کلی، روشی که سیستم ها برای رمزگذاری استفاده می کنند، الگوریتم های هش است. الگوریتمهای هش برای تأیید و نمایش یکپارچگی دادهها هستند، نه برای رمزگذاری دادهها. الگوریتمهای هش دادهها را به یک هش با اندازه ثابت تبدیل میکنند. این هش ها معمولاً یک هش منحصر به فرد از داده ها را نشان می دهند.
به لطف الگوریتم هش، اگر مهاجمی پایگاه داده رمز عبور را تصاحب کرده باشد، مهاجم نمی تواند از اینجا به رمز عبور به عقب دسترسی پیدا کند. نکته بسیار مهمی وجود دارد که در اینجا باید به آن توجه کنید. از لحاظ نظری، مهاجمی که سیستمی را که از الگوریتم هش یکسانی برای همه ترکیبهای رمز عبور استفاده میکند به خطر بیاندازد، میتواند نتایج بهدستآمده را با هم مقایسه کند. اگر مهاجم در نتیجه این مقایسه ها همان مقدار را تولید کند، مهاجم متوجه شده است که نسخه باز رمز عبور چیست. این روش تماماً در مورد آزمون و خطا است و به این شکل حمله عموماً حمله brute force می گویند.
در آغاز دهه 2000، ممکن است صدها سال طول بکشد تا همه ترکیبها برای رمزهای عبور 8 کاراکتری رمزگذاری شده با الگوریتمهای هش محبوب امتحان شوند. البته این دی شامل ترکیبات خیلی ساده ای مانند «123456» یا «mypassword» در این مجموعه نمی شود. با پیشرفت تکنولوژی های نرم افزاری و سخت افزاری امروزی، روش شکستن پسوردها نیز بسیار تغییر کرده است.
تاثیر پردازنده های گرافیکی در حال ظهور
قابلیتهای پردازش موازی دادههای پردازندههای گرافیکی (GPU) در طول زمان بهبود یافته است. GPUها قادر به انجام عملیات همه کاره مانند CPUهای همه منظوره نیستند. بنابراین، حتی با وجود تعداد زیادی هسته و قدرت پردازش موازی، استفاده از آنها برای تقریباً هر مشکلی مانند CPU منطقی نیست.
با این حال میتوان برخی از الگوریتمهای هش را که برای رمزهای عبور استفاده میشود، به طور کاملاً کارآمد در GPU انجام داد. هشهای قابل محاسبه در ثانیه که میتوانید با CPUهای سنتی به دست آورید، با پلتفرمهای GPU جدید بهشدت رشد کردهاند.
برای دریافت ایده، اعداد هش در هر ثانیه الگوریتم های هش مانند NTLM، MD5 و SHA1 را در جدول زیر بررسی کنید. در حال حاضر کافی است بدانید که این الگوریتم ها فقط یک الگوریتم هش هستند. برای ایجاد این جدول، من از یک سیستم کلاستر متشکل از 25 پردازنده گرافیکی Radeon AMD استفاده کردم.
الگوریتم
هش در ثانیه
NTLM
350.000.000.000
MD5
180.000.000.000
SHA1
63.000.000.000
SHA512Crypt
364.000
Bcrypt
71000
رمزگذاری
33000
همانطور که می بینید، با چنین سیستمی می توانید هش NTLM را 350 میلیارد بار در ثانیه تولید کنید. این بدان معناست که شما می توانید تمام ترکیبات یک رمز عبور 8 کاراکتری را در کمتر از 6 ساعت امتحان کنید. علاوه بر این، سخت افزار موجود در این مثال متعلق به سال ها قبل است. قدرت شکستن رمز عبور امروزی را تصور کنید.
توسعه دهندگان نرم افزار چه باید بکنند؟
راهی که برنامه نویسان باید بروند بسیار ساده است: آنها باید الگوریتم هایی را ترجیح دهند که برای محاسبه مقادیر هش هنگام رمزگذاری رمزهای عبور زمان بیشتری می برد. توسعه دهندگان باید نه تنها در مورد عملکرد الگوریتمی که در CPU استفاده می کنند، بلکه در مورد انعطاف پذیری آن در برابر دنیای GPU نیز بیاموزند.
اگر توسعهدهندگان با یک چارچوب نرمافزاری کار میکنند که به فرآیندهای رمزگذاری رمز عبور مانند جنگو، روبی روی ریل و اسپرینگ سکیوریتی نیز میپردازد، باید بررسی کنند که آیا تصمیمات درستی در چارچوب از نظر امنیتی گرفته شده است یا خیر.
به عنوان مثال، Devise، یکی از کتابخانه های پر استفاده برای عملیات کاربر در Ruby on Rails، از Bcrypt به عنوان الگوریتم هش پیش فرض استفاده می کند. همچنین به شما امکان می دهد از روش دیگری به عنوان الگوریتم هش استفاده کنید. الگوریتم Bcrypt قابل اعتماد است زیرا هنوز زمان زیادی طول می کشد تا GPU شکسته شود.
به طور خلاصه، هرچه محاسبه مقدار هش بیشتر طول بکشد، امنیت شما بیشتر است.
رمز عبور شما چند کاراکتر باید داشته باشد؟
هر کاراکتر اضافهای که استفاده میکنید از نظر هندسی تعداد آزمایشها و خطاهای مورد نیاز برای شکستن رمز عبور و ایمنتر کردن رمز عبور را افزایش میدهد.
بیایید این وضعیت را از طریق دو سناریو متفاوت در نظر بگیریم. مقادیر جدول بالا را برای الگوریتم هش NTLM در نظر بگیرید و تصور کنید که سعی خواهید کرد رمز عبور را شکست دهید. تصور کنید رمزهای عبور هشت کاراکتری یا بیشتر را هدف قرار دهید.
تعداد کاراکترها
حروف و اعداد بزرگ/کوچک
حروف بزرگ/کوچک، اعداد و نمادهای خاص
کمتر از 1 دقیقه
2 دقیقه
2 دقیقه
2 ساعت
10
2 ساعت
1 هفته
11
6 روز
2 سال
12
1 سال
200 سال
13
بیش از 100 سال
بیش از 1000 سال
هنگامی که جدول را بررسی می کنید، می بینید که استفاده از حداقل گذرواژه 12 کاراکتری زمانی که از تمام ترکیبات حروف بزرگ/کوچک، اعداد و نمادهای خاص استفاده می کنید، بی خطر است. اگر از نمادهای خاصی استفاده نمی کنید، مشخص می شود که باید از 13 کاراکتر به عنوان طول رمز عبور ایمن استفاده کنید. اگر در این سیستم به جای هش NTLM از روش هش Bcrypt استفاده می کردید، 8 کاراکتر کافی بود. با این حال، شما این فرصت را ندارید که بدانید سیستمی که از طریق وب وارد میکنید با کدام روش هش رمز عبور شما را حفظ میکند. به همین دلیل باید همه احتمالات را در نظر بگیرید.
مشکل اصلی توسعه دهندگان نرم افزار این است که متقاعد کردن کاربران به داشتن حداقل رمز عبور 12 کاراکتری تقریبا غیرممکن است. امروزه می توان گفت که میزان استفاده از رمز عبور با این طول کم است. بنابراین، با توجه به سناریوی استفاده از سیستم توسعهیافته، باید حد وسطی را پیدا کرد که مورد قبول کاربران برای ارتقای امنیت رمز عبور آنها باشد.
آخرین پیشنهاد برای توسعه دهندگان این است که نه تنها حداقل طول، بلکه حداکثر طول ورودی هایی که از طریق فرم هایی که به کاربر ارائه کرده اید را نیز بررسی کنند. به خصوص هنگامی که استفاده از یک الگوریتم هش کند محاسبه شده مانند Bcrypt را برای اهداف امنیتی فعال می کنید، اگر حداکثر طول رمز عبور وارد شده توسط کاربر را کنترل نکنید، ممکن است با خطراتی روبرو شوید. به عنوان مثال، مهاجمان می توانند با آزمایش ده ها رمز عبور 100 هزار کاراکتری به طور همزمان با برخی از درخواست های ویژه آماده شده، حملاتی را انجام دهند. در چنین حالتی، به احتمال زیاد سیستم شما به سایر کاربران پاسخ نمی دهد.
توصیه به کاربران نهایی
طول رمز عبور خود را حداقل 12 کاراکتر تنظیم کنید و مطمئن شوید که ترکیب حروف بزرگ و کوچک، اعداد و نمادها را در آن گنجانده باشید. هرگز فراموش نکنید که سیستم هایی که رمز عبور شما را ذخیره می کنند ممکن است هک شوند و از اطلاعات شما سوء استفاده شود. شما نمی توانید بدانید که یک سیستم از کدام الگوریتم ها برای رمزگذاری رمز عبور شما استفاده می کند، بنابراین این کاملاً به شما بستگی دارد که اقدامات احتیاطی را انجام دهید و رمزهای عبور قوی ایجاد کنید.