Как безопасно хранить пароли пользователя в программном обеспечении с открытым исходным кодом?

#encryption

#шифрование

Вопрос:

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

Для удобства у меня есть опция для программного обеспечения сохранять учетные данные пользователя, чтобы их не нужно было вводить снова в будущем.

Однако, поскольку это программное обеспечение с открытым исходным кодом, я не уверен, как я могу хранить учетные данные достаточно безопасным способом. Мне кажется, что любой метод, который я использую для шифрования пароля, может быть легко отменен и использован для расшифровки пароля. Я понимаю, что идеальная безопасность невозможна, но есть ли лучшая практика, чем использование ROT13, как я сейчас делаю?

Комментарии:

1. В зависимости от вашей платформы может существовать системный API для хранения и извлечения учетных данных относительно безопасным способом.

2. Если вы пишете на языке, который имеет генератор псевдослучайных чисел, вы также можете сделать что-то вроде этого: srand([random_number_generated_at_compile_time]); passwd = rand() rand();. Это не так безопасно, но это лучше, чем ничего, я думаю

Ответ №1:

Разработчики Pidgin довольно хорошо обрабатывают сохраненные пароли в клиенте с открытым исходным кодом; те же рассуждения применимы к клиенту веб-службы.

Краткое изложение:

  • Если приложение само сохраняет пароли, оставьте их в виде обычного текста и установите права доступа к файлам, чтобы их мог читать только пользователь. (Это делает очевидным, что файл настроек является конфиденциальным!)
  • Предоставьте возможность интеграции с API набора ключей платформы, таким как Windows Data Protection API, или с приложением набора ключей, таким как KeePass.