2014-10-23 3 views
3

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

Однако большинство алгоритмов шифрования (даже те, которые используют SALT или PEPPER) являются ошибочными в том, что декомпиляция исполняемого файла C# может легко определить, что такое SALT и PEPPER, и как дешифровать коды. Это можно устранить, запутывая код, однако, в конечном счете, даже это может быть нарушено.

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

Программа будет работать только в Windows 7 или более поздней версии.

Первоначально я просмотрел ProtectedData class в C#, что делает пароль защищенным для текущего пользователя. Тем не менее, я хочу, чтобы безопасность для текущей программы также (если возможно), так что другие программы, запущенные на одном и том же пользователе, не могут получить пароль.

Тогда, наконец, я понял, что Windows 7 и более поздние версии имеют диспетчер учетных данных на панели управления и что приложения могут взаимодействовать с этим (and so can C#).

Однако является ли Credentials Manager доступным для текущего пользователя и для текущей программы? Могут ли другие программы одного и того же пользователя получить доступ к учетным данным?

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

Редактировать - возможно, следует упомянуть, что у меня есть сертификат подписи кода из StartSSL, если это применимо. Не уверен, как это поможет, но, может быть, у вас есть ключ.

ответ

2

От кого вы пытаетесь защитить пароль?

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

Если это пароль, который подходит пользователю для доступа к вашей программе, то Windows Credential Manager на самом деле является лучшим решением. Если вы хотите, чтобы пароль был недоступным для среднего другого программного обеспечения, вы можете его зашифровать. Но учтите, что, поскольку вы дешифруете локально, всегда можно будет приложить достаточные усилия, чтобы перепроектировать это дешифрование независимо от способа его обеспечения (то есть, используете ли вы Windows CM или нет).

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

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

Смежные вопросы