
Как узнать, достаточно ли хороша энтропия пароля, чтобы предотвратить перебор в реалистичных временных рамках? Например, если у меня есть следующий пароль, как определить, достаточно ли он надежен, чтобы предотвратить перебор?
"?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245
решение1
Естьсайт, который может дать вам приблизительную оценку энтропии для введенного пароля. Для приведенного выше примера предполагается ~247 бит.
Вы можете получить очень грубую оценку того, сколько времени потребуется, чтобы взломатьНасколько безопасен мой пароль?.
Это говорит о том, что компьютеру потребуется 15 ноябдециллионов лет, чтобы взломать пароль в вашем примере.
Более подробный анализ пароля можно увидеть наСчетчик паролей.
решение2
Ваш вопрос: «Достаточно ли он прочен, чтобы противостоять грубой силе?»
Настоящий ответ - "нет"
Полезный ответ - «Вероятно, по крайней мере в обозримом будущем».
Что вам следует спросить:
Мне нужно защитить этот тип данных, который имеет требования x и y, и чувствительность z для моей компании. Является ли это соответствующим уровнем энтропии.
Ладно, справедливости ради, 210 бит, как указал @Gareth, скорее всего, будут хороши в течение долгого времени, но это может быть излишним, и естьвеские причины не переусердствоватьна шифрование, если оно вам не нужно.
решение3
ИзТехнический блог Dropbox,это лучшая статьячто я недавно видел, и даже показывает реализацию теорий, обсуждаемых в нем. Пожалуйста, не стесняйтесь, дайте мне знать, если это будет полезно в каком-либо смысле.
Еще одна вещь, которую следует иметь в виду относительно безопасности, это идея, выраженная в этомXKCD комикс.
решение4
Это зависит от того, насколько случайным является ваш пароль.
Если вы выберете пароль из следующего списка:
"?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245
aSBsb3ZlIHlvdSBLaXJzdGVuIFNoZWxieSBHdXllcg==
Тогда у вас есть ровно 1 bit
энтропия (это либо первый пароль, либо второй).
Вот когда вы читаетеXKCD комиксчтоДэйв связался.
Но я могу сделать некоторые предположения относительно вашего пароля:
"?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245 (40 characters)
Похоже, вы используете алфавит:
- заглавные буквы
A-Z
(26 глифов) - строчные буквы
a-z
(26 глифов) - латинские цифры
0-9
(10 знаков) - ограниченный набор знаков препинания (предполагается, что на клавиатуре со 101 клавишей имеется 30 символов)
В общей сложности алфавит состоит из 92 символов.
Дальшепредполагаячто все ваши пароли состоят из 40 символов, это дает вам:
92^40 = 3.56+E78
или3,5 квинвигинтиллионавозможные пароли.
Чтобы преобразовать это в bits
нужно сделать:
ln(92^40) / ln(2) = 260.94 bits
Это при условии, что злоумышленнику придется подобрать пароль методом перебора.
Если нам нужна только информация, то количество бит на самом деле намного меньше, поскольку вы фактически использовали гораздо более короткий алфавит:
original: "?e&ye&ga!ruaa!na!e%ta!e%rc#Iod$woH"2245
rearranged: aaaaacdeeeegnoorrtuwyHI2245""?&&!!!!%%#$
alphabet: acdegnortuwyHI245"?&!%#$ (24 characters)
Выполняем тот же расчет:
ln(24^40) / ln(2) = 183.4 bits
На самом деле там меньше битов информации, потому что я вижу, что каждый раз, когда вы вводите , e
за ним следует символ:
e&
e&
e%
e%
Поэтому мы заменяем e&
на символ h
, а e%
на символ i
:
original: "?hyhga!ruaa!na!ita!irc#Iod$woH"2245 (36 characters)
rearranged: aaaaacdghhiinoorrtuwyIH2245""?!!!!#$
alphabet: acdghinortuwyIH2245"?!#$ (24 characters)
Что сводит содержание информации к:
ln(24^36) / ln(2) = 165 bits
И я заметил, что каждому !
предшествует а a
, а за ним следует буква:
a!r
a!n
a!e
Заменить a!
на k
:
original: "?hyhgkruaknkitkirc#Iod$woH"2245 (32 characters)
alphabet: acdghiknortuwyIH2245"?#$ (24 characters)
Уменьшение бит до ln(24^32)/ln(2) = 146.7
.
Это только уменьшает количество бит, необходимых для кодирования, поскольку мы выясняеминформационный контентсообщения.
Эти уловки не помогут злоумышленнику, который, как правило, не может предположить, что все пароли содержат эти известные последовательности.
Но есть некоторые эвристики, которые можно запрограммировать в алгоритм поиска ключей. Люди, пытающиеся печатать случайным образом, часто печатают одно и то же. Например, я часто получаю коллизию, когда печатаю случайным образом:
adfadsfadsf
наряду с 18 400 другими результатами Google.
Мой самый надежный пароль состоит из 57 символов, с 27-буквенным алфавитом ( a-z
, ), который находится в
266 bits
( ln(27^56) / ln(2) = 266.27
).
С другой стороны, этоодиннадцать2^11
слов. В английском языке есть около общих слов. Это дает:
(2^11)^11 = 2.66E36 passphrases => ln((2^11)^11)/ln(2) = 121 bits
Гораздо меньше, чем 266 бит, которые можно было бы предположить для случайного пароля из 57 символов.
я мог бы добавитьодин битесли бы я выбирал между:
- пробелы между словами
- без пробеловмеждусловами