آخرین توصیههای دولت ایالات متحده به این موضوع اذعان دارند که قوانین ترکیب و بازنشانی رمز عبور نه تنها آزاردهنده هستند، بلکه غیرمولد نیز هستند.
داستان اینکه چرا قوانین رمز عبور از زمان اختراعشان در سال ۱۹۷۹ بدون شواهد علمی پیشنهاد و اجرا شدند، داستان افرادی است که از بهترینهای رشته خود بودند، افرادی با نیتهای خوب که توصیههایشان منجر به دههها ناآگاهی شد. این اشتباهات به خودی خود ارزش مطالعه دارند، چرا که افراد مرتکب این اشتباهات بسیار برجسته بودند و عواقب آنها مدتها دوام داشت.
دانشمندانی که در این زمینه فعالیت کردند، رابرت موریس و کن تامپسون بودند. تامپسون به عنوان یکی از خالقان یونیکس شناخته میشود و موریس نیز به عنوان یک مشارکتکننده در آن شناخته میشود. موریس در سال ۱۹۸۶ از بل لبز خارج شد تا به کار در آژانس امنیت ملی بپردازد و تامپسون پیشنیاز زبان C را ایجاد کرد، در سال ۱۹۸۳ جایزه برجسته علوم کامپیوتر یعنی جایزه تورینگ را برنده شد و بعدها به گوگل پیوست و زبان برنامهنویسی Go را خلق کرد.
چهل و پنج سال پیش،(نوامبر ۱۹۷۹)، موریس و تامپسون مقالهای قطعی در مورد پسوردها منتشر کردند: «امنیت رمز عبور: تاریخچه موردی». در این مقاله، آنها آزمایشی طبیعی را گزارش کردند که در آن ۳۲۸۹ رمز عبور واقعی کاربران را بررسی کردند. آنها کشف کردند که ۲۳۳۹ رمز عبور (۷۱٪) یا شش کاراکتر یا کمتر از یک نوع (حروف کوچک، حروف بزرگ یا ارقام) بودند یا سه کاراکتر از انواع مختلف. آنها همچنین ۴۹۲ رمز عبور اضافی (۱۵٪ از کل رمزهای عبور) را یافتند که در «دیکشنریها، فهرستهای نام و موارد مشابه» موجود بودند.
کار موریس و تامپسون دادههای مورد نیاز را برای برجسته کردن یک مشکل که بسیاری از مردم آن را بد میدانستند، اما هنوز بهطور علمی بررسی نشده بود، ارائه داد. این کار گامی بزرگ رو به جلو بود، اگرچه دو اشتباه وجود داشت که مانع پیشرفت در بهبود رمزهای عبور برای دههها شد.
اولین اشتباه اعتماد موریس و تامپسون به این بود که راهحلشان، یک سیاست رمز عبور، مشکل رمزهای عبور ضعیف را حل خواهد کرد. آنها به اشتباه فرض کردند که اگر از دستهبندیهای خاص ضعفهایی که شناسایی کردهاند جلوگیری کنند، نتیجه چیزی قوی خواهد بود. بعد از اعمال یک نیاز برای داشتن مجموعههای مختلف کاراکتر یا کاراکترهای بیشتر، آنها نوشتند:
این بهبودها پیدا کردن هر رمز عبوری را به شدت دشوار میکند. اگر کاربر از خطرات آگاه شود و همکاری کند، بسیار ایمن خواهد بود.
همانطور که اکنون واضح است، کاربری که رمز عبور «p@ssword» را انتخاب میکند تا با سیاستهای پیشنهادی موریس و تامپسون سازگار شود، اصلاً ایمن نخواهد بود. موریس و تامپسون فرض کردند که مداخلهشان مؤثر خواهد بود بدون اینکه اثربخشی آن را آزمایش کنند، عواقب ناخواسته آن را در نظر بگیرند یا حتی معیار موفقیتی برای آزمایش در برابر آن تعریف کنند. نه تنها حدس آنها اشتباه از آب درآمد، بلکه اشتباه دومشان مانع از این شد که کسی بتواند آنها را رد کند.
اشتباه دوم پیشنهادات آنها در مورد نحوه ذخیرهسازی پسوردها بود. آنها پیشنهاد کردند که سیستمها نباید رمزهای عبور را ذخیره کنند، بلکه به هر کاربر یک تابع «هش» تصادفی اختصاص دهند که از آن برای محاسبه یک عدد (هش) از رمز عبور کاربر استفاده شود. هنگامی که کاربر رمز عبور جدیدی را تایپ میکند، سیستم با وارد کردن رمز عبور به تابع هش کاربر، هش را محاسبه میکند و سپس این هش را به جای رمز عبور ذخیره میکند. هنگامی که کاربر رمز عبور خود را برای ورود به سیستم تایپ کند، سیستم دوباره با اعمال تابع هش روی رمز عبوری که تایپ کرده، هش عددی کاربر را محاسبه میکرد و امتحان میکند که آیا این هش عددی با هش عددی ذخیره شده مطابقت دارد یا خیر. اگر هشها مطابقت داشتند، رمز عبور صحیح باشد.
این هشها «یکطرفه» هستند: نمیتوان آنها را معکوس کرد تا هش عددی را به رمز عبور تبدیل کرد. اگر کسی فهرست کاربران و هشهای عددی هر کاربر را بدزدد، تنها راه پیدا کردن رمز عبور صحیح کاربر، حدس زدن رمز عبورهای مختلف و محاسبه هش آنها تا زمانی است که هش عددی با هش صحیح مطابقت کند. هر چه حدس رمزهای عبور کاربران سختتر شوند، زمان و هزینه حدس زدن آنها افزایش مییابد. یک رمز عبور تصادفی بلند میتواند یک عمر دوام بیاورد.
ذخیره هشهای عددی به جای رمز عبور میتواند از کاربران با رمزهای عبور پیچیده در برابر حدس زدن محافظت کند، اما همچنین مانع از این میشود که دانشمندان بتوانند آن رمزهای عبور را بررسی کنند تا ببینند آیا دستههایی از رمزهای عبور ضعیف و رایج وجود دارد که باید از انتخاب آنها جلوگیری شود. اگرچه موریس و تامپسون هش کردن رمز عبور را اختراع نکردند، اما آن را در یونیکس پیادهسازی کردند، قویاً توصیه کردند و مقاله آنها قویا از لزوم هش کردن رمز عبور حمایت میکند.
موریس و تامپسون به نظر نمیرسید که در نظر گرفته باشند که هش کردن رمز عبور مانع این خواهد شد که کسی بتواند فرضیه آنها را که سیاستهایشان باعث امن شدن کاربران شده است را تایید کند.
لازم نبود اینطور باشد. بیست ماه قبل از انتشار مقاله موریس و تامپسون، رون ریوست، آدی شامیر و لئونارد ادلمان مقالهای تحت عنوان «روشهایی برای بهدست آوردن امضای دیجیتال و سیستمهای رمزنگاری کلید عمومی» منتشر کردند که سیستم رمزنگاری کلید عمومی RSA را توضیح میداد، سیستمی که ارتباطات وب را ایمن کرده و انقلاب تجارت الکترونیک دهه ۱۹۹۰ را ممکن ساخت. یک سیستم رمزنگاری کلید عمومی، تابعی است که اگر فقط کلید عمومی داشته باشید، یکطرفه است، اما اگر کلید خصوصی را داشته باشید، میتوان آن را معکوس کرد. با RSA، میتوان رمزهای عبور را با تابعی که یکطرفه است بدون کلید خصوصی هش کرد و کلید خصوصی را در سیستمی که از هر شبکهای جدا است و در پشت قفلها و تدابیر امنیتی فیزیکی قرار دارد، ذخیره کرد. زمانی که دانشمندان نیاز داشتند که بررسی کنند که آیا سیاستهای رمز عبور موثر هستند یا خیر، میتوانستند فایل هشهای عددی را به اتاق قفلشده با کلید ببرند، آنها را تجزیه و تحلیل کنند و با مجموعه جدیدی از قوانین برای آزمایش خارج شوند. متاسفانه به نظر میرسد هیچکس از این روش استفاده نکرده است، زیرا پس از مقاله موریس و تامپسون، ذخیره هر رمز عبوری به شکلی که قابل معکوس شدن باشد، تابو شد.
به عنوان نتیجه پیشنهادات موریس و تامپسون و کسانی که فرضیات آنها را بدون شواهد پذیرفتند، تا اوایل قرن بیست و یکم جامعه علمی متوجه شد که سیاستهای رمز عبور چقدر ناکارآمد هستند. این دوره ناآگاهی سرانجام به پایان رسید، زیرا هکرها شروع به سرقت پایگاه داده های رمز عبور از وب سایت های بزرگ و انتشار آنها کردند. برخی از این سایتها توسط شرکتهایی ساخته شده بودند که رشد را بر رعایت شیوههای امنیتی ارجح میدانستند؛ آنها رمزهای عبورشان را بدون هش کردن ذخیره کرده بودند. هنگامی که این پایگاههای داده عمومی شدند، دانشمندان بالاخره توانستند میلیونها رمز عبور را که در شرایط واقعی انتخاب شده بودند، مطالعه کنند.