psi-plus / main

Main repository with patches and required resources
https://psi-plus.com/
GNU Lesser General Public License v2.1
68 stars 20 forks source link

Не запоминаются пароли при включения запоминания в виде хэшей #613

Open Ri0n opened 9 years ago

Ri0n commented 9 years ago

Original issue 605 created by psi-plus on 2015-01-27T14:29:54.000Z:

Добый день!

Сабж, собственно.

====

Шаги по воспроизведению проблемы: What steps will reproduce the problem?

  1. Account menu -> вкладка Misc -> отмечаем чек-бокс Store hash instead of plaintext password if server supports this feature
  2. Появляется требование реконнектиться - при реконнекте спрашивает пароль.
  3. Пишем пароль, отмечаем чек-бокс Запомнить пароль - при следующем реконекте или входе в программу - опять спрашивает пароль.

Версия Psi+ - 0.16.411-435-0ubuntu1~ubuntu14.10.1~ppa1 ОС Ubuntu 14.10 x64 с Unity Библиотеки Qt 4.8.6

Дополнительная информация по проблеме:

Есть подозрение, что хранятся всё-таки хэши паролей, ибо в файле accounts.xml пароли выглядят таким образом, хотя чек-бокс "Хранить в виде хэшей" - не отмечен:

<password type="QString">0008005f00030007000500...........002c00130002000c004a</password> (точками несколько символов затёр на всякий слйчай)

Ri0n commented 9 years ago

Comment #1 originally posted by psi-plus on 2015-01-27T23:57:52.000Z:

Какой jabber сервер вы используете? Если jabber.ru, то бесполезно. Он по каким-то своим причинам постоянно меняет соль при авторизации scram-sha-1. В этом случае хэш хранить бесполезно. Другие сервера надо проверять отдельно.

Ri0n commented 9 years ago

Comment #2 originally posted by psi-plus on 2015-01-28T02:08:25.000Z:

Сервер - talk.google.com

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

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

Вот только SHA-1 слегка того... устарело. Кстати, Qt5 имеет все современные алгоритмы шифрования http://doc.qt.io/qt-5/qcryptographichash.html

Ri0n commented 9 years ago

Comment #3 originally posted by psi-plus on 2015-01-28T10:27:07.000Z:

Соль меняется, так как это безопасно - динамическая соль называется. И почему в этом случае хранить хэш бесполезно?

В данном случае под хешем подразумевается хеш уже соленого пароля используя механизм SCRAM. SaltedPassword := Hi(Normalize(password), salt, i)

Вот только SHA-1 слегка того... устарело.

Но с учетом вышеуказанного механизма пока вполне безопасно (мое мнение). Т.к. параметр "i" обычно большой. j.ru, например, отдает его равным 4096. Т.е. 4 тысячи итераций хеширования.

p.s. в элементе хранится именно пароль. Обсуждаемый хэш хранится в другом месте.

Ri0n commented 9 years ago

Comment #4 originally posted by psi-plus on 2015-01-28T14:37:55.000Z:

Увы, но в скором будущем возможны строгости. Google переходит на Open ID Connect - https://developers.google.com/+/api/auth-migration#timetable

На Qt ещё написали...