Почему пароли должны быть разными

Сегодня я был на тренинге по безопасности для сотрудников Zune Paris. Не могу сказать что тренинг был очень хороший, но тем не менее, кое-что полезное я из него почерпнул.

Речь пойдет о весьма известной рекомендации: «Все ваши пароли должны быть разными». Звучит вроде бы логично, но точного объяснения «почему» я раньше не встречал…

Для начала я бы хотел сделать небольшое введение в тему паролей. Практически каждый день мы используем пароль для аутентификации на различных сайтах либо в различных системах. «Правильный» сайт никогда не передает и не сохраняет пароль в незашифрованном виде. Для передачи паролей используются зашифрованные протоколы передачи данных вроде SSL (Secure Sockets Layer). А сам пароль никогда не хранится в незашифрованном виде. Почти всегда вместо пароля хранится хэш-сумма – например MD5 или SHA1. Когда вы аутентифицируетесь (дурацкое слово произошедшее от английского Authentication) – система не сравнивает пароль из базы данных напрямую с паролем, который вы вводите с логином. Система вычисляет хэш-сумму пароля который вы ввели и сравнивает его с хэш-суммой из базы данных, соответствующей введенному логину.

Теперь представьте, что вы используете один и тот же пароль на разных сайтах. Рано или поздно один из сайтов может быть взломан, и у сайта могут украсть базу данных. Я не собираюсь в этой заметке рассказывать как сайты могут быть взломаны – я в этом не специалист, но кому интересно – советую для начала почитать «top 10 уязвимостей с сайта OWASP». Если вам кажется что большие сайты не взламывают, либо они никогда не допускают уязвимостей и утечек данных – вы ошибаетесь. Прецеденты были. Вот отличный пример. А небольшие «интернет магазины» взламывают очень и очень часто. Казалось бы – ну и что с того? Ведь пароли все равно не хранятся в открытом виде! Ведь хранится хэш-сумма пароля, и даже если база данных с паролями попадет в руки злоумышленника, то он не сможет расшифровать пароли… На самом деле все не так просто. Злоумышленник способен расшифровать хэши используя перебор по словарю. Существуют публичные базы данных с миллиардами и миллиардами заранее просчитанных хэшей. Если не верите – вбейте в гугле «sha1 hash lookup» или «md5 hash database». Хэши для «простых» паролей уже давно посчитаны. Я не могу дать определение «простому» паролю, но я уверен что для пароля ILoveBeer хэш посчитан и лежит в публичных базах. Зная MD5 или SHA1 хэш к вашему паролю злоумышленник с достаточно большой вероятностью может восстановить ваш пароль из хэша. Зная ваш email (а email почти всегда хранится вместе с вашими пользовательскими данными во «взломанной» базе) и ваш пароль он может взломать ваши аккаунты на всех популярных сервисах вроде gmail, hotmail, facebook, vkontakte в случае если вы используете одинаковый пароль ка всем сайтам и сервисам. Надеюсь я доступно объяснил проблему.

Теперь я попробую предложить для нее решение.

Для пользователей: никогда не используйте одинаковых паролей. На первый взгляд это сложно – необходимо в голове держать кучу паролей. Но есть простое решение этой проблемы – используйте «правило» для их генерации. Это правило должно быть известно только вам – никогда никому его не говорите и нигде не записывайте. Например – вам нравится пароль ILoveBeer и вы к нему привыкли. Я предлагаю сделать у этого пароля суффикс и префикс. Правило может быть таким: «Префикс пароля – это количество букв в названии сайта. Суффикс пароля это две буквы – первая и последняя в названии сайта» Предположим вам нужен пароль для сайта gmail.com. С помощью этого правила получится пароль 5ILoveBeergl. Для сайта facebook.com пароль, сделанный на основе того же правила, будет выглядить так: 8ILoveBeerfk. Пожалуйста, не используйте правило, приведенное здесь в качестве примера. Придумайте свое и никому его не говорите.

Для программистов: при генерации хэш-суммы пароля используйте «соль». Например, добавляйте к паролю в качестве суффикса и префикса случайное значение перед генерацией его хэш-суммы. В качестве соли можно использовать GUID. Соль можно сделать уникальной для каждого пользователя и хранить рядом с хэшем. Если злоумышленник получит доступ к базе данных, он не сможет воспользоваться готовыми базами хэшей для восстановления паролей, т.к. врядли существует запись “22345200-abe8-4f60-90c8-0d43c5f6c0f6ILoveBeer” в базе для хэшей. Другими словами – даже если пользователи используют простые пароли, злоумышленник не сможет их восстановить из хэша. Такая себе защита от дурака.

Поменяйте пароли сейчас – защитите свои данные! =)

Tags: , , ,

2 Responses to “Почему пароли должны быть разными”

  1. Sasha пишет:

    rainbow tables =)

  2. Natalie пишет:

    Я в веб-разработке работаю уже 5й год и пользую GUID префикс для хранения хешей паролей в базе, странно, что этого кто-то из разработчиков может не знать.

Leave a Reply