none
Хранилище паролей Windows. [C#] [WPF] RRS feed

  • Вопрос

  • Здравствуйте еще раз. Вот озадачился таким вопросом: есть приложение, которое подключается к некоему ресурсу по паре логин/пароль.

    Возможно ли сохранить логин/пароль для последующего использования где-нибудь в безопасном месте винды? Если да, то как это сделать?


    DreamSpark Premium User


    30 августа 2012 г. 7:27

Ответы

  • Нет почему :)

    Вот этот класс вполне может подойти вам - ProtectedData - класс

    Этот класс состоит из двух методов-оболочек для неуправляемого интерфейса DPAPI: Protect и Unprotect. Эти два метода могут использоваться для шифрования и расшифровки данных (таких как пароли, ключи и строки подключения).

    Для связи [mail]

    • Помечено в качестве ответа asdfxcbneftyherwe 31 августа 2012 г. 14:13
    31 августа 2012 г. 13:02

Все ответы

  • Добрый день.

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

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

    Я бы хранил в файле с ассинметричным шифрованием...

    30 августа 2012 г. 9:58
    Отвечающий
  • Безопасным будет вообще его там не хранить, если приложение клиент/сервер, то на сервере.
    30 августа 2012 г. 9:58
    Модератор
  • Ну так как на сайтах делают, хранить то что осталось от пароля после мд5 и прочего.
    И пароль не хранится, и работает.
    30 августа 2012 г. 11:29
  • Ну например браузер в каком месте хранит пароль?

    DreamSpark Premium User

    30 августа 2012 г. 11:34
  • "Ну например браузер в каком месте хранит пароль?" - браузер нигде не хранит. Он только отправляет его на сервер, когда пользователь логинится, а на сервере уже пароль сверяется с тем, что там хранится.
    30 августа 2012 г. 11:45
    Модератор
  • А точнее, браузер хранит в куках не пароль (если хоть чуть-чуть правильно сделано), а какой-нибудь хеш, о котором я уже говорил.
    Пароль только пользователь вводит ну и тд как сказал Yatajga
    • Изменено INFEL8 30 августа 2012 г. 12:48
    30 августа 2012 г. 12:48
  • "Ну например браузер в каком месте хранит пароль?" - браузер нигде не хранит. Он только отправляет его на сервер, когда пользователь логинится, а на сервере уже пароль сверяется с тем, что там хранится.

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

    DreamSpark Premium User

    30 августа 2012 г. 19:09
  • А точнее, браузер хранит в куках не пароль (если хоть чуть-чуть правильно сделано), а какой-нибудь хеш, о котором я уже говорил.
    Пароль только пользователь вводит ну и тд как сказал Yatajga

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

    DreamSpark Premium User

    30 августа 2012 г. 19:10
  • Никакого хеша пароля браузер не хранит. Хранится зашифрованный идентификатор аутентификации или сессии, который генерирует сервер при удачном входе.
    30 августа 2012 г. 19:21
    Модератор
  • Никакого хеша пароля браузер не хранит. Хранится зашифрованный идентификатор аутентификации или сессии, который генерирует сервер при удачном входе.

    Хм, а как Вы тогда объясните скриншот? При клике по кнопке "Показать" просится админский пароль и отображает сохраненный пароль для веб-ресурса.


    DreamSpark Premium User



    30 августа 2012 г. 19:25
  • Принудительно уже он сохраняет на компьютере, но аутентификация всё равно на сервере происходит.
    30 августа 2012 г. 19:34
    Модератор
  • Принудительно уже он сохраняет на компьютере, но аутентификация всё равно на сервере происходит.

    Так оно мне и нужно, как принудительно туда запихнуть пароль из моей программы, а потом его оттуда вытащить. :-)

    DreamSpark Premium User

    30 августа 2012 г. 19:35
  • Думаю, каждый браузер использует свой способ хранения пароля. Хранится скорее всего в какой-нибудь локальной базе данные (вроде sqlite) или просто файле специфичного формата. База или файл для надежности могут быть зашиформаны мастер-паролем (который либо пользователь вводит), либо например браузер генерит автоматически на основе каких-либо данных о юзере или железе (но в этом случае может возникнуть проблема с переносимостью этой базы). Либо просто ширфуется ключем зашитым в программе (но тогда, используя реверс-инженерию можно будет этот ключ вытащить).


    Для связи [mail]

    31 августа 2012 г. 8:34
  • Самого централизованного хранилища паролей в Windows, на сколько я помню нет, есть хранение сертификатов (которые можно использовать для шифрования БД паролей), но наверн этот вариант еще сложнее выходит, чем описанные выше.


    Для связи [mail]

    31 августа 2012 г. 8:36
  • То есть для хранения паролей рекомендуете реализовать свой механизм, а не ковырять в сторону системных хранилищ?

    DreamSpark Premium User

    31 августа 2012 г. 11:46
  • Нет почему :)

    Вот этот класс вполне может подойти вам - ProtectedData - класс

    Этот класс состоит из двух методов-оболочек для неуправляемого интерфейса DPAPI: Protect и Unprotect. Эти два метода могут использоваться для шифрования и расшифровки данных (таких как пароли, ключи и строки подключения).

    Для связи [mail]

    • Помечено в качестве ответа asdfxcbneftyherwe 31 августа 2012 г. 14:13
    31 августа 2012 г. 13:02