На тему паролей написано кучу статей как на хабре, так и в интернете. Удивительно, но до сих пор никто не описал еще один способ, которым пользуюсь я и который казалось бы очевиден.
Сразу же хотел бы отметить, что я не пользуюсь смартфоном, поэтому всяческие менеджеры паролей на кнопочном телефоне для меня недоступны.
Изначально я, как и большинство пользователей, имел 1-2 пароля, которые вставлял для всех сайтов. Писать про недостатки данного способа нет смысла, их море. Со временем пришло понимание, что данный подход надо менять. Пользоваться генераторами сложных паролей на сторонних сайтах неудобно, поскольку после генерации данный пароль забывается и после истечения сессии приходится его менять. С одной стороны это хорошо, т.к заставляет нас постоянно менять пароли усложняя их подбор. Но есть сайты, где сессия заканчивается буквально за сутки, и смена их начинает раздражать.
Какими же качествами должен обладать пароль, чтобы он подошел под наши условия и также удовлетворил условия сайтов?
Быть уникальным для каждого сайта
Иметь набор из букв разного регистра, цифр и спецсимволов
Иметь возможность удовлетворять политике сайта, где смена происходит раз в N месяцев
Первое, что мне пришло в голову, это использование хеша сайта и кастомного правила. Я взял за основу md5, т.к генератор md5 есть как онлайн, так и в виде приложения для мобильного.
Далее составляется базовое правило генерации пароля, которое используется для всех сайтов.
Суть правила такова - для генерации пароля мы берем строку login@site.com. Далее мы берем первые/последние N символов в зависимости от сложности пароля. Большинству сайтов достаточно 10 символьного пароля. Получается строка, которая уже содержит сложный набор из цифр и букв. Полученный пароль уже гораздо сложней обычного, но его по прежнему можно подобрать. Плюс к этому, большинство сайтов требует, чтобы в пароле присутствовали спецсимволы и буквы в разных регистрах. Для этого мы придумаем и введем правило, которое будет общим для всех паролей.
Например, первую цифру мы увеличим на 2, а третью на 1 (если у нас происходит перескок через 10, то все идет по кругу и 9 + 2 дает нам 1, а 9 + 1 дает 0). Первую букву сделаем заглавной, а в конце поставим спецсимвол, который будет равняться последней цифре с шифтом. Это позволит нам избежать случайного угадывания, если вдруг кто то поймет, что мы используем именно этот способ и попытается его применить.
Если применить это к моему случаю, то получится следующее:
noroots@habr.com = c05184b3af6965b29f15571556a4cccd
берем первые 10 симвлов, получаем c05184b3af
добавляем к первому числу 2, а к третьему 1 и получаем c25284b3af
первую букву делаем заглавной, а в конце ставим спецсимвол, соответствующий последней цифре C25284b3af#
Итого получаем пароль C25284b3af#, который уже удовлетворит политике большинства сайтов.
Все, что нам нужно, это придумать правило, которое будет храниться в голове и по нему генерировать пароль для любого сайта.
Сейчас об исключениях. Иногда может получиться так, что хеш будет содержать только числа, или всего одну букву и мы не сможем удовлетворить требованиям о буквах с разными регистрами. Для этого просто можно увеличить длину строки с 10 до 15, либо использовать более гибкое правило, что мы берем не N символов, а строку, которая длинней N символов и включает как минимум 2 буквы. Также некоторые сайты требуют периодической смены пароля (например банковские сайты или google). Решается это просто - в строку login@site.com мы добавляем год и квартал (месяц, полугодие, в зависимости от частоты смены), что позволит нам опять же всегда иметь актуальный пароль и возможность его восстановить в памяти.