id: Гость   вход   регистрация
текущее время 00:42 29/03/2024
Владелец: unknown (создано 01/02/2010 15:55), редакция от 01/07/2010 16:09 (автор: unknown) Печать
Категории: криптография, сайт проекта, faq
создать
просмотр
редакции
ссылки

Криптография: практика


Вычеркнутые вопросы перенесены в FAQ


Оглавление документа:

Парольную фразу какой длины имеет смысл использовать в программах шифрования?

Многие программы используют стандарт PBKDF2, который обеспечивает замедление атак словарного перебора, за счёт многократного хэшированию с солью. Многократное хэширование даёт замедление проверки каждого пароля. Т.н. "соль" (случайно сгенерированная открытая строка) используется для предотвращения использования заранее просчитанных таблиц ключей из паролей.


Если даже не рассматривать эти меры противодействия словарным атакам, то для самых консервативных оценок нужно исходить из 128-битной стойкости пароля.


Т. е. pn должно быть примерно равно 2128, где p — количество символов во множестве для случайного выбора, из которого составлен пароль, n — длина пароля.
Например 2727 ≈ 2128 — если можно запомнить абсолютно случайный набор из двадцати шести букв с клавиатуры + пробел, длиной также из 27 символов.


Энтропию одного символа можно посчитать, решив уравнение 2x=N, где N это количество символов в алфавите:
x = log2(N) = ln(N)/ln(2)
Умножив эту величину на количество символов в пароле, легко рассчитать его общую энтропию.


На практике проще всего запомнить 10 случайно выбранных слов из специально подготовленных словарей коротких слов Diceware, что даст 128-битный уровень. Слова можно связать во фразу для лёгкого запоминания, главное не использовать известные фразы, не подгонять порядок слов под естественный.


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


См. также Современная техника взлома паролей, Выбор и защита паролей, Фонетический пароль

Следующий вопрос?



 
На страницу: 1, 2, 3, 4, 5, 6 След.
Комментарии [скрыть комментарии/форму]
— Гость (05/07/2010 14:48)   <#>
разные алфавиты дают одинаково стойкие пароли
А с этим вроде никто и не спорит. (Если говорить точнее, если у нас есть два алфавита и пароль в одном из них, то в другом можно подобрать более (а не равно) стойкий.)

А насчёт того, что лучше – употреблять спецсимволы или удлинять пароль, так это вопрос личных предпочтений и вкуса, если следовать данным выше рекомендациям.

И как показано выше, обязательное использование спецсимволов не ослабляет пароль, даже если об этом противнику известно заранее. А вам очевидно, что ослабляет? Причём настолько очевидно, что вы даже не хотите с этим спорить? Я правильно излагаю вашу позицию?
— SATtva (05/07/2010 18:32)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Участники решили поставить новый рекорд эпического срача?
— Гость (05/07/2010 19:15)   <#>
Новый? Ссылку на предыдущий эпос, можно?
— Гость (05/07/2010 19:57)   <#>
SATtva, в что вы предлагаете?
— SATtva (05/07/2010 20:00)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Это был риторический вопрос. Не обращайте внимания, продолжайте. :)
— Гость (10/11/2010 21:17)   <#>
Предлагаю вашему вниманию разработанную мною мнемотехнику запоминания криптостойкого пароля. Критика и улучшения приветствуются, так как я реально использую эту технику и заинтересован в ее высокой надежности. Причиной разработки техники стало прочтение этой ветки и особенно вот этот комментарий https://www.pgpru.com/comment40384.

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

При построении главного пароля я использую три ограничения:

1) битность пароля не должна быть менее 128;
2) длина пароля не должна быть более 64 символов (это ограничение обусловлено лимитом длины пароля в используемой мою программе шифрования ТруКрипт);
3) в пароле используются только символы a-z, A-Z и 0-9 (почему – хорошо описано знающими людьми выше по ветке).

Запоминание пароля состоит из нескольких последовательных этапов. В идеале было бы разнести по времени полное запоминание пароля и его использование, но я этого не делаю и запоминаю его параллельно с использованием при условии более полного соблюдения первого ограничения на всех этапах.

Итак, начнем. Как же действительно запомнить высокорандомный пароль? Я начал с того, что сформировал простой нестойкий пароль, который я никогда не забуду, и методом повторения довел его теоретическую битность до необходимого уровня. Пароль был построен по примитивному алгоритму (навеянному «секретными вопросами» почтовых серверов) из слияния двух английских слов («название любимой рок-группы») и шести цифр («почтовый индекс родителей») и выглядел так:

deeppurple127025

Ориентировочная битность этого пароля 60 бит.

Четырехкратное его повторение обеспечивает 81 бит и укладывается во второе ограничение.

deeppurple127025deeppurple127025deeppurple127025deeppurple127025

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

IueJZnc0Vk1dfpktUrvBD

и разбиваю его на 7 групп по 3 знака (можно иначе в зависимости от возможностей памяти).

1) Iue
2) JZn
3) c0V
4) k1d
5) fpk
6) tUr
7) vBD

Теперь добавляю первую группу символов к своему незабываемому паролю и получаю такой шаблон:

Iuedeeppurple127025

Битность только этого шаблона уже составляет 79 бит, но его четырехкратное повторение составит более 64 символов и «хвост» будет обрезан ТруКриптом. Это плохо, потому что я в итоге обязательно собьюсь и забуду свой пароль. Поэтому я ограничиваюсь троекратным повтором и получаю пароль из 57 символов и 104 бит.

Iuedeeppurple127025Iuedeeppurple127025Iuedeeppurple127025

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

