2009-03-17 4 views
6

Мне нужно где-то хранить имя/пароль моего пользователя (желательно, реестр), поэтому мое приложение .Net может использовать их для входа в какую-либо удаленную службу от имени пользователя. Я знаю, что можно хранить значения в реестре как «секреты», что означает их шифрование с использованием токена пользователя домена Windows или что-то в этом роде. Другими словами, я не хочу иметь дело с шифрованием.Хранение паролей в реестре как «секреты»

Чтобы уточнить: я не могу хранить хэши пароля или солить их или что-то еще. Эти учетные данные предназначены для сторонней системы, а только У меня есть возможность войти в эту систему от имени моих пользователей, чтобы как-то сохранить их учетные данные и восстановить их.

Так или иначе, я помню смутно, что в реестре есть такое место, но детали мрачны. И мне нужно сделать это на C# (хотя, если это простой доступ к реестру, это не имеет значения).

Редактировать: Еще одна вещь, она должна сохраняться между сессиями пользователей Windows (IOW это не помогает мне, если пароль не читается после выхода из системы и выхода пользователя).

+0

@Assaf - да, функции шифрования являются частью самой Windows, и элементы сохраняются между сеансами пользователя. – overslacked

ответ

10

Возможно, вы думаете о API защиты данных. Найдите MSDN или read some blogs и посмотрите, поможет ли это вам.

+0

Да, хороший улов! Кажется, DPAPI говорит то, о чем говорит OP. – Cerebrus

+0

Будет ли шифрование устойчивым в отношении сеансов пользователя? (т. е. если пользователь выйдет из системы и снова включится или пройдет достаточно времени, будут ли данные еще доступны для чтения)? –

5

Вы можете попробовать использовать System.Security.Cryptography.ProtectedData, который может зашифровать их с помощью ключа пользователя. http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx.

Это не полностью безопасно, так как код работает, поскольку пользователь может расшифровать данные.

+0

Будет ли шифрование постоянным в сеансах пользователя? (то есть, если пользователь выйдет из системы и снова включится или пройдет достаточно времени, будут ли данные еще доступны для чтения) –

+0

Да, это ключ шифрования для каждого пользователя. – Michael

0
  • Вы не должны хранить учетные данные как открытый текст. Используйте симметричный ключ шифрования. Выведите пароль во время выполнения. См. MSDN reference о функциях криптографии.
+0

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

+0

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

+0

@ dirkgently Это здорово, но где вы храните симметричный ключ? В реестре? В файле? Как это безопаснее? – Dan

1

Помните, что вы на самом деле не надежно сохраняете что-либо, если можете автоматически (без ввода пользователем) получить пароль. Использование RSA, симметричного или другого шифрования не имеет значения, пока вы храните ключ декодирования в своем приложении. Когда кто-то получит ключ, секрет исчезнет.

Однако упомянутый выше API защиты данных должен защищать пароли от других пользователей на одном компьютере. (Это sounds like DPAPI использует ваши учетные данные для шифрования.)

Для получения еще нескольких параметров ознакомьтесь с страницей msdn для Threat Mitigation.

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