Russian Qt Forum

Qt => Базы данных => Тема начата: kalif от Февраль 03, 2011, 11:02



Название: Хранение паролей
Отправлено: kalif от Февраль 03, 2011, 11:02
Всем привет.
Суть проблемы: в настройках программы необходимо хранить пароль доступа к СУБД. Сейчас он храниться открытым текстом, но это не есть гуд.
Подскажите как лучше скрыть пароль от посторонних глаз без самостоятельной реализации алгоритма шифрования?


Название: Re: Хранение паролей
Отправлено: Omg от Февраль 03, 2011, 11:12
Думаю, что никак. Если есть данные хранимые на диски и их необходимо защитить от прочтения, то единственный вариант - шифрование.


Название: Re: Хранение паролей
Отправлено: kalif от Февраль 03, 2011, 12:11
А в Qt нету готовых решений на эту тему?


Название: Re: Хранение паролей
Отправлено: SimpleSunny от Февраль 03, 2011, 12:18
Смотря от кого прятать будете.
Можно использовать простой XOR http://www.prog.org.ru/topic_13420_0.html

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


Название: Re: Хранение паролей
Отправлено: kalif от Февраль 03, 2011, 12:23
Тоже подумывал использовать обычный XOR, скорее всего так и сделаю.
А прослушка трафика не страшна, так как работа ведется с локальной БД.


Название: Re: Хранение паролей
Отправлено: kirill от Февраль 03, 2011, 12:46
OpenSSL - посмотри, я в блоге писал как его использовать для Qt.
http://qtcoder.blogspot.com/2010/02/qt.html (http://qtcoder.blogspot.com/2010/02/qt.html)


Название: Re: Хранение паролей
Отправлено: developer от Февраль 04, 2011, 12:24
Можно сделать еще так.

Береш MD5 от пароля, сохраняеш в базу.
Юзер вводит пароль и нажимает Ентер, берем MD5 от введеного пароля и проверяем на равность с MD5 из базы.
Если равны - значит пускаем дальше, если нет значит баним.





Название: Re: Хранение паролей
Отправлено: kirill от Февраль 04, 2011, 12:27
Можно сделать еще так.

Береш MD5 от пароля, сохраняеш в базу.
Юзер вводит пароль и нажимает Ентер, берем MD5 от введеного пароля и проверяем на равность с MD5 из базы.
Если равны - значит пускаем дальше, если нет значит баним.

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


Название: Re: Хранение паролей
Отправлено: Prm от Февраль 04, 2011, 13:39
Cryptopp тебе в помощь! Отличная криптографическая библиотечка.


Название: Re: Хранение паролей
Отправлено: xokc от Февраль 04, 2011, 20:45
Хранить его в ресурсах Qt в сжатом виде - намного кошернее, чем XOR получится, да еще и пару байт памяти съэкономишь :)


Название: Re: Хранение паролей
Отправлено: asrael от Февраль 05, 2011, 23:42
Можно сделать еще так.

Береш MD5 от пароля, сохраняеш в базу.
Юзер вводит пароль и нажимает Ентер, берем MD5 от введеного пароля и проверяем на равность с MD5 из базы.
Если равны - значит пускаем дальше, если нет значит баним.
я недавно тоже мучался с этим вопросом.. ничего лучше не придумал, чем сохранять в файл настроек шифрованый пароль. для этого есть в Qt функция:
Код:
QString pass_hash = QCryptographicHash::hash(hsh,QCryptographicHash::Md5);
в принципе, обратную операцию сделать сложновато, так что знание hash-суммы ничего вредителю не даст. а программа пусть проверяет, совпадают ли суммы введенного пароля и то, что есть.. или как Вам там нужно.. да и сам файл с настройками можно пихнуть в нетривиальное место на всякий пожарный.. или на съемном носителе его хранить, если совсем тяжко..)


Название: Re: Хранение паролей
Отправлено: iRQSX от Июнь 07, 2011, 16:07
Личное мнение: md5 это конечно решение, но не всегда. Вот пример: постгрес на винде при установке просит пароль на подключение к серверу, например укажем "qwerty". Идем дальше, в своей программе надо подключиться к этой базе
Код
C++ (Qt)
db.setPassword("qwerty");
 
