|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
1.Какой лучше всего хэш алгоритм применять для хранения паролей, SHA2 ?(если мощности сервера хватает, так скажем ) 2.Возможно ли взломать хэш на прямую(или это туфта,что кто-там мол прогу написал для взлома MD5 того же и т.е. если засалить хэш то можно не париться что напрямую ламанут)? или тут один вариант только прогонять через хэшфункцию можно подобрать? 3.если переоприделять метод - public new (?) GetHashCode() то что он должен в идеале возращать (string) или (byte[] ) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 13:56 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
sha-1 вполне достаточно. В его пользу еще и то, что MS SQL поддерживает на стороне сервера нативно ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 14:47 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
Arm79sha-1 вполне достаточно. В его пользу еще и то, что MS SQL поддерживает на стороне сервера нативно а по варианту 2 ответ имееться? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 14:51 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
вариант 2 - это sha-2? ИМХО избыточно. MD5 - действительно взломан. Про остальные - не слышал. Идеал у каждого свой, поэтому что возвращать - каждый сам решает для себя. По мне - byte[] ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 15:14 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
Ivan.Net, 1. Для паролей рекомендуется использовать специализированные алгоритмы. Например PBKDF2 или bcrypt. SHA2 тоже неплохой выбор. Для усложнения brute force вломов можно выполнять большое кол-во (1000!) итераций хеширования: hash := SHA2(salt+SHA2(salt+SHA2(salt+pass))) 2. Прямой перебор вполне возможен. Так, например, с помощью современных GPU можно генерировать 4.7 миллиарда хешей ( Our password hashing has no clothes ). К сожалению пользователи нередко используют очень простые пароли и их подбирают с помощью заранее подготовленных словарей хешей. Что касается защиты, то нужно обязательно использовать сложный алгоритм хеширования и использовать salt. 3. GetHashCode() всегда возвращает int и предназначен совсем для другой цели - упорядочивание элементов в коллекции и ускорение их поиска в них. Советую прочитать серию статей по пароли Троя Ханта - http://www.troyhunt.com/search/label/Passwords ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 15:20 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
Arm79вариант 2 - это sha-2? ИМХО избыточно. MD5 - действительно взломан. Про остальные - не слышал. Идеал у каждого свой, поэтому что возвращать - каждый сам решает для себя. По мне - byte[] Т.Е. есть выведеная мат формула в которую можно подставить хэш и получить password? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 15:29 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
bazileIvan.Net, 1. Для паролей рекомендуется использовать специализированные алгоритмы. Например PBKDF2 или bcrypt. SHA2 тоже неплохой выбор. Для усложнения brute force вломов можно выполнять большое кол-во (1000!) итераций хеширования: hash := SHA2(salt+SHA2(salt+SHA2(salt+pass))) 2. Прямой перебор вполне возможен. Так, например, с помощью современных GPU можно генерировать 4.7 миллиарда хешей ( Our password hashing has no clothes ). К сожалению пользователи нередко используют очень простые пароли и их подбирают с помощью заранее подготовленных словарей хешей. Что касается защиты, то нужно обязательно использовать сложный алгоритм хеширования и использовать salt. 3. GetHashCode() всегда возвращает int и предназначен совсем для другой цели - упорядочивание элементов в коллекции и ускорение их поиска в них. Советую прочитать серию статей по пароли Троя Ханта - http://www.troyhunt.com/search/label/Passwords 1.Какое максимальное время должна по хорошему занимать функция вообще getHashCode() 2.И стоит ли вообще писать public new string GetHashCode() или это не правильно и надо называть по другому 3.Если учесть такую вещь ещё(для усиления безопасности), что система будет работать постоянно и потом появяться хэш-алгоритмы лучше (или просто захочеться усилить), т.е. оставить возможность подгрузить другую сборку с каким-то определённым названием класса который наследует например SHA512Managed(или другой алгоритм) сделать через позднее связывание 3.1.Для новых пользователей будет GetHashCode вызываться с только что подгруженой dll - ки 3.2.А как решить проблему для старых пользователей?(чтобы сначала хэши в бд прогнать через новую функцию, а потом и при входе стать прогонять через новую функцию) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 15:38 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
Ivan.Net1.Какое максимальное время должна по хорошему занимать функция вообще getHashCode() 2.И стоит ли вообще писать public new string GetHashCode() или это не правильно и надо называть по другому 3.Если учесть такую вещь ещё(для усиления безопасности), что система будет работать постоянно и потом появяться хэш-алгоритмы лучше (или просто захочеться усилить), т.е. оставить возможность подгрузить другую сборку с каким-то определённым названием класса который наследует например SHA512Managed(или другой алгоритм) сделать через позднее связывание 3.1.Для новых пользователей будет GetHashCode вызываться с только что подгруженой dll - ки 3.2.А как решить проблему для старых пользователей?(чтобы сначала хэши в бд прогнать через новую функцию, а потом и при входе стать прогонять через новую функцию) 1) Кто, кроме вас, об этом может знать? 2) Не трогайте этот метод. Используйте другой. 3) Для того, чтобы не зависеть от конкретной реализации, есть масса технологий (см DI, IoC, ServiceLocator, etc). Для начала, опишите интерфейс и все свои классы с разными хэшами наследуйте от него. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
а далее в зависимости от пользователя можно использовать различные реализации Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 19:05 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
Ivan.NetТ.Е. есть выведеная мат формула в которую можно подставить хэш и получить password? Нет. Криптографический хеш это однонаправленная операция. С математической точки зрения это функция отображающая бесконечное множество значений в конечное. То есть одному значению хеша соответствует "несколько" паролей. Отсюда понятно что невозможно по хешу пароля востановить пароль. Зато можно подобрать другое значения пароля с таким же хешем. Это называется коллизия. Ivan.Net1.Какое максимальное время должна по хорошему занимать функция вообще getHashCode() Максимальное ты сам определяешь исходя из системных требований приложения. Главное чтобы это не мешало пользователю приложения, но сильно замедляло процесс подбора потенциальному взломщику. Ivan.Net2.И стоит ли вообще писать public new string GetHashCode() или это не правильно и надо называть по другому Ни в коем случае так не делай. Ivan.Net3.Если учесть такую вещь ещё(для усиления безопасности) Зависит от приложения. Можно сделать как посоветовал Arm79. Также можно обеспечить одновременное обновление приложения и БД. Или в в новой версии явно поддерживать два вида хешей и как только всё перейдут на новую версию убрать эту поддержку. Всё зависит от того какое у тебя приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 20:56 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
bazileIvan.NetТ.Е. есть выведеная мат формула в которую можно подставить хэш и получить password? Нет. Криптографический хеш это однонаправленная операция. С математической точки зрения это функция отображающая бесконечное множество значений в конечное. То есть одному значению хеша соответствует "несколько" паролей. Отсюда понятно что невозможно по хешу пароля востановить пароль. Зато можно подобрать другое значения пароля с таким же хешем. Это называется коллизия. Ivan.Net1.Какое максимальное время должна по хорошему занимать функция вообще getHashCode() Максимальное ты сам определяешь исходя из системных требований приложения. Главное чтобы это не мешало пользователю приложения, но сильно замедляло процесс подбора потенциальному взломщику. Ivan.Net2.И стоит ли вообще писать public new string GetHashCode() или это не правильно и надо называть по другому Ни в коем случае так не делай. Ivan.Net3.Если учесть такую вещь ещё(для усиления безопасности) Зависит от приложения. Можно сделать как посоветовал Arm79. Также можно обеспечить одновременное обновление приложения и БД. Или в в новой версии явно поддерживать два вида хешей и как только всё перейдут на новую версию убрать эту поддержку. Всё зависит от того какое у тебя приложение. Т.е после вычисления хэша, нужно сходить в базу и спросить есть ли такой хэш?(для исключения коллизии) И если придёт ответ что да есть(маловероятно конечно), то выдать message что пароль не подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 21:14 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
bazile, Ivan.NetТ.Е. есть выведеная мат формула в которую можно подставить хэш и получить password? Я имел ввиду как понять что MD5 алгоритм взломали?Что конкретно сделали для взлома? как писал Arm79. Arm79MD5 - действительно взломан. Про остальные - не слышал. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 21:20 |
|
Хранение хэша паролей пользователей
|
|||
---|---|---|---|
#18+
Ivan.NetЯ имел ввиду как понять что MD5 алгоритм взломали? Что конкретно сделали для взлома Придумали алгоритм быстрого поиска коллизий. http://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2013, 21:40 |
|
|
start [/forum/topic.php?fid=20&fpage=172&tid=1405012]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
others: | 305ms |
total: | 477ms |
0 / 0 |