Как безопасно зашифровать информацию, хранящуюся на жестком диске пользователя? - PullRequest
2 голосов
/ 07 июля 2011

Я пишу приложение .Net WinForms, и мне нужно сохранить пароль для доступа к удаленному сервису.У меня есть файл XML, в который я записываю все настройки.Однако я не хочу записывать пароль в виде простого текста в файл конфигурации XML.Я думал об использовании AesCryptoServiceProvider для шифрования информации.Для этого класса требуется ключ для шифрования данных, который, я полагаю, я мог бы просто оставить в исходном коде моей программы.Тем не менее, мне кажется, что это немного лучше, чем хранить его в виде открытого текста, поскольку ключ всегда будет одинаковым для всех экземпляров моей программы.Я мог бы сгенерировать ключ при первом запуске программы, но тогда, где было бы хорошее место для хранения этого?Одна мысль, которая у меня была, - это использовать постоянный ключ и соль, которую я храню вместе с паролем.Это сделало бы уникальный «ключ» для каждого человека без необходимости хранить ключ на открытом воздухе.Существует ли стандартный способ хранения информации такого типа на жестком диске пользователя?

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Я не могу придумать идеального решения для этого, но вы могли бы использовать DPAPI ...

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

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

0 голосов
/ 07 июля 2011

Есть только два варианта, которые я могу придумать

  • Заставить пользователя использовать мастер-пароль. Это означает, что пользователь несет полную ответственность за шифрование данных. Хотя это может их раздражать, поэтому обратите внимание на интеграцию с учетной записью пользователя.
  • Полагайтесь на специфическую для системы информацию - я не являюсь разработчиком .NET, поэтому я не уверен, сколько системной уникальной информации вы можете получить, но все, что вы можете, поможет. Это действительно, хотя только защитит внешних пользователей от расшифровки пароля; любой, кто имеет доступ к системе, теоретически может получить ее.

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

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