چند وقت پیش، مثل هر روز صبح بعد از نشستن پشت میز کارم و قبل از شروع کار، به سراغ چک کردن e-mailهایی رفتم که از شب گذشته تا صبح برایم ارسال شده بودند؛ در این بین هم یک e-mail از بخش IT Administration شرکت دریافت کرده بودم. این e-mail که با عنوان "دستور العمل انتخاب گذرواژه‌های امن" ارسال شده بود، قصد داشت تا به کارمندان سازمان نحوه انتخاب گذرواژه‌هایی که در برابر حملات Brute Force امنیتی بالایی دارند را آموزش بدهد.

با توجه به اینکه هر از چند گاهی، در مورد نحوه ساخت گذرواژه‌های امن، مورد سوال قرار می‌گیرم و از آنجایی که نسبت به شیوه و چگونگی انجام کارها، غالبا روش‌های خاصی دارم، قصد داشتم تا با اشتراک گذاشتن مواردی که در e-mail عنوان شده بودند و ذکر نظرم نسبت به هر کدوم از اونها و در پایان با ارائه یک تکنیک که کمک شایانی به امن‌ شدن گذرواژه‌های ساده می‌کند، نظراتم رو با شما هم به اشتراک گذاشته باشم.

۱متن اصلی: گذرواژه باید حداقل دوازده کاراکتر داشته باشد.

نظر من: هر چند که امنیت گذرواژه‌ها تا حد زیادی، به نوع حمله‌ای که با استفاده از آن قصد نفوذ به سیستم را داریم هم وابسته است، اما باور رایج غلطی وجود دارد که یک گذرواژه کوتاه ولی حاوی کاراکترهای تصادفی را امن‌تر از گذرواژه‌ای با طول زیاد، ولی حاوی کلمات ساده و معنا داری که به خاطر سپاری آنها راحت هستند، می‌داند که این مطلب به کل اشتباه است، برای مثال، گذرواژه "goandtypeyourscriptanddriktea" از گذرواژه "*G&>0$!3" امن‌تر است! این موضوع ناشی از آنتروپی و ارتباط آن با طول رشته‌هاست که در ادامه به آن خواهیم پرداخت.

۲متن اصلی: گذرواژه بهتر است ترکیبی از اعداد، علائم، حروف بزرگ و حروف کوچک باشد.

نظر من: این مورد کاملا درست است. می‌دانیم که ما در زبان انگلیسی، ۲۶ حرف کوچک و ۲۶ حرف بزرگ داریم. علاوه بر اینها ۱۰ عدد و ده‌ها علائم نگارشی مانند ؟، !، $، # و … را هم در نظر بگیرید - ۳۲ علامت نگارشی بر روی صفحه کلید استاندارد انگلیسی. حال فرض کنید قصد انتخاب گذرواژه‌ای تنها با استفاده از ۶ عدد را دارید، برای این انتخاب، یک میلیون امکان وجود دارد! اگر دایره کاراکترهای مجاز، در گذرواژه شش کاراکتریمان را به ترکیب اعداد و حروف کوچک انگلیسی گسترش دهیم، تعداد انتخاب‌هایمان بالغ بر ۳۰۰ میلیون خواهد بود و حال اگر حروف بزرگ هم به این دایره وارد شوند، تعداد انتخاب‌هایمان به ۲ بیلیون می‌رسد و اضافه کردن علائم نگارشی، این مقدار را به بالغ از صدها بیلیون می‌رساند!

ترکیب توصیه شماره ۱ و ۲ این متن، ما را به بالغ بر $10^23$ گزینه ممکن می‌رساند!

۳متن اصلی: یک کلمه معنادار یا ترکیبی از چند کلمه معنادار نباشد.

نظر من: به باور خیلی‌ها این مساله یکی از اصلی‌ترین مواردیست که رعایت آن امنیت گذرواژه انتخابیمان را تضمین می‌کند، ولی در ادامه این مطلب، توضیح خواهم داد که چگونه می‌توان از کلمات معنادار و یا حتی کلماتی که باور به وجود آنها در حمله‌هایی با استفاده از dictionary، password data bases و cracking list داریم، استفاده کنیم و باز هم گذرواژه امنی داشته باشیم. حتی با این وجود باید این نکته را اضافه کنم که خود من هم، به طور اکید استفاده از کلماتی مانند نام کوچک و خانوادگی، شهر و کشور محل تولد یا سکونت، نام تیم ورزشی مورد علاقه، تاریخ تولد، شماره دانشجویی، شماره ملی و سایر مواردی از این دست را، اشتباه می‌دانم و معتقدم که همه افراد، باید از استفاده از این دست از موارد در گذرواژه‌هایشان، اجتناب کنند.