если мы тут хотим использовать хеш то его надо еще до установки сервака знать. Неудобно... Вот тоже бъюсь головой об стену как реализовать авторизацию и подключение к базе. Даже если использовать обратимый алгоритм шифрования то встает вопрос где хранить ключи шифрования.
p.s.
Код
C++ (Qt)
QString pass_hash = QCryptographicHash::hash("qwerty",QCryptographicHash::Md5);
выдает такой хеш: \xaf\xa0\xcbT\xc1nr\x2-0\x8as\xcc\x61\x96\x94
а сайт (http://mainspy.ru/shifrovanie_md5) выдает e86fdc2283aff4717103f2d44d0610f7
Объясните кто прав или где я накосячил...


Название: Re: Хранение паролей
Отправлено: LisandreL от Июнь 07, 2011, 16:23
p.s.
Код
C++ (Qt)
QString pass_hash = QCryptographicHash::hash("qwerty",QCryptographicHash::Md5);
выдает такой хеш: \xaf\xa0\xcbT\xc1nr\x2-0\x8as\xcc\x61\x96\x94
а сайт (http://mainspy.ru/shifrovanie_md5) выдает e86fdc2283aff4717103f2d44d0610f7
Объясните кто прав или где я накосячил...
Код
C++ (Qt)
QString pass_hash = QCryptographicHash::hash("qwerty",QCryptographicHash::Md5).toHex();
А хеш - d8578edf8458ce06fbc5bb76a58c5ca4.

e86fdc2283aff4717103f2d44d0610f7 - это qwertyu.


Название: Re: Хранение паролей
Отправлено: iRQSX от Июнь 07, 2011, 18:42
Спасибо за ответ. Есть еще одна заморочка: делаю
Код
C++ (Qt)
qDebug()<<QCryptographicHash::hash("qweqwe",QCryptographicHash::Md5).toHex();
 
 
получаю efe6398127928f1b2e9ef3207fb82663

установил такой же пароль(qweqwe) на пользователя в постгресе получаю такое:
(http://imagepost.ru/images/p/qs/pqsql.png)
то есть хеш md5d2d430490cc35011e0941f20108c8c4e
Создаю еще одного пользователя с таким же паролем хеш другой...

Приставка "md5" стандартная, но остальное все равно совсем не похоже


Название: Re: Хранение паролей
Отправлено: LisandreL от Июнь 07, 2011, 20:56
установил такой же пароль(qweqwe) на пользователя в постгресе получаю такое:
то есть хеш md5d2d430490cc35011e0941f20108c8c4e
Создаю еще одного пользователя с таким же паролем хеш другой...
Приставка "md5" стандартная, но остальное все равно совсем не похоже
Солит (http://ru.wikipedia.org/wiki/Соль_(криптография)) чем-нибудь.
Md5 в чистом виде уже не используют для хранения пароля.
Для простых паролей они давно просчитаны, поэтому по хешу можно будет восстановить пароль, как я в прошлом посте по e86fdc2283aff4717103f2d44d0610f7 нашёл "qwertyu".


Название: Re: Хранение паролей
Отправлено: iRQSX от Июнь 08, 2011, 07:39
спасибо за статью, в любом случае этот хеш бесполезен, так как драйвер базы требует передачи пароля в открытом виде. а значить если мы не хотим спрашивать пользователя два пароль при входе в программу(один от базы, а второй пароль от самой программы который хранится в базе), то придется пароль от базы хранить в открытом виде, а если его шифровать по ключу, то тогда хранить ключ в открытом виде, что в принципе одно и тоже...


Название: Re: Хранение паролей
Отправлено: LisandreL от Июнь 08, 2011, 08:16
придется пароль от базы хранить в открытом виде, а если его шифровать по ключу, то тогда хранить ключ в открытом виде, что в принципе одно и тоже...
Как вариант - хранить пароль от базы зашифрованным, где шифр - пароль пользователя.
При каждом изменении пароля - перешифровывать.