Подтвердить что ты не робот

Сохранение сохраненного пароля в приложении с открытым исходным кодом

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

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

РЕДАКТИРОВАТЬ: Разъяснение... Я храню пароли с паролями CLIENT, а не пароли, чтобы проверить их логин для службы. Это клиент к уже существующей веб-службе, которой я не контролирую. Я просто хочу хранить пароли локально для автоматического входа в систему... как любой клиент чата.

РЕДАКТИРОВАТЬ 2: Полностью извините за то, что вы не поняли раньше. Но пароли должны быть извлечены в ясном тексте в какой-то момент, а хеширование НЕ является опцией:( Даже если служба разрешит мне передать хэш пароля, который бы проиграл цель, потому что хэш был бы таким же хорошим, как пароль: P

4b9b3361

Ответ 1

То, что вы просите, в принципе, невозможно.

Существует способ не безопасного хранения пароля на клиентском компьютере, если его необходимо расшифровать. Это еще больше усугубляется тем фактом, что вам нужно подключиться к сервису, который, как я полагаю, не поддерживает SSL. В этом случае можно было бы тривиально найти пароль с помощью сетевого анализатора.

Существует игра (закрытый источник, конечно). Я играю, для чего требуется логин, пароль где-то где-то сохранен, но он зашифрован ключом, который уникален для каждой установки. Я однажды забыл пароль, поэтому я просто использовал Wireshark, и voila - я мог видеть простой пароль.

Это также напоминает мне, что люди жалуются на то, что легко обнаружить пароли в Google Chrome... Они, очевидно, не знают лучше, Вы можете попробовать все умные трюки, которые вы хотите, но любая защита приложения выбрасывается из окна, как только кто-то имеет доступ к машине.

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

Ответ 3

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

Но вы можете подумать о сохранении хэшей только паролей и итерации не менее 1000 раз. Хеши не могут быть возвращены к исходному паролю.

Еще одна идея:, возможно, это вариант, чтобы просто оставить реализацию до того, кто когда-либо будет использовать ваш источник и сделать реферат шифрования? Не работает, конечно, если вы предлагаете встроенный пакет для загрузки. Но опять же: в сборке вы можете использовать свое "секретное" шифрование и stull, чтобы он был абстрактным в источнике.

Ответ 4

Возможно, вы можете зашифровать пароль, используя некоторые определенные машиной значения, такие как mac или sth.. Если кто-то получает исходный и зашифрованный пароль, но полный доступ к паролю компьютера не должен быть безопасным.

Ответ 5

Юо мог использовать шифрование куклы бабушки. Вы шифруете пароль с помощью другого пароля, затем шифруете его с помощью другого пароля и делаете это много раз, в конце концов записывая последний пароль в ясном тексте. Любой, кто хочет получить доступ к паролю orignal, будет болеть за все незашифрованные и сдаться, прежде чем они придут к исходному паролю.