Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Некрокомент, но этой мысли в даном контексте явно не хватает:
Пароль даёт не только доступ к БД через интерфейс системы, пользующейся этой БД, пароль даёт ещё и возможность совершать новые действия от имени пользователя. От спама, шифрующегося под дружеские сообщения, до переводов денег и далее. А так же, при "удачном" использовании OAuth или применении того же пароля в других системах - и доступ к ним.
Sergios-MacBook-Pro:projects sergio$ irb
ruby-1.9.2-p290 :001 > combinations = 16**40
=> 1461501637330902918203684832716283019655932542976
ruby-1.9.2-p290 :002 > size_on_disk = combinations * 40 # two hashes of 20 bytes (binary compact form)
=> 58460065493236116728147393308651320786237301719040
ruby-1.9.2-p290 :003 > size_in_terabytes = size_on_disk / 1000 / 1000 / 1000 / 1000
=> 58460065493236116728147393308651320786
К примеру для паролей длиной не более 8 символов, состоящих из букв, цифр и специальных символов !@#$%^&*()-_+= захешированных алгоритмом MD5 могут быть сгенерированы таблицы со следующими параметрами:
длина цепочки 1400
количество цепочек 50 000 000
количество таблиц 800
При этом вероятность нахождения пароля с помощью данных таблиц составит 0.7542 (75.42 %), сами таблицы займут 596 Гб, генерация их на компьютере уровня Пентиум-3 1ГГц займёт 3 года а поиск 1 пароля по готовым таблицам не более 22 минут.
Неправильно. В приведенном примере мы рассчитываем таблицу для пароля из 12 символов. А sha1 дает на выходе строку в 40 символов. Ты до второго пришествия такую таблицу не просчитаешь.
variantsGenerator = new VariantsGenerator;
while (variant = variantsGenerator.next()) {
// result = sha1(sha1( variant ));
result = sha1(getHashFromRainbowTable( variant ));
}
Атака на хеш это поиск коллизии. У атакующего нет цели найти исходный пароль, ему нужно найти строку, которая даст такой же хеш. Тут совершенно без разницы сколько раз SHA1 или любой другой метод применялся в цепочке. Поэтому автор таки не прав, стойкость не повышается.Разница есть, конечно. В любом случае, искать надо любой пароль, который пройдя через sha1(sha1(sha1…))) даст тот же хеш. Но при подборе этого пароля надо пройти все эти итерации этого sha1.
sha1(sha1(sha1(sha1…)))+salt)
Чтобы не хранить пароли в БД в открытом виде, обычно их хэшируют.Если бы… Если говорить о сайтах, то добрая их треть имеет ограничения 8-12-20-30 символов на пароль. Что говорит либо о дурости разработчиков, сующих бездумные ограничения где ни попадя, либо тоже о дурости, но заключающейся в хранении паролей в открытом виде в БД.
Про догмы в криптографии