۴متن اصلی: از کاراکترهای جایگزینی که واضح هستند در آن استفاده نشده باشد.

نظر من: در متن به این نکته اشاره شده که با توجه به تشابه ظاهری کاراکترهایی مانند 0 (عدد صفر) و O (حرف الفبای انگلیسی)، از جایگزینی این کاراکترها به جای یکدیگر بپرهیزید، چرا که هکر قطعا تمام کاراکترهای جایگزین ممکن برای کلمه "house" مانند "h0use" را امتحان خواهد کرد. این موضوع از لحاظ منطقی فاقد ایراد است و این امر در صورتی که هکر به کلمه‌ای در گذرواژه شما مشکوک باشد، کاملا محتمل است. اما دلیل اصلی این موضوع هم از آنتروپی ناشی می‌شود که در ادامه با آن خواهم پرداخت.

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

در این روش، ما جمله بسیار ساده "I have bought my first coputer when I was 13 for 300$" را در نظر می‌گیریم و سپس با استفاده از حروف اول این کلمات، به گذرواژه "Ihbmfcwiw13f300$" می‌رسیم. یک گذرواژه ۱۶ کاراکتری که به هیچ وجه نامناسب به نظر نمی‌رسد و به خاطر سپردن آن هم بسیار ساده است.

در ادامه شایان ذکر است که به اینکه اشاره کنم که در این مطلب گذرواژه‌ای مانند "[]1c!F^H#A)LMTRQ" به دلیل اینکه به صورت تصادفی تولید شده است، گذرواژه‌ای بسیار امن تلقی شده است.

حال موضوع اصلی میزان امنیت دو گذرواژه بالا که در متن ذکر شده‌اند نیست،

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

