Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.183.172] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
С точки зрения безопасности, если хранить на сайте информацию о юзерах в базе данных
Это нормально? Или как лучше организовать сохранность паролей на сайте? |
Сообщ.
#2
,
|
|
|
Шифруешь их MD5. MD5 - это алгоритм рассчёта контрольной суммы(хэша) для строки любой длинны, любая строка обработанная этим алгоритмом превращается в 32 байтное значение весьма уникально характеризующее строку. Краткие свойства:
1) Если взять 2 разные строки и вычислить их MD5 то вероятность совпадения будет очень низкой, практически равной нулю. 2) По хэшу восстановить исходную строку нельзя 3) Подобрать по известному хэшу строку которая бы давала такой же хэш крайне сложно, многие дни и даже месяцы работы мощных компьютеров. Работа с паролями проходит примерно так - в базе храняться MD5, пользователь вводит пароль - он тоже преобразуется в хэш и сравнивается с хранимым хэшем, если хэши одинаковые то пользователь авторизован. Даже если кто-то украдёт таблицу с паролями, он по хэшам всё равно не сможет узнать сами пароли, поэтому не сможет их применит. Реализация самого MD5 есть у нас на форуме в FAQ по Дельфи. |
Сообщ.
#3
,
|
|
|
Vit
Я вот думаю, если есть алгоритм преобразования строки в хэш, то почему нельзя написать обратный? |
Сообщ.
#4
,
|
|
|
Потому, что преобразование, которому подвергнута строка, является т.н. односторонним. Обратить его (по значению хеша получить класс строк, которые алгоритмом MD5 превращаются в ето значение) -- NP-сложная (неполная) задача, вычислительной мощности никакого из существующих контуперов не хватит.
На современном уровне развития математика считает, что NP-сложные и неполные задачи существуют, хоть ето и не доказано на вот такой гипотезе основывается вся наука криптография |
Сообщ.
#5
,
|
|
|
Visitor
Логически неправильно. Разъясни принцип одностороннего преобразования в двух словаах, как оно кодируется, что я глядя на исходник этого кодирования не могу сделать обратный? |
Сообщ.
#6
,
|
|
|
А никто тебе не сможет етого объяснить Просто берут и принимают как данность, что вычислить хеш MD5 -- линейная по сложности операция, а вычислить обратно из хеша строку (хотя бы одну из) -- выше чем полиномиальная
-- Только потому, что никто еще не придумал (и, не исключено, но точно не известно, что его невозможно придумать) более еффективного алгоритма |
Сообщ.
#7
,
|
|
|
Visitor
Ну это не ответ. Ладно я Vit'а подожду |
Сообщ.
#8
,
|
|
|
Есть, обычная подстановка по таблице, конечна таблица находится в базе данных.
Естественно пароль не обязательно тот который оригинальный, но жто не важно, поскольку по этому паролю получаешь тоже самое, что и по оригинальному, то есть вход. Наиболее известны реализации не для MD5, а для RSA, хотя принцип тотже. Известна база на Interbase, размер 980 гб, результат получается практически мгновенно. Для MD5 просто эта база будет меньше. |
Сообщ.
#9
,
|
|
|
Сколько Гб? Если учесть, что имеется 32 байта хеша, и допустим, мы сумеем аж вчетверо уменьшить параметр задачи, то есть, каким-то образом угадать, что было в последних двух (или четырех?) нелинейных блоках замен, остается все равно 64 неизвестных бита.... Вот для паролей, зашифрованных DES, как ето раньше делалось в юнихе, ето да, возможно, там _примерно_ такого порядка сложность...
Или ето про _простые_, придуманные пользователем пароли? --- Кстати, вот етот хеш, который хранится вместо пароля открытым текстом, на самом деле самая последняя и самая ненадежная мера защиты Таблица с хешами ключей должна быть защищена, чтобы ее не сперли/повредили/изменили, а алгоритм аутентификации не должен разглашать сведения из етой таблицы, сколько бы раз ни производилась попытка аутентификации. Например, используя одну из схем "доказательства с нулевым знанием" |
Сообщ.
#10
,
|
|||
|
Ну давай уйдём от навороченных примеров. Простейший хэш числа: остаток от деления на 7: с вероятностью 1/7 он будет уникальным - т.е. любое "очень многоразрядное" число превращается обычным mod в одну цифру. Эта цифра как-то характеризует число, и число 2364713 mod 7 даёт 1 а если мы число немного изменим: 2354713 mod 7 даёт 5 т.е. с некоторой долей вероятности хэш идентифицирует исходное данное, а по самому хэшу вычислить исходное данное нельзя - ведь мы просто отбрасываем часть данных - в данном случае целую часть, которая теряется безвозвратно. В данном случае конечно алгоритм простой и вероятность совпадения очень велика, для таких алгоритмов как MD5 она очень и очень мала, примерно 1/10^38, т.е. вероятность что два текста дадут одинаковый хэш практически нулевая, в то же время существует бесконечно большое количество разных строк могущих дать одинаковый хэш. |
Сообщ.
#11
,
|
|
|
Т.е. вообщем это безопасно с вашей точки зрения?
Т.е. есть сайт, то логины, пароли можно и безопасно хранить в таблице в зашифрованном виде? А RSA код здесь никак нельзя использовать? На сколько я помню с помощью него можно доказать принадлежность кода, т.е. цифровая подпись там. |
Сообщ.
#12
,
|
|
|
Ничего абсолютно безопастного нет. Если кто-то уже добрался до баз данных то дело очень серьёзно, это уже совсем хреново, и не только потому что, если уж припечёт то за несколько месяцев и MD5 могут особо хитроумными алгоритмами и мощными машинами расколотить (найти пароль с таким же хэшем), а в том что тогда велика вероятность что и код (web) приложения будет пропатчен и всякое упоминание о паролях из него вообще выброшено или вместо паролей будут слита вся база целиком - тогда и пароли не нужны, всю остальную инфу хакер получит. Не надо относится к приёмам защиты информации как к панацеи, на каждую старуху есть проруха, и любая защита так или иначе может быть взломана, но одно дело ломать программу с тщательно продуманной стратегией защиты, с мощными системами криптования, файерволами и т.п., другое дело такую - где приходи и бери что хочешь. В конечном итоге взлом может оказаться столь трудоёмким, долгим и требовать такой квалификации, что проще будет купить нужную информацию, чем её взломать.
|
Сообщ.
#13
,
|
|
|
Ну так здесь же можно хитро поступать - по поводу хешей, прежде чем перегонять MD5 можно еще пару алгоритмов использовать, так что в результате такой хеш получится что даже сломав их хакер все равно не сможет залогинится
Можешь посоветовать нормальную книгу по криптографии или кодированию, как я понимаю, или ссылку на алгоритм MD5 |
Сообщ.
#14
,
|
|||
|
Нету у меня книг, неграмотные мы, алгоритмики в школе не проходили, акромя арифмометров и логарифмической линейки ничегошеньки не было, так что всё на собственной шкуре испытывали... А алгоритм есть у нас в FAQ: http://forum.sources.ru/index.php?showtopic=8551 Кстати, если есть желание круче защиту делать, сочетай MD5 для паролей с шифрованием контекста остальных полей двусторонним алгоритмом типа трипл-дес, а в качестве ключа бери MD5 от строки вида "логин+пароль" - довольно мощно получается, без правильно введенной пары логин+пароль, практически никакую инфу получить невозможно даже имея открытый доступ к таблицам. Прокол у этой системы только один - при утере логина или пароля информацию восстановить практически невозможно, она утеряна навсегда, никакие backup, обнуление "пароля" и т.п. не работает... |
Сообщ.
#15
,
|
|
|
Прочность любой цепи определяется прочностью самого слабого ее звена... Пусть ето банально звучит, но ето один из наиболее часто "забываемых" философских принципов.
MD5 -- идеальный для таких целей безопасный хеш, с етим (пока) никто не может поспорить. Есть одно но: а что, если кто-то получит доступ к таблице, где хранятся ети хеши? И просто запишет в нужное поле нужное ему значение? Сайты ломают, ето ни для кого не секрет, и взломы ети происходят гораздо чаще, чем удачные попытки обращения популярных криптопреобразований. Наиболее надежными считаются системы с мастер-ключом (ключом, которым зашифрованы все остальные ключи в системе), про который написал Vit, в которых етот-мастер ключ никогда не хранится в долговременной памяти. А вводится сразу после запуска системы уполномоченным должностным лицом и существует только в оперативной памяти компьютера. И снабженные средствами автоматического мониторинга/профилирования, с очень узкими допусками, постоянно контролирующими работу элементов системы. Ето самое должностное лицо, хранящее мастер-ключ, правда, тоже можно обмануть, подсунув ему программу, удачно имитирующую привычный ему интерфейс ввода главного пароля. Так что, если в системе хранятся и обрабатываются данные, ценность которых превышает стоимость N человекочасов работы хорошо подготовленной команды профессионалов (ето не злобные хацкеры, а хорошие математики, программисты, системные аналитики и люди имеющие связи в силовых структурах и у твоего провайдера), или могут представлять интерес для госструктур, выход только один -- физически размещать сервер на подконтрольной тебе территории, либо вне территориальных переделов твоего государства, но тоже под контролем лояльного персонала... |