Давайте предположим, что вы решили зарегистрироваться на сайте VerySecureWebsite.com. Вы как обычно указываете свой email адрес и привычный пароль. Спустя некоторое время вам приходит письмо о том, что сайт был взломан, а имена пользователей и пароли к ним, которые хранились в виде обычного текста свободно продаются в даркнете. Теперь вам необходимо срочно поменять пароли, на всех сайтах где вы использовали этот стандартный пароль. В такой ситуации непременно должен возникнуть вопрос: «Не должны ли сайты как-то шифровать мои пароли, чтобы хакеры не смоги прочитать их?». Вы абсолютно правы – так и должно быть.
Любой веб сайт или приложение, которые используют пару логин/пароль для входа должны хешировать эти данные добавляя соль, возможно даже использовать медленный хеш или перец. Пока эти понятия больше напоминают процесс готовки, нежели чем принципы криптографии, однако на самом деле все не так сложно и разобраться в том, как должны безопасно храниться пароли крайне легко.
Обычный текст и базовое шифрование
Хранение паролей в виде обычного текста – это очень плохая идея. Если сайт будет взломан, то в руках хакеров окажется обычный список из логинов и паролей. К сожалению, множество сайтов до сих пор поступают именно так. Для того чтобы проверить как именно хранится ваши данные, воспользуйтесь функцией восстановления забытого пароля. Если в ответ вам отправят пароль вместо ссылки для сброса, значит он записан в обычном виде.
Шифрование на первый взгляд кажется надежным способом хранения паролей, хотя на самом деле это лишь небольшой шаг вперед по сравнению с обычным текстом. Зашифрованный пароль может быть дешифрован при помощи ключа шифрования, а хакеры могут найти его или угадать.
Хеширование надежнее шифрования
Говоря простым языком, хеширование – это одностороннее шифрование. Вы можете конвертировать пароль в виде обычного текста в секретную фразу, но не сможете преобразовать его обратно. Это означает, что у вас не будет возможности получить действительный пароль из хешированной версии.
Вот как большинство безопасных сайтов оперируют паролями:
- Пользователь создает аккаунт.
- Пароль пользователя хешируется и сохраняется в базу данных.
- Каждый раз, когда пользователь пытается войти на сайт и указывает данные для входа, пароль хешируется и сравнивается с тем хешем, который хранится в БД.
- Если хеши совпадают, то доступ на сайт разрешается.
При использовании хеширования, приложение или сайт не сохраняют реальный пароль в виде обычного текста, поэтому если злоумышленникам удастся получить к нему доступ, то они просто увидят бессмысленный набор из букв и цифр, которые нельзя декодировать. В зависимости от сложности алгоритма такие хеши бывает довольно сложно взломать.
С другой стороны, нельзя сказать, что хеши совсем не поддаются взлому. Все, что необходимо сделать атакующему – это создать словарь потенциальных паролей и пропустить его через хеш функцию, а затем сравнить полученные хеши с хешами во взолманной базе данных. При нахождении совпадений, взломщику достаточно посмотреть с помощью какого пароля был получен этот хеш.
Чтобы сохранить время и ресурсы множество взломщиков просто используют готовые таблицы (или радужные таблицы, для сокращения времени поиска), сгенерированные заранее и составленные из потенциальных паролей и их хешей. На самом деле вы можете сами хешировать обычный текст и проверить его в таблице хешей. Это совсем не трудно. Конечно, если ваш пароль довольно прост, то его хеш наверняка содержится в таблице. Это отличный пример того, почему не стоит использовать простые пароли.
Хеширование + соль надежнее простого хеширования
Поскольку конечный хеш изменится даже если поменять всего один символ в исходной фразе (пароле), то все, что необходимо сделать сайту чтобы обмануть подготовленные таблицы – это добавить несколько символов (соль) перед хешированием. В таком случае, даже если злоумышленник сможет получить соль, то ему придется создать словарь заново, используя соль и все потенциальные пароли. Еще больше осложнит ситуацию то, что для каждого пароля соль будет генерироваться заново.
К сожалению, такой подход вновь нельзя назвать достаточно безопасным поскольку мощности современных компьютеров позволяют создавать и сравнивать огромнейшее количество хеш записей в секунду. Конечно такой процесс нельзя назвать простым, но и невозможным его назвать нельзя.
Усиливаем хеширование: прочие тактики
Более медленные алгоритмы, такие как PBKDF2 или bcrypt способны усложнить создание словарей и подбор паролей. По существу, такие методы предполагают использование хеш функции несколько раз (на самом деле все несколько сложнее, чем многократный запуск одинакового процесса), поэтому для получения корректного хеша придется затратить много времени и ресурсов. Если сайт применяет такую технику, то его вполне можно считать достаточно безопасным.
Для большей надежности к паролю можно добавить еще и перец. Перец, как и соль – это набор символов, которые добавляются к паролю перед хешированием. В отличие от соли, перец существует в единственном виде и хранится в секрете, отдельно от солей и хешей. Он добавляет еще один слой безопасности, но если злоумышленник сможет получить к нему доступ, то ценность перца стремится к нулю, позволяя атакующему приступить к вычислению новых словарей и таблиц.
Не создавайте хеш хеша
Методы безопасного хранения паролей заметно продвинулись вперед, впрочем как и принципы их взлома. К сожалению, основными проблемами до сих пор остаются слабые пароли, которые создают пользователи, а также владельцы сайтов, не следящие за безопасностью. В любом случае, используя слабый пароль, даже самые безопасные методы шифрования не смогут вас защитить, поскольку такой набор символов уже наверняка содержится в готовых таблицах и словарях.
Точно также генерация хеша на основе существующего хеша пароля не сможет защитить вас. В таком случае все, что необходимо сделать злоумышленнику – это пропустить словарь хешей еще раз через хеш функцию и сравнить результат с украденными данными.
Не забудьте подписаться и поставить лайк. Впереди будет еще много крутых статей. А для того чтобы не пропускать свежие новости присоединяйтесь к нам в социальных сетях.