« رمز عبور شما باید شامل ۸ کاراکتر، یک حرف بزرگ، یک حرف کوچک، یک عدد و یک کاراکتر خاص باشد. »
همه ما این قانون را میدانیم. با این حال، در امنیت سایبری، این چیزی است که ما آن را “تئاتر امنیتی” مینامیم. رمز عبوری مانند P@ssw0rd1! تمام این قوانین را رعایت میکند. اما این فقط یک کلمهٔ رایج با جایگزینیهای قابل پیشبینی است، و دقیقاً همان چیزی است که ابزارهای کرک اول امتحان میکنند.
امنیت واقعی بر اساس قوانین بصری دلخواه نیست، بلکه بر یک واقعیت ریاضی بیرحمانه استوار است: آنتروپی (Entropy).
آنتروپی به گفته کلود شانون
برای درک قدرت یک رمز عبور، باید به کلود شانون، پدر نظریه اطلاعات نگاه کنیم. آنتروپی درجه عدم قطعیت یا غیرقابل پیشبینی بودن اطلاعات را اندازهگیری میکند.
هنگامی که در مورد رمز عبور اعمال میشود، آنتروپی بر حسب بیت (bits) محاسبه میشود. هر چه تعداد بیتها بیشتر باشد، رمز عبور برای رایانه غیرقابل پیشبینیتر است. فرمول ساده شده آنتروپی (E) یک رمز عبور که به طور تصادفی تولید شده است عبارت است از:
E = L × log2(R)
- L طول رمز عبور است.
- R اندازه مجموعه است (۲۶ برای حروف کوچک، ۶۲ با حروف بزرگ و اعداد، ۹۴ با همهٔ نمادهای قابل چاپ). چهار مجموعهٔ کاراکتر سازندهٔ ما ۹۱ کاراکتر میدهند، چون مجموعهٔ نمادهای آن ۲۹ کاراکتر دارد.
افزایش اندازه مجموعه (افزودن نمادها) آنتروپی را افزایش میدهد، اما افزایش طول (افزودن کاراکترها) آن را به مراتب بیشتر افزایش میدهد. با این حال، طول تنها به یک شرط بر پیچیدگی غلبه میکند: اینکه رمز عبور کاملاً تصادفی ایجاد شود.
حمله Brute Force در برابر Dictionary Attack
اگر از کلمات یا ساختارهای قابل پیشبینی استفاده کنید، قانون طول خالص از بین میرود.
نرمافزارهای هک تمام ترکیبات حروف را یکی یکی امتحان نمیکنند (به این کار Brute Force میگویند). آنها از فهرستهای عظیمی از رمزهای عبور واقعی برآمده از نشت دادههای گذشته، همراه با کلمات و عبارات رایج استفاده میکنند. این حمله دیکشنری (Dictionary Attack) است.
اگر رمز عبور شما طولانی است، اما از کلمات فرهنگ لغت یا جایگزینهای قابل پیشبینی تشکیل شده است، آنتروپی واقعی آن به طور چشمگیری کمتر از آنتروپی ریاضی نظری آن است.
جدول زیر یک قاعده دارد: ۱۰۰ میلیارد تلاش در ثانیه، نرخی که صفحهٔ سازندهٔ ما برای یک حملهٔ آفلاین روی یک هش سریع فرض میکند. زمانها میانگین هستند (نیمی از همهٔ حالتهای ممکن) و با همان فرمول آن صفحه به پایین گرد شدهاند. سریعترین مسیر برای هر رمز عبور پررنگ شده است:
| رمز عبور | آنتروپی اگر هر کاراکتر تصادفی بود | در برابر Brute Force (میانگین) | حمله دیکشنری (تخمین ما) |
|---|---|---|---|
password123 | ۵۶ بیت (۱۱ کاراکتر، حروف کوچک و اعداد) | ۷ روز | کمتر از یک ثانیه |
S3cr3t!99 | ۵۸ بیت (۹ کاراکتر، هر چهار مجموعه) | ۲۴ روز | کمتر از یک ثانیه |
correct horse battery staple | ۱۳۳ بیت (۲۸ کاراکتر، حروف کوچک و فاصله) | بیش از ۱ هزارمیلیارد سال | ۱ دقیقه |
gL7!pQ9z#vX2 | ۷۸ بیت (۱۲ کاراکتر، هر چهار مجموعه) | ۵۱ هزار سال | میانبری وجود ندارد |
ستون دیکشنری یک تخمین است. فرض میکند حدسهای مهاجم از ساختار هر رمز عبور پیروی میکنند و هر کلمهٔ پایه جزو ۱٬۰۰۰ کلمهٔ رایجتر است:
password123: یک کلمهٔ رایج و سه رقم. یعنی ۱٬۰۰۰ × ۱٬۰۰۰، حدود یک میلیون حدس.S3cr3t!99: یک کلمهٔ رایج، با حرف بزرگ یا بدون آن، هر “e” به “3” تبدیل شده یا نشده، و سپس هر پسوند سهکاراکتری. یعنی حدود ۷ میلیارد حدس.correct horse battery staple: چهار کلمهٔ رایج. کمیک xkcd که آن را مشهور کرد، چهار کلمه از فهرستی ۲٬۰۴۸ کلمهای را ۴۴ بیت حساب میکند. با همان نرخ، این بهطور میانگین ۸۸ ثانیه است، یعنی پس از گرد کردن به پایین ۱ دقیقه.gL7!pQ9z#vX2: نه کلمهای دارد و نه الگویی، پس Brute Force سریعترین مسیر است.
این تخمینها هر رمز عبور را برای مهاجم ناشناخته فرض میکنند. همهٔ رمزهای عبور این مقاله اکنون عمومی شدهاند، پس جای هر کدام در دیکشنریهاست. رمز عبوری که منتشر شده، رمز عبوری سوخته است.
توهم Leetspeak و قوانین جهش
مثال S3cr3t!99 را در نظر بگیرید. از نظر بصری، پیچیده و قوی به نظر میرسد. با این حال، این صرفاً کلمه فرهنگ لغت “secret” است، که در آن ’e’ با ‘3’ جایگزین شده است و یک پسوند بسیار رایج به آن اضافه شده است (!99). به این کار leetspeak میگویند.
در برابر حمله دیکشنری، این رمز عبور کمتر از یک ثانیه دوام میآورد، نه ۲۴ روزی که طولش نشان میدهد. نرمافزارهای مدرن کرک (مانند Hashcat) فقط لیست کلمات ثابت را آزمایش نمیکنند؛ آنها به طور خودکار قوانین جهش (mutation rules) را اعمال میکنند. آنها هر کلمه را در فرهنگ لغت خود میگیرند، تمام ترکیبات ممکن leetspeak را آزمایش میکنند، حروف بزرگ را جابجا میکنند و سالها یا نمادها را اضافه میکنند. Leetspeak حس امنیت کاذبی ایجاد میکند.
ترفند تغییر کیبورد (Keyboard Shift)
برای پیچیده کردن یک عبارت به یاد ماندنی، برخی از ترفند تغییر چیدمان صفحه کلید استفاده میکنند. به عنوان مثال، عبارتی مانند my-cat را به خاطر میسپارید. اما هنگام تایپ آن، انگشتان خود را روی یک صفحه کلید فیزیکی QWERTY قرار میدهید در حالی که سیستم عامل شما روی AZERTY (فرانسوی) تنظیم شده است.
- کلمه در ذهن:
my-cat - نتیجه تایپ شده:
,y)cqt (کلید ’m’ به ‘,’ تبدیل میشود؛ ‘-’ به ‘)’ تبدیل میشود؛ ‘a’ به ‘q’ تبدیل میشود).
آیا این ایده خوبی در OPSEC است؟ خیر، اگر این روش به تنهایی استفاده شود کافی نیست. درست مانند leetspeak، تغییر چیدمان صفحه کلید یک جایگزینی ثابت است: مهاجمی که به آن شک کند، همان نگاشت را روی هر حدس اعمال میکند. در OPSEC، این امنیت از طریق ابهام است: این کار یک مهاجم آماتور را به تأخیر میاندازد، اما یک حمله هدفمند و مجهز را متوقف نخواهد کرد.
در ترکیب با رمز عبوری که از قبل قوی است (مانند یک عبارت عبور تصادفی طولانی)، چیز زیادی اضافه نمیکند. حتی اگر مهاجم ۱٬۰۰۰ جفت چیدمان را امتحان کند، کمتر از ۱۰ بیت اضافه میشود، چون log2(۱٬۰۰۰) ≈ ۹٫۹۷. قدرت همچنان از عبارت عبور زیرین میآید.
ساخت رمز عبور اصلی (~۲۵۰ بیت)
اگر لیست کلمات، leetspeak و ترفندهای تایپ محدودیتهای خود را دارند، چگونه رمز عبور اصلیای بسازیم که دوام بیاورد؟ سازندهٔ ما همین حالا ۸۰ بیت را “قوی” و ۱۰۰ بیت را “بسیار قوی” ارزیابی میکند. برای رمز عبور اصلیای که قرار است دههها دوام بیاورد، این مقاله هدفی بسیار بالاتر در نظر میگیرد: حدود ۲۵۰ بیت آنتروپی. بخش کوانتومی در ادامه توضیح میدهد چرا، و این حاشیهٔ امن چه چیزی را تضمین نمیکند.
بسته به نیاز شما دو راه برای رسیدن به این هدف وجود دارد:
1. کاراکترهای تصادفی (برای مدیر رمز عبور)
رشتهای از کاراکترها که کاملاً تصادفی تولید شده است، بدون هیچ الگویی که ماشین بتواند از آن بهره بگیرد:
8}8,_$-p)M&n,XvUCT0o+.5hDE6P^w6b@U-evS0
۳۹ کاراکتر که بهطور تصادفی از ۹۱ کاراکتر سازندهٔ ما کشیده شدهاند. سازنده آن را به شکل “≈ تعداد بیت: ۲۵۳” نشان میدهد. این نمونه برای این مقاله کشیده شده، پس اکنون عمومی است. هرگز از آن استفاده نکنید.
2. عبارت عبور تصادفی (برای رمز عبوری که به خاطر میسپارید)
کلمات تصادفی راحتتر از کاراکترهای تصادفی به خاطر سپرده میشوند. هر کلمهای که از فهرست بلند EFF با ۷٬۷۷۶ کلمه کشیده شود، حدود ۱۲٫۹ بیت اضافه میکند، پس تعداد کلمات است که آنتروپی را تعیین میکند. ۱۲ کلمه “≈ تعداد بیت: ۱۵۵” میدهد، بسیار بالاتر از آستانهٔ “بسیار قوی” سازندهٔ ما. کلمات ساده تنها با ۲۰ کلمه از ۲۵۰ بیت میگذرند.
سازندهٔ ما حداکثر ۱۲ کلمه میسازد. برای گذشتن از ۲۵۰ بیت با کلمات کمتر، گزینهٔ “عدد تصادفی بعد از هر کلمه” را تیک بزنید و “عدد + نماد” را بهعنوان جداکننده انتخاب کنید. آنوقت ۱۱ کلمه “≈ تعداد بیت: ۲۶۰” میدهد:
depletion78$sporting14~overlap11>macaw86>paced95,paramedic41}blot41$flagstone07;uncanny92/broadways77#say2
برای این مقاله و دقیقاً با همین تنظیمات بهطور تصادفی کشیده شده است. رمز عبوری که منتشر شده، رمز عبوری سوخته است: هرگز از این نمونه، یا هر نمونهای که میخوانید، استفاده نکنید. فقط آنچه تصادفی کشیده شده به حساب میآید. بزرگ کردن حرف اول هر کلمه چیزی اضافه نمیکند، و کلماتی که خودتان انتخاب میکنید بسیار ضعیفتر از کلمات تصادفیاند.
تهدید کوانتومی: الگوریتم گراور
چرا باید ۲۵۰ بیت را هدف قرار داد در حالی که ۱۲۸ بیت هماکنون ابررایانههای امروزی را مسدود میکند؟ پاسخ در احتمال ظهور کامپیوترهای کوانتومی بزرگ نهفته است.
در رمزنگاری، الگوریتم گراور (Grover) به یک کامپیوتر کوانتومی اجازه میدهد تا در یک پایگاه داده مرتب نشده بسیار سریعتر از یک کامپیوتر کلاسیک جستجو کند. به طور مشخص، گراور سطح امنیت مؤثر یک کلید متقارن یا رمز عبور را به نصف کاهش میدهد.
در برابر یک کامپیوتر کوانتومی که الگوریتم گراور را اجرا میکند، رمز عبوری با آنتروپی ۱۲۸ بیت در تئوری تنها مقاومتی معادل ۶۴ بیت ارائه میدهد. این حاشیهٔ امن بسیار باریکتری است.
دو برابر کردن آنتروپی حاشیهٔ امن را حفظ میکند: حدود ۲۵۶ بیت همچنان حدود ۱۲۸ بیت در برابر گراور باقی میگذارد. هدف ۲۵۰ بیتی این مقاله از همینجا میآید. این احتیاطی است که این مقاله انتخاب میکند، نه عددی برگرفته از یک استاندارد.
این حاشیهٔ امن محدودیتهایی دارد. شتابدهی گراور درجهدوم است، نه نامحدود. هر گام آن همچنان باید هش رمز عبور سایت را محاسبه کند، آن هم روی کامپیوتر کوانتومیای که به اندازهٔ کافی بزرگ باشد تا آن را اجرا کند. برای مقایسه، با نرخ ۱۰۰ میلیارد تلاش در ثانیه که صفحهٔ سازندهٔ ما فرض میکند، جستوجوی میانگین در ۱۰۰ بیت همین حالا دستکم ۲۰۰ میلیارد سال طول میکشد.
این منطق به Harvest Now, Decrypt Later (HNDL) شباهت دارد: پایگاه دادهٔ سرقتشدهای از هشهای رمز عبور را میتوان امروز نگه داشت و بعدها با ماشینهای بهتر به آن حمله کرد. حاشیهٔ امن بزرگتر استاندارد امنیتی را در برابر این خطر بالا میبرد. اما تضمینی دائمی نیست.
Arpokrat Password Generator: رمز خودتان را بسازید
امنیت دسترسی خود را به شانس واگذار نکنید. سازندهٔ رایگان ما رمزهای عبور و رمزعبارتهای تصادفی میسازد. برای هر کدام، آنتروپی را بر حسب بیت و میانگین زمانی را که یک جستوجو طول میکشد نشان میدهد.
این ابزار فقط تولید میکند: رمز عبوری را که هماکنون استفاده میکنید ارزیابی نمیکند. برای هدف ۲۵۰ بیتی بالا، یک رمز عبور ۳۹ کاراکتری با هر چهار مجموعهٔ کاراکتر انتخاب کنید. سازنده آن را به شکل “≈ تعداد بیت: ۲۵۳” نشان میدهد.
در مرورگر شما اجرا میشود. آنچه تولید میکند هرگز ارسال یا ذخیره نمیشود.
آخرین حلقه ضعیف: بازیافت و مدیریت دسترسی
آنتروپی ریاضی در برابر خطای انسانی محافظت نمیکند. رمز عبور ۲۵۰ بیتی نیز به محض نشت، ارزش خود را از دست میدهد؛ اگر در چندین سایت دوباره استفاده شود (حملهای به نام Credential Stuffing) یا اگر توسط فاکتور دوم احراز هویت (2FA) محافظت نشود.
قانون طلایی بهداشت دیجیتال این است که شما فقط باید یک رمز عبور را به خاطر بسپارید: رمز عبور اصلی ۲۵۰ بیتی خود (یک عبارت عبور تصادفی، مانند آنچه در بالا آمد). تمام دسترسیهای دیگر شما (بانک، شبکههای اجتماعی، سرورها) باید از رمزهای عبور تصادفی منحصر به فرد استفاده کنند که به طور خاص برای آنها تولید شدهاند.
برای ذخیرهٔ همهٔ این رمزهای عبوری که نمیتوانید به خاطر بسپارید، از یک مدیر رمز عبور استفاده کنید. مدیری را انتخاب کنید که صندوق شما را پیش از همگامسازی روی دستگاه خودتان رمزگذاری کند (که اغلب دانش صفر یا Zero-Knowledge نامیده میشود)، ترجیحاً یکی که متنباز باشد و بهطور مستقل بازرسی شده باشد.
