За последние 24 часа нас посетили 22452 программиста и 1144 робота. Сейчас ищут 634 программиста ...

Что пользуете для хеша?

Тема в разделе "Решения, алгоритмы", создана пользователем Danilka, 23 авг 2008.

  1. Danilka

    Danilka Активный пользователь

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Тема, конечно избитая, но хотелось бы обсудить перед новым проектом.
    Собственно, знаменитый md5 в чистом виде уже давно не катит.
    Вопрос в том, как каждый извращается? Собственная "надстройка" над md5? Другая функция? Или как?
    Ещё вопрос. На сколько я понимаю, md5 изначально использовалась для хеширования, а не шифрования паролей, так? Или я чёт не понимаю? Ещё я где то слышал, что в алгоритме есть баги и хеш всё-таки может повторяться.
    А кто, что использует для хеша в таблицах БД? Вообще, я так понимаю, выборка по хешу не такая уж и эффективная. Он всё-таки буквенный.
     
  2. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    почему?

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

    коллизии есть, безусловно. шанс примерно 2^128 :) (да, это может случиться как через две секунды, так и через пару десятков лет).

    если необходим некий уникальный id, не зависимый от контента - можно заюзать GUID.
     
  3. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Danilka
    Любая хеширующая функция, даже самая супер-пупер-современная и навороченная, может "повторяться". Это заключено в самой природе хеша: он переводит бесконечное множество комбинаций в конечное (2^длина_хеша_в_битах). Раз большее переводится в меньшее, значит, коллизии неизбежны.
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    но вероятность это очень мала...
     
  5. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Использую разные, в зависимости от ситуации. Для паролей как правило использую MySQL'овскую PASSWORD, на уровне PHP как правило MD5. Если нужна повышенная устойчивость - есть SHA, вплоть до 512 байт (MD5 всего 32 байта)
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Почему не катит? Докажи реальным случаем совпадения.
     
  7. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    А мне покажи где это реально может съыграть важную роль....
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    иногда делают md5 идентификаторы, а они должны быть уникальными
     
  9. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Mr.M.I.T., а чем стандартные 1.2.3.4.5.6... не подходят?:))
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Не, все же, я хочу увидеть два разных набора байт, для которых md5-хэш будет одинаков.

    ЗЫ. Не подскажете табличку HEX-кодов для латинских символов?
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. for ($i = 1; $i  <= 0xFF; $i++) print dechex($i) . ' ' . chr($i) . '<br />';
     
  12. Anonymous

    Anonymous Guest

    MD5(X1||S) = MD5(X2||S) если MD5(X1) = MD5(X2)
     
  13. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Горбунов Олег
    o_O Да ну?
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Че-то ничего не понял о_0
     
  15. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Горбунов Олег
    Может быть, все-таки XOR, а не ИЛИ?
     
  16. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    А если подсолить?
     
  17. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    А вы сначала найдите такие строки, чтобы у н их md5 совпадал. :)
     
  18. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Vitas
    Олег выше выложил исходник на Сях.
     
  19. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Глупо шифровать пароли. Все что зашифрованно расшифровывается. Если вас поломают - у злоумышлиника будут пароли. Согласитесь, хеши более бесполезней паролей.

    MD5 давно сломали как и SHA-1.
    Сломали означает что за достаточно короткое время к хешу подбирают строку.

    Самый простой способ поднять защиту - "подсолить" - сгенерировать свою строку и добавлять ее перед хешированием.
     
  20. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Самый простой способ это не допускать дыр, а если кто-то добрался до хешей паролей то чаще всего он добрался (по крайней мере на моей практике) и до того что эти пароли открывают, и "расшифровка" хешей уже не имеет смысла, и если и делается то только ради шутки. (я как-то одному модератору в личку его пароль скинул, он долго злился, даже угрожал баном, но админы заступились так как я помог им заделать дыры при которых и без разшифровки пароля можно было весь сайт "уложить")
     
  21. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Vladson
    Не допускать дыр нужно однозначно, но мы человеки обыкновенные.
    Просрать все пароли открытим текстом и просрать все пароли в виде хешей - вещи разные.
    Во втором случае уйдет на порядок больше времени чтобы добыть все пароли, за это время можно хотя бы известить юзверей.

    Danilka
    подмешивание своей строки перед хешированием дает минимум 3 плюса:
    1. исключает словари хешей, ибо хеши становятся другие.
    2. исключает злоумышлиников-ламеров использующих готовые системы для подбора хешей - подобрав строку таким образом он не сможет ей воспользоватся в вашей системе - после подмешивания строки хеш будет другой, да и оригинальные пароли он не получит
    3. скорее всего злоумышлинику-профи потребуется ваша подмешиваемая строка и алгоритм подмешивания, а получить хеши и алгоритм это не всегда одно и тоже

    Используйте разную строку в разных местах, генерируйте ее случайным образом.
     
  22. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Мне понадобилось 30 секунд брутфорса чтоб узнать пароли 80% простых юзверей (10% из которых был "123456" и 5% "123" и "qwerty") в зависимости от целей этого может оказаться более чем достаточно, есть даже шансы нарваться на пароли админов и модераторов...

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

    Я не говорю что надо хранить пароли открыто, я говорю что нет смысла ставить бронированные ворота если вокруг нет забора. Всё должно быть сбалансировано...