Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Л2
Сложность пароля
Сло́жность паро́ля — мера эффективности, с которой пароль способен противостоять его угадыванию или методу полного перебора. В своей обычной форме сложность пароля является оценкой того, как много попыток в среднем потребуется взломщику, без прямого доступа к паролю, для его угадывания.
Использование сложных паролей снижает риск наличия бреши в защите, но сложные пароли не замещают собой необходимость наличия других эффективных мер безопасности. Эффективность пароля заданной силы строго зависит от проектирования и реализации программного обеспечения систем аутентификации, в частности, насколько быстро атакующий может проверить догадку пароля, и как надёжно информация о пароле пользователя хранится и передаётся.
Важен такой фактор, как среднее количество попыток, которые атакующий должен сделать, чтобы найти правильный пароль и определяется он длиной пароля, набором используемых символов и тем, как он был создан.
Самый очевидный способ проверить догадку — попытаться использовать её для допуска к ресурсу, защищённому угадываемым паролем. Однако этот способ может быть медленным или вообще невозможным, поскольку достаточно часто системы задерживают или блокируют доступ к аккаунту после нескольких неверных попыток. С другой стороны, системы, которые используют пароли для аутентификации, должны хранить их в каком-либо виде, чтобы сверять их с введёнными значениями. Обычно вместо самого пароля хранится только значение криптографической хеш-функции от пароля. Хеш-функцию невозможно обратить, то есть атакующий не сможет напрямую восстановить пароль из украденного хешированного значения. Однако знание хешированного значения позволяет атакующему быстро проверять предположительные пароли, не обращаясь к атакуемой системе.
Для ускорения подбора паролей атакующий может заранее вычислить значение хеш-функции для распространённых вариантов паролей, а также для всех паролей меньше определённой длины, что позволяет очень быстро восстановить пароль. Большие списки заранее посчитанных хеш-функций паролей можно эффективно хранить, используя радужную таблицу. Такие таблицы доступны в интернете для некоторых публичных систем аутентификации паролей.
Пароли создаются или автоматически (используя генераторы случайных чисел), или человеком. Сложность произвольно выбранного пароля против атаки полным перебором может быть точно вычислена. В большинстве случаев, пароли изначально создаются человеком, которого просят выбрать пароль, иногда направляя его советами или набором правил. Это типично происходит во время создания аккаунта для компьютерных систем или веб-сайтов. В этом случае возможны только оценки сложности пароля, так как люди в таких задачах склонны следовать шаблонам, и эти шаблоны всегда играют на руку атакующему. Кроме того, списки часто выбираемых паролей содержатся в программах угадывания паролей. Любой из многочисленных словарей для разнообразных языков — это такой список. Все элементы в таком списке считаются слабыми при использовании в качестве пароля. Несколько десятилетий анализа паролей в многопользовательских компьютерных системах показали, что больше 40 % паролей легко отгадать, используя только компьютерные программы, и ещё больше можно отгадать, когда во время нападения учитывается информация о конкретном пользователе.
Автоматическая генерация паролей, если она выполнена должным образом, помогает избежать всякой связи между паролем и его пользователем. Например, имя домашнего питомца пользователя вряд ли сгенерируется такой системой. Для пароля, выбранного из достаточно большого пространства возможностей, полный перебор может стать практически невозможным. Однако действительно случайные пароли может быть сложно сгенерировать и, как правило, пользователю их сложно запомнить.
В компьютерной индустрии обычно оценивают сложность пароля в терминах информационной энтропии, измеряемой в битах. Вместо количества попыток, необходимых, чтобы точно угадать пароль, берется логарифм по основанию 2 от этого числа и называется количеством «битов энтропии» в пароле. Пароль со, скажем, 42-битной сложностью, посчитанной таким путем, будет соответствовать случайно сгенерированному паролю длиной в 42 бита. Другими словами, чтобы взломать пароль с 42-битной сложностью, необходимо произвести 242 попыток, исчерпав все возможные варианты методом полного перебора. Таким образом, добавление одного бита энтропии к паролю удваивает количество необходимых догадок, что делает задачу атакующего в два раза сложнее. В среднем, атакующий должен будет проверить половину из всех возможных вариантов пароля, до того как найдет правильный.
Случайные пароли состоят из строки символов специфичной длины, взятых из какого-либо набора символов, используя процесс случайного выбора, в котором каждый символ равновероятен. Сложность случайного пароля зависит от фактической энтропии подразумеваемого генератора случайных чисел; зачастую используются генераторы псевдослучайных чисел. Множество публично-доступных генераторов паролей используют генераторы случайных чисел, находящихся в программных библиотеках, которые предлагают ограниченную энтропию. Однако, большинство современных операционных систем имеют криптографически сильные генераторы случайных чисел, которые подходят для генерации пароля. Для создания случайного пароля также возможно использовать обычные игральные кости. Программы для случайных паролей часто имеют свойство гарантировать, что результат будет удовлетворять местной политике паролей; например, всегда создавая пароль из смеси букв, чисел и специальных символов.

Живые люди обычно создают пароли с недостаточно высокой энтропией.
Так, например, анализ трёх миллионов созданных людьми восьмизначных паролей показал, что буква «e» была использована 1,5 миллиона раз, в то время как буква «f» была использована только 250 000 раз. При равномерном распределении каждый символ встречался бы 900 000 раз. Самая распространенная цифра — «1», тогда как наиболее популярные буквы — «a», «e», «o» и «r». Национальный институт стандартов и технологий (США) предлагает следующую схему, чтобы оценить энтропию созданного человеком пароля (не включающего символы из неанглийских алфавитов):
· Энтропия первого символа равна 4 битам;
· Энтропия следующих семи символов по 2 бита каждый;
· От 9го до 20 символа 1.5 бита энтропии на символ;
· От 21 и дальше каждый символ несет в себе 1 бит энтропии;
· Если используется также верхний регистр букв и неалфавитные символы, то добавляется ещё 6 битов.
Это значит, что пароль длиной в 8 символов, придуманный человеком, без верхнего регистра и без неалфавитных символов имеет сложность около 18 битов. Однако схема основана на том предположении, что пользователи выбирают пароли с той же энтропией, что и обычный английский текст.
Для практических целей пароли должны быть одновременно функциональными для конечного пользователя, но и достаточно сложными, чтобы защитить от умышленной атаки. Сложные пароли можно легко забыть, и их с большей вероятностью будут записывать на бумаге, что подразумевает собой некоторый риск. С другой стороны, если потребовать у пользователей запоминать пароли наизусть, то они будут придумывать более легкие пароли, что серьёзно увеличит риск взлома.
Некоторые основные критерии надежности были установлены для метода полного перебора, в контексте попытки нахождения ключа, используемого при шифровании. В 1999 году проект Electronic Freedom Foundation взломал 56-битный DES шифр меньше чем за одни сутки, используя специально спроектированное аппаратное оборудование. В 2002 году взломал 64-битный ключ за 4 года 9 месяцев и 23 дня. А 12 октября 2011 оценила, что для взлома 72-битного ключа с использованием нынешних возможностей потребуется 124,8 года. Ввиду огромной сложности и из-за ограничений, связанных с нашим пониманием законов физики, нельзя ожидать, чтобы какой-либо цифровой компьютер (или комбинация) был способен взломать 256-битный шифр с помощью метода полного перебора. Так или иначе, в теории существует возможность, что квантовые компьютеры смогут решать такие задачи, однако возможно ли это будет на практике — доподлинно неизвестно.
Как результат — нельзя дать точный ответ на, в некоторой степени, другую проблему, проблему оптимальной сложности пароля. NIST рекомендует использовать пароль в 80-бит энтропии для наилучшей защиты, который может быть достигнут с помощью 95-символьного алфавита (то есть символьный набор ASCII) 12-символьным паролем (12 * 6,5 бита = 78).
Рекомендации по выбору хорошего пароля составлены для того, чтобы сделать пароль более стойким к разнообразным ухищрениям взломщиков.
· Минимальная длина пароля в пределах от 12 до 14 символов.
· Генерирование случайных паролей, если это возможно.
· Следует избегать паролей, основанных на повторении, словарных словах, буквенных или числовых последовательностях, имени пользователя, именах родственников или домашних животных, романтических отсылках, биографической информации.
· Включение в пароль цифр и иных символов, если это разрешено системой.
· Использовать как прописные, так и строчные буквы, когда это возможно. Однако, может быть лучше добавить к паролю несколько символов, чем каждый раз нажимать и отпускать в нужных местах Shift. Увеличение длины пароля всего на 2 символа дает в 500 раз больше вариантов, чем увеличение алфавита на 18 символов.
· Избегать использовать один и тот же пароль для различных сайтов или целей.
Некоторые рекомендации советуют никуда не записывать пароль, в то время как другие отмечают огромное количество защищённых паролем систем, к которым пользователь должен иметь доступ, одобряя идею записывания паролей, если, конечно, этот список будет находиться в надёжном месте, таком как сейф.
Некоторые похожие пароли оказываются слабее, чем другие. Например, разница между паролем, заданным словарным словом, и словом спутанным (то есть буквы в пароле заменены на, скажем, цифры сходного начертания, «о» на «0», «ч» на «4») может стоить прибору для взлома паролей несколько лишних секунд — это добавляет к паролю немного сложности. Примеры ниже иллюстрируют разнообразные способы, которыми могут быть созданы слабые пароли. Каждый из них основан на простом шаблоне, из чего следует очень низкая энтропия, что позволяет очень быстро их угадывать.
· Пароль по умолчанию: password, default, admin, guest и другие. Список паролей по умолчанию широко распространен по интернету.
· Словарные слова: chameleon, RedSox, sandbags, bunnyhop!, IntenseCrabtree и другие, включая слова из неанглийских словарей.
· Слова с добавленными числами: password1, deer2000, ivan1234 и другие. Могут быть очень быстро проверены.
· Слова с простой заменой букв: p@ssw0rd, l33th4x0r, g0ldf1sh и другие. Могут быть проверены автоматически с небольшими временными затратами.
· Удвоенные слова: crabcrab, stopstop, treetree, passpass и другие.
· Распространённые последовательности на клавиатуре: qwerty, 12345, asdfgh, fred и другие.
· Числовые последовательности, основанные на хорошо известных наборах: 911, 314159…(Пи) или 271828…(Эйлер), 112358…(Фибоначчи) и другие.
· Личные данные: ivpetrov123, 1/1/1970, номер телефона, %username%, номер ИНН, адрес и другие.
У пароля существует много других возможностей оказаться слабым, судя по сложности некоторых схем атак; главный принцип в том, чтобы пароль обладал высокой энтропией, а не определялся каким-либо умным шаблоном или личной информацией.
Политики паролей иногда предлагают техники запоминания, помогающие запоминать пароли:
· Мнемонические пароли: Некоторые пользователи разрабатывают мнемонические фразы и используют их, чтобы генерировать высокоэнтропийные пароли, которые тем не менее относительно легче запомнить (например, первая буква каждого слова в запомнившейся фразе). Также, вместо букв, можно для более простого запоминания использовать слоги.
· Мнемоника постфактум: После того как пароль был придуман, необходимо придумать фразу или предложение которое к нему подходит. Оно необязательно должно быть разумным, только запоминающимся. Это позволит паролю быть случайным.
· Шаблоны паролей: Любые шаблоны в пароле делают угадывание (автоматичное или нет) легче и уменьшают работу атакующему.
Хранение паролей
Многие системы используют базы данных для аутентификации пользователей и существует несколько способов хранения паролей:
· Пароли хранятся как есть. При взломе такой базы все пароли станут известны.
· Хранятся только хеши паролей. Найти пароли можно используя заранее подготовленные таблицы хешей. Такие таблицы составляются из хешей простых или популярных паролей.
· К каждому паролю добавляется несколько случайных символов (их называют «соль») и результат хешируется. Полученный хеш вместе с «солью» сохраняются в открытом виде. Найти пароль с помощью таблиц таким методом не получится.
Хеширование — преобразование по определённому алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хэш-функциями или «функциями свёртки», а их результаты называют хэшем, хэш-кодом, хэш-суммой или «сводкой сообщения».
Хэширование применяется для контрольного суммирования с целью обнаружения случайных или намеренных ошибок при хранении или передаче, для хранения паролей в системах защиты (в этом случае доступ к области памяти, где находятся пароли, не позволяет восстановить сам пароль), при выработке электронной подписи (на практике часто подписывается не само сообщение, а его хэш-образ).
В общем случае однозначного соответствия между исходными данными и хэш-кодом нет в силу того, что количество значений хэш-функций меньше, чем число вариантов значений входного массива; существует множество массивов с разным содержимым, но дающих одинаковые хэш-коды — так называемые коллизии. Вероятность возникновения коллизий играет немаловажную роль в оценке качества хэш-функций.
Существует множество алгоритмов хэширования с различными свойствами (разрядность, вычислительная сложность, криптостойкость и т. п.). Выбор той или иной хэш-функции определяется спецификой решаемой задачи. Простейшими примерами хэш-функций могут служить контрольная сумма.
криптографическая соль
В криптографии соль (модификатор) — это строка случайных данных, которая подается на вход хеш-функции вместе с исходными данными. Используется для удлинения строки пароля, что осложняет восстановление группы исходных паролей за один проход полного перебора или с помощью предварительно построенных радужных таблиц. При этом соль не защищает от полного перебора каждого пароля в отдельности. Исходя из назначения, соль должна быть уникальной для каждого пароля из хранимого набора хешей и не является секретной, т. е. хранится рядом с хешем пароля в открытом виде.
Например, вы хешируете свои пароли алгоритмом MD5. Если ваша база будет украдена — злоумышленник довольно просто восстановит большинство исходных паролей, используя заранее подготовленные радужные таблицы. Если же мы добавим к паролю соль, то есть соединим строчку из 10-20 случайных символов с паролем и уже от этой строчки найдем MD5, — стандартные таблицы не будут работать, так как они не рассчитаны на поиск такой длинной строки.
Кроме того, для набора хешей увеличится сложность поиска паролей простым перебором, так как для того, чтобы проверить один «пароль-кандидат» для всех хешей из набора, потребуется производить хеш-преобразование для каждой уникальной соли в наборе. Для несолёных же хешей требуется лишь одна операция хеширования, затем результирующий хеш необходимо просто сравнить (а операция сравнения проще, чем хеширование) со всеми хешами набора.
Соль, использованную для каждого пароля, мы храним рядом с полученным хешем, например, в отдельном столбце таблицы паролей. Когда нам необходимо проверить пароль пользователя — мы извлекаем соль, соединяем с введенным паролем и находим от этой строки MD5. Если пароль верный — хеш совпадет с тем, который хранится в базе.
Обратите внимание: соль не защищает один конкретный хеш от перебора, поэтому нет цели прятать соль — она хранится в открытом виде рядом с хешем. Задача соли — спасти набор украденных хешей, "удлиняя" пароль, а сделать она это может только в том случае, если у каждого хеша будет своя соль. Поэтому мы храним соль рядом с хешем и для каждого хеша генерируем свою уникальную последовательность символов соли.
Важная задача соли — в случае, если два пользователя поставили вдруг одинаковые пароли, сделать разными их хеши. Это скрывает факт совпадения паролей. Особенно это важно, если одному человеку разрешено иметь несколько аккаунтов.
Радужная таблица
Радужная таблица (англ. rainbow table) — специальный вариант таблиц поиска (англ. lookup table) для обращения криптографических хеш-функций, использующий механизм разумного компромисса между временем поиска по таблице и занимаемой памятью (англ. time-memory tradeoff). Радужные таблицы используются для вскрытия паролей, преобразованных при помощи сложнообратимой хеш-функции, а также для атак на симметричные шифры на основе известного открытого текста.
При генерации таблиц важно найти наилучшие соотношения взаимосвязанных параметров:
· вероятность нахождения пароля по полученным таблицам;
· времени генерации таблиц;
· время подбора пароля по таблицам;
· занимаемое место.
Вышеназванные параметры зависят от настроек заданных при генерации таблиц:
· допустимый набор символов;
· длина пароля;
· длина цепочки;
· количество таблиц.
При этом время генерации зависит почти исключительно от желаемой вероятности подбора, используемого набора символов и длины пароля. Занимаемое таблицами место зависит от желаемой скорости подбора 1 пароля по готовым таблицам.
К примеру, для паролей длиной не более 8 символов, состоящих из букв, цифр и специальных символов !@#$%^&*()-_+=, захешированных алгоритмом MD5, могут быть сгенерированы таблицы со следующими параметрами:
· длина цепочки — 1400
· количество цепочек — 50 000 000
· количество таблиц — 800
При этом вероятность нахождения пароля с помощью данных таблиц составит 0,7542 (75,42 %), сами таблицы займут 596 Гб, генерация их на компьютере уровня Пентиум-3 1ГГц займёт 3 года, а поиск 1 пароля по готовым таблицам — не более 22 минут.
Однако процесс генерации таблиц возможно распараллелить, например, расчёт одной таблицы с вышеприведёнными параметрами занимает примерно 33 часа. В таком случае, если в нашем распоряжении есть 100 компьютеров, все таблицы можно сгенерировать через 11 суток.
Защита от радужных таблиц
Один из распространённых методов защиты от взлома с помощью радужных таблиц — использование необратимых хеш-функций, которые включают salt («соль», или «затравка», «модификатор»). Существует множество возможных схем смешения затравки и пароля. Например, такая:
хеш = MD5( пароль + соль )
Для восстановления такого пароля взломщику необходимы таблицы для всех возможных значений соли. При использовании такой схемы, соль должна быть достаточно длинной (6-8 символов), иначе злоумышленник может вычислить таблицы для каждого значения соли, случайной и различной для каждого пароля. Таким образом два одинаковых пароля будут иметь разные значения хешей, если только не будет использоваться одинаковая соль.
По сути, соль увеличивает длину и, возможно, сложность пароля. Если таблица рассчитана на некоторую длину или на некоторый ограниченный набор символов, то соль может предотвратить восстановление пароля. Например, в старых Unix-паролях использовалась соль, размер которой составлял всего лишь 12 бит. Для взлома таких паролей злоумышленнику нужно было посчитать всего 4096 таблиц, которые можно свободно хранить на терабайтных жестких дисках. Поэтому в современных приложениях стараются использовать более длинную соль. Например, в алгоритме хеширования bcrypt используется соль размером 128 бит. Подобная длина соли делает предварительные вычисления просто бессмысленными.


