@Nickellick

Где и как грамотно хранить пароли и токены в приложении?

Пишу небольшое приложение, в котором необходима авторизация по токену. Также необходима авторизация по паролю
Вопрос - где и как лучше всего хранить эти данные? Если будет тупо лежать файл с переменными LOGIN и PASSWORD, либо с переменной TOKEN - это будет глупо. Можно шифровать - но тогда нужно опять же хранить ключ в открытом виде. Что обычно предпринимают в таких случаях?
Пишется приложение на Python, преимущественно под Windows
  • Вопрос задан
  • 159 просмотров
Решения вопроса 2
shurshur
@shurshur
В первую очередь надо задать себе вопрос: от кого защищать эти пароли? Какая модель угроз? Не бывает "правильно" в сферическом вакууме, любая "правильность" бывает только в предварительных условиях и сформулированных целях.

Чаще всего для собственного приложения на собственном сервере/компьютере нет никакого смысла прятать пароли. Те же CMS массово хранят пароли от базы в открытом виде в конфиге. Распространено такие данные выносить в отдельный файл, который не вносится в используемую систему контроля версий (git и пр.), рядом кладётся пример файла, который, наоборот в репозиторий добавляется. Например, config.py и рядом config_example.py с примером фейковых данных. Это позволяет сохранить пароли и ключи от утекания в удалённые репозитории (особенно если это Open Source), позволяет не попадаться в типичную ошибку местных новичков, которые регулярно светят куски своего кода с живыми токенами, ну и заодно можно прод/тест разворачивать на одной кодовой базе - все различия будут в этом самом файле конфига.

Если же задача сделать так, чтобы хакер, хакнувший супер-пупер приложение и получивший доступ к локальным файлам, не смог украсть эту критически важную информацию. надо сделать так, чтобы она в соседних файлах вообще не хранилась. Самый простой способ её защитить - спрашивать при запуске и хранить только в памяти приложения. Конечно, это неудобно (кто наизусть будет помнить или по частям копипастить пачку логинов-паролей-токенов?), вместо этого можно реальные данные в конфиге зашифровать неким мастер-паролем, который и спрашивать при запуске. Соответственно, злоумышленник в самом плохом случае получит зашифрованные данные, которые без мастер-пароля бесполезны. Для упрощения подобных задач существуют специальные инструменты типа уже упомянутого тут vault.
Ответ написан
DevMan
@DevMan Куратор тега Python
не нужно ничего придумывать: любая ось уже умеет секурно хранить данные.
если неохота самому с этим разобраться, keyring и аналоги в помощь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alexvdem
Хранить надо не пароли, а их контрольные суммы (hash function). Хотя бы в самом простом их применении например с помощью функции md5. Т.е. ты можешь сравнивая контрольную сумму проверять валидность пароля не имея самого пароля в наличии...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы