Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Так ли хорош md5?


Автор: Muerto 11.5.2011, 10:58
После пару лекций в универе по структурам данных, я вот подумал а ведь md5 hash не уникален всегда...
Ибо вариантов текста очень очень много, а букв для хэша всего то 32  smile 

Таки посмотрел в википедии что об этом говорят

http://en.wikipedia.org/wiki/MD5

Таки md5 не панацея... и сайты взламывались ибо можно получить тот же хэш с разной последовательности букв...

В тот час как SHA-2 похоже лучше http://en.wikipedia.org/wiki/SHA-2

Но тож не панацея пока есть ограниченное количество символов  smile  

---

Я бы не спал спокойно использовав md5 для хеширования чувствительных данных

Автор: Gold Dragon 11.5.2011, 11:11
вообще-то рекомендуют применять MD5 с "мусором" smile

Но с другой стороны, есть целые сервера со словарём порядка 160 млн паролей.. Так что основной взлом - это перебор паролей. Просто внимательно нужно относится к требования к паролям

Автор: CruorVult 11.5.2011, 11:22
Цитата(Gold Dragon @  11.5.2011,  11:11 Найти цитируемый пост)
Но с другой стороны, есть целые сервера со словарём порядка 160 млн паролей.

двойной MD5 и про сервера можно забыть smile 

Автор: Muerto 11.5.2011, 11:27
CruorVult, А вы можете делать хоть миллион раз md5, все равно будет 32 символа, и хэш можно подделать совсем другими данными...

В википедии пример есть , причем оч короткий который дает один и тот же хэш

Автор: Gold Dragon 11.5.2011, 11:29
CruorVult, можно и так... А нужна ли такая безопасность для простых форумов или сайтов? Зачем увеличивать размеры базу данных о пользователей когда проще ужесточить требования к паролям и заставить пользователей их менять чаще

Добавлено через 48 секунд
Muerto, скорее всего имелось 32+32+64 символа smile

Добавлено через 1 минуту и 48 секунд
Цитата(Muerto @  11.5.2011,  12:27 Найти цитируемый пост)
В википедии пример есть , причем оч короткий который дает один и тот же хэш 
для поиска коллизий всё равно нужны словари.. 

Автор: Muerto 11.5.2011, 11:31
md5 кстати это не только пароли... часто всякие там ssl проверяются по алгоритмам хеширования., но хэш вещь НЕ УНИКАЛЬНАЯ

---
А на тему подбора паролей -

Забыв о хаше - так ли просто подобрать пароль?

допустим пароль длинной 8 символов...

у нас в англо-фовите есть 26 букв умножим на два ибо есть английские крупные . и добавим цифры

и того 26*2+10=62

Теперь мы хотим создать пермутацию с повторениями

и того 62^8


После трех попыток любой нормальный сайт тупо посылает на перерыв на пол часа - а ещё умней генерировать новый пароль + посылать.

Но когда можно менять ай пи и работать с сотнями компами параллельно...

Автор: CruorVult 11.5.2011, 11:35
Цитата(Gold Dragon @  11.5.2011,  11:29 Найти цитируемый пост)
А нужна ли такая безопасность

я просто привел самый элементарный способ как обойти сервера вот и всё. На самом деле так практически никто не делает)

Добавлено @ 11:37
и вообще если аккаунт захотят взломать - то взломают независимо от того зашифрован ли пароль и как ;) это дело времени.

Автор: cutwater 11.5.2011, 11:41
Цитата(CruorVult @  11.5.2011,  10:22 Найти цитируемый пост)
двойной MD5 и про сервера можно забыть smile  

CruorVult, глупость. учить теорию.

Цитата(Muerto @  11.5.2011,  10:31 Найти цитируемый пост)
но хэш вещь НЕ УНИКАЛЬНАЯ

Muerto, Сюрприз да?

Учить теорию. о том что MD5 это 32 символа говорят только первокурсники и пхпшники.
Википедия не авторитетный источник в данном вопросе. Изучать стойкость хеш-функций к коллизиям первого и второго рода.
Прекращать преждевременную панику и нести чушь.

Для предотвращения использования rainbow table уже давно известен способ использовать hash(M || salt)

На последок прекратить делать велосипеды и если интересно разобраться в реализациях механизмов аутентификации в любом более менее нормальном движке (django.contrib.auth, etc.) и изучать криптографию.

Автор: cutwater 11.5.2011, 11:41
[deleted]

Автор: Gold Dragon 11.5.2011, 11:41
Цитата(Muerto @  11.5.2011,  12:31 Найти цитируемый пост)
Забыв о хаше - так ли просто подобрать пароль?
допустим пароль длинной 8 символов...
у меня есть русский и английский словари (маленькие, всего по 30 мб).. Так вот перебор делается за очень короткое время при условии
- перестановки порядка
- удалении гласных/согласных
- использование транслита
- подстановки цифр в конец/начало
- перебор заглавных/строчных
- и т.п.

Т.ч. Просто если задаться целью.. Поэтому и говорю... важны требования к паролю...

Автор: Muerto 11.5.2011, 11:42
CruorVult, Если после 3трех не верных попыток менять пароль... то статистически нужно будет 62^8 попыток...
сложно представить сколько нулей в таком числе... может легче будет представить (10^8)*(6^8)
грубо это 10^8 * 2M примерно
что выходит сотню миллионов раз миллион это ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ много... потребуется много лет.... хз даж сколько лень считать дальше  smile 

Автор: cutwater 11.5.2011, 11:44
Muerto, Учить матчасть. Хеширование пароля не предотвратит от взлома грубой силой (имелся ввиду описываемый способ через интерфейс разумеется). Хеширование используется для того чтобы не хранить пароли в открытом виде в базе. Учите матчасть еще раз повторяю.

