Криптография: практика
Вычеркнутые вопросы перенесены в FAQ
Парольную фразу какой длины имеет смысл использовать в программах шифрования?
Многие программы используют стандарт PBKDF2, который обеспечивает замедление атак словарного перебора, за счёт многократного хэшированию с солью. Многократное хэширование даёт замедление проверки каждого пароля. Т.н. "соль" (случайно сгенерированная открытая строка) используется для предотвращения использования заранее просчитанных таблиц ключей из паролей.
Если даже не рассматривать эти меры противодействия словарным атакам, то для самых консервативных оценок нужно исходить из 128-битной стойкости пароля.
Т. е. pn должно быть примерно равно 2128, где p — количество символов во множестве для случайного выбора, из которого составлен пароль, n — длина пароля.
Например 2727 ≈ 2128 — если можно запомнить абсолютно случайный набор из двадцати шести букв с клавиатуры + пробел, длиной также из 27 символов.
Энтропию одного символа можно посчитать, решив уравнение 2x=N, где N это количество символов в алфавите:
x = log2(N) = ln(N)/ln(2)
Умножив эту величину на количество символов в пароле, легко рассчитать его общую энтропию.
На практике проще всего запомнить 10 случайно выбранных слов из специально подготовленных словарей коротких слов Diceware, что даст 128-битный уровень. Слова можно связать во фразу для лёгкого запоминания, главное не использовать известные фразы, не подгонять порядок слов под естественный.
Для оптимизации простоты запоминания можно уменьшать число слов, но увеличивать число дополнительных символов, сверяя получаемое значение энтропии пароля с формулой.
См. также Современная техника взлома паролей, Выбор и защита паролей, Фонетический пароль
Опять же, при подборе пароля из естественных слов следует учитывать частоту их употребления. Например, вот: Половина слов в среднем тексте – эти.
Из нескольких миллионов (английских) слов средний человек употребляет несколько тысяч – активный словарный запас, поэтому, при самостоятельном составлении парольной фразы в одном слове будет (приблизительно) не 20 а 10 бит. Но понимает человек гораздо больше слов, чем употребляет, поэтому составление парольной фразы следует поручать машине, и всё равно не увлекаться размером словаря, чтобы было легче запомнить. Я думаю, словарь где-то из 60 тысяч слов (т.е. 16 бит/слово) будет оптимальным вариантом, и 14-ти словный пароль из такого словаря. Имхо.
Если слова выбираются независимо и равновероятно, никакой разницы какими они будут нет. Слова это просто закодированное представление нашего случайного секретного ключа, то есть большого пребольшого числа, которое трудно угадать из-за того что вариантов слишком много.
Да, похоже я недооценил человеческую дремучесть.
Вроде ни у кого нет сомнения что секретное бинарное число, которое и есть наш ключевой материал можно записать ноликами и единичками и даже цифрами от 0 до 9.
Но если представить, что вместо чисел от 0 до 9, используются десять слов, пароль из 39 этих слов, выбранных независимо и равновероятно, разве будет слабее пароля из 39 цифр, выбранных независимо и равновероятно?
А теперь представьте пароль из десяти случайных чисел от 11111 до 66666, но вместо чисел используются десять слов однозначно сопоставленных с этими числами. Почему пароль должен стать слабее от замены чисел на слова? Какая логическая цепочка выстраивается у вас в голове?
С какой стати? Наоборот, сложное слово отложится в голове как ассоциация с важной информацией и поможет вспомнить связанный с ним остаток парольной фразы.
:)
Чем больше информация похожа рутину и бессмыслицу, тем легче она растворяется в памяти. А когда в парольной фразе есть словосочетания типа ultrawet korean herd, она сама собой запоминается.
Вот возьмём по ссылке с вышеуказанного сайта русский словарь Diceware, хотя-бы первые сотни три слов:
Как вам запоминается, например, такая фраза: "аблаут абшид агалит агамия агамы агул адат ажно азям аймак айрол"? Мне так например – нет. Словарь – важен!
Метод Dicеwaere примерно в этом и состоит. Пассфраза создаётся по заранее известному всем словарю. Только вот для хорошей запоминаемости словарь нужен правильный.
Я не вижу даже попыток обоснования того, что парольные фразы Diceware легче взломать, чем набор из случайных шестеричных чисел. Обоснование, а не пространные слова про лингвистику. При чём здесь лингвистика?
Собственно, ответ. Впрочем, имхо, мне проще запомнить 20 символов, чем 20 слов. Зрительная память.