Если у вас есть исходники - значит и доступ к базе у вас, судя по всему, есть. Пароли же сами по себе как таковые могут быть совершенно неинтересны - куда интереснее информация и доступные права.
Видимо мы и расматриваем ситуацию, когда вас уже поломали! А если вас поломали, то как уберечь ваших юзеров от вычисления их паролей.
У меня есть сорсы одного портала (местного для моего города). Его сломали в конце 2005-го года. Создатель движка этого портала приладил к своему форуму "прикреплялку файлов". Но ему не хватило мозгов делать проверку на тип файлов, который заливается на форум. И злые люди залили на его форум php скрипт - приватный шелл. А что может шелл? Да практически все. Во-первых злые люди сдампили БД, во-вторых угнали сорсы. Все это дело запаковали в архивы и выложили в общий доступ на бесплатном хостинге.
Таким образом оказался раскрыт и исходный код, и БД.
Я же взял эту БД и скопировал хеши всех пользователей этого сайта, прямо в программу восстановления. Для начала сделал атаку на цифры. 50% паролей открылись. Еще процентов 20 паролей я добыл из атаки по словарю. Еще 10% - благодаря брутфорсу, у кого пароли не длинные. И, наконец, к 20% юзеров мне так и не удалось восстановить пароли.
Продолжаем. Нужно ли говорить, что мозг большинства людей не способен запоминать разные пароли к разным сайтам и большинство людей используют один и тот же пароль ко всему, что можно.
Кстати, пароли самих админов на админку оказались совсем не зашифрованные ничем. Админов было трое и разведка доложила, что у одного из админов через три дня сперли аську-семизнак. Потому что пароль одинаковый был.
Еще у нас одна девушка, модератор крупнейшего у нас городского сайта, в одночасье лишилась своего ЖЖ и мыла. Потому что какие-то злые люди догадались попробовать ее пароль...
В общем, утеря БД - это самое хреновое, что может случиться. Получается, вся приватная информация становится всем известна. Нам же нужно решить, как быть. Как защитить пароли юзверей так, что бы их никто не мог восстановить, даже с условием утери сорсов и самой БД.
Я свое предположение выдвинул - это сделать так, что бы хеш юзера вычислялся долго, до десятой доли секунды. Нет, конечно, десятая доля секунды - это мало для сервера и для человека, проверка произойдет быстро. Но вот в случае брутфорса - это означает, что в секунду будут проверятся мало паролей. Моя программа для восстановления паролей, которой я и пользуюсь - восстанавливает 6 миллионов паролей в секунду. Если сделать так, что она будет тратить много времени и проверять 6 тысяч пароей в секунду - то брутфорс будет очень грустным занятием...