Автор: Muerto 11.5.2011, 11:46
cutwater, А никто панику не поднимает, и чуши здесь нету не разу  smile 

Я цифры просто так привел что бы показать что тупо простой пароль 8 символов почти нереально взломать в разумных рамках.

А проблемы md5 идут далеко за рамки простого пароля, который никого особо не волнует

---

Часто слышу пустые слова вроде "у нас защита по md5" , чего это защищает не оч ясно 


In an attack on MD5 published in December 2008, a group of researchers used this technique to fake SSL certificate validity
(с) http://en.wikipedia.org/wiki/MD5

Автор: CruorVult 11.5.2011, 11:49
Цитата(Muerto @  11.5.2011,  11:42 Найти цитируемый пост)
CruorVult, Если после 3трех не верных попыток менять пароль

а кто говорит про 3 попытки? 

Автор: Gold Dragon 11.5.2011, 11:50
Muerto, тогда вернись к началу... Для чего нужны хэш-функции? Только для сравнения данных. Если тебе нужно шифрование, то стоит воспользоваться другими системами

Добавлено через 4 минуты и 54 секунды
а вообще - это философский вопрос... 
Если человеку нужно быстро ездить, он использует машину, если ещё быстрее, то самолёт.. И тут тоже самое, MD5 хорош для своего и требовать от него сверхъестественное просто не серьёзно smile

Автор: ksnk 11.5.2011, 11:59
Цитата(Muerto @  11.5.2011,  11:31 Найти цитируемый пост)
А на тему подбора паролей -
...
После трех попыток любой нормальный сайт тупо посылает на перерыв на пол часа - а ещё умней генерировать новый пароль + посылать.


Нужно защититься от подбора пользовательского пароля с помощью перебора. Для этого достаточно сделать время, между попытками ввода пароля не менее 5-10 секунд. Юзер, который ошибся при вводе пароля этого не заметит, а робот, который будет долбить брутфорсом таблицу паролей - затормозится и его можно будет пытаться ловить и наказывать.





Автор: MoLeX 11.5.2011, 12:04
лучше использовать усложненную соль.

Код

md5("login\r\n_salt_\r\npassword");

Автор: cutwater 11.5.2011, 12:15
Цитата(Muerto @  11.5.2011,  10:46 Найти цитируемый пост)
Я цифры просто так привел что бы показать что тупо простой пароль 8 символов почти нереально взломать в разумных рамках.


Вы сравниваете жопу с пальцем. Для начала может таки разберетесь для чего применяется хеширование, чтобы понять всю абсурдность ваших заявлений о парольной защите.
Потому что в данной стуации Вы слышали звон.. поэтому прежде чем рассуждать о высоких материях, потрудитесь ознакомиться с предметной областью.

UPD: А еще если бы хоть немного были знакомы с теорией защиты информации, могли бы построить модель угроз. И попытка взлома путем подбора пароля через веб-интерфейс далеко не единственный способ для злоумышленника.

Добавлено @ 12:16
Цитата(MoLeX @  11.5.2011,  11:04 Найти цитируемый пост)
    
md5("login\r\n_salt_\r\npassword");


Вы говорите лучше. Расскажете чем лучше?
Salt более чем достаточно. Все остальное не существенно и никакого выигрыша не дает.

сложность
Hash( Login || Salt || Password)
равноценна
Hash( Salt || Password )

Автор: MoLeX 11.5.2011, 13:44
cutwater, допустим увели через уязвимость базу паролей. И пытаются подобрать. Как думаешь, сколько времени уйдет на каждый способ? И какой самый стойкий

Добавлено через 2 минуты и 8 секунд
долгое время в радужных таблицах отсутствовал перевод строки)

Автор: cutwater 11.5.2011, 16:55
Цитата(MoLeX @  11.5.2011,  12:44 Найти цитируемый пост)
cutwater, допустим увели через уязвимость базу паролей. И пытаются подобрать. Как думаешь, сколько времени уйдет на каждый способ? И какой самый стойкий


Разве что переводы строк. Я имел ввиду идею добавлять еще и login \ etc.

Оцените стойкость 

Hash( Password || Salt )
и
Hash( Password || Salt || Login (Yet another salt. YEAH!) )

Найдите разницу.

Автор: Muerto 11.5.2011, 17:23
Вообще в wikipedia речь шла к примеру о взломе ssl, пароль не особо интересная вещь.

А разница между password + salt или просто пароля, не столь существенна как мне кажется с точки зрения математически подсчетов...

допустим salt у вас 6 символов, пароль 16

и того на 100% подбор пароля нужно перебрать 62^16 символов, а с salt 62^22


И то и второе по большому счету возможно только теоретически

62^16 ~ (10^16)*(6^16) = 10000000000000000*2821109907456=28211099074560000000000000000

Скорее быстрей повтор хэша придет... если при длине 16 это возможно,нужно лучше алгоритм изучить ...

Автор: cutwater 11.5.2011, 18:36
Цитата(Muerto @  11.5.2011,  16:23 Найти цитируемый пост)
и того на 100% подбор пароля нужно перебрать 62^16 символов, а с salt 62^22

Вы так ничего и не поняли, как то зачем нужен salt.
Отправляю еще раз читать учебник.

Цитата(Muerto @  11.5.2011,  16:23 Найти цитируемый пост)
нужно лучше алгоритм изучить ...

Вот с этого и нужно начинать. Когда будете в состоянии оценить вероятность коллизий в MD5
(при этом не забываем что мы рассматриваем малое множество входных данных, меньших чем размер выхода хеш-функции)
с Вами можно будет вести разговор об уязвимостях хеш-функций.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)