$(H = L × log_2(N$

H در این رابطه اندازه رشته دودویی است، L برابر با اندازه رشته ابتدایی و در مورد این پست، طول گذرواژه ماست و N تعداد کاراکترهای ممکن در گذرواژه ماست.

برای مثال:

  • ((password : 38 bits $(8 × log_2(26$
  • ((bear2017 : 41 bits $(8 × log_2(36$
  • ((!Baron38571999Serj| : 131 bits $(28 × log_2(94$


حالا سوال اصلی اینجاست که آنتروپی بیشتر در یک رشته ناشی از گسترش فضای کاراکترهای انتخابیمان است یا طول رشته؟

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

اما، مساله اصلی اینجاست که هر دو گذرواژه‌ای که در این مطلب توصیه شده‌اند، یعنی "Ihbmfcwiw13f300$" و "1[]c!F^H#A)LMTRQ" از حروف کوچک و بزرگ انگلیسی، ارقام و علائم تشکیل شده‌اند، در صورتی که فضای حالت این دو گذرواژه در یک حمله Brute Force را مورد بررسی قرار دهیم، هر دو گذرواژه دارای عمق $26 + 26 + 10 + 32 = 94$ در فضای جستجو ما هستند، و هر دو گذرواژه دارای طول ۱۶ کاراکتر هستند. کاملا واضح است که اندازه فضای حالت ما (شامل همه گذرواژه‌های ممکن ساخته شده با این عمق و اندازه) برابر با 44،480،886،725،444،405،642،219،209،517،120 و یا به عبارتی $4.45 × 10^31$ است.

پس، در سناریو یک حمله آنلاین که در طی آن بتوانیم در هر ثانیه یک صد هزار حدس را مورد بررسی قرار دهیم، 14.14 میلیون تریلیون قرن زمان لازم داریم تا تمام ترکیب‌های ممکن این شرایط را بررسی کنیم.

قبل از ادامه دادن موضوع، بد نیست که شما هم در جریان باشید که من روش‌هایی که با بررسی یک گذرواژه خاص، مقدار روزهای مورد نیاز برای شکسته شدن آن را اعلام می‌کنند را، معتبر و دقیق نمی‌دونم - از آنجایی که استانداردی برای انجام این کار وجود ندارد - و بررسی آنتروپی، عمق و طول فضای حالت و امتیازدهی به گذراژه انتخابی بر اساس یک سیستم مبتنی بر تخصیص وزن برای هر یک از پارامترها و حالات اتفاق افتاده در گذرواژه را مطمئن‌تر می‌دانم. این موضوع جایی نمود بیشتری پیدا می‌کند که بدانیم، سیستم سنجش امنیت گذرواژه انتخابی Microsoft، گذرواژه "jjjjjjjjjjjjjjjjjjjjjjjjjjjj" را "Best" و گذرواژه‌های "Jessica1234567" و "Qwertyabc123" را "Strong" ارزیابی می‌کند.

از مطالب بالا بگذریم و سراغ بررسی مورد زیر برویم، به راستی نظرتون در مورد امنیت دو گذرواژه "C4t………….." و "PrXyc.N(n4k77#L!eVdAfp9" چیست؟

کدام یکی از این دو گذرواژه قوی‌تر، امن‌تر و برای شکستن، سخت‌تر هستند؟ کاملا مشخصه که با یک سوال انحرافی سر و کار داریم!

ولی برخلاف اینکه به خاطر سپاری گذرواژه اول به شکل غیر قابل مقایسه‌ای ساده‌تر از گذرواژه دوم است، گذرواژه اول قوی‌تر است!

در واقع، اضافه داشتن یک کاراکتر و ساخته شدن این گذرواژه از ترکیب حروف کوچک و بزرگ انگلیسی به همراه اعداد و علائم نگارشی، باعث می‌شود تا حدس زدن این گذرواژه در یک حمله، نسبت به گذرواژه غیر قابل به خاطر سپاری دوم، ۹۴ بار نیازمند زمان بیشتری باشد.

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

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

در ضمن، تمامی مطالب ترسناکی که در مورد dictionaryها، password data baseها و cracking listها یاد گرفتید را فراموش کنید!

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

سخن آخر من، و اصلی‌ترین توصیه من برای ساخت گذرواژه‌های امن که حتی به ما این امکان را می‌دهد تا در گذرواژه‌هایمان از کلمات معنادار هم استفاده کنیم، تکنیکی است به نام Padding.

لزومی نیست که یک گذرواژه برای امن بودن، حتما طول زیادی داشته باشد، بلکه یک گذرواژه با طول کوتاه که امکان به خاطر سپاری آن هم وجود دارد، در صورتی که با تکنیک padding درآمیخته شود، می‌تواند برای ما گذرواژه‌ای “بسیار قوی” تولید کند.

بد نیست این را هم بدانیم که این تکنیک، قادر است تا تمام کلمات موجود در یک dictionary را شکست دهد، برای مثال گذرواژه ساده "Password" را در نظر بگیرید که چهارمین گذرواژه پرکاربرد دنیاست، با تغییر این گذرواژه به "..Password"، گذرواژه‌ای ساخته‌ایم که در هیچ dictionary موجود نیست.

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

هر فردی باید روش شخصی padding خودش را ابداع کند.

می‌توانیم padding را در ابتدا، میانه و انتهای گذرواژه‌هایمان اضافه کنیم.

با جمع بندی مطالب بالا، برای داشتن یک گذرواژه امن بهتر است، کلید اصلی گذرواژه‌تان را یک رشته ۸ کاراکتری بگذراید که شامل حروف بزرگ و کوچک است، در ادامه این رشته را با اعداد ترکیب کنید. در ادامه با استفاده از علائم نگارشی و تکنیک padding، گذرواژه‌تان را ایمن کنید. ضمنا در صورتی که گذروزه نهایی شامل کمتر از ۲۰ کاراکتر بود، نباید رشته حروف انتخاب شده، شامل بیشتر از ۳ کاراکتر کوچک یا بزرگ تکراری باشد، عدم استفاده از بیش از ۳ کاراکتر در کنار هم، به صورت صعودی یا نزولی نیز مورد بعدی است که رعایت آن بسیار مهم است.

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