Для увеличения скорости подбора ключа используется распараллеливание вычислений. Существует два подхода к распараллеливанию:
§ Первый подход — построение конвейера. Пусть алгоритм соотношения
можно представить в виде цепочки простейших действий (операций):
. Возьмём
процессоров
, зададим их порядок и положим, что
— ый процессор выполняет три одинаковые по времени операции:
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 символов включительно в общем случае не являются надежными.






