Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.12.2016, 23:00
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Как вы храните пароли и проверяете их корректность
Обычно я не заморачивался, да и задачи такие возникали не часто. Но сейчас задача ответственная.

На сколько я понимаю способов хранения паролей в БД не много:
1) В открытом виде (не обсуждаем его)
2) MD5
3) Обратимое шифрования (blowfish например)

2 MD5
На мой взгляд, тут минус в том, что пароль будет передаваться по сети, и если нет HTTPS, то это не самое надёжное решение. Это немного защищает от слива БД, но не от перехвата трафика.

3) blowfish
Тут можно сделать алгоритм хитрее.
1) Клиент получает случайную строку, которую ему требуется зашифровать с помощью ключа-пароля.
2) Сервер ищет строку в БД с соотв логином, пытается расшифровать полученнную от клиента строку с помощью пароля юзера взятого из БД и сравнивает результат с исходной случайной строкой, которая привязана к сессии.
3) Сами пароли в БД могут так же храниться зашифрованные алгоритмом blowfish

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

Минус: где то, на сервере должен лежать ключ, которым можно расшифровать пароль пользователя. Тут возникает вопрос как его защитить. Есть идея сделать отдельный сервис на С++ занимающийся проверкой паролей.

Пока это всё что я смог придумать. Что думаете товарищи?
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #2 (permalink)  
Старый 20.12.2016, 23:12
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

Для хранения хешей паролей есть стандартизированная функция PBKDF2 (в ноде из коробки есть), где используется алгоритм SHA-2. Надёжность определяется длиной ключа, количеством итераций хеширования и длиной соли. Я обычно использую длину 256, соль 32 (уникальная для каждого пароля, хранится в БД) + статическая соль 32 (хранится в коде) и 8000 итераций, но если надёжность оч важна, то ставь 512 и хотя бы 10 000. Операция хеширования крайне тяжёлая, поэтому есть смысл положить на отдельный сервак.

Что касается снифинга трафика - ставь https и не еби мозг.

А вот пытаться придумать свой алгоритм защиты точно не стоит Криптография -не место для велосипедов.

Цитата:
тк шифруемая случайная фраза каждый раз будет разная.
Тока если у тебя генератор истинно случайных чисел, например снимаются показания сейсмической активности или еще что) В противном случае - это все псевдослучайные величины, тот же Math.random не разу не криптостойкий. Используй хотя бы тогда crypto.randomBytes из ноды - для генерации соли сойдёт.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 20.12.2016 в 23:32.
Ответить с цитированием
  #3 (permalink)  
Старый 21.12.2016, 00:11
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Сообщение от kobezzza
этот алгоритм скомпроментирован
божечьки я кстати слышал где-то байку о том как АНБ-шники спецом закоммитили ошибку в один алгоритм шифрования, позволяющую ломать его за довольно короткое время. Не о нём ли речь была.

Вот нагуглиг кое-что по теме:
Какое шифрование АНБ не по зубам
АНБ скомпрометировало протокол Диффи-Хеллмана?

А вот из википедии выдержка:
Цитата:
Хеш-функции SHA-2 разработаны Агентством национальной безопасности США и опубликованы Национальным институтом стандартов и технологий в федеральном стандарте обработки информации FIPS PUB 180-2 в августе 2002 года[1].
LOL ))))


kobezzza,
а как на счёт защиты ключа который лежит на серваке?
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #4 (permalink)  
Старый 21.12.2016, 00:25
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

kobezzza,
я имею ввиду, как защитить ключ если сервер подломят.
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #5 (permalink)  
Старый 21.12.2016, 10:45
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Tim, используй SHA-2
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #6 (permalink)  
Старый 21.12.2016, 11:04
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Tim
1) Клиент получает случайную строку, которую ему требуется зашифровать с помощью ключа-пароля.
Только на клиенте такого не будет(если мы гооворим о веб приложения )
Сообщение от kobezzza
Тока если у тебя генератор истинно случайных чисел
Tim, так что, то что написал kobezzza сейчас лучший вариант .
Сообщение от kobezzza
используется алгоритм SHA-2.
Сообщение от kobezzza
Что касается снифинга трафика - ставь https и не еби мозг.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #7 (permalink)  
Старый 21.12.2016, 12:16
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Tim Посмотреть сообщение
kobezzza,
я имею ввиду, как защитить ключ если сервер подломят.
Ну, если угнали базу и код, то всё равно, чтобы подобрать пароль брутом, если ты использовал pbkdf2 с ключом 512 и кол-вом итераций скажем 10к (т.е. хеш функция вызывается столько раз: хеш от хеша и т.д.) нужны охренительные вычислительные ресурсы, которые есть тока у оч крупных дядей вроде АНБ или гугла. Больше вероятность, что если ты нужен АНБ, то тебя ночью закинут в мешок и отвезут в гуантанамо, где ты сам всё расскажешь

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

Резюме:

1) Используй HTTPS;
2) Используй PBKDF2, а не чистую хеш функцию;
3) Храни статичные коды доступа в переменных окружения сервера.

Также если хочется использовать шифрование на клиенте, то смотри новое API браузера Crypto или компиль в asm.js/wasm и тащи на клиент C-ные либы, но сам ничего не пиши
__________________
kobezzza
code monkey
Ответить с цитированием
  #8 (permalink)  
Старый 21.12.2016, 12:38
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от kobezzza
Больше вероятность, что если ты нужен АНБ, то тебя ночью закинут в мешок и отвезут в гуантанамо, где ты сам всё расскажешь
А если гуглу то тебя либо купят либо засудят
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #9 (permalink)  
Старый 21.12.2016, 13:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Tim, судя по твоему первому посту, я предлагаю тебе освежить в глове матчасть по методам шифрования, вспомнить, кто такой Боб, кто Алиса. После чего определиться, какое именно шифрование требуется в твоем конкретном случае (симметричное/ассиметричное).

Если симметричное, см. пост кобеззы.
Если ассиметричное, вероятно, пригодится библиотека от гугла -- crypto-js.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #10 (permalink)  
Старый 21.12.2016, 13:48
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

свой коммент выше убрал сюда Обсуждений тред
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как организовать RichEdit arma Элементы интерфейса 2 18.02.2010 14:57
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 09.02.2010 00:00
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20