Распараллеливание вычислений

Для увеличения скорости подбора ключа используется распараллеливание вычислений. Существует два подхода к распараллеливанию:

§ Первый подход — построение конвейера. Пусть алгоритм соотношения можно представить в виде цепочки простейших действий (операций): . Возьмём процессоров , зададим их порядок и положим, что — ый процессор выполняет три одинаковые по времени операции:

1. приём данных от — го процессора;

2. выполнение операции ;

3. передача данных следующему -му процессору.

Тогда конвейер из последовательно соединённых, параллельно и синхронно работающих процессоров работает со скоростью , где — скорость выполнения одной операции одним процессором.

§ Второй подход состоит в том, что множество всех возможных ключей разбивается на непересекающиеся подмножества . Система из машин перебирает ключи так, что — ая машина осуществляет перебор ключей из множества . Система прекращает работу, если одна из машин нашла ключ. Самое трудное — это разделение ключевого множества. Но если каждый процессор начнёт вычисление с какого-то произвольного ключа, то время нахождения увеличится, а схема значительно упростится. Среднее число шагов в этом случае составляет , где — число элементов во множестве ключей, а — число процессоров.

Радужные таблицы

Радужная таблица создается построением цепочек возможных паролей. Каждая цепочка начинается со случайного возможного пароля, затем подвергается действию хеш-функции и функции редукции. Данная функция преобразует результат хеш-функции в некоторый возможный пароль (например, если мы предполагаем, что пароль имеет длину 64 бита, то функцией редукции может быть взятие первых 64 бит хеша, побитовое сложение всех 64-битных блоков хеша и т. п.). Промежуточные пароли в цепочке отбрасываются и в таблицу записываются только первый и последний элементы цепочек. Создание таких таблиц требует больше времени, чем нужно для создания обычных таблиц поиска, но значительно меньше памяти (вплоть до сотен гигабайт, при объеме для обычных таблиц в N слов для радужных нужно всего порядка N2/3). При этом они требуют хоть и больше времени (по сравнению с обычными методами) на восстановление исходного пароля, но на практике более реализуемы (для построения обычной таблицы для 6-символьного пароля с байтовыми символами потребуется 2566 = 281 474 976 710 656 блоков памяти, в то время как для радужной — всего 2566·⅔ = 4 294 967 296 блоков).

Для восстановления пароля данное значение хеш-функции подвергается функции редукции и ищется в таблице. Если не было найдено совпадения, то снова применяется хеш-функция и функция редукции. Данная операция продолжается, пока не будет найдено совпадение. После нахождения совпадения цепочка, содержащая его, восстанавливается для нахождения отброшенного значения, которое и будет искомым паролем.

В итоге получается таблица, которая может с высокой вероятностью восстановить пароль за небольшое время.

Пример продолжительности подбора паролей

В таблице представлено оценочное время полного перебора паролей в зависимости от их длины. Предполагается, что в пароле могут использоваться 36 различных символов (латинские буквы одного регистра + цифры), а скорость перебора составляет 100 000 паролей в секунду.[1]

Кол-во знаков Кол-во вариантов Стойкость Время перебора
    5 бит менее секунды
    10 бит менее секунды
  46 656 15 бит менее секунды
  1 679 616 21 бит 17 секунд
  60 466 176 26 бит 10 минут
  2 176 782 336 31 бит 6 часов
  78 364 164 096 36 бит 9 дней
  2,821 109 9x1012 41 бит 11 месяцев
  1,015 599 5x1014 46 бит 32 года
  3,656 158 4x1015 52 бита 1 162 года
  1,316 217 0x1017 58 бит 41 823 года
  4,738 381 3x1018 62 бита 1 505 615 лет

Таким образом, пароли длиной до 7 символов включительно в общем случае не являются надежными.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: