امروزه بزرگترین سد در مقابل نفوذ هکرها و افراد مخرب به سیستمها و حسابهای کاربری ما رمز عبورها هستند. بحث امنیت رمز عبور در واقع حول یک استراتژی پایه شکل گرفته است: ایجاد رمز عبور تصادفی که هیچکس در یک بازه زمانی معقول قادر به پیشبینی (یا حدس زدن) آن نباشد و سپس تغییر دادن آن در فواصل زمانی منظم برای حفظ دشواری پیشبینی آن شکل میگیرد.
متاسفانه بسیاری از ما از اهمیت غیر قابل انکار اهمیت رمز عبور در امنیت سایبری غافل میشویم. در این مقاله از فراست قرار درباره اینکه چطور امنیت رمز عبور خودتان را بالا ببرید و چطور یک رمز عبور تصادفی امن برای خود ایجاد کنید با هم صحبتی داشته باشیم.
اهمیت رمز عبور تصادفی
تلاش برای غیرقابل پیشبینی بودن به صورت عمدی کار آسانی نیست. انسانها برای تصادفی بودن باید تلاش کنند و گاهی اوقات این فرایند باعث افزایش قابلیت پیشبینی رمز عبورها میشود یعنی در واقع نتیجهای معکوس در پی دارد. رمز عبور تصادفی مهمترین جنبه در بحث امنیت رمز عبور است که ما بیش از هر چیزی برای دستیابی به آن تلاش میکنیم.
یکی از مهمترین دلایل ضعف امنیتی، اهمیت ندادن به ایجاد رمز عبور تصادفی است. تصادفی بودن اعداد از هیچ آمار خاصی تبعیت نمیکند و کاملاً غیرقابل پیشبینی است. مطمئناً اگر شما یک ماشین شانس را امتحان کنید، ممکن است یک ماشین شانس سه بار پشت سر هم شما را به جایزه بزرگ برساند یا اینکه هیچوقت شما را به جایزه بزرگ نرساند.
“Kevin Mitnick” در کتابی تحت عنوان «هنر نفوذ» مطالبی درباره این موضوع نوشته است. وی در این کتاب توضیح میدهد که چگونه چهار نفر نقاط ضعفی را در مولد اعداد ماشینهای شانس پیدا کرده و از آن به نفع خودشان استفاده کردهاند.
باید اعتراف کنیم که ما در تشخیص تصادفی بودن اعداد هم مشکل داریم. 50 رقم عدد پی را در نظر بگیرید:
3.141592653589793238462643383279502884197169399375
شاید این عدد در ابتدا تصادفی به نظر برسد اما اگر خوب به آن نگاه کنید، ممکن است الگوهایی را در آن ببینید. اگر کامپیوتری داشتید که دائماً اعداد تصادفی مختلف را تولید میکرد ممکن بود کامپیوتر شما در نهایت عددی یکسان با عدد پی تولید کند. هر چند شاید این کار چندین دهه زمان ببرد.
عدد پی آنقدر پیچیده است که عده زیادی آن را به تصادفی بودن نزدیک میدانند. احتمال پیدا کردن ارقام تاریخ تولدتان در 100 میلیون رقم ابتدایی عدد پی 63 درصد است. در سایت زیر می توانید به این ماجرا پی ببرید.
(http://www.angio.net/pi/piquery )
به صورت مشابه، شاید شنیده باشید که اگر به تعداد کافی میمون داشته باشید که با یک ماشین تایپ کار کنند، این میمونها در نهایت میتوانند کل کارهای شکسپیر را تولید کنند. هر چند این موضوع عجیب و غیرممکن به نظر میرسد، اما آیا این یعنی کارهای شکسپیر تصادفی بودهاند؟ آیا یک تاس تصادفی است؟ تصور کنید دو تاس را همزمان پرتاب می کنیم چقدر احتمال دارد که هر دو عدد رو شده یکسان باشد؟در پرتاب یک سکه ویک تاس به نظرتات چند حالت وجود دارد؟ از همه مهمتر آیا رمز عبور شما تصادفی است؟
کاربرد تصادفی بودن رمز عبور
بحث تصادفی بودن یک بحث عجیب است. ما نمیدانیم که تصادفی بودن چقدر واقعیت دارد. وقتی که ما هیچ الگوی واضحی را در یک دنباله مشاهده نمیکنیم، آن را تصادفی مینامیم. به عنوان مثال دنباله 1، 2، 3، 4، 5 تصادفی نیست زیرا ما در آن یک الگو میبینیم. ما به راحتی میتوانیم چگونگی پیش رفتن و ادامه این دنباله را حدس بزنیم.
دنباله 10، 100، 1000، 10000 هم یک الگوی قابل تشخیص دارد. از طرفی دنباله 93، 2، 75، 49، 36 هیچ الگوی مشخصی ندارد و بنابراین ما نمیتوانیم عدد بعدی در این دنباله را پیشبینی کنیم. اگر هیچ فرمول یا الگویی وجود نداشته باشد که بتوانیم بر اساس آن دنباله را باز تولید کنیم در این صورت آن را یک دنباله تصادفی میدانیم؛ به همین سبک می توانیم به تولید رمز عبور تصادفی بپردازیم.
عدم وجود نظم و ترتیب، تضمینی برای تصادفی بودن نیست. یک دنباله در صورتی تصادفی است که هیچ راهی برای بازتولید آن با توجه به هیچ اطلاعات یا شرایطی وجود نداشته باشد (به عنوان مثال، مقدار عدد پی، تصادفی به نظر میرسد اما برای تولید این ارقام از یک روش خاص استفاده شده است).
تعیین تصادفی بودن یک دنباله کار سختی است؛ بنابراین ما برای تعیین رمز عبور تصادفی چند ویژگی مختلف را در نظر میگیریم:
- توزیع یکنواخت: احتمال یکسان برای توزیع روی کل یک مجموعه داده
- غیرقابل پیشبینی بودن: هیچ کدام از بخشهای داده مورد نظر با هیچ کدام از دادههای قبلی در ارتباط نیست و هیچ اطلاعاتی درباره دادههای بعد از خودش فراهم نمیکند.
- منحصربفرد بودن: تولید تصادفی همان دنباله از دادهها باید به شدت غیرمحتمل باشد. هر چه دنبالهای طولانیتر باشد، منحصربهفردتر خواهد بود.
این سه ویژگی باعث میشود که حدس زدن رمز عبور تصادفی غیرممکن شود و بنابراین تصادفی بودن، یک ویژگی مهم برای رمز عبورهای قوی محسوب میشود. متأسفانه به خاطر سپردن رمز عبورهای کاملاً تصادفی بسیار سخت است و حتی اگر بتوانیم آنها را به خاطر بسپاریم تولید رمز تصادفی یک عمل بسیار پیچیده است.
توزیع یکنواخت رمز عبور
توزیع یکنواخت یعنی پیش از تولید یک دنباله تصادفی از دادهها، احتمال تولید تمام خروجیها یکسان باشد. قبل از اینکه یک تاس را پرتاب کنید، احتمال رو شدن تمام اعداد یکسان است. به دلیل این توزیع یکنواخت، میتوانیم فرض کنیم که بعد از یک مدتزمان طولانی، دادههای تصادفی تولیدشده کل مجموعه داده اولیه را پوشش میدهند.
یک آبپاش را تصور کنید، همچنان که این آبپاش قطرههای آب را به اطراف میپاشند پیشبینی کردن اینکه هر قطره آب روی کدام برگ چمن قرار میگیرد کار غیرممکنی است. قبل از خروج هر قطره آب از آبپاش احتمال اینکه هرکدام از برگهای چمن توسط آن خیس شوند وجود دارد.
به همین ترتیب اگر آبپاش به مدت کافی کار کند، در نهایت آب تمام چمنهایی که در محدوده آبپاش قرار دارند را پوشش میدهد. بعلاوه، میتوان انتظار داشت که طی یک بازه زمانی مشخص تمام چمنها تقریباً مقدار آب یکسانی را دریافت کنند، زیرا توزیع آب یکنواخت و غیرجانبدارانه است.
زبانهای انسانی تصادفی نیستند؛ بنابراین رمز عبورهایی که از این زبانها استخراج میشوند هم تصادفی نیستند، اگر ما تعداد دفعات حضور هر کاراکتر را در هر رمز عبور محاسبه کنیم، متوجه خواهیم شد که با تصادفی بودن فاصله زیادی داریم. لازم به ذکر است که توزیع یکنواخت همیشه به این معنا نیست که دادههای تصادفی به صورت یکنواخت توزیع شدهاند.
غیرقابل پیشبینی کردن رمز عبور تصادفی
چیزی که واقعاً باعث تصادفی بودن میشود، عدم وجود هرگونه اطلاعات قبلی برای کمک به تعیین دادههایی است که در مرحله بعد در یک دنباله تصادفی ظاهر میشوند. در زبان انگلیسی احتمال اینکه حرف دیگری به غیر U بعد از حرف Q ظاهر شود، بسیار کم است؛ بنابراین توالی حروف در عبارات انگلیسی کاملاً قابل پیشبینی بوده و واقعاً تصادفی نیستند.
کارشناسان امنیت، استفاده از دنبالههای کاملاً تصادفی را به جای کلمات انگلیسی که به شدت قابل پیشبینی هستند توصیه میکنند. میزان قابل پیشبینی نبودن یک دنباله با اندازهگیری آنتروپی آن ارزیابی میشود. آنتروپی معیاری برای اندازهگیری میزان بینظمی، یا عدم وجود اطلاعات است. تراکم اطلاعات، معیاری است که نشان میدهد در یک دنباله دادهای چقدر افزونگی وجود دارد.
تخمین زده میشود که زبان انگلیسی 50 درصد افزونگی دارد؛ به عبارت دیگر میتوانید نیمی از حروف یک جمله را حذف کنید ولی با این وجود باز هم آن جمله قابل درک خواهد بود. این یعنی برای این که آنتروپی رمز عبوری که بر اساس کلمات انگلیسی ساخته شده، به اندازه یک رمز عبور تصادفی باشد، باید طول آن دو برابر طول رمز عبور تصادفی باشد.
حتما این مقاله را هم بخوانید: امنیت اطلاعات چیست ؟ و نگاهی عمیق به استانداردهای امنیت اطلاعات و اهمیت رعایت آنهامنحصر بفرد بودن رمز عبور تصادفی
اگر یک دنباله از دادههای تصادفی را در نظر بگیرید (مثل 10 عدد تصادفی)، احتمال این که همین دنبالهی 10 کاراکتری دوباره تکرار شود کم است؛ اما با افزایش طول این دنباله، احتمال تکرار، کمتر هم میشود. به همین دلیل حدس زدن تصادفی شماره یک کارت اعتباری معتبر کار سختی است.
تعداد حالات ممکن برای شماره یک کارت اعتباری آنقدر زیاد است که برای هر شماره معتبری میلیونها رقم بلااستفاده وجود دارد. از آنجایی که اعداد تصادفی به صورت بسیار یکنواخت توزیع شده و هیچ رابطهای بین هیچ دو کاراکتری وجود ندارد، این احتمال وجود دارد که دنبالههای واقعاً تصادفی به ندرت تکرار شوند.
عدم وجود خاصیت تصادفی بودن، برای خیلی از رمز عبورها یک نقطهضعف بسیار مهم محسوب میشود. حتی اگر تمام زبانهای متداول را در نظر بگیرید و حتی اگر به انتهای هر کلمه چند عدد اضافه کنید باز هم تعداد کلمات متفاوت به اندازه کافی زیاد نیستند.
برای چیدن 8 حرف کوچک انگلیسی 26 به توان 8 یا به عبارتی 208827064576 حالت مختلف وجود دارد؛ اما در کل زبان انگلیسی حدود 17 هزار کلمه با حروف کوچک وجود دارد که از بین آنها حدود 500 عدد کاربرد متداول دارند. این یعنی برای هر کلمه انگلیسی 8 حرفی بیشتر از 12 میلیون ترکیب مختلف با حروف کوچک وجود دارد که جزء کلمات انگلیسی نیستند.
از آنجایی که اکثر رمز عبورها توزیع یکنواخت نداشته و غیر قابل پیشبینی یا منحصر بفرد نیستد بنابراین در برابر حمله آسیبپذیر بوده و امنیت کمی دارند. بیشتر رمز عبورها به جای داشتن توزیع یکنواخت، حول خوشههایی متشکل از چند گروه رمز عبور مشابه شکل گرفتهاند.
برای نشان دادن عدم وجود ویژگی تصادفی بودن در رمز عبورها، کل مساحت امریکا را با کل ترکیبات ممکن هشت کاراکتری که میتوانید روی یک صفحهکلید معمولی تایپ کنید، مقایسه کنید. این سطح نشاندهنده تعداد کل رمز عبورهای ممکن با در نظر گرفتن رمز عبورهای 8 کاراکتری است.
حالا فرض کنید میلیونها نفر برای رمز عبورشان تنها یک محدوده 1 سانتیمتری از امریکا را استفاده میکنند. بر اساس دادههای واقعی که درباره رمز عبور کاربران وجود دارد، علیرغم این واقعیت که کاربران محدودهای مثل مساحت کل امریکا را در اختیار دارند اما 98 درصد از رمز عبورها در یک مساحت حدوداً 36 اینچی قرار دارند.
اگر قرار باشد رمز عبوری را کرک کنید، این خبر برای شما یک خبر فوقالعاده محسوب میشود. فضای جستجوی شما فوقالعاده بزرگ نیست زیرا بیشتر رمز عبورها تقریباً در یک محدوده قرار دارند.
فلسفه تصادفی بودن از دیدگاه یک انسان
از آنجایی که درک ما انسانها از تصادفی بودن بسیار ضعیف است، ایجاد خصوصیت تصادفی بودن توسط ما بسیار سخت است. خودتان این کار را امتحان کنید. سعی کنید با صفحهکلید کامپیوتر یک رشته طولانی از کاراکترهای تصادفی را تایپ کنید. همین که تایپ کردن را شروع کنید متوجه میشوید که تولید دادههایی که واقعاً تصادفی باشند بسیار سخت است.
این احتمال وجود دارد که دنبالههای asdf و uiop در کلمات تایپ شده توسط شما وجود داشته باشند. اما برای درک وخامت اوضاع باید توجه داشت که هر چه بیشتر سعی کنید تصادفیتر عمل کنید، قابل پیشبینیتر میشوید (به عنوان مثال ممکن است عمداً از به کار بردن الگوهای مشخص و افزونگی پیشگیری کنید و در نتیجه یک الگوی قابل پیشبینی دیگر ایجاد کنید).
بازی «گل یا پوچ» را در نظر بگیرید. یک شی را در یکی از دستان خودتان قرار داده، هر دو دست را پشت سرتان نگه داشته و از یک کودک بخواهید حدس بزند که این شی در کدام دست شما قرار دارد. به این ترتیب حدس وی تا حدی تصادفی خواهد بود.
این بازی را دوباره تکرار کنید، این بار حدس وی به میزان زیادی به نتیجه دور آخر بازی بستگی دارد (یعنی اگر در آخرین دور به درستی حدس زده بود که گل در دست چپ شما قرار دارد، این بار هم سعی میکند دست چپ را امتحان کند).
از طرفی ممکن است این کودک باهوشتر باشد و انتظار داشته باشد که این بار شما دست را تغییر بدهید و بنابراین این بار دست راست شما را انتخاب کند. اگر چندین بار این بازی را انجام دهید، متوجه شکلگیری الگوهایی در انتخاب خودتان و پاسخهای آن کودک خواهید شد.
اگر تعدادی سکه به یک شخص بدهید و از وی بخواهید سکهها را به صورت تصادفی روی یک میز پخش کند، در نگاه اول متوجه میشوید که بیشتر افراد میتوانند سکهها را به صورتی مرتب کنند که تصادفی به نظر برسد؛ اما اگر با دقت نگاه کنید متوجه میشوید الگوهایی وجود دارند که این تصادفی بودن را تعریف میکنند (یعنی هر چند به نظر میرسد که سکهها به صورت تصادفی مرتب شدهاند، اما ممکن است فضاهای بین سکهها یکسان باشد. ما هم در تلاش برای ایجاد خاصیت تصادفی بودن، گرفتار الگوهای خاصی شدیم.
عدم برخورداری از خاصیت تصادفی بودن در رمز عبورهای ما کاملاً مشهود است. ما تمایل به استفاده از کلماتی داریم که به زندگی شخصی یا محیط اطرافمان مربوط هستند. ما به جای انتخاب از بین کل محدوده کلمات موجود، اعداد و کلماتی را انتخاب میکنیم که برایمان معنا و مفهوم خاصی دارند.
ممکن است سعی کنیم دیکشنری را به صورت تصادفی باز کرده و یک کلمه را انتخاب کنیم اما حتی در این که کدام بخش از کتاب را باز کرده یا کدام بخش از صفحه را انتخاب کنیم، به نوعی جانبدارانه عمل میکنیم.
فلسفه تصادفی بودن ماشینی
مشخص شده که کامپیوترها هم در زمینه ایجاد خاصیت تصادفی بودن، مشکلاتی دارند. نمیتوانید از مدارها و ثباتها درخواست کنید که یکسری کاراکتر واقعاً تصادفی را انتخاب کنند. یک کامپیوتر حتی برای اینکه بداند چه کاراکترهای تصادفی را تولید کند، نیاز به دستورالعملهایی دقیق دارد. در نتیجه کامپیوترها از چیزی به نام مولّد اعداد شبه تصادفی (Pseudo Random Number Generator (PRNG استفاده میکنند.
اعداد شبه تصادفی واقعاً تصادفی نیستند بلکه در واقع الگوریتمی وجود دارد که اعدادی تولید میکند که تصادفی به نظر میرسند اما در واقع این اعداد یک دنباله قابل پیشبینی هستند. کلید تصادفی بودن مقداری به نام seed است که از آن برای مقداردهی اولیه دنباله تصادفی استفاده میشود. اگر شما این مقدار را بدانید، میتوانید آن دنباله تصادفی را بازتولید کنید.
برای مقابله با این مسئله، کامپیوترها جهت ایجاد Seed برای مولد اعداد تصادفی و جمعآوری دادههای تصادفی، از روشهایی پیچیده استفاده میکنند. ممکن است این کار بر اساس زمان، فاکتورهای محیطی یا فعالیت کاربر با صفحهکلید یا ماوس انجام شود. حتی در برخی موارد سعی شده این تصادفی بودن بیشتر لحاظ شود.
جدول زیر برخی از منابع دادههای تصادفی و روشهای مورد استفاده برای تولید این دادهها را که در دسترس عموم قرار دارند نشان میدهد.
منابعی از دادههای تصادفی قابلدسترس برای عموم
آدرس | منبع آنتروپی |
www.random.org | سروصدا و نویز جو که توسط یک رادیو جمعآوری شده است |
www.fourmilab.ch/hotbits | فروپاشی رادیواکتیوی کریپتون 85 |
www.lavarnd.org | نویزهای تصادفی یک دوربین CCD |
کاهش قابلیت پیشبینی رمز عبور
احتمالاً ما نمیتوانیم خودمان غیرقابل پیشبینی بودن واقعی را ایجاد کنیم اما این مسئله مشکلآفرین نیست. غیرقابل پیشبینی بودن حقیقی یعنی هر یک از قطعات اطلاعاتی در رمز عبور شما از سایرین مستقل باشد و نتوان از بخشی از رمز عبور جهت پیشبینی بقیه آن استفاده کرد.
این یعنی رمز عبوری که واقعاً غیرقابل پیشبینی باشد، یک رشته از کاراکترهای غیرمرتبط است که به خاطر سپردن آنها همیشه سخت است. از طرف دیگر با تلاش برای بهبود امکان به خاطر سپردن رمز عبورتان، بدون شک قابل پیشبینی بودن آن را افزایش میدهید.
با توجه به این موضوع برای کارآمد بودن یک رمز عبور تصادفی، نیازی به غیرقابل پیشبینی بودن کامل آن نیست. تنها شرط لازم این است که رمز عبور شما به اندازه کافی غیرقابل پیشبینی باشد تا از آسیبپذیر شدن آن در برابر حمله پیشگیری شود. میتوانید از بقیه کاراکترها برای به خاطر سپردن رمز عبورتان استفاده کنید.
در ادامه چند نمونه از رمز عبورهای غیرقابل پیشبینی را مشاهده میکنید:
- 3Kja&Ey#
- u?7h%dPW
- @bx8R2k$
اما حالا چند رمز عبور بهتر را مشاهده میکنید که فقط به اندازه لازم برای قوی شدن رمز عبور، غیرقابل پیشبینی بوده و بعلاوه قابل حفظ کردن و به خاطر سپردن هم هستند:
- WhitenEighteen
- Fast+rocketing+
- creepy—FIVES
- Imp ort.ant
- cake and tape
اگر به این رمز عبورها نگاهی داشته باشید، متوجه میشوید که شاید خیلی از کاراکترهای آنها بر اساس کاراکترهای قبل و بعدشان قابل پیشبینی باشند؛ اما خود رمز عبور در مجموع قابل پیشبینی نبوده و در نتیجه به اندازه کافی قوی است.
چیزی به اسم «منحصر بفردتر» وجود ندارد هر چیزی یا کاملاً منحصر بفرد است یا به هیچوجه منحصر بفرد نیست؛ اما وقتی بحث رمز عبور در میان باشد شما باید به منحصربفردتر بودن فکر کنید.
رمز عبور شما باید آنقدر نسبت به سایر رمز عبورها منحصربفرد باشد که حتی یک ابزار کرک فوقالعاده سریع که تمام ترکیبات مختلف را امتحان میکند نتواند به رمز عبور تصادفی شما برسد، اینجاست که اکثر مردم دچار اشتباه میشوند.
لیست رمز عبورهای واقعی زیر بر اساس کلمه dragon را در نظر بگیرید:
Dragon(با کلیک کردن لیست را مشاهده کنید)
احتمالاً متوجه شدهاید که فقط برخی از این رمز عبورها نسبت به بقیه کمتر قابل پیشبینی هستند. رمز عبورهایی مثل gothik_dragon و dragonphoenix3 منحصربفردتر هستند از این جهت که برای رسیدن به این رمز عبورها باید ترکیبات بسیار متنوعی از این کلمات تست شود. رمز عبور تصادفی کلید منحصر بفرد بودن را مشخص میکنند یعنی طولانیتر کردن هر چه بیشتر رمز عبور امنیت رمز عبور شما را افزایش میدهد.
حتما این مقاله را هم بخوانید: پسوردهای عالی و بینقص بسازید!احتمال کرک شدن یک رمز عبور طولانی و منحصربفرد بسیار کمتر از یک رمز عبور کوتاه است. با یک حساب ساده میتوان گفت هر چه تعداد کاراکترهایی که در رمز عبورتان استفاده میکنید بیشتر شود، احتمال منحصربفرد شدن آن بیشتر میشود. بعلاوه، از آنجایی که میدانیم زبان انگلیسی حدود 50 درصد افزونگی دارد، باید سعی کنید رمز عبورتان را دو برابر حالت معمولی منحصربفرد کنید.
مسلماً همانطور که اشاره شد، ویژگی تصادفی بودن در انسانها ضعیف است اما با کمی کمک و با استفاده از یکسری استراتژیهای ساده میتوانید این ویژگی را جبران کرده و رمز عبور تصادفی بسیار قوی داشته باشید.