На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> хранение паролей
    С точки зрения безопасности, если хранить на сайте информацию о юзерах в базе данных wink.gif
    Это нормально?
    Или как лучше организовать сохранность паролей на сайте?
      Шифруешь их MD5. MD5 - это алгоритм рассчёта контрольной суммы(хэша) для строки любой длинны, любая строка обработанная этим алгоритмом превращается в 32 байтное значение весьма уникально характеризующее строку. Краткие свойства:

      1) Если взять 2 разные строки и вычислить их MD5 то вероятность совпадения будет очень низкой, практически равной нулю.

      2) По хэшу восстановить исходную строку нельзя

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

      Работа с паролями проходит примерно так - в базе храняться MD5, пользователь вводит пароль - он тоже преобразуется в хэш и сравнивается с хранимым хэшем, если хэши одинаковые то пользователь авторизован. Даже если кто-то украдёт таблицу с паролями, он по хэшам всё равно не сможет узнать сами пароли, поэтому не сможет их применит.

      Реализация самого MD5 есть у нас на форуме в FAQ по Дельфи.
        Vit
        Я вот думаю, если есть алгоритм преобразования строки в хэш, то почему нельзя написать обратный?
          Потому, что преобразование, которому подвергнута строка, является т.н. односторонним. Обратить его (по значению хеша получить класс строк, которые алгоритмом MD5 превращаются в ето значение) -- NP-сложная (неполная) задача, вычислительной мощности никакого из существующих контуперов не хватит.

          На современном уровне развития математика считает, что NP-сложные и неполные задачи существуют, хоть ето и не доказано smile.gif на вот такой гипотезе основывается вся наука криптография smile.gif
            Visitor
            Логически неправильно.
            Разъясни принцип одностороннего преобразования в двух словаах, как оно кодируется, что я глядя на исходник этого кодирования не могу сделать обратный?
              А никто тебе не сможет етого объяснить smile.gif Просто берут и принимают как данность, что вычислить хеш MD5 -- линейная по сложности операция, а вычислить обратно из хеша строку (хотя бы одну из) -- выше чем полиномиальная smile.gif
              --
              Только потому, что никто еще не придумал (и, не исключено, но точно не известно, что его невозможно придумать) более еффективного алгоритма smile.gif
              Сообщение отредактировано: Visitor -
                Visitor
                Ну это не ответ. Ладно я Vit'а подожду
                  Есть, обычная подстановка по таблице, конечна таблица находится в базе данных.
                  Естественно пароль не обязательно тот который оригинальный, но жто не важно, поскольку по этому паролю получаешь тоже самое, что и по оригинальному, то есть вход.

                  Наиболее известны реализации не для MD5, а для RSA, хотя принцип тотже.
                  Известна база на Interbase, размер 980 гб, результат получается практически мгновенно. Для MD5 просто эта база будет меньше.
                    Сколько Гб? Если учесть, что имеется 32 байта хеша, и допустим, мы сумеем аж вчетверо уменьшить параметр задачи, то есть, каким-то образом угадать, что было в последних двух (или четырех?) нелинейных блоках замен, остается все равно 64 неизвестных бита.... Вот для паролей, зашифрованных DES, как ето раньше делалось в юнихе, ето да, возможно, там _примерно_ такого порядка сложность...
                    Или ето про _простые_, придуманные пользователем пароли?
                    ---
                    Кстати, вот етот хеш, который хранится вместо пароля открытым текстом, на самом деле самая последняя и самая ненадежная мера защиты smile.gif Таблица с хешами ключей должна быть защищена, чтобы ее не сперли/повредили/изменили, а алгоритм аутентификации не должен разглашать сведения из етой таблицы, сколько бы раз ни производилась попытка аутентификации. Например, используя одну из схем "доказательства с нулевым знанием" smile.gif
                    Сообщение отредактировано: Visitor -
                      QUOTE (Song @ 17.11.03, 00:15)
                      Vit
                      Я вот думаю, если есть алгоритм преобразования строки в хэш, то почему нельзя написать обратный?

                      Ну давай уйдём от навороченных примеров. Простейший хэш числа: остаток от деления на 7: с вероятностью 1/7 он будет уникальным - т.е. любое "очень многоразрядное" число превращается обычным mod в одну цифру. Эта цифра как-то характеризует число, и число

                      2364713 mod 7 даёт 1
                      а если мы число немного изменим:

                      2354713 mod 7 даёт 5

                      т.е. с некоторой долей вероятности хэш идентифицирует исходное данное, а по самому хэшу вычислить исходное данное нельзя - ведь мы просто отбрасываем часть данных - в данном случае целую часть, которая теряется безвозвратно. В данном случае конечно алгоритм простой и вероятность совпадения очень велика, для таких алгоритмов как MD5 она очень и очень мала, примерно 1/10^38, т.е. вероятность что два текста дадут одинаковый хэш практически нулевая, в то же время существует бесконечно большое количество разных строк могущих дать одинаковый хэш.

                        Т.е. вообщем это безопасно с вашей точки зрения?
                        Т.е. есть сайт, то логины, пароли можно и безопасно хранить в таблице в зашифрованном виде?
                        А RSA код здесь никак нельзя использовать? На сколько я помню с помощью него можно доказать принадлежность кода, т.е. цифровая подпись там.
                          Ничего абсолютно безопастного нет. Если кто-то уже добрался до баз данных то дело очень серьёзно, это уже совсем хреново, и не только потому что, если уж припечёт то за несколько месяцев и MD5 могут особо хитроумными алгоритмами и мощными машинами расколотить (найти пароль с таким же хэшем), а в том что тогда велика вероятность что и код (web) приложения будет пропатчен и всякое упоминание о паролях из него вообще выброшено или вместо паролей будут слита вся база целиком - тогда и пароли не нужны, всю остальную инфу хакер получит. Не надо относится к приёмам защиты информации как к панацеи, на каждую старуху есть проруха, и любая защита так или иначе может быть взломана, но одно дело ломать программу с тщательно продуманной стратегией защиты, с мощными системами криптования, файерволами и т.п., другое дело такую - где приходи и бери что хочешь. В конечном итоге взлом может оказаться столь трудоёмким, долгим и требовать такой квалификации, что проще будет купить нужную информацию, чем её взломать.
                            Ну так здесь же можно хитро поступать - по поводу хешей, прежде чем перегонять MD5 можно еще пару алгоритмов использовать, так что в результате такой хеш получится что даже сломав их хакер все равно не сможет залогинится
                            wink.gif
                            Можешь посоветовать нормальную книгу по криптографии или кодированию, как я понимаю, или ссылку на алгоритм MD5 smile.gif
                              QUOTE (javas @ 17.11.03, 16:59)
                              Ну так здесь же можно хитро поступать - по поводу хешей, прежде чем перегонять MD5 можно еще пару алгоритмов использовать, так что в результате такой хеш получится что даже сломав их хакер все равно не сможет залогинится
                              wink.gif
                              Можешь посоветовать нормальную книгу по криптографии или кодированию, как я понимаю, или ссылку на алгоритм MD5 smile.gif

                              Нету у меня книг, неграмотные мы, алгоритмики в школе не проходили, акромя арифмометров и логарифмической линейки ничегошеньки не было, так что всё на собственной шкуре испытывали... А алгоритм есть у нас в FAQ: http://forum.sources.ru/index.php?showtopic=8551
                              Кстати, если есть желание круче защиту делать, сочетай MD5 для паролей с шифрованием контекста остальных полей двусторонним алгоритмом типа трипл-дес, а в качестве ключа бери MD5 от строки вида "логин+пароль" - довольно мощно получается, без правильно введенной пары логин+пароль, практически никакую инфу получить невозможно даже имея открытый доступ к таблицам. Прокол у этой системы только один - при утере логина или пароля информацию восстановить практически невозможно, она утеряна навсегда, никакие backup, обнуление "пароля" и т.п. не работает...
                              Сообщение отредактировано: Vit -
                                Прочность любой цепи определяется прочностью самого слабого ее звена... Пусть ето банально звучит, но ето один из наиболее часто "забываемых" философских принципов.

                                MD5 -- идеальный для таких целей безопасный хеш, с етим (пока) никто не может поспорить.

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

                                Наиболее надежными считаются системы с мастер-ключом (ключом, которым зашифрованы все остальные ключи в системе), про который написал Vit, в которых етот-мастер ключ никогда не хранится в долговременной памяти. А вводится сразу после запуска системы уполномоченным должностным лицом и существует только в оперативной памяти компьютера. И снабженные средствами автоматического мониторинга/профилирования, с очень узкими допусками, постоянно контролирующими работу элементов системы.

                                Ето самое должностное лицо, хранящее мастер-ключ, правда, тоже можно обмануть, подсунув ему программу, удачно имитирующую привычный ему интерфейс ввода главного пароля. smile.gif

                                Так что, если в системе хранятся и обрабатываются данные, ценность которых превышает стоимость N человекочасов работы хорошо подготовленной команды профессионалов (ето не злобные хацкеры, а хорошие математики, программисты, системные аналитики и люди имеющие связи в силовых структурах и у твоего провайдера), или могут представлять интерес для госструктур, выход только один -- физически размещать сервер на подконтрольной тебе территории, либо вне территориальных переделов твоего государства, но тоже под контролем лояльного персонала...
                                Сообщение отредактировано: Visitor -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1133 ]   [ 17 queries used ]   [ Generated: 20.04.24, 03:16 GMT ]