Изучаю тему хеширования паролей (методы, соль и т.д.) для хранения в БД. Казалось бы простое правило: хешируйте пароли, чтобы в случае, если они окажутся в чужих руках их нельзя будет сразу прочитать.
У меня сразу же возник вопрос и я хочу его здесь задать: не раз читал новости, что были взломаны крупные площади и пароли миллионов пользователей оказались обнародованы. Пароли были не хешированными. При этом многие площадки являлись достаточно крупными.
Как такое может быть? Почему принималось решение не хешировать пароли, ведь это ясная тема даже новичку типа меня, которые понимает почему это надо делать. Кто-нибудь может объяснить этот момент?
Потому что крупные площадки не сразу появились с навороченным бекэндом.
А строились годами, а может и десятилетиями уже.
Нельзя просто так взять и выбросить старый код, данные и т.п.
Приходится соблюдать обратную совместимость всё-таки.
Опять же многие все-таки используют хеширование, но банальный перебор выдаст бОльшую часть паролей.
Которые в общей массе обычно 123456 и т.п. Посмотрите топ 100 паролей из любой слитой базы.
Так же в некоторых протоколах/софтинах нужны plaintext пароли.
Самый простой пример: авторизация на mail.ru с ящиком другого провайдера.
Тут кроме как хранить в открытую вариантов нет. Тоже самое с другими подключаемыми друг к другу сборщиками почты.
Ну и конечно что нельзя недооценивать человеческую глупость, не всегда разработчики думают/знают о безопасности.
Вот тут-то мы вас и поправим! Вариантов в таком случае - великое множество, причем действительно используемое.
То, что все это множество с точки зрения взлома практически ничем не отличается от plain text - это другой вопрос ;)
mail.ru не хранит пароль от внешнего ящика в открытом виде. Используется одино из двух:
1. Для сервисов, поддерживающих OAuth 2.0 (GMail, Hotmail/Otlook.com и частично Yahoo и Yandex) хранится ключ.
2. Для остальных сервисов хранится пароль в шифрованом виде с ассиметричной криптографией. Фронтенд умеет только шифровать, дешифровка пароля производится на бэкенд серверах которые "ходят" за почтой и недоступны снаружи.
возможный сценарий:
говнокодим и пытаемся взлететь накапливая "технический долг" в виде забивания на безопасность, а когда площадка становится крупной, долг остается не погашеным.
не успели, забыли, отложили, не
выделили на это ресурсы и долг остался.
А почему вы считаете что они не хэшировали пароли?
Итак нам например надо взломать почту mail.ru, какие могут быть варианты -
1)Регистрируем домен mall.ru размещаем на нем страничку визуально похожую на главную страницу mail.ru, подсовываем пользователям, и ждем когда пользователи сами накидают пароли.
2)Ломаем форум игроков в танки, который склепал школьник - выдергиваем логины и пароли. Идем на почту и пытаемся залогиниться в почту под этим логином и паролем.
3)Ставим пользователю троян который пишет нажатия клавиатуры. Потом просто сортируем и проверяем рядом стоящие слова как логин и пароль.
4)Если нам достались хэши паролей - устраиваем на них словарную атаку, т.е хэшируем и солим все популярные варианты паролей и проверяем на совпадение. Это гораздо эффективнее брутафорса.
6)Ну и еще куча вариантов.
Если в сети появилась база пользователей и паролей крупной площадки - это не значит что площадку взломали и получили доступ к хэшам.
Adamos: И яндекса и гугла, и еще нескольких крупных сервисов.
И разумеется они признавали - что тут не признавать если логины, пароли от их сервиса.
Но это совсем не значит что они слили хэши и их сбрутили.
АртемЪ: понятно, что утечка данных любого российского сервиса даст обширную базу пользователей двух самых популярных в РФ почтовиков. Но мне казалось, что было именно признание в краже их собственных баз. Могу ошибаться.
Как-то неубедительно звучит "Ну как-то так вот получилось". Не может крупная площадка в 2016 году иметь навороченный бекэнд, при этом не хешировать пароли. Вот не поверю, что они все разработали как надо, а функцию хеша забыли применить к входящей строке при обработке данных регистрации. Для этого и задаю вопрос. Не вижу в нем ничего странного.