رمز عبور قوی بدون نویسههای خاص
نمادها را خاموش کنید و رمز را بلندتر بگیرید. حروف و ارقام الفبایی ۶۲تایی بهجای ۹۰تایی میدهند که حدود ۰٫۵۴ بیت در هر نویسه هزینه دارد — بنابراین یک رمز عبور ۲۴ نویسهای از حروف و ارقام تقریباً ۱۴۳ بیت دارد که بهراحتی از یک رمز ۲۰ نویسهای با نماد بیشتر است. طول، هزینهٔ نمادهای حذفشده را چند برابر جبران میکند.
نتیجهها بدون تضمین درستی ارائه میشوند. روش و منابع در پایین صفحه منتشر شدهاند تا بتوانید محاسبه را بررسی کنید.
حذف نمادها حدود ۰٫۵۴ بیت در هر نویسه هزینه دارد. چهار نویسهٔ اضافی بیش از آن را بازمیگرداند.
بیستوچهار حرف و رقم تقریباً ۱۴۳ بیت است، در برابر ۱۳۰ بیت برای بیست نویسه با نماد.
سایتی که نمادها را رد میکند معمولاً ورودیهایش را با وسواس escape میکند، پس از استفادهٔ دوبارهٔ آن رمز عبور در جای دیگری بپرهیزید.
چگونگی کار
مراحل انجام کار
- الفبا را از بههمپیوستن کلاسهای نویسهٔ روشن بسازید — ۲۶ حرف کوچک، ۲۶ حرف بزرگ، ۱۰ رقم و ۲۸ علامت نگارشی ASCII که دو نویسهٔ نقلقول، بکتیک و بکاسلش از آن کنار گذاشته شدهاند.
- اگر نویسههای شبیه به هم کنار گذاشته شدهاند، پیش از هر کار دیگری I بزرگ، l کوچک، یک، خط عمودی (|)، صفر و O بزرگ را از آن الفبا حذف کنید.
- حد رد را حساب کنید — بزرگترین مضرب صحیح اندازهٔ الفبا که از ۲۵۶ بزرگتر نباشد. برای الفبای ۹۰تایی این حد ۱۸۰ است.
- یک بایت از crypto.getRandomValues بردارید. اگر برابر یا بزرگتر از حد است دورش بیندازید، چون تا کردن آن با باقیمانده، چند نویسهٔ اول الفبا را محتملتر از بقیه میکند. در غیر این صورت نویسهٔ متناظر با باقیماندهٔ آن بایت را بردارید.
- تا رسیدن نامزد به طول درخواستی تکرار کنید.
- اگر دستکم یکی از هر نوع لازم است و نامزد یک نوع را ندارد، کل نامزد را دور بیندازید و نامزد تازهای بردارید. آن را با جایگزین کردن یک نویسه تعمیر نکنید، چون توزیعی میسازد که هیچکس نمیتواند آنتروپیاش را بیان کند.
- رمزهای عبوری را که این تنظیمات میتوانند تولید کنند با اصل شمول و طرد روی کلاسها بشمارید و لگاریتم پایهٔ ۲ آن شمار را بهعنوان آنتروپی بر حسب بیت گزارش کنید.
فرضها
- رقم آنتروپی مولد را توصیف میکند، نه رشته را. رشتهای از ۲۰ حرف کوچک دقیقاً به اندازهٔ هر برداشت دیگری با همان تنظیمات قوی است، چون مهاجم راهی ندارد بداند که چنین درآمده است.
- الزام دستکم یکی از هر نوع، تعداد رمزهایی را که مولد میتواند تولید کند کم میکند، پس آنتروپی را کاهش میدهد. این ابزار رقم کاهشیافته را گزارش میکند؛ بیشتر مولدها رقم بزرگتر را.
- زمان حدس زدن ۱۰۰ میلیارد حدس در ثانیه را فرض میکند، که یک حملهٔ آفلاین با سختافزار گرافیکی معمولی در برابر یک هش سریع و بدون salt است. رمز عبوری که با bcrypt یا Argon۲ ذخیره شده باشد چندین مرتبهٔ بزرگی کندتر حمله میشود و ورودِ با نرخ محدود باز هم کندتر است.
- زمان نشاندادهشده میانگین است، نه بدترین حالت — نیمی از فضای جستوجو، یعنی دو به توان یک واحد کمتر از آنتروپی.
- دو نویسهٔ نقلقول، بکتیک و بکاسلش از مجموعهٔ نمادها کنار گذاشته شدهاند، چون وقتی رمز عبور در یک دستور پوسته یا فایل JSON جایگذاری شود مشکلساز میشوند. این حدود ۰٫۰۶ بیت در هر نویسه هزینه دارد.
- آنتروپی چیزی دربارهٔ استفادهٔ دوباره، فیشینگ یا نشت داده در سمت دیگر نمیگوید. یک رمز عبور بینقص که در دو جا استفاده شود، یک رمز عبور است.
پرسشهای رایج
با کنار گذاشتن نمادها چقدر قدرت از دست میدهم؟
حدود ۱٫۱ بیت در هر نویسه، از ۶٫۶ به ۵٫۹، چون الفبا از ۹۴ نویسه به ۶۲ میرسد. طول تنها کمیتی است که ارزش بحث دارد.
کدام سامانهها هنوز نویسههای خاص را رد میکنند؟
درگاههای بانکی قدیمیتر، برخی سامانههای تلفنی و ستتاپباکسها، و هر چیزی که با صفحهکلید عددی یا ریموت تلویزیون کار میکند. جایی که سامانه بهجای رد کردن، بیسروصدا کوتاه یا حذف میکند، رمز عبور با نماد ممکن است هنگام ثبتنام پذیرفته و هنگام ورود رد شود — ساختن رمز بدون نماد از اساس این مشکل را دور میزند.
منابع
روش را Tessalor در ۸ مرداد ۱۴۰۵ نوشته و بررسی کرده است.
روش کامل، مثال محاسبهشده و همهٔ فرضهای این نتیجه در این صفحه آمده است: مولد رمز عبور.