На втором этапе добавляется вторая группа символов и том ТруКрипт вместе с базой паролей перешифровывается новым паролем. Тут снова возникает нюанс. Длина шаблона теперь составляет 22 символа, и утроить его уже не получится. Поэтому я его удваиваю и получаю главный пароль длиною 44 символа и битностью 117 бит.

IueJZndeeppurple127025IueJZndeeppurple127025

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

И вот уже на третьем этапе я получаю гораздо более рандомный пароль из 50 символов с битностью 137 бит.

IueJZnc0Vdeeppurple127025IueJZnc0Vdeeppurple127025

Добавление четвертой группы обеспечивает мне невзламываемый пароль из 56 символов и 149 бит, который я держу только в своей «оперативной памяти» и никогда не позабуду.

IueJZnc0Vk1ddeeppurple127025IueJZnc0Vk1ddeeppurple127025

Пятая группа дает 62 символа и 159 бит.

IueJZnc0Vk1dfpkdeeppurple127025IueJZnc0Vk1dfpkdeeppurple127025

Добавление шестой группы отнимает возможность удвоить шаблон, поэтому первоначальный простой пароль отбрасывается вовсе и получается утроенный пароль из 54 символов и 143 бит.

IueJZnc0Vk1dfpktUrIueJZnc0Vk1dfpktUrIueJZnc0Vk1dfpktUr

В итоге после добавления седьмой группы символов я получаю незабываемый высокорандомный пароль из 63 символов с битностью в 163 бита.

IueJZnc0Vk1dfpktUrvBDIueJZnc0Vk1dfpktUrvBDIueJZnc0Vk1dfpktUrvBD

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

В идеале конечно нужно будет отказаться от удваиваивания и запомнить абсолютно рандомную единичную комбинацию. Но это в идеале и если в этом возникнет необходимость.
— unknown (10/11/2010 22:57, исправлен 10/11/2010 23:07)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664

deeppurple127025
Ориентировочная битность этого пароля 60 бит.

Предположим слово взято рэндомно из словаря всех популярных слов размером 300000 (туда муз. группы влезут), ну и число соответствующее: 300000 · 127025 = 38107500000, что соответствует примерно 235.


А дальше:


a · 2n = 2(n + a)


Само по-себе удваивание добавляет два бита, утраивание — три.


А принцип запоминания сложного пароля по частям имеет право на использование (но не при доступе к удалённым зашифрованным данным).

— Гость (11/11/2010 22:42, исправлен 23/12/2012 12:06)   <#>

screenshot

— SATtva (11/11/2010 22:50)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Подсчёт энтропии в подобных утилитах сугубо эвристический.
— Гость (12/11/2010 00:06)   <#>
А что, движок всё-таки пропускает пустые комментарии? Ими можно засирать форум? :)
— SATtva (12/11/2010 19:27)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
движок всё-таки пропускает пустые комментарии?

Нет. Что Вас наводит на такую мысль?
— Гость (13/11/2010 02:09)   <#>
/comment42812 — как это опубликовалось? Когда я случайно жал "отправить" движок всегда писал "комментарий пуст и потому не будет сохранён". Специально отправить пустой не пробовал (пробелов там наставить?). Если да, то довольно интересная недокументированная фича.
— Гость (13/11/2010 16:21)   <#>
Так это ведь не пустой комментарий. В качестве комментария была отправлена ссылка на файл, заключенная в теги [img].
— Гость (13/11/2010 20:54)   <#>
О, спасибо, понял! Учту.
— Гость (23/12/2012 06:48)   <#>
Перечитал очередной раз эти 5 страниц обсуждений, а толкового ответа так и не увидел. На мой вкус, повторюсь, чем короче пароль, тем лучше, и проблему запоминания пароля я пока обсуждать не хочу, поскольку лично у меня она проблем не вызывает.

Итак, как было правильно отмечено в теле топика, pn = 2128 ⇒ количество символов в пароле n, написанном в алфавите длиной p, для достижения 128-битной энтропии должно быть
n = 128 / log2p

Количество символов: 26 ⋅ 2 = 52 — английский алфавит. Количество спецсимволов (вместе с пробелом) — 43, вот они все:*
`!@#$%^&*()_+=-0987654321.,:;[]\/'~| <>"{}?
Итак, общий афавит содержит 43 + 26 ⋅ 2 = 95 символов, что требует

128 / log295 ≈ 19.4829 ⇒ нужно примерно 20 символов.

В частности, они могут быть получены из вывода команды**
$ pwgen -s -y 20
Замечания:

  1. Если считаете, что через плечо кто-то ваш пароль может частично подглядеть в момент ввода, добавьте ещё сколько-нибудь символов «про запас».
  2. Очевидно, для 256-битного пароля символов понадобится в 2 раза больше.
  3. Подумалось: если допустить, что длина пароля не обязательно 20 символов, а любая от 1го до 20ти, то противнику придётся перебирать ещё и все более короткие пароли, что только добавит энтропии. Хотя, если посчитать, энтропии добавится совсем мизерно, и метод не оправдывает себя: в этом случае имеем ∑nk=1 pk = 2128, и разница энтропии log2 ( ∑nk=1 pk ) – log2 ( pn ) составляет всего 0.0153 бита при n = 20 и p = 95.


*Проверьте, что 1) никакие спецсимволы не забыты, и 2) в приведённой строке нет символов, упомянутых более одного раза. Пока считал, успел раз 10 ошибиться, поэтому перепроверяйте.
**Не знаю, насколько pwgen можно доверять. Он /dev/random или /dev/urandom использует? Скорее второе. И цитата из мана «Include at least one special character in the password» меня смущает. Надо же не «at least one» включать, а просто использовать спецсимволы наравне с другими символами парольного алфавита.
На страницу: 1, 2, 3, 4, 5, 6 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3