Loading AI tools
Из Википедии, свободной энциклопедии
Полный перебор (или метод «грубой силы», англ. brute force) — метод решения математических задач. Относится к классу методов поиска решения исчерпыванием всевозможных вариантов[англ.]. Сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет или даже столетий.
Любая задача из класса NP может быть решена полным перебором. При этом, даже если вычисление целевой функции от каждого конкретного возможного решения задачи может быть осуществлено за полиномиальное время, в зависимости от количества всех возможных решений полный перебор может потребовать экспоненциального времени работы.
В криптографии на вычислительной сложности полного перебора основывается оценка криптостойкости шифров. В частности, шифр считается криптостойким, если не существует метода «взлома» существенно более быстрого чем полный перебор всех ключей. Криптографические атаки, основанные на методе полного перебора, являются самыми универсальными, но и самыми долгими.
В английском языке рассматриваемый в данной статье термин «brute-force» обычно относится к классу хакерских атак. При этом более общее понятие, математический метод исчерпывания всевозможных вариантов для нахождения решения задачи, соответствует термину «Proof by exhaustion».
«Метод исчерпывания» включает в себя целый класс различных методов. Обычно постановка задачи подразумевает рассмотрение конечного числа состояний данной логической системы с целью выявления истинности логического утверждения посредством независимого анализа каждого состояния[1]. Методика доказательства утверждения состоит из двух частей:
Хотя полный перебор в большинстве прикладных задач (особенно не связанных со взломом шифров) на практике не применяется, есть ряд исключений. В частности, когда полный перебор всё же оказывается оптимальным либо представляет собой начальный этап в разработке алгоритма, его использование оправдано. Примером оптимальности полного перебора является алгоритм оценки времени вычисления цепочечных произведений матриц, который не удаётся ускорить по сравнению с алгоритмом, основанным на методе «грубой силы»[2]. Этот алгоритм используется для решения классической задачи динамического программирования — определения приоритетов вычислений матричных произведений следующего вида: .
Исходная задача заключается в вычислении данной цепочки (матричного произведения) за наименьшее время. Можно реализовать тривиальный последовательный алгоритм, вычисляющий искомое произведение. Поскольку матричное произведение является ассоциативной операцией, можно вычислить цепочечное произведение, произвольно выбирая пару элементов цепочки и заменяя её результирующей матрицей . Если повторять описанную процедуру раз, то оставшаяся результирующая матрица и будет ответом: . Эта формула может быть проиллюстрирована следующим образом. Рассмотрим матричную цепочку: . Существуют следующие 5 способов вычислить соответствующее этой цепочке произведение :
Выбрав правильный порядок вычислений, можно добиться значительного ускорения вычислений. Чтобы убедиться в этом, рассмотрим простой пример цепочки из 3-х матриц. Положим, что их размеры равны соответственно . Стандартный алгоритм перемножения двух матриц размерами требует время вычисления, пропорциональное числу (число вычисляемых скалярных произведений)[3]. Следовательно, вычисляя цепочку в порядке , получаем скалярных произведений для вычисления , плюс дополнительно скалярных произведений, чтобы вычислить второе матричное произведение. Общее число скалярных произведений: 7500. При ином выборе порядка вычислений получаем плюс скалярных произведений, то есть 75000 скалярных произведений[3].
Таким образом, решение данной задачи может существенно сократить временные затраты на вычисление матричной цепочки. Это решение может быть получено полным перебором: необходимо рассмотреть все возможные последовательности вычислений и выбрать из них ту, которая при вычислении цепочки занимает наименьшее число скалярных произведений. Однако надо учитывать, что этот алгоритм сам по себе требует экспоненциальное время вычисления[2], так что для длинных матричных цепочек выигрыш от вычисления цепочки самым эффективным образом (оптимальная стратегия) может быть полностью потерян временем нахождения этой стратегии[4].
В теории алгоритмов известны несколько широко применимых общих концепций. Метод полного перебора является одной из них. Фактически, полным перебором возможно воспользоваться в тех случаях, когда мы имеем дело с дискретной детерминированной системой, состояния которой могут быть легко проанализированы[5].
Другим ярким примером фундаментальной концепции теории алгоритмов является принцип «разделяй и властвуй». Эта концепция применима, когда система поддается разделению на множество подсистем, структура которых аналогична структуре исходной системы[6]. В таких случаях подсистемы также поддаются разделению, либо являются тривиальными[6]. Для таких систем тривиальной является исходно поставленная задача. Таким образом, реализация концепции «разделяй и властвуй» имеет рекурсивный характер.
В свою очередь, рекурсия представляет собой разновидность полного перебора. Так, рекурсия применима лишь для дискретных систем[7]. Однако это требование относится не к состояниям данной системы, а к её субструктуре[англ.]. Последовательное рассмотрение всех уровней дает исчерпывающее решение задачи, поставленной для всей дискретной системы.
По сравнению с другими примерами полного перебора, особенностью метода рекурсии является то, что конечное решение опирается не на одну-единственную тривиальную подсистему. В общем случае решение формируется на основании целого множества подсистем.
Для следующих примеров классических задач, решаемых методом «разделяй и властвуй», полный перебор является либо единственным известным методом решения, либо изначальной реализацией, которая в дальнейшем была оптимизирована:
В криптографии на полном переборе основывается криптографическая атака методом «грубой силы», или брутфорс[12] (англ. Brute-force attack) — взлом пароля путём перебора всех возможных вариантов ключа. Её особенностью является возможность применения против любого практически используемого шифра[13] (об исключениях, то есть безопасности с точки зрения теории информации см. также шифроблокнот и Теоретико-информационная стойкость). Однако такая возможность существует лишь теоретически, зачастую требуя нереальные временные и ресурсные затраты. Если пространство решений слишком большое, то данный вид атаки может не дать результатов в течение нескольких лет или даже веков. Наиболее оправдано использование атаки методом «грубой силы» в тех случаях, когда не удается найти слабых мест в системе шифрования, подвергаемой атаке (либо в рассматриваемой системе шифрования слабых мест не существует). При обнаружении таких недостатков разрабатываются методики криптоанализа, основанные на их особенностях, что способствует упрощению взлома.
Устойчивость к brute-force атаке определяет используемый в криптосистеме ключ шифрования. Так, с увеличением длины ключа сложность взлома этим методом возрастает экспоненциально. В простейшем случае шифр длиной в N битов взламывается, в наихудшем случае - за время, пропорциональное 2N[14][15]. Среднее время взлома в этом случае в два раза меньше и составляет 2N-1. Существуют способы повышения устойчивости шифра к «brute force», например запутывание (обфускация) шифруемых данных, что делает нетривиальным отличие зашифрованных данных от незашифрованных.
Криптографические атаки, основанные на методе «грубой силы», являются наиболее универсальными, но в то же время наиболее медленными. Используются в основном начинающими хакерами. Эффективны для несложных алгоритмов шифрования и ключей длиной до 64 бит. Для современных ключей длиной от 128 бит (иногда для ключа факторизируется большое число из 200 цифр), неэффективны. Любой пароль может быть подобран путём полного перебора. При этом, даже если вычисление целевой функции от каждого конкретного возможного решения задачи может быть осуществлено за полиномиальное время, в зависимости от количества всех возможных решений атака может потребовать экспоненциального времени работы.
Для увеличения скорости подбора ключа используется распараллеливание вычислений. Существует два вида распараллеливания:
-ый процессор выполняет три одинаковые по времени операции:
Эта операция может занять всего сотую долю секунды. Тогда соединённых параллельно и синхронно работающих процессоров работают со скоростью (так как всего три операции), где — скорость выполнения одной операции одним процессором.
При обратной атаке с использованием метода грубой силы один (обычно общий) пароль проверяется на несколько имён пользователей. В этом случае также применяется распараллеливание, но процессоры должны проверить, есть ли у другого пользователя такой пароль. В такой стратегии злоумышленник обычно не старается взломать аккаунт одного конкретного пользователя. Против обратных атак устанавливается политика паролей, которая запрещает использование одинаковых паролей.
В таблице представлено оценочное время полного перебора паролей в зависимости от их длины. Предполагается, что в пароле могут использоваться 36 различных символов (латинские буквы одного регистра + цифры), а скорость перебора составляет 100 000 паролей в секунду (класс атаки B, типичный для восстановления пароля из кэша Windows (.PWL файлов) на Pentium 100)[16].
Кол-во знаков | Кол-во вариантов | Стойкость | Время перебора |
---|---|---|---|
1 | 36 | 5 бит | менее секунды |
2 | 1296 | 10 бит | менее секунды |
3 | 46 656 | 15 бит | менее секунды |
4 | 1 679 616 | 21 бит | 17 секунд |
5 | 60 466 176 | 26 бит | 10 минут |
6 | 2 176 782 336 | 31 бит | 6 часов |
7 | 78 364 164 096 | 36 бит | 9 дней |
8 | 2,821 109 9x1012 | 41 бит | 11 месяцев |
9 | 1,015 599 5x1014 | 46 бит | 32 года |
10 | 3,656 158 4x1015 | 52 бита | 1162 года |
11 | 1,316 217 0x1017 | 58 бит | 41 823 года |
12 | 4,738 381 3x1018 | 62 бита | 1 505 615 лет |
Таким образом, пароли длиной до 8 символов включительно в общем случае не являются надёжными. Для современных компьютеров этот показатель гораздо выше. Так, 64-битный ключ (пароль) перебирается на современном компьютере примерно за 2 года и перебор легко может быть распределен между множеством компьютеров.
Современные персональные компьютеры позволяют взламывать пароли полным перебором вариантов с эффективностью, проиллюстрированной в таблице выше. Однако, при оптимизации brute force, основанной на параллельных вычислениях, эффективность атаки можно существенно повысить[18]. При этом может потребоваться использование компьютера, адаптированного к многопоточным вычислениям. В последние годы широкое распространение получили вычислительные решения, использующие GPU, такие как Nvidia Tesla. С момента создания компанией Nvidia архитектуры CUDA в 2007 году, появилось множество решений (см., например, Cryptohaze Multiforcer, Pyrit Архивная копия от 20 ноября 2012 на Wayback Machine), позволяющих проводить ускоренный подбор ключей благодаря использованию таких технологий, как CUDA, FireStream, OpenCL.
В процессе улучшения системы информационной безопасности по отношению к атаке полным перебором можно выделить два основных направления:
Таким образом, невозможно достичь высокого уровня защиты, улучшая только один из этих параметров[19]. Существуют примеры того, как система аутентификации, основанная на оптимальной сложности паролей, оказывалась уязвимой для копирования базы данных на локальный компьютер злоумышленника, после чего подвергалась brute force атаке с применением локальных оптимизаций и вычислительных средств, недоступных при удаленном криптоанализе[20]. Такое положение дел привело к тому, что некоторые эксперты по компьютерной безопасности начали рекомендовать более критически относится к таким стандартным инструкциям, призванным обеспечить надежную защиту, как использование максимально длинных паролей[21]. Ниже приведен список некоторых применяемых на практике методов[22][23][24] повышения надежности криптосистемы по отношению к brute force атаке:
Для ускорения перебора метод ветвей и границ использует отсев подмножеств допустимых решений, заведомо не содержащих оптимальных решений[25].
Одним из методов увеличения скорости подбора ключа является распараллеливание вычислений. Существует два подхода к распараллеливанию[26]:
Компьютерные системы, которые используют пароли для аутентификации, должны каким-то образом определять правильность введенного пароля. Тривиальное решение данной проблемы — хранить список всех допустимых паролей для каждого пользователя, но такой подход не защищён от утечки базы данных. Простой, но неверный способ защититься от утечки базы — вычислить криптографическую хеш-функцию от пароля.
Способ неверен тем, что можно заранее провести перебор, а когда потребуется взломать пароль — посмотреть в результат. Радужная таблица представляет собой оптимизацию этого метода[27]. Основным её преимуществом является значительное уменьшение количества используемой памяти[28][27].
Радужная таблица создается построением цепочек возможных паролей. Каждая цепочка начинается со случайного возможного пароля, затем подвергается действию хеш-функции и функции редукции. Данная функция преобразует результат хеш-функции в некоторый возможный пароль (например, если мы предполагаем, что пароль имеет длину 64 бита, то функцией редукции может быть взятие первых 64 бит хеша, побитовое сложение всех 64-битных блоков хеша и т. п.). Промежуточные пароли в цепочке отбрасываются и в таблицу записываются только первый и последний элементы цепочек. Создание таких таблиц требует больше времени, чем нужно для создания обычных таблиц поиска, но значительно меньше памяти (вплоть до сотен гигабайт, при объёме для обычных таблиц в N слов для радужных нужно всего порядка N2/3)[28]. При этом они требуют хоть и больше времени (по сравнению с обычными методами) на восстановление исходного пароля, но на практике более реализуемы (для построения обычной таблицы для 6-символьного пароля с байтовыми символами потребуется 2566 = 281 474 976 710 656 блоков памяти, в то время как для радужной — всего 2566·⅔ = 4 294 967 296 блоков).
Для восстановления пароля данное значение хеш-функции подвергается функции редукции и ищется в таблице. Если не было найдено совпадения, то снова применяется хеш-функция и функция редукции. Данная операция продолжается, пока не будет найдено совпадение. После нахождения совпадения цепочка, содержащая его, восстанавливается для нахождения отброшенного значения, которое и будет искомым паролем.
В итоге получается таблица, которая может с высокой вероятностью восстановить пароль за небольшое время[29].
Хотя любая защита информационной системы должна, в первую очередь, быть надежной по отношению к атаке методом «грубой силы», случаи успешного применения данной атаки злоумышленниками достаточно распространены.
Изобретённая в 1918 году шифровальная машина, названная «Энигма», широко использовалось немецким военно-морским флотом начиная с 1929 года. В течение дальнейших нескольких лет система модифицировалась, а с 1930 года активно использовалась немецкой армией и правительством в процессе Второй мировой войны[31].
Первые перехваты сообщений, зашифрованных с кодом Энигмы, относятся к 1926 году. Однако прочитать сообщения долгое время не могли. На протяжении всей Второй мировой шло противостояние между польскими и германскими криптографами. Поляки, получая очередной результат по взлому немецкой криптосистемы, сталкивались с новыми трудностями, которые привносили германские инженеры, постоянно модернизирующие систему «Энигма». Летом 1939 года, когда неизбежность вторжения в Польшу стала очевидна, бюро передало результаты своей работы английской и французской разведкам[32].
Дальнейшая работа по взлому была организована в «Блетчли-парке. Основным инструментом криптоаналитиков стала дешифровальная машина Бомба». Её прототип был создан польскими математиками накануне Второй мировой войны для министерства обороны Польши. На основе этой разработки и при непосредственной поддержке её создателей в Англии был сконструирован более «продвинутый» агрегат.
Теоретическую часть работы выполнил Алан Матисон Тьюринг[33]. Его работы по криптографическому анализу алгоритма, реализованного в шифровальной машине «Энигма», основывался на более раннем криптоанализе предыдущих версий этой машины, которые были выполнены в 1938 году польским криптоаналитиком Марианом Реевским. Принцип работы разработанного Тьюрингом дешифратора состоял в переборе возможных вариантов ключа шифра и попыток расшифровки текста, если была известна структура дешифруемого сообщения или часть открытого текста[34].
С современной точки зрения шифр «Энигмы» был не очень надёжным, но только сочетание этого фактора с наличием множества перехваченных сообщений, кодовых книг, донесений разведки, результатов усилий военных и даже террористических атак позволило «вскрыть» шифр[32].
После войны Черчилль, из соображений безопасности, приказал разрушить эти машины.
В 2007 году группа компаний, входящих в организацию Wi-Fi Alliance, начали продажу беспроводного оборудования для домашних сетей с поддержкой нового стандарта Wi-Fi Protected Setup. Среди производителей беспроводных маршрутизаторов, поддерживающих данную технологию, были такие крупные компании, как Cisco/Linksys, Netgear, Belkin и D-Link. Стандарт WPS был призван существенно упростить процесс настройки беспроводной сети и её использования для людей, не обладающих широкими знаниями в области сетевой безопасности. Однако, к концу 2011 года были опубликованы сведения о серьезных уязвимостях в WPS, которые позволяли злоумышленнику подобрать PIN-код[35] беспроводной сети всего за несколько часов, обладая вычислительными ресурсами обыкновенного персонального компьютера[36].
В данный момент Координационный центр CERT не рекомендует производителям выпускать новое оборудование, поддерживающее данную технологию.[37]
В 2010 году на конференции DEFCON18 был представлен беспилотный летательный аппарат WASP, предназначенный для массового сбора статистики по домашним Wi-Fi сетям. БПЛА оснащён компактным бортовым компьютером под управлением BackTrack Linux, Одной из его функций называлась возможность автоматического взлома паролей беспроводных сетей посредством brute force[38][39].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.