Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
grom_oleg
21 / 21 / 1
Регистрация: 24.01.2013
Сообщений: 129
#1

Хранение пароля - C#

12.06.2013, 20:07. Просмотров 3737. Ответов 16
Метки нет (Все метки)

Здравствуйте!Возникла такая проблема:есть программа, где требуется вводить логин/пароль от сервера.
При этом, должна быть возможность запоминания логина/пароля(чекбокс)
Мне предложили AES-шифрование, но для него требуется не только исходная строка, но и ключ(пароль).
Так вот, проблема в том, что ключ тоже надо где-то хранить, причем надежно.
Есть соображения?


Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 20:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Хранение пароля (C#):

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

Хранение пароля в зашифрованном виде - C#
Написал программку для монтирование контейнера truecrypt от имени другого пользователя, сейчас пароль пользователя хранится в переменной...

Хранение пароля от SMTP в App.config - C#
Кинул другу уже готовую сборку .exe где при его запуске с его машины я отправляю самому себе некий текст. Всё. Но он как-то увидел...

Наиболее надежное хранение настроек и пароля - C#
Здравствуйте друзья. Как будет правильно (более грамотно, безопасно) реализовать хранение настроек программы после нажатия к примеру...

Хранение значений - C#
Здравствуйте, в c# новичок, подскажите пожалуйста. Мне нужно хранить значения переменных которые я ввел в программе. Как организовать их...

.NET 4.x Хранение таблиц - C#
Добрый вечер. Подскажите, как лучше хранить таблицу, следующего вида: Таблица только для чтения, ничего туда вписывать не нужно. ...

16
Ithilgwau
26 / 26 / 0
Регистрация: 19.09.2012
Сообщений: 123
12.06.2013, 20:14 #2
Пароли обычно не хранят ни напрямую, ни в зашифрованном виде. Обычно хранят только хэш паролей. Но хэш тоже может быть с ключом. Ключ обычно прописывают в App.config или Web.config, а ещё чаще для этого используются MachineKey, который и так там прописывается.
1
Убежденный
Ушел с форума
Эксперт С++
15937 / 7247 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
12.06.2013, 20:19 #3
Вы можете использовать статический ключ, "зашитый в программу".
Это довольно часто встречающийся способ.
Но можно сделать сильнее, используя в качестве ключа имя сервера, например.
А вообще, в Windows для таких целей есть специальный программный интерфейс,
называется Data Protection API (DPAPI):
http://msdn.microsoft.com/en-us/library/ms995355.aspx
В .NET он, само собой, тоже поддерживается: Protection Data Class.

Добавлено через 1 минуту
Вы можете использовать имя сервера в качестве энтропии.
Так поступает, например, Internet Explorer для хранения паролей к сайтам.
1
grom_oleg
21 / 21 / 1
Регистрация: 24.01.2013
Сообщений: 129
12.06.2013, 20:30  [ТС] #4
Цитата Сообщение от Убежденный Посмотреть сообщение
Вы можете использовать статический ключ, "зашитый в программу".
Это довольно часто встречающийся способ.
Но можно сделать сильнее, используя в качестве ключа имя сервера, например.
А вообще, в Windows для таких целей есть специальный программный интерфейс,
называется Data Protection API (DPAPI):
http://msdn.microsoft.com/en-us/library/ms995355.aspx
В .NET он, само собой, тоже поддерживается: Protection Data Class.

Добавлено через 1 минуту
Вы можете использовать имя сервера в качестве энтропии.
Так поступает, например, Internet Explorer для хранения паролей к сайтам.
зашить ключ в прогу - все равно, что выложить его в инет
0
Убежденный
Ушел с форума
Эксперт С++
15937 / 7247 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
12.06.2013, 20:34 #5
Цитата Сообщение от grom_oleg Посмотреть сообщение
зашить ключ в прогу - все равно, что выложить его в инет
Вы, видимо, не до конца меня поняли. Речь идет о ключе шифрования, а не о пароле.
Так поступает, к примеру, программа TightVNC - пароль хранится в реестре, в зашифрованном
виде, а ключ шифрования "прошит" в самой программе.
А более надежный способ выше - DPAPI.
1
Ithilgwau
26 / 26 / 0
Регистрация: 19.09.2012
Сообщений: 123
12.06.2013, 20:45 #6
Цитата Сообщение от grom_oleg Посмотреть сообщение
зашить ключ в прогу - все равно, что выложить его в инет
С какой стати? Чтобы взломать пароли, нужно сначала получить вашу программу (желательно исходники), вы же не собираетесь её выкладывать в инет? А после этого нужно будет ещё и взломать сервер с базой, где у вас пароли хранятся
1
phantom96
MЫW
124 / 109 / 1
Регистрация: 15.02.2013
Сообщений: 538
12.06.2013, 20:48 #7
Цитата Сообщение от Ithilgwau Посмотреть сообщение
С какой стати? Чтобы взломать пароли, нужно сначала получить вашу программу (желательно исходники), вы же собираетесь её выкладывать в инет? А после этого нужно будет ещё и взломать сервер с базой, где у вас пароли хранятся
Цитата: .net и java - опенсорс поневоле.
Любой рефлектор вытащит любой string из C# программы.
0
Ithilgwau
26 / 26 / 0
Регистрация: 19.09.2012
Сообщений: 123
12.06.2013, 20:53 #8
Кстати говоря, если хранить хэш, то восстановить пароли в принципе невозможно. Поэтому если вам нужно только проверять авторизацию и не нужно никому эти пароли потом показывать, хэш - идеальный вариант.

Добавлено через 3 минуты
Цитата Сообщение от phantom96 Посмотреть сообщение
Цитата: .net и java - опенсорс поневоле.
Любой рефлектор вытащит любой string из C# программы.
Ну да, а вы собираетесь эту программу всем давать? Это эта программа работает на сервере, то нет проблем.

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

Всё зависит от того, что это за приложение - серверное или клиентское. И может ли кто-то неправомерно получить доступ к машине, на которой работает приложение. Если это серверное веб-приложение, например, то даже вшитый ключ в общем-то безопасен. Тем более, если юзать хэш.
0
phantom96
MЫW
124 / 109 / 1
Регистрация: 15.02.2013
Сообщений: 538
12.06.2013, 21:13 #9
При этом, должна быть возможность запоминания логина/пароля(чекбокс)
Вы думаете такая гадость на сервере лежит?
0
Ithilgwau
26 / 26 / 0
Регистрация: 19.09.2012
Сообщений: 123
12.06.2013, 21:24 #10
Цитата Сообщение от phantom96 Посмотреть сообщение
Вы думаете такая гадость на сервере лежит?
Ну откуда ж я знаю Если это не веб-приложение, генерируйте действительно ключ случайным образом при запуске программы...
0
Убежденный
Ушел с форума
Эксперт С++
15937 / 7247 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
12.06.2013, 21:55 #11
Цитата Сообщение от Ithilgwau Посмотреть сообщение
Кстати говоря, если хранить хэш, то восстановить пароли в принципе невозможно. Поэтому если вам нужно только проверять авторизацию и не нужно никому эти пароли потом показывать, хэш - идеальный вариант.
Знание хэша во многих случаях эквивалентно знанию пароля. Поэтому данный способ имеет
ограниченное применение. Например, проверить, что пароль "правильный". Да и в этом случае
нужно, как минимум, позаботиться о выборе стойкой хэш-функции, и использовать "соль".
1
Ithilgwau
26 / 26 / 0
Регистрация: 19.09.2012
Сообщений: 123
12.06.2013, 22:04 #12
Цитата Сообщение от Убежденный Посмотреть сообщение
Знание хэша во многих случаях эквивалентно знанию пароля. Поэтому данный способ имеет
ограниченное применение. Например, проверить, что пароль "правильный". Да и в этом случае
нужно, как минимум, позаботиться о выборе стойкой хэш-функции, и использовать "соль".
Да, я и имел в виду хэш с солью (по ошибке назвав её ключом). И если ему не нужно ничего, кроме как проверить, что пароль правильный, шифрование ему не нужно.
0
grom_oleg
21 / 21 / 1
Регистрация: 24.01.2013
Сообщений: 129
13.06.2013, 19:41  [ТС] #13
Цитата Сообщение от Ithilgwau Посмотреть сообщение
Кстати говоря, если хранить хэш, то восстановить пароли в принципе невозможно. Поэтому если вам нужно только проверять авторизацию и не нужно никому эти пароли потом показывать, хэш - идеальный вариант.

Добавлено через 3 минуты


Ну да, а вы собираетесь эту программу всем давать? Это эта программа работает на сервере, то нет проблем.

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

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

Добавлено через 1 минуту
Цитата Сообщение от Убежденный Посмотреть сообщение
Знание хэша во многих случаях эквивалентно знанию пароля. Поэтому данный способ имеет
ограниченное применение. Например, проверить, что пароль "правильный". Да и в этом случае
нужно, как минимум, позаботиться о выборе стойкой хэш-функции, и использовать "соль".
У меня есть код алгоритма для шифрования строки с заданным ключом и солью.Вопрос в том, как надежно сохранить соль и ключ к строке, не прибегая к "вшиванию"

Добавлено через 1 минуту
Цитата Сообщение от Ithilgwau Посмотреть сообщение
С какой стати? Чтобы взломать пароли, нужно сначала получить вашу программу (желательно исходники), вы же не собираетесь её выкладывать в инет? А после этого нужно будет ещё и взломать сервер с базой, где у вас пароли хранятся
Приложение клиентское и к тому же будет стоять на нескольких компьютерах, где будут работать незнакомые люди и неизвестно, что они захотят сделать

//
Насчет этой ссылки, думаю, мне подходит.Я попробую и отпишусь.Всем спасибо
0
Ithilgwau
26 / 26 / 0
Регистрация: 19.09.2012
Сообщений: 123
13.06.2013, 19:46 #14
Да, если приложение клиентское, это многое меняет...
0
SkoTi
-206 / 4 / 2
Регистрация: 03.10.2012
Сообщений: 532
13.06.2013, 20:09 #15
Вобще хорошее хранение это SHA пороль... Это хешпароль который создаётся путём сложения логина и пароля после добовление реверса и после уже генерирование в хэш))
0
13.06.2013, 20:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 20:09
Привет! Вот еще темы с ответами:

.NET 4.x Хранение данных - C#
Народ, подскажите в чем кроме базы данных и текстового файла можно хранить табличные данные? Допустим есть таблица в которой забиты какие...

Хранение информации - C#
Как программно реализовать: етсь textBox в него что небудь пишем и программа записывает это в переменную и хранит (в независимости...

Хранение классов - C#
В чем отличие хранения классов в исполняемом файле или в dll? Что лучше, как правильнее? Делать много dll или компоновать? Или это просто...

Хранение структуры - C#
Почему здесь структура хранится в куче using System; // Структуры. // Если в структуре имеются члены, которые обращаются к полю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru