Хранение паролей в незащищенном месте


Есть у кого соображения как хранить удаленно базу данных паролей напр. на e-mail или удаленном сервере? В KeePass есть интересная фича – "Number of key transformation rounds" где можно установить значение "Delay" т.е. кол-во итераций хеширования как я понимаю. При экспорте базы можно устанавливать большое кол-во проходов, что на экспортной копии базы сведет атаки типа brute force на нет.

Например установив значение 9911238656, Core I7 считал 5 минут при 100% двух ядер для проверки одного пароля. Очень эффективная опция для хранителей паролей которые увы нет в Password Safe...

Комментарии
— SATtva (29/06/2012 16:23)   
А записать пароли в файл и зашифровать его открытым ключом, закрытая часть которого лежит на Вашей машине? Да хоть даже закрыть базу случайным 20-значным паролем, который, опять же, хранится на Вашей машине. Вы не привели модель угрозы и требования, так что насоветовать можно, что угодно и в любом количестве.
— avaEGE (29/06/2012 16:30)   
SATtva:
аписать пароли в файл и зашифровать его открытым ключом, закрытая часть которого лежит на Вашей машине? Да хоть даже закрыть базу случайным 20-значным паролем

Так вариант этого 20-ти значного пароля проверяется за доли секунды, как и 2 значного.

SATtva:
Вы не привели модель угрозы

Максимально снизить вероятность получить пароль с помощью распределенных вычислений – brute force атак, Радужных таблиц и т.п в данном направлении.
Гость (29/06/2012 16:35)   
Про стойкость паролей[link1].
Вот здесь[link2] удобная табличка оценки энтропии.
Ассиметричное шифрование это хорошо, но разве закрытый ключ правильно без passphrase оставлять?

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

распределенных вычислений – brute force атак
Мало поможет. Максимум снизит сложность на пару порядков, что недостаточно.

Радужных таблиц
Радужные таблицы применяются когда известен хэш и не использовалась соль. К данному вопросу не имеет отношения.
— unknown (29/06/2012 21:40, исправлен 29/06/2012 21:42)   

Опция эта PBKDF2[link3] — стандартная и должна, по идее, в обязательном порядке использоваться во всех криптографических программах, в которых генерируется ключ из пароля. Хотя, не везде есть возможность менять дефолтные значения.


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


Альтернативный нестандартизированный вариант — scrypt[link4] — размен с упором не на количество операций, а на требования к памяти. Если для одной машины несколько мегабайт некритично, то при массированном распараллеливании, особенно на видеокартах (на которых из-за высокого быстродействия и параллелизации просчитывают радужные таблицы, генерируют биткоины), это ставит противника в трудное положение.


Радужных таблиц

Радужные таблицы применяются когда известен хэш и не использовалась соль. К данному вопросу не имеет отношения.

Тоже верно.

Гость (08/07/2012 08:39)   

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

One weakness of PBKDF2 is that while its c parameter can be adjusted to make it take an arbitrarily large amount of computing time, it can be implemented with a small circuit and very little RAM, which makes brute-force attacks using ASICs or GPUs relatively cheap[15]. The bcrypt key derivation function requires a larger (but still fixed) amount of RAM and is slightly stronger against such attacks, while the more modern scrypt[15] key derivation function can use arbitrarily large amounts of memory and is much stronger.

А что можно сказать про bcrypt в сравнении с PBKDF2? Кстати, в OpenBSD не bcrypt ли используется для хранения паролей в /etc/master.passwd и для их vnconfig? Вообще, было бы интересно увидеть список какие KDF используются в разных Unix'ах. Что-то известно про применение scrypt для софта в Linux?



Посмотрел на NetBSD. В cgd там-таки pbkdf2[link5], но в /etc/master.passwd всё тухло[link6]. Лучшее, что есть — blowfish+раунды. И, вообще, что значит «blowfish как hash-функция»? Поглядел в /etc/passwd.conf, который автоматически создаётся при инсталляции и выборе самых безопасных опций:
default:
  localcipher = blowfish,7
  ypcipher = blowfish,7
При этом в man'е говорится
the value can be between 4 and 31
А если выбирать умолчания при инсталляции, то вообще так:
default:
        localcipher = sha1
        ypcipher = old
т.е. совсем плохо.

При этом в OpenBSD аналогичный дефолт[link7] — «blowfish,6». В статье[link8] про bcrypt говорится, что его сделал «The OpenBSD Project» — это оно и есть в опциях с blowfish? В предпоследней ссылке:
The cipher to use for local passwords. Possible values are: «old», «newsalt,<rounds>», «md5», and «blowfish,<rounds>» where «old» means classic 56-bit DES (facepalm). For «newsalt» the value of rounds is a 24-bit integer with a minimum of 7250 rounds. For «blowfish» the value can be between 4 and 31. It specifies the base 2 logarithm of the number of rounds.

P.S.: А про сам проект http://www.tarsnap.com, куда ведут ваши ссылки, что можете сказать? Он чем-то лучше tahoe или совсем нераспределённый?
— neverward (08/07/2012 12:26, исправлен 08/07/2012 12:27)   
Есть у кого соображения как хранить удаленно базу данных паролей напр. на e-mail или удаленном сервере?

есть мнение, что в данном случае на сервере должны быть не пароли, а хеш+соль.

Гость (08/07/2012 17:39)   
Ему ж не авторизовываться на сервере надо, а хранить бэкапы самих паролей, потому хэш+соль не подойдут.
— neverward (09/07/2012 14:39)   
Ему ж не авторизовываться на сервере надо, а хранить бэкапы самих паролей, потому хэш+соль не подойдут.

Блин, не понял идею в начале. Получается, что сложность пороля увеличивается, так как к нему добавляется число проходов, но при расшифровке даже зная пароль выполняется некоторый брутфорс в течении 5-10 минут. Кто, что думает, сравнимы ли по вычислительной сложности задачи вида пароль=X+Y и пароль=X + проходов=Y. Что-то мне кажется, что вторая задача не должна брутфорситься больше, чем первая.

Сама идея весьма интересна, только лучше её переформулировать в такую: пользователь вводит пароль(или подсовывает ключ), и к нему присовокупляется ещё, ну три-четыре символа из /dev/urandom. При расшифровке требуется кроме правильного пароля ещё немного брутфорса, но разумное время(допустим 10 минут). Ясно, что сложность взлома растёт, так как выросла энтропия пароля.
Гость (09/07/2012 16:34)   
Вам неочевидно, зачем применяются специальным образом сконструированные key derivation function, замедляющие перебор?
— neverward (09/07/2012 17:18)   
Вам неочевидно, зачем применяются специальным образом сконструированные key derivation function, замедляющие перебор?
Уже понял зачем. Возникает тот же вопрос, допустим у нас есть файл и надо его зашифровать так, чтобы на проверку одного пароля уходило по 5 минут. Чем это сделать? Как вариант я уже понял как это реализовать несколькими способами, но вот что насчёт готового утиля?
Гость (09/07/2012 17:28)   

Например:[link9]
An example parameters file which uses PKCS#5 PBKDF2:
algorithm aes-cbc;
             iv-method encblkno1;
             keylength 128;
             verify_method none;
             keygen pkcs5_pbkdf2/sha1 {
                     iterations 39361;
                     salt AAAAgMoHiYonye6Kog \
                          dYJAobCHE=;
             };
Можно генерить paramsfile и для своих целей, необязательно его использовать для того, что в man описано. Параметр iterations можете поменять руками, но не переусердствуйте. Если поставить раз в 10-100 больше, чем в норме, пароль будет проверяться минуту.
— neverward (10/07/2012 11:59, исправлен 10/07/2012 12:00)   
Можно генерить paramsfile и для своих целей, необязательно его использовать для того, что в man описано. Параметр iterations можете поменять руками, но не переусердствуйте. Если поставить раз в 10-100 больше, чем в норме, пароль будет проверяться минуту.

о, спасибо, надо брать на вооружение

Гость (11/07/2012 00:02)   
В LUKS должно иметься что-то подобное, но это unknown может лучше подсказать.

Вот ещё[link10]:
Хотя стандартных консольных тулзов для PKBDF2 вроде бы нет, есть примеры реализации на Perl'е
— unknown (11/07/2012 09:43)   
В LUKS число итераций в PBKDF2 подбирается так, чтобы вычисление ключа из пароля занимало ровно 1 сек. на текущей машине. Это число можно принудительно менять опцией --iter-time.
— avaEGE (11/07/2012 12:57)   
SATtva:
хранится на Вашей машине

Хочется хранить пароли удаленно. Иметь возможность открыть базу паролей имея только пароль. Но в таком случае усложить задачу атак перебором.

Господа а как на счет криптографических приложенияй способных не только менять кол-во итераций хеширования но и опционально выставлять другие параметры, например таких кол-во итераций шифра, размер блока и т.д..?
Гость (11/07/2012 13:01)   
Ну вопрос был скорее про вычленение PBKDF2-функционала из LUKS. Т.е. нужен чёрный ящик, где на входе пароль, а на выходе — ключ шифрования и его соль. Впрочем, LUKS, пожалуй, умеет разглашать используемый ключ (наверняка опция есть), поэтому должно решаться.
Гость (11/07/2012 13:11)   

Есть методы монтирования удалённых контейнеров, работы с удалёнными шифрованными файлами и т.д. См. в сторону функционала EcryptFS, EncFS, Tahoe и др. Файл будет шифроваться на компьютере пользователя, а на удалённой файловой системе писаться уже шифрованным.
— unknown (11/07/2012 14:34, исправлен 11/07/2012 14:35)   

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


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

— sentaus (11/07/2012 14:51)   
Или об итерациях какого шифра речь?

Я так понял, что речь идёт о кратном шифровании.
— unknown (11/07/2012 15:02)   
Т.е. каскады шифров? Это есть в Truecrypt.
— neverward (11/07/2012 16:12)   
то вы рискуете изменив число раундов даже в сторону увеличения открыть путь к слайд-атаке или ещё какой неприятности
вот тут как раз вопрос – 1млн hash=sha512(hash) против sha512(text+randomtext[0..5]), т.е. не безопасней ли вместо раундов добавлять в пароль случайный текст и при проверке пароля добрутфорсивать несколько символов?
— unknown (11/07/2012 16:17)   
Нет, речь шла о раундах, а не полнораундовых итерациях, в шифровании, когда я не так понял вопрос.

Хэши устойчивы к повторениям. Вероятность снижения энтропии в цепочке хэшей из-за коллизий и получения циклов пренебрежимо мала при любом мыслимом числе итераций.
— neverward (11/07/2012 16:54)   
Хэши устойчивы к повторениям. Вероятность снижения энтропии в цепочке хэшей из-за коллизий и получения циклов пренебрежимо мала при любом мыслимом числе итераций.
Мне был интересен случай повторения полной работы алгоритма. Спасибо!
— avaEGE (08/08/2012 19:25, исправлен 08/08/2012 19:26)   
unknown:
Нет, речь шла о раундах, а не полнораундовых итерациях, в шифровании, когда я не так понял вопрос.

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


unknown:
С вашим запредельным числом итераций вы внесли всего около тридцати бит "фиктивной" вычислительной энтропии.

Как Вы оценили приблизительно кол-во бит? Ведь получить конечное значение хеша не зациклив его указанное число раз невозможно...

— unknown (08/08/2012 21:10)   
233=8589934592
Гость (09/08/2012 13:27)   
соображения как хранить удаленно базу данных паролей
http://lastpass.com/

Ссылки
[link1] https://www.pgpru.com/comment40354

[link2] https://en.wikipedia.org/wiki/Password_strength#Random_passwords

[link3] https://en.wikipedia.org/wiki/PBKDF

[link4] http://www.tarsnap.com/scrypt.html

[link5] http://netbsd.gw.com/cgi-bin/man-cgi?cgdconfig+8+NetBSD-current

[link6] http://netbsd.gw.com/cgi-bin/man-cgi?passwd.conf+5+NetBSD-current

[link7] http://www.openbsd.org/cgi-bin/man.cgi?query=login.conf&sektion=5&arch=i386&apropos=0&manpath=OpenBSD+Current

[link8] http://www.openbsd.org/papers/bcrypt-paper.ps

[link9] http://netbsd.gw.com/cgi-bin/man-cgi?cgdconfig++NetBSD-current

[link10] https://www.pgpru.com/comment45000