Криптография: практика
Вычеркнутые вопросы перенесены в FAQ
Парольную фразу какой длины имеет смысл использовать в программах шифрования?
Многие программы используют стандарт PBKDF2, который обеспечивает замедление атак словарного перебора, за счёт многократного хэшированию с солью. Многократное хэширование даёт замедление проверки каждого пароля. Т.н. "соль" (случайно сгенерированная открытая строка) используется для предотвращения использования заранее просчитанных таблиц ключей из паролей.
Если даже не рассматривать эти меры противодействия словарным атакам, то для самых консервативных оценок нужно исходить из 128-битной стойкости пароля.
Т. е. pn должно быть примерно равно 2128, где p — количество символов во множестве для случайного выбора, из которого составлен пароль, n — длина пароля.
Например 2727 ≈ 2128 — если можно запомнить абсолютно случайный набор из двадцати шести букв с клавиатуры + пробел, длиной также из 27 символов.
Энтропию одного символа можно посчитать, решив уравнение 2x=N, где N это количество символов в алфавите:
x = log2(N) = ln(N)/ln(2)
Умножив эту величину на количество символов в пароле, легко рассчитать его общую энтропию.
На практике проще всего запомнить 10 случайно выбранных слов из специально подготовленных словарей коротких слов Diceware, что даст 128-битный уровень. Слова можно связать во фразу для лёгкого запоминания, главное не использовать известные фразы, не подгонять порядок слов под естественный.
Для оптимизации простоты запоминания можно уменьшать число слов, но увеличивать число дополнительных символов, сверяя получаемое значение энтропии пароля с формулой.
См. также Современная техника взлома паролей, Выбор и защита паролей, Фонетический пароль
Это непонятный, запутанный пассаж, предлагаю его удалить совсем. Нормальные люди не представляют себе что такое 2128.
Попробую написать действительно простое и понятное любому человеку объяснение эффективной длины ключа (возможно требует редактуры):
<...>
Если даже не рассматривать эти меры противодействия словарным атакам, то для самых консервативных оценок нужно исходить из 128-битной стойкости пароля.
Самый очевидный способ сделать пароль 128-битным — это записать его в виде буквальной последовательности ста двадцати восьми нулей и единиц. Каждый символ такого пароля будет соответствовать одному биту ключевого материала. Но вводить (не говоря уже о запоминании) 128 символов пароля совершенно непрактично.
Оказывается, если использовать для записи пароля три символа вместо двух, сохраняя объем информации в 128 бит, потребуется на целых 47 символов меньше. Если использовать десять чисел от 0 до 9, то 128 бит информации умещается всего в 39 символов (70% экономии). К сожалению, распространённая форма эффективной записи двоичной информации применяемая в компьютерах, использует алфавит из 256 символов, что уже слишком много для людей и средств ввода. Поэтому, для записи паролей чаще всего выбирают удобное подмножество из латинских букв и иногда чисел.
Пароль составленный из 26 букв от a до z, содержащий примерно 128 бит ключевого материала, имеет длину 28 символов. Если добавить в алфавит пароля заглавные буквы и цифры, длина может быть сокращена до 22 символов.
Можно отметить, что случайно сгенерированную последовательность всего из 28 маленьких букв крайне трудно запомнить. Человек никогда не практиковался в запоминании такой информации. Однако, если опереться на то, что человек может запомнить сравнительно легко, можно добиться надёжного сохранения 128-битного пароля в голове, а значит и в безопасности. Для этого используются так называемые парольные фразы, где вместо одиночных букв и цифр используются целые слова. В этом случае, размер алфавита символов–слов, из которого совершается рандомизированный выбор, может быть очень большим, что драматически сокращает общую необходимую длину пароля, выраженную в количестве слов (но не индивидуальных букв).
В популярной системе генерации парольных фраз Diceware, алфавит содержит 7776 символов (слов), что делает возможной запись 128-битного пароля всего десятью короткими словами. Слова можно связать во фразу для лёгкого запоминания, главное не использовать известные фразы и не подгонять порядок слов под естественный.
Для оптимизации простоты запоминания можно уменьшить число слов, но добавить дополнительные рандомизированные символы, которые сделают подбор пароля безнадёжным. Хотя строго вычислить эффективное количество бит ключевой информации в таком пароле затруднительно, можно предположить, что подбор его будет не легче, чем подбор равного по длине пароля полностью состоящего из случайных букв и других добавленных знаков.
В общем случае, для алфавита из N символов, количество бит ключевого материала, содержащееся в одном символе можно вычислить, решив уравнение 2x = N :
x = log2(N) = ln(N) / ln(2)
Если разделить желаемый эффективный размер ключевого материала в битах на полученный результат, можно вычислить необходимую длину пароля для выбранного алфавита.
Например, для алфавита из строчных и заглавных букв a-Z, чисел 0-9 и знаков !@#$%^&-+, количество символов равно 71.
Количество энтропии в одном символе ln(71)/ln(2) = 6.15 бит.
Для 128-битного пароля, требуется 128 / 6.15 = 21 символ.
Очевидной становится ошибочность распространённого представления о том, что добавление дополнительных знаков препинания и тому подобного в пароль делает его сильнее. Как выяснилось, по сравнению с паролем сопоставимой силы, не использующим специальных знаков, экономия составила всего один символ, при том что специальные знаки затрудняют ввод и чтение пароля.
комментариев: 9796 документов: 488 редакций: 5664
Ну это с прицелом на то, что "нормальные" люди этот абзац пропустят, а им можно будет отстреливаться от студентов с вопросами по криптографии.
В вашем варианте написано красиво и как нарочно несжимаемо для FAQ (жалко выкидывать любую строчку), ещё одна хорошая обучающая (и дающая представление об основах) статья/минилекция получается. Вот и не знаю как в таких ситуациях поступать — раздувать FAQ или откладывать в надежде переработать в статью или поделить вопрос на части.
комментариев: 9796 документов: 488 редакций: 5664
А если противнику открыто заявить, что пароль 128-битный и сгенерирован в соответствии с самыми правильными рекомендациями, то утверждение опять становится верным :)
Суть моего утверждения как раз в том, что если пароль кажется недостаточно сложным для перебора, проще увеличить его один символ, чем добавлять необычные значки.
Предполагать нужно только одно, брутфорс должен быть таким сложным, что никакие ухищрения и удача противника не помогут.
Но и не будет надёжной уверенности, что пароль удасться вспомнить. Дилемма...
То что вы написали и есть криптографическая профанация.
Если вы полагаете, что следующие три пароля не имеют одинаковой сложности брутфорса, вам нужно вернуться к изучению основ.
Очевидно, что криптографическому профану легче выучить кашу из символов, чем немного подумать головой.
Я разбиваю лицо ладонью. Специальный символ в середине, ага.
Порядок перебора – от более частых к более редким. Тот, кто при подборе пароля сразу включает галочку, в среднем тратит времени больше. Поэтому так и не делают. А если... а если вам метеорит на голову упадёт? :)
комментариев: 9796 документов: 488 редакций: 5664
... то всё равно верно.
Главное по факту,
и пусть считает свои частоты как хочет и в кошки-мышки с эффектным переключением галочек и наиболее изящной расстановкой служебных символов играть не придётся.